geoiq-frontend-ui-kit 2.0.3 → 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 (505) hide show
  1. package/dist/components/atoms/accordion/accordion.d.ts +1 -2
  2. package/dist/components/atoms/accordion/accordion.d.ts.map +1 -1
  3. package/dist/components/atoms/avatar/avatar.d.ts +1 -2
  4. package/dist/components/atoms/avatar/avatar.d.ts.map +1 -1
  5. package/dist/components/atoms/badge/badge.d.ts +2 -2
  6. package/dist/components/atoms/badge/badge.d.ts.map +1 -1
  7. package/dist/components/atoms/skeleton/skeleton.d.ts +1 -1
  8. package/dist/components/atoms/skeleton/skeleton.d.ts.map +1 -1
  9. package/dist/components/atoms/tooltip/tooltip.d.ts +2 -2
  10. package/dist/components/atoms/tooltip/tooltip.d.ts.map +1 -1
  11. package/dist/components/molecules/breadcrumb/breadcrumb-components.d.ts +2 -2
  12. package/dist/components/molecules/breadcrumb/breadcrumb.d.ts +1 -2
  13. package/dist/components/molecules/breadcrumb/breadcrumb.d.ts.map +1 -1
  14. package/dist/components/molecules/creatable-multi-combobox/creatable-multi-combobox.d.ts +1 -2
  15. package/dist/components/molecules/creatable-multi-combobox/creatable-multi-combobox.d.ts.map +1 -1
  16. package/dist/components/molecules/dropdown-menu/dropdown-menu-components.d.ts +1 -1
  17. package/dist/components/molecules/dropdown-menu/dropdown-menu.d.ts +1 -2
  18. package/dist/components/molecules/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  19. package/dist/components/molecules/multi-combobox/index.d.ts +2 -2
  20. package/dist/components/molecules/multi-combobox/index.d.ts.map +1 -1
  21. package/dist/components/molecules/multi-select/index.d.ts +2 -2
  22. package/dist/components/molecules/multi-select/index.d.ts.map +1 -1
  23. package/dist/components/molecules/pagination/pagination-components.d.ts +4 -4
  24. package/dist/components/molecules/single-combobox/single-combobox.d.ts +2 -2
  25. package/dist/components/molecules/single-combobox/single-combobox.d.ts.map +1 -1
  26. package/dist/components/molecules/stepper/stepper-components.d.ts +1 -1
  27. package/dist/components/molecules/stepper/stepper-components.d.ts.map +1 -1
  28. package/dist/components/molecules/stepper/stepper.d.ts +1 -2
  29. package/dist/components/molecules/stepper/stepper.d.ts.map +1 -1
  30. package/dist/components/molecules/stepper/stepper.mock.d.ts +2 -2
  31. package/dist/components/molecules/stepper/stepper.mock.d.ts.map +1 -1
  32. package/dist/components/molecules/swatch-grid/swatch-grid.d.ts +1 -2
  33. package/dist/components/molecules/swatch-grid/swatch-grid.d.ts.map +1 -1
  34. package/dist/components/molecules/toast/assets/svgs/danger-icon.d.ts +1 -3
  35. package/dist/components/molecules/toast/assets/svgs/danger-icon.d.ts.map +1 -1
  36. package/dist/components/molecules/toast/assets/svgs/info-icon.d.ts +1 -3
  37. package/dist/components/molecules/toast/assets/svgs/info-icon.d.ts.map +1 -1
  38. package/dist/components/molecules/toast/assets/svgs/success-icon.d.ts +1 -3
  39. package/dist/components/molecules/toast/assets/svgs/success-icon.d.ts.map +1 -1
  40. package/dist/components/molecules/toast/assets/svgs/warning-icon.d.ts +1 -3
  41. package/dist/components/molecules/toast/assets/svgs/warning-icon.d.ts.map +1 -1
  42. package/dist/components/molecules/toast/toast-components.d.ts +1 -1
  43. package/dist/components/molecules/toast/toast.d.ts +1 -2
  44. package/dist/components/molecules/toast/toast.d.ts.map +1 -1
  45. package/dist/components/molecules/toggle-multi-select/index.d.ts +2 -2
  46. package/dist/components/molecules/toggle-multi-select/index.d.ts.map +1 -1
  47. package/dist/components/organisms/alert-dialog/alert-dialog-components.d.ts +2 -2
  48. package/dist/components/organisms/alert-dialog/alert-dialog.d.ts +1 -2
  49. package/dist/components/organisms/alert-dialog/alert-dialog.d.ts.map +1 -1
  50. package/dist/components/organisms/dialog/dialog-components.d.ts +2 -2
  51. package/dist/components/organisms/dialog/dialog.d.ts +1 -2
  52. package/dist/components/organisms/dialog/dialog.d.ts.map +1 -1
  53. package/dist/components/organisms/image-editor/components/color-picker.d.ts +1 -3
  54. package/dist/components/organisms/image-editor/components/color-picker.d.ts.map +1 -1
  55. package/dist/components/organisms/image-editor/components/layers-list.d.ts +1 -2
  56. package/dist/components/organisms/image-editor/components/layers-list.d.ts.map +1 -1
  57. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts +20 -0
  58. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts.map +1 -0
  59. package/dist/components/organisms/image-editor/components/panel-adjust.d.ts +1 -2
  60. package/dist/components/organisms/image-editor/components/panel-adjust.d.ts.map +1 -1
  61. package/dist/components/organisms/image-editor/components/panel-crop.d.ts +1 -2
  62. package/dist/components/organisms/image-editor/components/panel-crop.d.ts.map +1 -1
  63. package/dist/components/organisms/image-editor/components/panel-insert.d.ts +1 -2
  64. package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
  65. package/dist/components/organisms/image-editor/components/panel-selected.d.ts +1 -2
  66. package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
  67. package/dist/components/organisms/image-editor/components/panel.d.ts +1 -2
  68. package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
  69. package/dist/components/organisms/image-editor/components/ribbon.d.ts +1 -2
  70. package/dist/components/organisms/image-editor/components/ribbon.d.ts.map +1 -1
  71. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts +9 -0
  72. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts.map +1 -0
  73. package/dist/components/organisms/image-editor/components/status-bar.d.ts +1 -2
  74. package/dist/components/organisms/image-editor/components/status-bar.d.ts.map +1 -1
  75. package/dist/components/organisms/image-editor/image-editor-modal.d.ts +1 -2
  76. package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
  77. package/dist/components/organisms/image-editor/image-editor.types.d.ts +73 -0
  78. package/dist/components/organisms/image-editor/image-editor.types.d.ts.map +1 -1
  79. package/dist/components/organisms/image-editor/use-image-editor.d.ts.map +1 -1
  80. package/dist/components/organisms/sheet/sheet-components.d.ts +2 -2
  81. package/dist/components/organisms/sheet/sheet.d.ts +1 -2
  82. package/dist/components/organisms/sheet/sheet.d.ts.map +1 -1
  83. package/dist/components/organisms/sidebar/sidebar.d.ts +1 -2
  84. package/dist/components/organisms/sidebar/sidebar.d.ts.map +1 -1
  85. package/dist/components/ui/agent-snippet-view/agent-snippet-view.d.ts +1 -1
  86. package/dist/components/ui/agent-snippet-view/agent-snippet-view.d.ts.map +1 -1
  87. package/dist/components/ui/map-marker-hover-card/components/map-cluster-hover-card.d.ts +1 -2
  88. package/dist/components/ui/map-marker-hover-card/components/map-cluster-hover-card.d.ts.map +1 -1
  89. package/dist/components/ui/map-marker-hover-card/components/map-point-hover-card.d.ts +1 -2
  90. package/dist/components/ui/map-marker-hover-card/components/map-point-hover-card.d.ts.map +1 -1
  91. package/dist/components/ui/map-marker-hover-card/map-marker-hover-card.d.ts +1 -2
  92. package/dist/components/ui/map-marker-hover-card/map-marker-hover-card.d.ts.map +1 -1
  93. package/dist/components/ui/star-score/star-score.d.ts +1 -2
  94. package/dist/components/ui/star-score/star-score.d.ts.map +1 -1
  95. package/dist/components/unstyled/calendar/calendar.d.ts +1 -1
  96. package/dist/components/unstyled/calendar/calendar.d.ts.map +1 -1
  97. package/dist/components/unstyled/command/index.d.ts +2 -2
  98. package/dist/components/unstyled/command/index.d.ts.map +1 -1
  99. package/dist/components/unstyled/date-picker/date-picker.d.ts +2 -2
  100. package/dist/components/unstyled/date-picker/date-picker.d.ts.map +1 -1
  101. package/dist/components/unstyled/hover-card/hover-card.d.ts +1 -2
  102. package/dist/components/unstyled/hover-card/hover-card.d.ts.map +1 -1
  103. package/dist/components/unstyled/popover/popover.d.ts +1 -2
  104. package/dist/components/unstyled/popover/popover.d.ts.map +1 -1
  105. package/dist/components/unstyled/table/table.d.ts +2 -2
  106. package/dist/components/unstyled/table/table.d.ts.map +1 -1
  107. package/dist/index.es.js +88 -88
  108. package/dist/{index10.es.js → index.es10.js} +3 -3
  109. package/dist/{index10.es.js.map → index.es10.js.map} +1 -1
  110. package/dist/index.es100.js +152 -0
  111. package/dist/index.es100.js.map +1 -0
  112. package/dist/{index101.es.js → index.es101.js} +1 -1
  113. package/dist/{index101.es.js.map → index.es101.js.map} +1 -1
  114. package/dist/{index136.es.js → index.es102.js} +1 -1
  115. package/dist/{index136.es.js.map → index.es102.js.map} +1 -1
  116. package/dist/{index133.es.js → index.es103.js} +1 -1
  117. package/dist/{index133.es.js.map → index.es103.js.map} +1 -1
  118. package/dist/{index134.es.js → index.es104.js} +1 -1
  119. package/dist/{index134.es.js.map → index.es104.js.map} +1 -1
  120. package/dist/{index135.es.js → index.es105.js} +3 -3
  121. package/dist/{index135.es.js.map → index.es105.js.map} +1 -1
  122. package/dist/{index97.es.js → index.es106.js} +1 -1
  123. package/dist/index.es106.js.map +1 -0
  124. package/dist/{index107.es.js → index.es107.js} +5 -5
  125. package/dist/{index107.es.js.map → index.es107.js.map} +1 -1
  126. package/dist/{index99.es.js → index.es108.js} +1 -1
  127. package/dist/index.es108.js.map +1 -0
  128. package/dist/{index103.es.js → index.es109.js} +2 -2
  129. package/dist/{index103.es.js.map → index.es109.js.map} +1 -1
  130. package/dist/{index11.es.js → index.es11.js} +4 -4
  131. package/dist/{index11.es.js.map → index.es11.js.map} +1 -1
  132. package/dist/{index115.es.js → index.es110.js} +2 -2
  133. package/dist/{index115.es.js.map → index.es110.js.map} +1 -1
  134. package/dist/{index116.es.js → index.es111.js} +6 -6
  135. package/dist/{index116.es.js.map → index.es111.js.map} +1 -1
  136. package/dist/{index98.es.js → index.es112.js} +1 -1
  137. package/dist/index.es112.js.map +1 -0
  138. package/dist/{index106.es.js → index.es113.js} +1 -1
  139. package/dist/{index106.es.js.map → index.es113.js.map} +1 -1
  140. package/dist/{index132.es.js → index.es114.js} +3 -3
  141. package/dist/{index132.es.js.map → index.es114.js.map} +1 -1
  142. package/dist/{index130.es.js → index.es115.js} +3 -3
  143. package/dist/{index130.es.js.map → index.es115.js.map} +1 -1
  144. package/dist/{index128.es.js → index.es116.js} +1 -1
  145. package/dist/{index128.es.js.map → index.es116.js.map} +1 -1
  146. package/dist/{index129.es.js → index.es117.js} +5 -5
  147. package/dist/{index129.es.js.map → index.es117.js.map} +1 -1
  148. package/dist/{index108.es.js → index.es118.js} +1 -1
  149. package/dist/{index108.es.js.map → index.es118.js.map} +1 -1
  150. package/dist/{index105.es.js → index.es119.js} +1 -1
  151. package/dist/{index105.es.js.map → index.es119.js.map} +1 -1
  152. package/dist/{index12.es.js → index.es12.js} +3 -3
  153. package/dist/{index12.es.js.map → index.es12.js.map} +1 -1
  154. package/dist/{index121.es.js → index.es120.js} +4 -4
  155. package/dist/{index121.es.js.map → index.es120.js.map} +1 -1
  156. package/dist/{index122.es.js → index.es121.js} +3 -3
  157. package/dist/{index122.es.js.map → index.es121.js.map} +1 -1
  158. package/dist/{index123.es.js → index.es122.js} +3 -3
  159. package/dist/{index123.es.js.map → index.es122.js.map} +1 -1
  160. package/dist/{index124.es.js → index.es123.js} +3 -3
  161. package/dist/{index124.es.js.map → index.es123.js.map} +1 -1
  162. package/dist/{index125.es.js → index.es124.js} +10 -10
  163. package/dist/{index125.es.js.map → index.es124.js.map} +1 -1
  164. package/dist/{index126.es.js → index.es125.js} +10 -10
  165. package/dist/{index126.es.js.map → index.es125.js.map} +1 -1
  166. package/dist/{index127.es.js → index.es126.js} +5 -5
  167. package/dist/{index127.es.js.map → index.es126.js.map} +1 -1
  168. package/dist/{index110.es.js → index.es127.js} +4 -4
  169. package/dist/{index110.es.js.map → index.es127.js.map} +1 -1
  170. package/dist/{index111.es.js → index.es128.js} +4 -4
  171. package/dist/{index111.es.js.map → index.es128.js.map} +1 -1
  172. package/dist/{index112.es.js → index.es129.js} +5 -5
  173. package/dist/{index112.es.js.map → index.es129.js.map} +1 -1
  174. package/dist/{index13.es.js → index.es13.js} +3 -3
  175. package/dist/{index13.es.js.map → index.es13.js.map} +1 -1
  176. package/dist/{index113.es.js → index.es130.js} +2 -2
  177. package/dist/{index113.es.js.map → index.es130.js.map} +1 -1
  178. package/dist/{index114.es.js → index.es131.js} +3 -3
  179. package/dist/{index114.es.js.map → index.es131.js.map} +1 -1
  180. package/dist/{index109.es.js → index.es132.js} +1 -1
  181. package/dist/{index109.es.js.map → index.es132.js.map} +1 -1
  182. package/dist/{index100.es.js → index.es133.js} +1 -1
  183. package/dist/{index100.es.js.map → index.es133.js.map} +1 -1
  184. package/dist/{index102.es.js → index.es134.js} +2 -2
  185. package/dist/{index102.es.js.map → index.es134.js.map} +1 -1
  186. package/dist/{index104.es.js → index.es135.js} +1 -1
  187. package/dist/{index104.es.js.map → index.es135.js.map} +1 -1
  188. package/dist/{index131.es.js → index.es136.js} +5 -5
  189. package/dist/{index131.es.js.map → index.es136.js.map} +1 -1
  190. package/dist/{index143.es.js → index.es137.js} +1 -1
  191. package/dist/{index143.es.js.map → index.es137.js.map} +1 -1
  192. package/dist/{index144.es.js → index.es138.js} +12 -11
  193. package/dist/index.es138.js.map +1 -0
  194. package/dist/{index145.es.js → index.es139.js} +3 -3
  195. package/dist/{index145.es.js.map → index.es139.js.map} +1 -1
  196. package/dist/{index14.es.js → index.es14.js} +2 -2
  197. package/dist/{index14.es.js.map → index.es14.js.map} +1 -1
  198. package/dist/{index146.es.js → index.es140.js} +2 -2
  199. package/dist/{index146.es.js.map → index.es140.js.map} +1 -1
  200. package/dist/index.es141.js +77 -0
  201. package/dist/index.es141.js.map +1 -0
  202. package/dist/{index147.es.js → index.es142.js} +1 -1
  203. package/dist/{index147.es.js.map → index.es142.js.map} +1 -1
  204. package/dist/{index148.es.js → index.es143.js} +1 -1
  205. package/dist/{index148.es.js.map → index.es143.js.map} +1 -1
  206. package/dist/{index149.es.js → index.es144.js} +10 -7
  207. package/dist/index.es144.js.map +1 -0
  208. package/dist/index.es145.js +408 -0
  209. package/dist/index.es145.js.map +1 -0
  210. package/dist/{index151.es.js → index.es146.js} +16 -12
  211. package/dist/index.es146.js.map +1 -0
  212. package/dist/{index152.es.js → index.es147.js} +5 -5
  213. package/dist/{index152.es.js.map → index.es147.js.map} +1 -1
  214. package/dist/{index153.es.js → index.es148.js} +17 -16
  215. package/dist/index.es148.js.map +1 -0
  216. package/dist/{index154.es.js → index.es149.js} +2 -2
  217. package/dist/{index154.es.js.map → index.es149.js.map} +1 -1
  218. package/dist/{index15.es.js → index.es15.js} +3 -3
  219. package/dist/{index15.es.js.map → index.es15.js.map} +1 -1
  220. package/dist/{index155.es.js → index.es150.js} +4 -4
  221. package/dist/{index155.es.js.map → index.es150.js.map} +1 -1
  222. package/dist/index.es151.js +215 -0
  223. package/dist/index.es151.js.map +1 -0
  224. package/dist/{index157.es.js → index.es152.js} +5 -5
  225. package/dist/{index157.es.js.map → index.es152.js.map} +1 -1
  226. package/dist/index.es153.js +147 -0
  227. package/dist/index.es153.js.map +1 -0
  228. package/dist/index.es154.js +50 -0
  229. package/dist/index.es154.js.map +1 -0
  230. package/dist/index.es155.js +358 -0
  231. package/dist/index.es155.js.map +1 -0
  232. package/dist/{index137.es.js → index.es156.js} +2 -2
  233. package/dist/{index137.es.js.map → index.es156.js.map} +1 -1
  234. package/dist/{index138.es.js → index.es157.js} +1 -1
  235. package/dist/{index138.es.js.map → index.es157.js.map} +1 -1
  236. package/dist/{index159.es.js → index.es158.js} +1 -1
  237. package/dist/{index159.es.js.map → index.es158.js.map} +1 -1
  238. package/dist/{index139.es.js → index.es159.js} +3 -3
  239. package/dist/{index139.es.js.map → index.es159.js.map} +1 -1
  240. package/dist/{index16.es.js → index.es16.js} +8 -8
  241. package/dist/{index16.es.js.map → index.es16.js.map} +1 -1
  242. package/dist/{index140.es.js → index.es160.js} +1 -1
  243. package/dist/{index140.es.js.map → index.es160.js.map} +1 -1
  244. package/dist/{index141.es.js → index.es161.js} +1 -1
  245. package/dist/{index141.es.js.map → index.es161.js.map} +1 -1
  246. package/dist/{index142.es.js → index.es162.js} +1 -1
  247. package/dist/{index142.es.js.map → index.es162.js.map} +1 -1
  248. package/dist/{index160.es.js → index.es163.js} +1 -1
  249. package/dist/{index160.es.js.map → index.es163.js.map} +1 -1
  250. package/dist/{index161.es.js → index.es164.js} +1 -1
  251. package/dist/{index161.es.js.map → index.es164.js.map} +1 -1
  252. package/dist/{index162.es.js → index.es165.js} +1 -1
  253. package/dist/{index162.es.js.map → index.es165.js.map} +1 -1
  254. package/dist/{index164.es.js → index.es166.js} +2 -2
  255. package/dist/{index164.es.js.map → index.es166.js.map} +1 -1
  256. package/dist/{index165.es.js → index.es167.js} +2 -2
  257. package/dist/{index165.es.js.map → index.es167.js.map} +1 -1
  258. package/dist/{index166.es.js → index.es168.js} +4 -4
  259. package/dist/{index166.es.js.map → index.es168.js.map} +1 -1
  260. package/dist/{index167.es.js → index.es169.js} +4 -4
  261. package/dist/{index167.es.js.map → index.es169.js.map} +1 -1
  262. package/dist/{index17.es.js → index.es17.js} +3 -3
  263. package/dist/{index17.es.js.map → index.es17.js.map} +1 -1
  264. package/dist/index.es170.js +101 -0
  265. package/dist/index.es170.js.map +1 -0
  266. package/dist/index.es171.js +259 -0
  267. package/dist/index.es171.js.map +1 -0
  268. package/dist/index.es172.js +66 -0
  269. package/dist/index.es172.js.map +1 -0
  270. package/dist/{index170.es.js → index.es173.js} +19 -19
  271. package/dist/{index170.es.js.map → index.es173.js.map} +1 -1
  272. package/dist/{index171.es.js → index.es174.js} +4 -4
  273. package/dist/{index171.es.js.map → index.es174.js.map} +1 -1
  274. package/dist/{index172.es.js → index.es175.js} +2 -2
  275. package/dist/{index172.es.js.map → index.es175.js.map} +1 -1
  276. package/dist/{index180.es.js → index.es176.js} +1 -1
  277. package/dist/{index180.es.js.map → index.es176.js.map} +1 -1
  278. package/dist/{index181.es.js → index.es177.js} +2 -2
  279. package/dist/{index181.es.js.map → index.es177.js.map} +1 -1
  280. package/dist/{index173.es.js → index.es178.js} +6 -6
  281. package/dist/{index173.es.js.map → index.es178.js.map} +1 -1
  282. package/dist/{index174.es.js → index.es179.js} +16 -17
  283. package/dist/{index174.es.js.map → index.es179.js.map} +1 -1
  284. package/dist/{index18.es.js → index.es18.js} +2 -2
  285. package/dist/{index18.es.js.map → index.es18.js.map} +1 -1
  286. package/dist/{index175.es.js → index.es180.js} +26 -27
  287. package/dist/{index175.es.js.map → index.es180.js.map} +1 -1
  288. package/dist/{index176.es.js → index.es181.js} +12 -13
  289. package/dist/{index176.es.js.map → index.es181.js.map} +1 -1
  290. package/dist/{index177.es.js → index.es182.js} +5 -5
  291. package/dist/{index177.es.js.map → index.es182.js.map} +1 -1
  292. package/dist/{index178.es.js → index.es183.js} +26 -27
  293. package/dist/{index178.es.js.map → index.es183.js.map} +1 -1
  294. package/dist/{index179.es.js → index.es184.js} +29 -30
  295. package/dist/{index179.es.js.map → index.es184.js.map} +1 -1
  296. package/dist/{index182.es.js → index.es185.js} +1 -1
  297. package/dist/{index182.es.js.map → index.es185.js.map} +1 -1
  298. package/dist/{index19.es.js → index.es19.js} +4 -4
  299. package/dist/{index19.es.js.map → index.es19.js.map} +1 -1
  300. package/dist/{index2.es.js → index.es2.js} +5 -5
  301. package/dist/{index2.es.js.map → index.es2.js.map} +1 -1
  302. package/dist/{index20.es.js → index.es20.js} +5 -5
  303. package/dist/{index20.es.js.map → index.es20.js.map} +1 -1
  304. package/dist/{index21.es.js → index.es21.js} +6 -6
  305. package/dist/{index21.es.js.map → index.es21.js.map} +1 -1
  306. package/dist/{index22.es.js → index.es22.js} +2 -2
  307. package/dist/{index22.es.js.map → index.es22.js.map} +1 -1
  308. package/dist/{index23.es.js → index.es23.js} +7 -7
  309. package/dist/{index23.es.js.map → index.es23.js.map} +1 -1
  310. package/dist/{index24.es.js → index.es24.js} +7 -7
  311. package/dist/{index24.es.js.map → index.es24.js.map} +1 -1
  312. package/dist/{index25.es.js → index.es25.js} +3 -3
  313. package/dist/{index25.es.js.map → index.es25.js.map} +1 -1
  314. package/dist/{index26.es.js → index.es26.js} +2 -2
  315. package/dist/{index26.es.js.map → index.es26.js.map} +1 -1
  316. package/dist/{index27.es.js → index.es27.js} +7 -7
  317. package/dist/{index27.es.js.map → index.es27.js.map} +1 -1
  318. package/dist/{index28.es.js → index.es28.js} +9 -9
  319. package/dist/{index28.es.js.map → index.es28.js.map} +1 -1
  320. package/dist/{index29.es.js → index.es29.js} +5 -5
  321. package/dist/{index29.es.js.map → index.es29.js.map} +1 -1
  322. package/dist/{index3.es.js → index.es3.js} +3 -3
  323. package/dist/{index3.es.js.map → index.es3.js.map} +1 -1
  324. package/dist/{index30.es.js → index.es30.js} +3 -3
  325. package/dist/{index30.es.js.map → index.es30.js.map} +1 -1
  326. package/dist/{index31.es.js → index.es31.js} +1 -1
  327. package/dist/{index31.es.js.map → index.es31.js.map} +1 -1
  328. package/dist/{index32.es.js → index.es32.js} +2 -2
  329. package/dist/{index32.es.js.map → index.es32.js.map} +1 -1
  330. package/dist/{index33.es.js → index.es33.js} +3 -3
  331. package/dist/{index33.es.js.map → index.es33.js.map} +1 -1
  332. package/dist/{index34.es.js → index.es34.js} +5 -5
  333. package/dist/{index34.es.js.map → index.es34.js.map} +1 -1
  334. package/dist/{index35.es.js → index.es35.js} +6 -6
  335. package/dist/{index35.es.js.map → index.es35.js.map} +1 -1
  336. package/dist/{index36.es.js → index.es36.js} +5 -5
  337. package/dist/{index36.es.js.map → index.es36.js.map} +1 -1
  338. package/dist/{index37.es.js → index.es37.js} +6 -6
  339. package/dist/{index37.es.js.map → index.es37.js.map} +1 -1
  340. package/dist/{index38.es.js → index.es38.js} +2 -2
  341. package/dist/{index38.es.js.map → index.es38.js.map} +1 -1
  342. package/dist/{index39.es.js → index.es39.js} +3 -3
  343. package/dist/{index39.es.js.map → index.es39.js.map} +1 -1
  344. package/dist/{index4.es.js → index.es4.js} +2 -2
  345. package/dist/{index4.es.js.map → index.es4.js.map} +1 -1
  346. package/dist/{index40.es.js → index.es40.js} +4 -4
  347. package/dist/{index40.es.js.map → index.es40.js.map} +1 -1
  348. package/dist/{index41.es.js → index.es41.js} +5 -5
  349. package/dist/{index41.es.js.map → index.es41.js.map} +1 -1
  350. package/dist/{index42.es.js → index.es42.js} +4 -4
  351. package/dist/{index42.es.js.map → index.es42.js.map} +1 -1
  352. package/dist/{index43.es.js → index.es43.js} +2 -2
  353. package/dist/{index43.es.js.map → index.es43.js.map} +1 -1
  354. package/dist/{index44.es.js → index.es44.js} +2 -2
  355. package/dist/{index44.es.js.map → index.es44.js.map} +1 -1
  356. package/dist/index.es45.js +69 -0
  357. package/dist/index.es45.js.map +1 -0
  358. package/dist/{index46.es.js → index.es46.js} +9 -9
  359. package/dist/{index46.es.js.map → index.es46.js.map} +1 -1
  360. package/dist/{index47.es.js → index.es47.js} +7 -7
  361. package/dist/{index47.es.js.map → index.es47.js.map} +1 -1
  362. package/dist/{index48.es.js → index.es48.js} +10 -10
  363. package/dist/{index48.es.js.map → index.es48.js.map} +1 -1
  364. package/dist/{index49.es.js → index.es49.js} +2 -2
  365. package/dist/{index49.es.js.map → index.es49.js.map} +1 -1
  366. package/dist/{index5.es.js → index.es5.js} +2 -2
  367. package/dist/{index5.es.js.map → index.es5.js.map} +1 -1
  368. package/dist/{index50.es.js → index.es50.js} +1 -1
  369. package/dist/{index50.es.js.map → index.es50.js.map} +1 -1
  370. package/dist/{index51.es.js → index.es51.js} +2 -2
  371. package/dist/{index51.es.js.map → index.es51.js.map} +1 -1
  372. package/dist/{index52.es.js → index.es52.js} +3 -3
  373. package/dist/{index52.es.js.map → index.es52.js.map} +1 -1
  374. package/dist/{index53.es.js → index.es53.js} +7 -7
  375. package/dist/{index53.es.js.map → index.es53.js.map} +1 -1
  376. package/dist/{index54.es.js → index.es54.js} +4 -4
  377. package/dist/{index54.es.js.map → index.es54.js.map} +1 -1
  378. package/dist/{index55.es.js → index.es55.js} +5 -5
  379. package/dist/{index55.es.js.map → index.es55.js.map} +1 -1
  380. package/dist/{index56.es.js → index.es56.js} +3 -3
  381. package/dist/{index56.es.js.map → index.es56.js.map} +1 -1
  382. package/dist/{index57.es.js → index.es57.js} +9 -9
  383. package/dist/{index57.es.js.map → index.es57.js.map} +1 -1
  384. package/dist/{index58.es.js → index.es58.js} +3 -4
  385. package/dist/{index58.es.js.map → index.es58.js.map} +1 -1
  386. package/dist/{index59.es.js → index.es59.js} +2 -2
  387. package/dist/{index59.es.js.map → index.es59.js.map} +1 -1
  388. package/dist/{index6.es.js → index.es6.js} +2 -2
  389. package/dist/{index6.es.js.map → index.es6.js.map} +1 -1
  390. package/dist/{index60.es.js → index.es60.js} +3 -3
  391. package/dist/{index60.es.js.map → index.es60.js.map} +1 -1
  392. package/dist/{index61.es.js → index.es61.js} +2 -2
  393. package/dist/{index61.es.js.map → index.es61.js.map} +1 -1
  394. package/dist/{index62.es.js → index.es62.js} +2 -2
  395. package/dist/{index62.es.js.map → index.es62.js.map} +1 -1
  396. package/dist/{index63.es.js → index.es63.js} +2 -2
  397. package/dist/{index63.es.js.map → index.es63.js.map} +1 -1
  398. package/dist/{index64.es.js → index.es64.js} +3 -3
  399. package/dist/{index64.es.js.map → index.es64.js.map} +1 -1
  400. package/dist/{index65.es.js → index.es65.js} +3 -3
  401. package/dist/{index65.es.js.map → index.es65.js.map} +1 -1
  402. package/dist/{index66.es.js → index.es66.js} +2 -2
  403. package/dist/{index66.es.js.map → index.es66.js.map} +1 -1
  404. package/dist/{index67.es.js → index.es67.js} +3 -3
  405. package/dist/{index67.es.js.map → index.es67.js.map} +1 -1
  406. package/dist/{index68.es.js → index.es68.js} +3 -3
  407. package/dist/{index68.es.js.map → index.es68.js.map} +1 -1
  408. package/dist/{index69.es.js → index.es69.js} +6 -6
  409. package/dist/{index69.es.js.map → index.es69.js.map} +1 -1
  410. package/dist/{index7.es.js → index.es7.js} +2 -2
  411. package/dist/{index7.es.js.map → index.es7.js.map} +1 -1
  412. package/dist/{index70.es.js → index.es70.js} +6 -6
  413. package/dist/{index70.es.js.map → index.es70.js.map} +1 -1
  414. package/dist/{index71.es.js → index.es71.js} +4 -4
  415. package/dist/{index71.es.js.map → index.es71.js.map} +1 -1
  416. package/dist/{index72.es.js → index.es72.js} +8 -8
  417. package/dist/{index72.es.js.map → index.es72.js.map} +1 -1
  418. package/dist/{index73.es.js → index.es73.js} +5 -5
  419. package/dist/{index73.es.js.map → index.es73.js.map} +1 -1
  420. package/dist/{index74.es.js → index.es74.js} +1 -1
  421. package/dist/{index74.es.js.map → index.es74.js.map} +1 -1
  422. package/dist/{index75.es.js → index.es75.js} +1 -1
  423. package/dist/{index75.es.js.map → index.es75.js.map} +1 -1
  424. package/dist/{index76.es.js → index.es76.js} +1 -1
  425. package/dist/{index76.es.js.map → index.es76.js.map} +1 -1
  426. package/dist/{index77.es.js → index.es77.js} +1 -1
  427. package/dist/{index77.es.js.map → index.es77.js.map} +1 -1
  428. package/dist/{index78.es.js → index.es78.js} +2 -2
  429. package/dist/{index78.es.js.map → index.es78.js.map} +1 -1
  430. package/dist/{index79.es.js → index.es79.js} +1 -1
  431. package/dist/{index79.es.js.map → index.es79.js.map} +1 -1
  432. package/dist/{index8.es.js → index.es8.js} +3 -3
  433. package/dist/{index8.es.js.map → index.es8.js.map} +1 -1
  434. package/dist/{index80.es.js → index.es80.js} +3 -3
  435. package/dist/{index80.es.js.map → index.es80.js.map} +1 -1
  436. package/dist/{index81.es.js → index.es81.js} +4 -4
  437. package/dist/{index81.es.js.map → index.es81.js.map} +1 -1
  438. package/dist/{index82.es.js → index.es82.js} +1 -1
  439. package/dist/{index82.es.js.map → index.es82.js.map} +1 -1
  440. package/dist/{index83.es.js → index.es83.js} +1 -1
  441. package/dist/{index83.es.js.map → index.es83.js.map} +1 -1
  442. package/dist/{index84.es.js.map → index.es84.js.map} +1 -1
  443. package/dist/{index85.es.js → index.es85.js} +2 -2
  444. package/dist/{index85.es.js.map → index.es85.js.map} +1 -1
  445. package/dist/{index86.es.js → index.es86.js} +2 -2
  446. package/dist/{index86.es.js.map → index.es86.js.map} +1 -1
  447. package/dist/{index87.es.js → index.es87.js} +1 -1
  448. package/dist/{index87.es.js.map → index.es87.js.map} +1 -1
  449. package/dist/index.es88.js +5 -0
  450. package/dist/index.es88.js.map +1 -0
  451. package/dist/{index89.es.js → index.es89.js} +1 -1
  452. package/dist/{index89.es.js.map → index.es89.js.map} +1 -1
  453. package/dist/{index9.es.js → index.es9.js} +4 -4
  454. package/dist/{index9.es.js.map → index.es9.js.map} +1 -1
  455. package/dist/{index90.es.js → index.es90.js} +2 -2
  456. package/dist/{index90.es.js.map → index.es90.js.map} +1 -1
  457. package/dist/{index91.es.js → index.es91.js} +3 -3
  458. package/dist/{index91.es.js.map → index.es91.js.map} +1 -1
  459. package/dist/{index92.es.js → index.es92.js} +1 -1
  460. package/dist/{index92.es.js.map → index.es92.js.map} +1 -1
  461. package/dist/{index93.es.js → index.es93.js} +1 -1
  462. package/dist/{index93.es.js.map → index.es93.js.map} +1 -1
  463. package/dist/{index94.es.js → index.es94.js} +1 -1
  464. package/dist/{index94.es.js.map → index.es94.js.map} +1 -1
  465. package/dist/{index95.es.js → index.es95.js} +1 -1
  466. package/dist/{index95.es.js.map → index.es95.js.map} +1 -1
  467. package/dist/{index96.es.js → index.es96.js} +1 -1
  468. package/dist/{index96.es.js.map → index.es96.js.map} +1 -1
  469. package/dist/{index117.es.js → index.es97.js} +1 -1
  470. package/dist/index.es97.js.map +1 -0
  471. package/dist/{index118.es.js → index.es98.js} +24 -23
  472. package/dist/index.es98.js.map +1 -0
  473. package/dist/{index119.es.js → index.es99.js} +1 -1
  474. package/dist/index.es99.js.map +1 -0
  475. package/dist/styles.css +72 -11
  476. package/package.json +1 -1
  477. package/dist/index117.es.js.map +0 -1
  478. package/dist/index118.es.js.map +0 -1
  479. package/dist/index119.es.js.map +0 -1
  480. package/dist/index120.es.js +0 -105
  481. package/dist/index120.es.js.map +0 -1
  482. package/dist/index144.es.js.map +0 -1
  483. package/dist/index149.es.js.map +0 -1
  484. package/dist/index150.es.js +0 -325
  485. package/dist/index150.es.js.map +0 -1
  486. package/dist/index151.es.js.map +0 -1
  487. package/dist/index153.es.js.map +0 -1
  488. package/dist/index156.es.js +0 -146
  489. package/dist/index156.es.js.map +0 -1
  490. package/dist/index158.es.js +0 -50
  491. package/dist/index158.es.js.map +0 -1
  492. package/dist/index163.es.js +0 -216
  493. package/dist/index163.es.js.map +0 -1
  494. package/dist/index168.es.js +0 -94
  495. package/dist/index168.es.js.map +0 -1
  496. package/dist/index169.es.js +0 -120
  497. package/dist/index169.es.js.map +0 -1
  498. package/dist/index45.es.js +0 -67
  499. package/dist/index45.es.js.map +0 -1
  500. package/dist/index88.es.js +0 -5
  501. package/dist/index88.es.js.map +0 -1
  502. package/dist/index97.es.js.map +0 -1
  503. package/dist/index98.es.js.map +0 -1
  504. package/dist/index99.es.js.map +0 -1
  505. package/dist/{index84.es.js → index.es84.js} +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index114.es.js","sources":["../src/components/ui/form-renderer/context/form-values/form-values.provider.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport {\n AssetValue,\n FormField,\n FormFieldValue,\n FormStep,\n FormValues,\n RadioGroupWithInputFieldValue,\n TaggableAssetValue,\n onToggleImageEditor,\n} from '../../form.types'\nimport { FormValuesContext } from './form-values.context'\nimport { FormFieldType } from '../../form.enums'\n\nexport const FormValuesProvider: React.FC<{\n children: React.ReactNode\n initialValues?: FormValues\n onSubmit?: (values: FormValues) => void\n onAssetUpload?: (file: File) => Promise<AssetValue>\n onToggleImageEditor?: onToggleImageEditor\n getRequestHeaders?: () =>\n | Record<string, string>\n | Promise<Record<string, string>>\n getCreateOptionExtraBody?: () =>\n | Record<string, unknown>\n | Promise<Record<string, unknown>>\n}> = ({\n children,\n initialValues = {},\n onSubmit,\n onAssetUpload,\n onToggleImageEditor,\n getRequestHeaders,\n getCreateOptionExtraBody,\n}) => {\n const [values, setValues] = useState<FormValues>(initialValues)\n const [errors, setErrors] = useState<Record<string, string>>({})\n\n // to update field value\n const setValue = (fieldId: string, value: FormFieldValue) => {\n setValues((prev) => ({ ...prev, [fieldId]: value }))\n // Clear error when value changes\n if (errors[fieldId]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[fieldId]\n return newErrors\n })\n }\n }\n\n // to update state all at once\n const setFormValues = (newValues: FormValues) => {\n setValues(() => newValues)\n }\n\n /**\n * Validates a field based on its type\n * @param field - The field object with all properties\n * @returns Object containing validation status and error message\n */\n const validateField = (\n field: FormField\n ): { isValid: boolean; errorMessage: string } => {\n // Special handling for repeatable groups, Since values[field.id] wont exist for repeatable groups\n if (field.type === FormFieldType.REPEATABLE_GROUP_FIELD) {\n const prefix = `${field.id}||`\n // find all the keys that start with the prefix inside values\n const keys = Object.keys(values).filter((key) => key.startsWith(prefix))\n\n // if there are no keys, return invalid, since the field is required\n if (keys.length === 0) {\n return { isValid: false, errorMessage: 'This field is required' }\n }\n\n // loop through all the keys and validate each field if it is required using the same function validation field\n for (const key of keys) {\n const subField = field.options.find(\n (option) => option.id === key.split('||')[2]\n )\n\n const modifiedSubField = { ...subField, id: key }\n const { isValid, errorMessage } = validateField(\n modifiedSubField as FormField\n )\n if (!isValid) {\n return { isValid: false, errorMessage }\n }\n }\n\n // if all the fields are valid, return valid\n return { isValid: true, errorMessage: '' }\n }\n\n // For normal fields, proceed with regular validation\n const value = values[field.id]\n\n // Common check for undefined/null values for all required fields\n if (field.required && (value === undefined || value === null)) {\n return { isValid: false, errorMessage: 'This field is required' }\n }\n\n // If not required and no value, it's valid\n if (\n !field.required &&\n (value === undefined || value === null || value === '')\n ) {\n return { isValid: true, errorMessage: '' }\n }\n\n // Type-specific validation\n switch (field.type) {\n // Text fields\n case FormFieldType.SHORT_TEXT:\n case FormFieldType.LONG_TEXT:\n case FormFieldType.SINGLE_VIDEO_PICKER_WITH_INPUT:\n if (value === '') {\n return { isValid: false, errorMessage: 'This field cannot be empty' }\n }\n break\n\n case FormFieldType.EMAIL:\n if (value === '') {\n return { isValid: false, errorMessage: 'Email is required' }\n }\n // Basic email validation regex\n if (!/^\\S+@\\S+\\.\\S+$/.test(value as string)) {\n return {\n isValid: false,\n errorMessage: 'Please enter a valid email address',\n }\n }\n break\n\n // Number fields\n case FormFieldType.NUMBER:\n if (value === '') {\n return { isValid: false, errorMessage: 'Number is required' }\n }\n // Check if it's actually a number\n if (isNaN(Number(value))) {\n return { isValid: false, errorMessage: 'Please enter a valid number' }\n }\n break\n\n case FormFieldType.MOBILE_NUMBER:\n if (value === '') {\n return { isValid: false, errorMessage: 'Mobile number is required' }\n }\n // Mobile number validation\n if (!/^\\d{10,15}$/.test((value as string).replace(/\\D/g, ''))) {\n return {\n isValid: false,\n errorMessage: 'Please enter a valid mobile number',\n }\n }\n break\n\n case FormFieldType.DATE_PICKER:\n if (!value || value === '') {\n return { isValid: false, errorMessage: 'Date is required' }\n }\n break\n\n // Selection fields\n case FormFieldType.SINGLE_COMBOBOX:\n if (!value || value === '') {\n return {\n isValid: false,\n errorMessage: 'Please select or enter a value',\n }\n }\n break\n\n case FormFieldType.MULTI_COMBOBOX:\n // Could be array or comma-separated string depending on implementation\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please select at least one option',\n }\n }\n } else if (typeof value === 'string') {\n if (!value || value.split(',').filter(Boolean).length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please select at least one option',\n }\n }\n }\n break\n\n case FormFieldType.CREATABLE_MULTI_COMBOBOX: {\n const arr = Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').filter(Boolean)\n : []\n const minSelected = field.minSelected ?? 0\n const maxSelected = field.maxSelected\n if (minSelected > 0 && arr.length < minSelected) {\n return {\n isValid: false,\n errorMessage:\n maxSelected != null\n ? `Select at least ${minSelected} option(s) (max ${maxSelected})`\n : `Select at least ${minSelected} option(s)`,\n }\n }\n if (maxSelected != null && arr.length > maxSelected) {\n return {\n isValid: false,\n errorMessage: `Select at most ${maxSelected} option(s)`,\n }\n }\n if (field.required && arr.length === 0) {\n return {\n isValid: false,\n errorMessage: 'This field is required',\n }\n }\n break\n }\n\n case FormFieldType.CHECKBOX_GROUP:\n case FormFieldType.RADIO_GROUP:\n if (!value || value === '') {\n return { isValid: false, errorMessage: 'Please select an option' }\n }\n break\n\n case FormFieldType.RADIO_GROUP_WITH_OPTIONAL_INPUT: {\n const radioValue = value as RadioGroupWithInputFieldValue\n if (!radioValue || !radioValue.radio_value) {\n return { isValid: false, errorMessage: 'Please select an option' }\n }\n\n // If \"Other\" option is selected, check if input is provided\n if (\n radioValue.radio_value === field.inputTriggerOptionValue &&\n !radioValue.input_value\n ) {\n return {\n isValid: false,\n errorMessage:\n 'Please provide additional information for your selection',\n }\n }\n break\n }\n\n // Media upload fields\n case FormFieldType.SINGLE_IMAGE_PICKER:\n if (!value || !(value as AssetValue).public_url) {\n return { isValid: false, errorMessage: 'Please upload an image' }\n }\n break\n\n case FormFieldType.SINGLE_VIDEO_PICKER:\n if (!value || !(value as AssetValue).public_url) {\n return { isValid: false, errorMessage: 'Please upload a video' }\n }\n break\n\n case FormFieldType.MULTI_IMAGE_PICKER:\n if (!Array.isArray(value) || value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please upload at least one image',\n }\n }\n break\n\n case FormFieldType.MULTI_VIDEO_PICKER:\n if (!Array.isArray(value) || value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please upload at least one video',\n }\n }\n break\n\n case FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER:\n case FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER_WITH_INPUT: {\n if (!Array.isArray(value) || value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please upload at least one image',\n }\n }\n\n // Check if all uploaded images have tags assigned\n const taggedAssets = value as TaggableAssetValue[]\n const missingTags = taggedAssets.some((asset) => !asset.tag)\n if (missingTags) {\n return {\n isValid: false,\n errorMessage: 'Please add tags to all uploaded images',\n }\n }\n break\n }\n }\n\n // If we reach here, validation passed\n return { isValid: true, errorMessage: '' }\n }\n // New function to validate an entire step\n const validateStep = (\n step: FormStep\n ): { isStepValid: boolean; errors: Record<string, string> } => {\n let isStepValid = true\n const errors = {} as Record<string, string>\n const fieldIdTypeMap = {} as Record<string, FormField>\n\n // Collect all required field IDs from this step\n step.sections.forEach((section) => {\n section.fields.forEach((field) => {\n fieldIdTypeMap[field.id] = field\n })\n })\n\n // Validate each required field\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(fieldIdTypeMap).forEach(([_fieldId, field]) => {\n // Only validate required fields\n if (field.required) {\n // We can now pass the field type to a more specialized validation function\n const { isValid, errorMessage } = validateField(field)\n if (!isValid) {\n errors[field.id] = errorMessage\n isStepValid = false\n }\n }\n\n // For taggable image fields, validate tags even if field is optional\n // If images are uploaded, their tags must be filled in\n if (\n (field.type === FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER ||\n field.type ===\n FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER_WITH_INPUT) &&\n !field.required\n ) {\n const value = values[field.id]\n if (Array.isArray(value) && value.length > 0) {\n const taggedAssets = value as TaggableAssetValue[]\n const missingTags = taggedAssets.some((asset) => !asset.tag)\n if (missingTags) {\n errors[field.id] = 'Please add tags to all uploaded images'\n isStepValid = false\n }\n }\n }\n })\n\n return { isStepValid, errors }\n }\n\n const submitForm = () => {\n if (onSubmit) {\n onSubmit(values)\n }\n }\n\n const value = {\n values,\n errors,\n setValue,\n setFormValues,\n submitForm,\n onAssetUpload,\n validateField,\n validateStep,\n onToggleImageEditor,\n getRequestHeaders,\n getCreateOptionExtraBody,\n }\n\n return (\n <FormValuesContext.Provider value={value}>\n {children}\n </FormValuesContext.Provider>\n )\n}\n"],"names":["FormValuesProvider","children","initialValues","onSubmit","onAssetUpload","onToggleImageEditor","getRequestHeaders","getCreateOptionExtraBody","values","setValues","useState","errors","setErrors","setValue","fieldId","value","prev","newErrors","setFormValues","newValues","validateField","field","FormFieldType","prefix","keys","key","modifiedSubField","option","isValid","errorMessage","arr","minSelected","maxSelected","radioValue","asset","step","isStepValid","fieldIdTypeMap","section","_fieldId","React","FormValuesContext"],"mappings":"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"}
1
+ {"version":3,"file":"index.es131.js","sources":["../src/components/ui/form-renderer/context/form-values/form-values.provider.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport {\n AssetValue,\n FormField,\n FormFieldValue,\n FormStep,\n FormValues,\n RadioGroupWithInputFieldValue,\n TaggableAssetValue,\n onToggleImageEditor,\n} from '../../form.types'\nimport { FormValuesContext } from './form-values.context'\nimport { FormFieldType } from '../../form.enums'\n\nexport const FormValuesProvider: React.FC<{\n children: React.ReactNode\n initialValues?: FormValues\n onSubmit?: (values: FormValues) => void\n onAssetUpload?: (file: File) => Promise<AssetValue>\n onToggleImageEditor?: onToggleImageEditor\n getRequestHeaders?: () =>\n | Record<string, string>\n | Promise<Record<string, string>>\n getCreateOptionExtraBody?: () =>\n | Record<string, unknown>\n | Promise<Record<string, unknown>>\n}> = ({\n children,\n initialValues = {},\n onSubmit,\n onAssetUpload,\n onToggleImageEditor,\n getRequestHeaders,\n getCreateOptionExtraBody,\n}) => {\n const [values, setValues] = useState<FormValues>(initialValues)\n const [errors, setErrors] = useState<Record<string, string>>({})\n\n // to update field value\n const setValue = (fieldId: string, value: FormFieldValue) => {\n setValues((prev) => ({ ...prev, [fieldId]: value }))\n // Clear error when value changes\n if (errors[fieldId]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[fieldId]\n return newErrors\n })\n }\n }\n\n // to update state all at once\n const setFormValues = (newValues: FormValues) => {\n setValues(() => newValues)\n }\n\n /**\n * Validates a field based on its type\n * @param field - The field object with all properties\n * @returns Object containing validation status and error message\n */\n const validateField = (\n field: FormField\n ): { isValid: boolean; errorMessage: string } => {\n // Special handling for repeatable groups, Since values[field.id] wont exist for repeatable groups\n if (field.type === FormFieldType.REPEATABLE_GROUP_FIELD) {\n const prefix = `${field.id}||`\n // find all the keys that start with the prefix inside values\n const keys = Object.keys(values).filter((key) => key.startsWith(prefix))\n\n // if there are no keys, return invalid, since the field is required\n if (keys.length === 0) {\n return { isValid: false, errorMessage: 'This field is required' }\n }\n\n // loop through all the keys and validate each field if it is required using the same function validation field\n for (const key of keys) {\n const subField = field.options.find(\n (option) => option.id === key.split('||')[2]\n )\n\n const modifiedSubField = { ...subField, id: key }\n const { isValid, errorMessage } = validateField(\n modifiedSubField as FormField\n )\n if (!isValid) {\n return { isValid: false, errorMessage }\n }\n }\n\n // if all the fields are valid, return valid\n return { isValid: true, errorMessage: '' }\n }\n\n // For normal fields, proceed with regular validation\n const value = values[field.id]\n\n // Common check for undefined/null values for all required fields\n if (field.required && (value === undefined || value === null)) {\n return { isValid: false, errorMessage: 'This field is required' }\n }\n\n // If not required and no value, it's valid\n if (\n !field.required &&\n (value === undefined || value === null || value === '')\n ) {\n return { isValid: true, errorMessage: '' }\n }\n\n // Type-specific validation\n switch (field.type) {\n // Text fields\n case FormFieldType.SHORT_TEXT:\n case FormFieldType.LONG_TEXT:\n case FormFieldType.SINGLE_VIDEO_PICKER_WITH_INPUT:\n if (value === '') {\n return { isValid: false, errorMessage: 'This field cannot be empty' }\n }\n break\n\n case FormFieldType.EMAIL:\n if (value === '') {\n return { isValid: false, errorMessage: 'Email is required' }\n }\n // Basic email validation regex\n if (!/^\\S+@\\S+\\.\\S+$/.test(value as string)) {\n return {\n isValid: false,\n errorMessage: 'Please enter a valid email address',\n }\n }\n break\n\n // Number fields\n case FormFieldType.NUMBER:\n if (value === '') {\n return { isValid: false, errorMessage: 'Number is required' }\n }\n // Check if it's actually a number\n if (isNaN(Number(value))) {\n return { isValid: false, errorMessage: 'Please enter a valid number' }\n }\n break\n\n case FormFieldType.MOBILE_NUMBER:\n if (value === '') {\n return { isValid: false, errorMessage: 'Mobile number is required' }\n }\n // Mobile number validation\n if (!/^\\d{10,15}$/.test((value as string).replace(/\\D/g, ''))) {\n return {\n isValid: false,\n errorMessage: 'Please enter a valid mobile number',\n }\n }\n break\n\n case FormFieldType.DATE_PICKER:\n if (!value || value === '') {\n return { isValid: false, errorMessage: 'Date is required' }\n }\n break\n\n // Selection fields\n case FormFieldType.SINGLE_COMBOBOX:\n if (!value || value === '') {\n return {\n isValid: false,\n errorMessage: 'Please select or enter a value',\n }\n }\n break\n\n case FormFieldType.MULTI_COMBOBOX:\n // Could be array or comma-separated string depending on implementation\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please select at least one option',\n }\n }\n } else if (typeof value === 'string') {\n if (!value || value.split(',').filter(Boolean).length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please select at least one option',\n }\n }\n }\n break\n\n case FormFieldType.CREATABLE_MULTI_COMBOBOX: {\n const arr = Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').filter(Boolean)\n : []\n const minSelected = field.minSelected ?? 0\n const maxSelected = field.maxSelected\n if (minSelected > 0 && arr.length < minSelected) {\n return {\n isValid: false,\n errorMessage:\n maxSelected != null\n ? `Select at least ${minSelected} option(s) (max ${maxSelected})`\n : `Select at least ${minSelected} option(s)`,\n }\n }\n if (maxSelected != null && arr.length > maxSelected) {\n return {\n isValid: false,\n errorMessage: `Select at most ${maxSelected} option(s)`,\n }\n }\n if (field.required && arr.length === 0) {\n return {\n isValid: false,\n errorMessage: 'This field is required',\n }\n }\n break\n }\n\n case FormFieldType.CHECKBOX_GROUP:\n case FormFieldType.RADIO_GROUP:\n if (!value || value === '') {\n return { isValid: false, errorMessage: 'Please select an option' }\n }\n break\n\n case FormFieldType.RADIO_GROUP_WITH_OPTIONAL_INPUT: {\n const radioValue = value as RadioGroupWithInputFieldValue\n if (!radioValue || !radioValue.radio_value) {\n return { isValid: false, errorMessage: 'Please select an option' }\n }\n\n // If \"Other\" option is selected, check if input is provided\n if (\n radioValue.radio_value === field.inputTriggerOptionValue &&\n !radioValue.input_value\n ) {\n return {\n isValid: false,\n errorMessage:\n 'Please provide additional information for your selection',\n }\n }\n break\n }\n\n // Media upload fields\n case FormFieldType.SINGLE_IMAGE_PICKER:\n if (!value || !(value as AssetValue).public_url) {\n return { isValid: false, errorMessage: 'Please upload an image' }\n }\n break\n\n case FormFieldType.SINGLE_VIDEO_PICKER:\n if (!value || !(value as AssetValue).public_url) {\n return { isValid: false, errorMessage: 'Please upload a video' }\n }\n break\n\n case FormFieldType.MULTI_IMAGE_PICKER:\n if (!Array.isArray(value) || value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please upload at least one image',\n }\n }\n break\n\n case FormFieldType.MULTI_VIDEO_PICKER:\n if (!Array.isArray(value) || value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please upload at least one video',\n }\n }\n break\n\n case FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER:\n case FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER_WITH_INPUT: {\n if (!Array.isArray(value) || value.length === 0) {\n return {\n isValid: false,\n errorMessage: 'Please upload at least one image',\n }\n }\n\n // Check if all uploaded images have tags assigned\n const taggedAssets = value as TaggableAssetValue[]\n const missingTags = taggedAssets.some((asset) => !asset.tag)\n if (missingTags) {\n return {\n isValid: false,\n errorMessage: 'Please add tags to all uploaded images',\n }\n }\n break\n }\n }\n\n // If we reach here, validation passed\n return { isValid: true, errorMessage: '' }\n }\n // New function to validate an entire step\n const validateStep = (\n step: FormStep\n ): { isStepValid: boolean; errors: Record<string, string> } => {\n let isStepValid = true\n const errors = {} as Record<string, string>\n const fieldIdTypeMap = {} as Record<string, FormField>\n\n // Collect all required field IDs from this step\n step.sections.forEach((section) => {\n section.fields.forEach((field) => {\n fieldIdTypeMap[field.id] = field\n })\n })\n\n // Validate each required field\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(fieldIdTypeMap).forEach(([_fieldId, field]) => {\n // Only validate required fields\n if (field.required) {\n // We can now pass the field type to a more specialized validation function\n const { isValid, errorMessage } = validateField(field)\n if (!isValid) {\n errors[field.id] = errorMessage\n isStepValid = false\n }\n }\n\n // For taggable image fields, validate tags even if field is optional\n // If images are uploaded, their tags must be filled in\n if (\n (field.type === FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER ||\n field.type ===\n FormFieldType.TAGGABLE_MULTI_IMAGE_PICKER_WITH_INPUT) &&\n !field.required\n ) {\n const value = values[field.id]\n if (Array.isArray(value) && value.length > 0) {\n const taggedAssets = value as TaggableAssetValue[]\n const missingTags = taggedAssets.some((asset) => !asset.tag)\n if (missingTags) {\n errors[field.id] = 'Please add tags to all uploaded images'\n isStepValid = false\n }\n }\n }\n })\n\n return { isStepValid, errors }\n }\n\n const submitForm = () => {\n if (onSubmit) {\n onSubmit(values)\n }\n }\n\n const value = {\n values,\n errors,\n setValue,\n setFormValues,\n submitForm,\n onAssetUpload,\n validateField,\n validateStep,\n onToggleImageEditor,\n getRequestHeaders,\n getCreateOptionExtraBody,\n }\n\n return (\n <FormValuesContext.Provider value={value}>\n {children}\n </FormValuesContext.Provider>\n )\n}\n"],"names":["FormValuesProvider","children","initialValues","onSubmit","onAssetUpload","onToggleImageEditor","getRequestHeaders","getCreateOptionExtraBody","values","setValues","useState","errors","setErrors","setValue","fieldId","value","prev","newErrors","setFormValues","newValues","validateField","field","FormFieldType","prefix","keys","key","modifiedSubField","option","isValid","errorMessage","arr","minSelected","maxSelected","radioValue","asset","step","isStepValid","fieldIdTypeMap","section","_fieldId","React","FormValuesContext"],"mappings":"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"}
@@ -40,4 +40,4 @@ export {
40
40
  i as TabTriggerVariants,
41
41
  e as TabsVariants
42
42
  };
43
- //# sourceMappingURL=index109.es.js.map
43
+ //# sourceMappingURL=index.es132.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index109.es.js","sources":["../src/components/molecules/tabs/tabs.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const TabsVariants = cva(\n 'inline-flex items-center justify-evenly p-1 text-muted-foreground',\n {\n variants: {\n variant: {\n primary: 'bg-light-3 border rounded-xl border-neutral-1',\n secondary: 'bg-background ',\n },\n size: {\n sm: 'h-10 rounded-xl ',\n md: 'h-12 rounded-xl ',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n\nexport const TabTriggerVariants = cva(\n 'inline-flex w-full items-center justify-center whitespace-nowrap text-sm text-light-2 font-medium disabled:pointer-events-none disabled:opacity-50 ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ',\n {\n variants: {\n size: {\n sm: 'h-8 text-[14px] p-1.5 ',\n md: 'h-10 text-[16px] p-2 ',\n },\n variant: {\n primary:\n 'rounded-lg data-[state=active]:bg-rest-s1 data-[state=active]:text-primary-1 data-[state=active]:border data-[state=active]:border-neutral-1 data-[state=active]:font-semibold data-[state=active]:shadow-sm ',\n secondary:\n 'data-[state=active]:bg-background data-[state=active]:text-primary-1 data-[state=active]:font-semibold data-[state=active]:border-b-2 data-[state=active]:border-primary-2 ',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n"],"names":["TabsVariants","cva","TabTriggerVariants"],"mappings":";AAEO,MAAMA,IAAeC;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,MAEb,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAEaC,IAAqBD;AAAA,EAChC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,SAAS;AAAA,QACP,SACE;AAAA,QACF,WACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;"}
1
+ {"version":3,"file":"index.es132.js","sources":["../src/components/molecules/tabs/tabs.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const TabsVariants = cva(\n 'inline-flex items-center justify-evenly p-1 text-muted-foreground',\n {\n variants: {\n variant: {\n primary: 'bg-light-3 border rounded-xl border-neutral-1',\n secondary: 'bg-background ',\n },\n size: {\n sm: 'h-10 rounded-xl ',\n md: 'h-12 rounded-xl ',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n\nexport const TabTriggerVariants = cva(\n 'inline-flex w-full items-center justify-center whitespace-nowrap text-sm text-light-2 font-medium disabled:pointer-events-none disabled:opacity-50 ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ',\n {\n variants: {\n size: {\n sm: 'h-8 text-[14px] p-1.5 ',\n md: 'h-10 text-[16px] p-2 ',\n },\n variant: {\n primary:\n 'rounded-lg data-[state=active]:bg-rest-s1 data-[state=active]:text-primary-1 data-[state=active]:border data-[state=active]:border-neutral-1 data-[state=active]:font-semibold data-[state=active]:shadow-sm ',\n secondary:\n 'data-[state=active]:bg-background data-[state=active]:text-primary-1 data-[state=active]:font-semibold data-[state=active]:border-b-2 data-[state=active]:border-primary-2 ',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n)\n"],"names":["TabsVariants","cva","TabTriggerVariants"],"mappings":";AAEO,MAAMA,IAAeC;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,MAEb,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAEaC,IAAqBD;AAAA,EAChC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,SAAS;AAAA,QACP,SACE;AAAA,QACF,WACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;"}
@@ -45,4 +45,4 @@ export {
45
45
  a as AlertContentVariants,
46
46
  r as AlertVariants
47
47
  };
48
- //# sourceMappingURL=index100.es.js.map
48
+ //# sourceMappingURL=index.es133.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index100.es.js","sources":["../src/components/molecules/alert/alert.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const AlertVariants = cva(\n 'relative rounded-xl flex flex-row h-full items-start gap-2 border px-4 py-4 text-sm ',\n {\n variants: {\n variant: {\n info: ' text-text4 dark:border-danger [&>svg]:text-danger bg-info-1',\n success:\n 'text-text4 dark:border-danger [&>svg]:text-danger bg-success-1',\n warning:\n 'text-text4 dark:border-danger [&>svg]:text-danger bg-warning-1 ',\n error:\n ' text-text4 dark:border-danger [&>svg]:text-danger bg-danger-1',\n default: 'text-text4 bg-background text-foreground',\n },\n shortContent: {\n true: 'items-center flex flex-row gap-3',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n }\n)\n\nexport const AlertContentVariants = cva('', {\n variants: {\n shortContent: {\n true: 'justify-between w-full items-center flex flex-row gap-3',\n false: 'flex flex-col gap-2 justify-start items-start',\n },\n },\n defaultVariants: {\n shortContent: false,\n },\n})\n\nexport const AlertButtonVariants = cva(' max-w-[fit-content] ', {\n variants: {\n shortContent: {\n true: 'bg-rest-s1',\n false: 'bg-rest-s1',\n },\n },\n defaultVariants: {\n shortContent: false,\n },\n})\n"],"names":["AlertVariants","cva","AlertContentVariants","AlertButtonVariants"],"mappings":";AAEO,MAAMA,IAAgBC;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SACE;AAAA,QACF,SACE;AAAA,QACF,OACE;AAAA,QACF,SAAS;AAAA,MAAA;AAAA,MAEX,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAEaC,IAAuBD,EAAI,IAAI;AAAA,EAC1C,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB;AAAA,IACf,cAAc;AAAA,EAAA;AAElB,CAAC,GAEYE,IAAsBF,EAAI,yBAAyB;AAAA,EAC9D,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB;AAAA,IACf,cAAc;AAAA,EAAA;AAElB,CAAC;"}
1
+ {"version":3,"file":"index.es133.js","sources":["../src/components/molecules/alert/alert.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const AlertVariants = cva(\n 'relative rounded-xl flex flex-row h-full items-start gap-2 border px-4 py-4 text-sm ',\n {\n variants: {\n variant: {\n info: ' text-text4 dark:border-danger [&>svg]:text-danger bg-info-1',\n success:\n 'text-text4 dark:border-danger [&>svg]:text-danger bg-success-1',\n warning:\n 'text-text4 dark:border-danger [&>svg]:text-danger bg-warning-1 ',\n error:\n ' text-text4 dark:border-danger [&>svg]:text-danger bg-danger-1',\n default: 'text-text4 bg-background text-foreground',\n },\n shortContent: {\n true: 'items-center flex flex-row gap-3',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n }\n)\n\nexport const AlertContentVariants = cva('', {\n variants: {\n shortContent: {\n true: 'justify-between w-full items-center flex flex-row gap-3',\n false: 'flex flex-col gap-2 justify-start items-start',\n },\n },\n defaultVariants: {\n shortContent: false,\n },\n})\n\nexport const AlertButtonVariants = cva(' max-w-[fit-content] ', {\n variants: {\n shortContent: {\n true: 'bg-rest-s1',\n false: 'bg-rest-s1',\n },\n },\n defaultVariants: {\n shortContent: false,\n },\n})\n"],"names":["AlertVariants","cva","AlertContentVariants","AlertButtonVariants"],"mappings":";AAEO,MAAMA,IAAgBC;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SACE;AAAA,QACF,SACE;AAAA,QACF,OACE;AAAA,QACF,SAAS;AAAA,MAAA;AAAA,MAEX,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAEaC,IAAuBD,EAAI,IAAI;AAAA,EAC1C,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB;AAAA,IACf,cAAc;AAAA,EAAA;AAElB,CAAC,GAEYE,IAAsBF,EAAI,yBAAyB;AAAA,EAC9D,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB;AAAA,IACf,cAAc;AAAA,EAAA;AAElB,CAAC;"}
@@ -1,7 +1,7 @@
1
1
  import * as e from "react";
2
2
  import { Slot as o } from "@radix-ui/react-slot";
3
3
  import { ChevronRight as l, MoreHorizontal as c } from "lucide-react";
4
- import { cn as m } from "./index89.es.js";
4
+ import { cn as m } from "./index.es89.js";
5
5
  const i = e.forwardRef(({ ...r }, a) => /* @__PURE__ */ e.createElement("nav", { ref: a, "aria-label": "breadcrumb", ...r }));
6
6
  i.displayName = "Breadcrumb";
7
7
  const d = e.forwardRef(({ className: r, ...a }, t) => /* @__PURE__ */ e.createElement(
@@ -88,4 +88,4 @@ export {
88
88
  f as BreadcrumbPage,
89
89
  b as BreadcrumbSeparator
90
90
  };
91
- //# sourceMappingURL=index102.es.js.map
91
+ //# sourceMappingURL=index.es134.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index102.es.js","sources":["../src/components/molecules/breadcrumb/breadcrumb-components.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<'nav'> & {\n separator?: React.ReactNode\n }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\nBreadcrumb.displayName = 'Breadcrumb'\n\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<'ol'>\n>(({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className\n )}\n {...props}\n />\n))\nBreadcrumbList.displayName = 'BreadcrumbList'\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<'li'>\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n))\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n ref={ref}\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n )\n})\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<'span'>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n))\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<'span'>) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbElipssis'\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n"],"names":["Breadcrumb","React","props","ref","BreadcrumbList","className","cn","BreadcrumbItem","BreadcrumbLink","asChild","Comp","Slot","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRight","BreadcrumbEllipsis","MoreHorizontal"],"mappings":";;;;AAMA,MAAMA,IAAaC,EAAM,WAKvB,CAAC,EAAE,GAAGC,EAAA,GAASC,MAAQ,gBAAAF,EAAA,cAAC,SAAI,KAAAE,GAAU,cAAW,cAAc,GAAGD,GAAO,CAAE;AAC7EF,EAAW,cAAc;AAEzB,MAAMI,IAAiBH,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,WAAWG;AAAA,MACT;AAAA,MACAD;AAAA,IAAA;AAAA,IAED,GAAGH;AAAA,EAAA;AACN,CACD;AACDE,EAAe,cAAc;AAE7B,MAAMG,IAAiBN,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,WAAWG,EAAG,oCAAoCD,CAAS;AAAA,IAC1D,GAAGH;AAAA,EAAA;AACN,CACD;AACDK,EAAe,cAAc;AAE7B,MAAMC,IAAiBP,EAAM,WAK3B,CAAC,EAAE,SAAAQ,GAAS,WAAAJ,GAAW,GAAGH,EAAA,GAASC,MAAQ;AAC3C,QAAMO,IAAOD,IAAUE,IAAO;AAE9B,SACE,gBAAAV,EAAA;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAAP;AAAA,MACA,WAAWG,EAAG,2CAA2CD,CAAS;AAAA,MACjE,GAAGH;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACDM,EAAe,cAAc;AAE7B,MAAMI,IAAiBX,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,MAAK;AAAA,IACL,iBAAc;AAAA,IACd,gBAAa;AAAA,IACb,WAAWG,EAAG,+BAA+BD,CAAS;AAAA,IACrD,GAAGH;AAAA,EAAA;AACN,CACD;AACDU,EAAe,cAAc;AAE7B,MAAMC,IAAsB,CAAC;AAAA,EAC3B,UAAAC;AAAA,EACA,WAAAT;AAAA,EACA,GAAGH;AACL,MACE,gBAAAD,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,WAAWK,EAAG,oBAAoBD,CAAS;AAAA,IAC1C,GAAGH;AAAA,EAAA;AAAA,EAEHY,qCAAaC,GAAA,IAAa;AAC7B;AAEFF,EAAoB,cAAc;AAElC,MAAMG,IAAqB,CAAC;AAAA,EAC1B,WAAAX;AAAA,EACA,GAAGH;AACL,MACE,gBAAAD,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,WAAWK,EAAG,4CAA4CD,CAAS;AAAA,IAClE,GAAGH;AAAA,EAAA;AAAA,EAEJ,gBAAAD,EAAA,cAACgB,GAAA,EAAe,WAAU,UAAA,CAAU;AAAA,EACpC,gBAAAhB,EAAA,cAAC,QAAA,EAAK,WAAU,UAAA,GAAU,MAAI;AAChC;AAEFe,EAAmB,cAAc;"}
1
+ {"version":3,"file":"index.es134.js","sources":["../src/components/molecules/breadcrumb/breadcrumb-components.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { ChevronRight, MoreHorizontal } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<'nav'> & {\n separator?: React.ReactNode\n }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\nBreadcrumb.displayName = 'Breadcrumb'\n\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<'ol'>\n>(({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className\n )}\n {...props}\n />\n))\nBreadcrumbList.displayName = 'BreadcrumbList'\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<'li'>\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n))\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<'a'> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n ref={ref}\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n )\n})\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<'span'>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n))\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n)\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<'span'>) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = 'BreadcrumbElipssis'\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n"],"names":["Breadcrumb","React","props","ref","BreadcrumbList","className","cn","BreadcrumbItem","BreadcrumbLink","asChild","Comp","Slot","BreadcrumbPage","BreadcrumbSeparator","children","ChevronRight","BreadcrumbEllipsis","MoreHorizontal"],"mappings":";;;;AAMA,MAAMA,IAAaC,EAAM,WAKvB,CAAC,EAAE,GAAGC,EAAA,GAASC,MAAQ,gBAAAF,EAAA,cAAC,SAAI,KAAAE,GAAU,cAAW,cAAc,GAAGD,GAAO,CAAE;AAC7EF,EAAW,cAAc;AAEzB,MAAMI,IAAiBH,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,WAAWG;AAAA,MACT;AAAA,MACAD;AAAA,IAAA;AAAA,IAED,GAAGH;AAAA,EAAA;AACN,CACD;AACDE,EAAe,cAAc;AAE7B,MAAMG,IAAiBN,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,WAAWG,EAAG,oCAAoCD,CAAS;AAAA,IAC1D,GAAGH;AAAA,EAAA;AACN,CACD;AACDK,EAAe,cAAc;AAE7B,MAAMC,IAAiBP,EAAM,WAK3B,CAAC,EAAE,SAAAQ,GAAS,WAAAJ,GAAW,GAAGH,EAAA,GAASC,MAAQ;AAC3C,QAAMO,IAAOD,IAAUE,IAAO;AAE9B,SACE,gBAAAV,EAAA;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAAP;AAAA,MACA,WAAWG,EAAG,2CAA2CD,CAAS;AAAA,MACjE,GAAGH;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACDM,EAAe,cAAc;AAE7B,MAAMI,IAAiBX,EAAM,WAG3B,CAAC,EAAE,WAAAI,GAAW,GAAGH,EAAA,GAASC,MAC1B,gBAAAF,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAE;AAAA,IACA,MAAK;AAAA,IACL,iBAAc;AAAA,IACd,gBAAa;AAAA,IACb,WAAWG,EAAG,+BAA+BD,CAAS;AAAA,IACrD,GAAGH;AAAA,EAAA;AACN,CACD;AACDU,EAAe,cAAc;AAE7B,MAAMC,IAAsB,CAAC;AAAA,EAC3B,UAAAC;AAAA,EACA,WAAAT;AAAA,EACA,GAAGH;AACL,MACE,gBAAAD,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,WAAWK,EAAG,oBAAoBD,CAAS;AAAA,IAC1C,GAAGH;AAAA,EAAA;AAAA,EAEHY,qCAAaC,GAAA,IAAa;AAC7B;AAEFF,EAAoB,cAAc;AAElC,MAAMG,IAAqB,CAAC;AAAA,EAC1B,WAAAX;AAAA,EACA,GAAGH;AACL,MACE,gBAAAD,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,WAAWK,EAAG,4CAA4CD,CAAS;AAAA,IAClE,GAAGH;AAAA,EAAA;AAAA,EAEJ,gBAAAD,EAAA,cAACgB,GAAA,EAAe,WAAU,UAAA,CAAU;AAAA,EACpC,gBAAAhB,EAAA,cAAC,QAAA,EAAK,WAAU,UAAA,GAAU,MAAI;AAChC;AAEFe,EAAmB,cAAc;"}
@@ -17,4 +17,4 @@ const r = t(
17
17
  export {
18
18
  r as CrumbVariants
19
19
  };
20
- //# sourceMappingURL=index104.es.js.map
20
+ //# sourceMappingURL=index.es135.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index104.es.js","sources":["../src/components/molecules/breadcrumb/breadcrumb.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const CrumbVariants = cva(\n 'rounded hover:text-light-2 hover:stroke-light-1 hover:bg-light-3 ',\n {\n variants: {\n type: {\n icon: 'p-1',\n text: 'px-2 py-1',\n },\n isSelected: {\n true: 'text-light-2 stroke-light-1 bg-light-3',\n false: 'text-light-3 stroke-light-2',\n },\n },\n }\n)\n"],"names":["CrumbVariants","cva"],"mappings":";AAEO,MAAMA,IAAgBC;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAAA,MAER,YAAY;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"index.es135.js","sources":["../src/components/molecules/breadcrumb/breadcrumb.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const CrumbVariants = cva(\n 'rounded hover:text-light-2 hover:stroke-light-1 hover:bg-light-3 ',\n {\n variants: {\n type: {\n icon: 'p-1',\n text: 'px-2 py-1',\n },\n isSelected: {\n true: 'text-light-2 stroke-light-1 bg-light-3',\n false: 'text-light-3 stroke-light-2',\n },\n },\n }\n)\n"],"names":["CrumbVariants","cva"],"mappings":";AAEO,MAAMA,IAAgBC;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAAA,MAER,YAAY;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAEJ;"}
@@ -1,10 +1,10 @@
1
1
  import e from "react";
2
- import { FONT_FAMILY as v } from "./index160.es.js";
3
- import { _Dialog as N } from "./index41.es.js";
2
+ import { FONT_FAMILY as v } from "./index.es163.js";
3
+ import { _Dialog as N } from "./index.es41.js";
4
4
  import { X as w, ChevronLeft as S, ChevronRight as C } from "lucide-react";
5
- import { Typography as i } from "./index19.es.js";
5
+ import { Typography as i } from "./index.es19.js";
6
6
  import { ResponsiveContainer as d, BarChart as u, CartesianGrid as f, XAxis as g, YAxis as h, Tooltip as p, Bar as E } from "recharts";
7
- import { trendBoxStyles as k, trendValueStyles as F } from "./index161.es.js";
7
+ import { trendBoxStyles as k, trendValueStyles as F } from "./index.es164.js";
8
8
  const I = ({
9
9
  data: r,
10
10
  onToggle: t,
@@ -274,4 +274,4 @@ export {
274
274
  K as StoreInsightsSection,
275
275
  R as StoreOverviewSection
276
276
  };
277
- //# sourceMappingURL=index131.es.js.map
277
+ //# sourceMappingURL=index.es136.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index131.es.js","sources":["../src/components/ui/report-snippet-view/report-snippet-view-components.tsx"],"sourcesContent":["import React, { FC } from 'react'\nimport { ReportSnippetViewNS } from './report-snippet-view.types'\n\nimport { FONT_FAMILY } from '@/lib/constants'\n\nimport { Dialog } from '@/components/organisms/dialog'\nimport { ChevronLeft, ChevronRight, X } from 'lucide-react'\nimport { Typography } from '@/components/atoms/typography'\nimport {\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from 'recharts'\nimport { trendBoxStyles, trendValueStyles } from './report-snippet-view-style'\n\nconst ReportSnippetGalleryView: FC<{\n onToggle: () => void\n isOpen: boolean\n data?: ReportSnippetViewNS.StreetViewData\n galleryActiveIndex: number\n setgalleryActiveIndex: React.Dispatch<React.SetStateAction<number>>\n}> = ({\n data,\n onToggle,\n isOpen,\n galleryActiveIndex,\n setgalleryActiveIndex,\n}) => {\n // Current active item\n\n const isDataAvailable = data && data.length\n\n // Handle next click\n const handleNext = () => {\n if (!data) return\n setgalleryActiveIndex((prevIndex) => (prevIndex + 1) % data?.length)\n }\n\n // Handle previous click\n const handlePrev = () => {\n if (!data) return\n setgalleryActiveIndex(\n (prevIndex) => (prevIndex - 1 + data.length) % data.length\n )\n }\n\n const handleThumbnailClick = (index: number) => {\n setgalleryActiveIndex(index)\n }\n\n const toggleGallery = () => {\n onToggle()\n }\n\n return (\n <Dialog\n open={isOpen}\n trigger={null}\n contentClassName=\"bg-transparent w-fit border-0\"\n onInteractOutside={toggleGallery}\n body={\n <div className=\"flex flex-col items-center justify-center w-full h-full max-w-3xl mx-auto\">\n <X\n size={24}\n color=\"white\"\n className=\"absolute z-50 cursor-pointer -right-10 -top-10\"\n onClick={toggleGallery}\n />\n\n {/* Main Carousel */}\n <div className=\"relative\">\n <div className=\"relative \">\n {isDataAvailable && (\n <img\n key={data[galleryActiveIndex].image_url}\n src={data[galleryActiveIndex].image_url}\n alt={`Street ${galleryActiveIndex + 1}`}\n className=\"w-[500px] max-h-[80vh] object-contain flex-shrink-0\"\n />\n )}\n </div>\n\n {/* Navigation Buttons */}\n <div className=\"relative top-[-50%] left-[-10%] flex row w-[120%] justify-between\">\n <div role=\"button\" tabIndex={0} onClick={handlePrev}>\n <ChevronLeft size={30} color=\"white\" />\n </div>\n <div role=\"button\" tabIndex={0} onClick={handleNext}>\n <ChevronRight size={30} color=\"white\" />\n </div>\n </div>\n </div>\n\n {/* Thumbnails */}\n <div className=\"flex justify-center p-2 mt-4 space-x-2 rounded-lg\">\n {isDataAvailable &&\n data.map((item, index) => (\n <img\n key={index}\n src={item.image_url}\n alt={`Thumbnail ${index + 1}`}\n onClick={() => handleThumbnailClick(index)}\n className={`w-20 h-auto rounded-lg cursor-pointer ${\n index === galleryActiveIndex\n ? 'ring-2 ring-primary-1'\n : 'ring-2 ring-transparent'\n } hover:ring-gray-300`}\n />\n ))}\n </div>\n </div>\n }\n />\n )\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\nconst CustomTooltipFootfall = ({ active, payload, label, year }: any) => {\n if (active && payload && payload.length) {\n const year = payload[0]?.payload?.year\n const footfall = payload[0]?.value\n return (\n <div className=\"flex flex-col bg-light-1 p-4 rounded-lg shadow-md min-w-[200px] gap-1\">\n {/* Month Information */}\n <Typography variant={'body6'} className=\"text-primary\">\n {`${label}'${year}`}\n </Typography>\n\n {/* Separator */}\n <div className=\"my-2 w-full h-px border border-stroke-1\" />\n\n {/* Footfall/Visits Information */}\n <div className=\"flex\">\n <div\n className=\"h-4 w-1 rounded-lg\"\n style={{ backgroundColor: '#6D48EF' }}\n />\n <Typography variant={'body6'} className=\"text-secondary mx-1\">\n Visits\n </Typography>\n <Typography variant={'body4'} className=\"text-secondary ml-auto\">\n {` ${footfall}`}\n </Typography>\n </div>\n </div>\n )\n }\n return null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst CustomTooltipCannibalisation = ({ active, payload, label }: any) => {\n if (active && payload && payload.length) {\n const distance = payload[0]?.payload?.distance\n const cannibalisation = payload[0]?.value\n return (\n <div className=\"flex bg-light-1 items-center justify-between rounded-lg shadow-md min-w-45 max-w-80 gap-2 p-2\">\n {/* Month Information */}\n <Typography variant={'body6'} className=\"text-primary\">\n {\n <div className=\"flex h-full justify-between items-center p-2 gap-4\">\n <div>{label}</div>\n <div> {distance + 'km'}</div>\n </div>\n }\n </Typography>\n {/* Footfall/Visits Information */}\n <Typography\n variant={'body4'}\n className=\"text-normal text-danger-1 ml-auto p-2\"\n >\n {`${cannibalisation}%`}\n </Typography>\n </div>\n )\n }\n return null\n}\n\n{\n /*--------- Store insights ----------*/\n}\ninterface StoreInsightsSectionProps {\n insights: ReportSnippetViewNS.CatchmentInsights[]\n // customButton?: React.ReactNode\n}\n\nconst StoreInsightsSection: FC<StoreInsightsSectionProps> = ({ insights }) => {\n return (\n <div>\n <div className=\"flex flex-row mb-4 justify-between\">\n <Typography variant=\"body4\" className=\"text-light-2\">\n Store Insight:\n </Typography>\n </div>\n\n <div className=\"bg-light-2 p-3 border border-neutral-1 rounded-lg\">\n <Typography variant=\"body4\" className=\"text-light-2 mb-2\">\n Presence of other brands in catchment:\n </Typography>\n\n {/* Render store insights data */}\n <div className=\"flex gap-1 flex-wrap\">\n {insights.map((item) => (\n <div\n key={item.type}\n className=\"flex items-center gap-1 bg-light-1 px-2 py-1 rounded-full border border-neutral-1\"\n >\n {/* Icon */}\n <img\n src={item.iconUrl}\n alt={`${item.type} Icon`}\n className=\"w-4 h-4\"\n />\n\n {/* Name and Count */}\n <Typography variant=\"body6\" className=\"text-light-2\">\n {item.count}\n </Typography>\n <div className=\"flex items-center gap-1\">\n <Typography variant=\"body6\" className=\"text-light-2\">\n {item.type === 'competitor' ? 'Competitors' : 'Complementary'}\n </Typography>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\n{\n /*--------- Store Overview ----------*/\n}\ninterface StoreOverviewSectionProps {\n highlights: ReportSnippetViewNS.StoreHighlights[]\n}\n\nconst StoreOverviewSection: FC<StoreOverviewSectionProps> = ({\n highlights,\n}) => {\n return (\n <div>\n <Typography variant={'body4'} className=\"text-light-2 mb-2\">\n Store Overview:\n </Typography>\n <div className=\"bg-light-2 p-1 border border-neutral-1 rounded-lg\">\n <div className=\"flex justify-evenly items-center\">\n {highlights.map((item, index) => (\n <React.Fragment key={index}>\n <div className=\"flex flex-col items-center justify-center text-center gap-1 p-\">\n {/* Trend Box */}\n <div\n className={trendBoxStyles({\n trend: item.trend?.toString() as '1' | '-1' | '0' | null,\n })}\n >\n {item.trend === 1 && (\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/trending_up_9d73d6fac5.svg\"\n alt=\"High Trend\"\n className={'w-3 h-3'}\n />\n )}\n {item.trend === -1 && (\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/trending_down_87adc7f3a6.svg\"\n alt=\"Low Trend\"\n className={'w-3 h-3'}\n />\n )}\n {item.value && item.trend ? (\n <Typography\n variant=\"body5\"\n className={trendValueStyles({\n trend: item.trend?.toString() as\n | '1'\n | '-1'\n | '0'\n | null,\n })}\n >\n {`${item.value}%`}\n </Typography>\n ) : (\n <Typography variant=\"body5\" className=\"text-sm\">\n -\n </Typography>\n )}\n </div>\n\n {/* Name */}\n {item.name && (\n <Typography variant={'body6'} className=\"text-light-2\">\n {item.name}\n </Typography>\n )}\n </div>\n\n {/* Separator */}\n {index < highlights.length - 1 && (\n <div className=\"border-l border-stroke-light-1 h-20 mx-1\" />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\n{\n /*----------------- Footfall Trends ------------------*/\n}\ninterface FootfallChartSectionProps {\n data: ReportSnippetViewNS.FootfallChartData[]\n}\n\nconst FootfallChartSection: FC<FootfallChartSectionProps> = ({ data }) => {\n if (!data || data.every((item) => item.footfall === null)) {\n return null\n }\n return (\n <div className=\"w-full h-full bg-light-2 border border-neutral-1 p-3 rounded-lg\">\n {/* Section heading */}\n <Typography variant={'body4'} className=\"text-light-2 mb-4\">\n Footfall trends\n </Typography>\n\n {/* Bar Chart */}\n <ResponsiveContainer width=\"100%\" height={300}>\n <BarChart\n data={data}\n margin={{\n top: 3,\n right: 3,\n bottom: -10,\n left: 3,\n }}\n barSize={24}\n >\n <CartesianGrid strokeDasharray=\"10 10\" />\n <XAxis\n dataKey=\"month\"\n style={{\n font: FONT_FAMILY,\n fontSize: '12px',\n fontWeight: '500',\n color: '#4A4A4A',\n }}\n />\n <YAxis\n className=\"text-4-grey\"\n style={{ fontSize: '12px', fontWeight: '500' }}\n tickFormatter={(val) => {\n if (val > 1000000) {\n return `${val / 1000000}M`\n }\n if (val > 1000) {\n return `${val / 1000}K`\n }\n return val\n }}\n label={{\n value: 'AVG FOOTFALL FOR A 3-MONTH PERIOD',\n angle: -90,\n position: 'insideLeft',\n dy: -5,\n style: {\n textAnchor: 'middle',\n fontSize: '12px',\n fontWeight: '500',\n },\n }}\n />\n <Tooltip content={<CustomTooltipFootfall />} />\n <Bar\n dataKey=\"footfall\"\n fill=\"#6D48EF\"\n radius={[4, 4, 4, 4]}\n style={{ cursor: 'pointer' }}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n}\n\n{\n /* -----------------Cannibalisation Effect------------------ */\n}\ninterface CannibalisationChartSectionProps {\n data: ReportSnippetViewNS.CannibalisationChartData[]\n}\n\nconst CannibalisationChartSection: FC<CannibalisationChartSectionProps> = ({\n data,\n}) => {\n if (!data || data.every((item) => item.cannibalisation === null)) {\n return null\n }\n const formatXAxisLabel = (label: string) => {\n const barCount = data.length\n let maxLength\n\n if (barCount <= 1) {\n maxLength = 50\n } else if (barCount <= 6) {\n maxLength = 22 - (barCount - 1) * 4\n } else {\n maxLength = 6\n }\n\n return label.length > maxLength ? `${label.slice(0, maxLength)}...` : label\n }\n return (\n <div className=\"w-full h-full bg-light-2 border border-neutral-1 p-3 rounded-lg\">\n {/* Section heading */}\n <Typography variant={'body4'} className=\"text-light-2 mb-4\">\n Cannibalisation effects\n </Typography>\n\n {/* Bar Chart */}\n <ResponsiveContainer width=\"100%\" height={300}>\n <BarChart\n data={data}\n margin={{\n top: 3,\n right: 3,\n bottom: 5,\n left: 3,\n }}\n barSize={24}\n >\n <CartesianGrid strokeDasharray=\"10 10\" />\n <XAxis\n dataKey=\"store_name\"\n tickFormatter={formatXAxisLabel}\n tickMargin={10}\n tick={(props) => {\n const { x, y, payload } = props\n return (\n <text x={x} y={y} textAnchor={'end'} fill=\"#666\">\n <tspan x={x} style={{ fontSize: 12 }}>\n {formatXAxisLabel(payload.value)}\n </tspan>\n <tspan\n x={x}\n dy=\"1.5em\"\n style={{\n fontSize: 10,\n whiteSpace: 'nowrap',\n paddingTop: '2px',\n }}\n >\n {data[payload.index].distance + ' kms'}\n </tspan>\n </text>\n )\n }}\n />\n <YAxis\n className=\"text-4-grey\"\n style={{ fontSize: '12px', fontWeight: '500' }}\n tickFormatter={(val) => {\n if (val > 1000000) {\n return `${val / 1000000}M`\n }\n if (val > 1000) {\n return `${val / 1000}K`\n }\n return val\n }}\n label={{\n value: 'CANNIBALISATION IN %',\n angle: -90,\n position: 'insideLeft',\n dy: -5,\n style: {\n textAnchor: 'middle',\n fontSize: '12px',\n fontWeight: '500',\n },\n }}\n domain={[0, 100]}\n />\n <Tooltip content={<CustomTooltipCannibalisation />} />\n <Bar\n dataKey=\"cannibalisation\"\n fill=\"#F93232\"\n radius={[4, 4, 4, 4]}\n style={{ cursor: 'pointer' }}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n}\n\nexport {\n ReportSnippetGalleryView,\n StoreInsightsSection,\n StoreOverviewSection,\n FootfallChartSection,\n CannibalisationChartSection,\n}\n"],"names":["ReportSnippetGalleryView","data","onToggle","isOpen","galleryActiveIndex","setgalleryActiveIndex","isDataAvailable","handleNext","prevIndex","handlePrev","handleThumbnailClick","index","toggleGallery","React","Dialog","X","ChevronLeft","ChevronRight","item","CustomTooltipFootfall","active","payload","label","year","footfall","Typography","CustomTooltipCannibalisation","distance","cannibalisation","StoreInsightsSection","insights","StoreOverviewSection","highlights","trendBoxStyles","trendValueStyles","FootfallChartSection","ResponsiveContainer","BarChart","CartesianGrid","XAxis","FONT_FAMILY","YAxis","val","Tooltip","Bar","CannibalisationChartSection","formatXAxisLabel","barCount","maxLength","props","x","y"],"mappings":"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"}
1
+ {"version":3,"file":"index.es136.js","sources":["../src/components/ui/report-snippet-view/report-snippet-view-components.tsx"],"sourcesContent":["import React, { FC } from 'react'\nimport { ReportSnippetViewNS } from './report-snippet-view.types'\n\nimport { FONT_FAMILY } from '@/lib/constants'\n\nimport { Dialog } from '@/components/organisms/dialog'\nimport { ChevronLeft, ChevronRight, X } from 'lucide-react'\nimport { Typography } from '@/components/atoms/typography'\nimport {\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from 'recharts'\nimport { trendBoxStyles, trendValueStyles } from './report-snippet-view-style'\n\nconst ReportSnippetGalleryView: FC<{\n onToggle: () => void\n isOpen: boolean\n data?: ReportSnippetViewNS.StreetViewData\n galleryActiveIndex: number\n setgalleryActiveIndex: React.Dispatch<React.SetStateAction<number>>\n}> = ({\n data,\n onToggle,\n isOpen,\n galleryActiveIndex,\n setgalleryActiveIndex,\n}) => {\n // Current active item\n\n const isDataAvailable = data && data.length\n\n // Handle next click\n const handleNext = () => {\n if (!data) return\n setgalleryActiveIndex((prevIndex) => (prevIndex + 1) % data?.length)\n }\n\n // Handle previous click\n const handlePrev = () => {\n if (!data) return\n setgalleryActiveIndex(\n (prevIndex) => (prevIndex - 1 + data.length) % data.length\n )\n }\n\n const handleThumbnailClick = (index: number) => {\n setgalleryActiveIndex(index)\n }\n\n const toggleGallery = () => {\n onToggle()\n }\n\n return (\n <Dialog\n open={isOpen}\n trigger={null}\n contentClassName=\"bg-transparent w-fit border-0\"\n onInteractOutside={toggleGallery}\n body={\n <div className=\"flex flex-col items-center justify-center w-full h-full max-w-3xl mx-auto\">\n <X\n size={24}\n color=\"white\"\n className=\"absolute z-50 cursor-pointer -right-10 -top-10\"\n onClick={toggleGallery}\n />\n\n {/* Main Carousel */}\n <div className=\"relative\">\n <div className=\"relative \">\n {isDataAvailable && (\n <img\n key={data[galleryActiveIndex].image_url}\n src={data[galleryActiveIndex].image_url}\n alt={`Street ${galleryActiveIndex + 1}`}\n className=\"w-[500px] max-h-[80vh] object-contain flex-shrink-0\"\n />\n )}\n </div>\n\n {/* Navigation Buttons */}\n <div className=\"relative top-[-50%] left-[-10%] flex row w-[120%] justify-between\">\n <div role=\"button\" tabIndex={0} onClick={handlePrev}>\n <ChevronLeft size={30} color=\"white\" />\n </div>\n <div role=\"button\" tabIndex={0} onClick={handleNext}>\n <ChevronRight size={30} color=\"white\" />\n </div>\n </div>\n </div>\n\n {/* Thumbnails */}\n <div className=\"flex justify-center p-2 mt-4 space-x-2 rounded-lg\">\n {isDataAvailable &&\n data.map((item, index) => (\n <img\n key={index}\n src={item.image_url}\n alt={`Thumbnail ${index + 1}`}\n onClick={() => handleThumbnailClick(index)}\n className={`w-20 h-auto rounded-lg cursor-pointer ${\n index === galleryActiveIndex\n ? 'ring-2 ring-primary-1'\n : 'ring-2 ring-transparent'\n } hover:ring-gray-300`}\n />\n ))}\n </div>\n </div>\n }\n />\n )\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\nconst CustomTooltipFootfall = ({ active, payload, label, year }: any) => {\n if (active && payload && payload.length) {\n const year = payload[0]?.payload?.year\n const footfall = payload[0]?.value\n return (\n <div className=\"flex flex-col bg-light-1 p-4 rounded-lg shadow-md min-w-[200px] gap-1\">\n {/* Month Information */}\n <Typography variant={'body6'} className=\"text-primary\">\n {`${label}'${year}`}\n </Typography>\n\n {/* Separator */}\n <div className=\"my-2 w-full h-px border border-stroke-1\" />\n\n {/* Footfall/Visits Information */}\n <div className=\"flex\">\n <div\n className=\"h-4 w-1 rounded-lg\"\n style={{ backgroundColor: '#6D48EF' }}\n />\n <Typography variant={'body6'} className=\"text-secondary mx-1\">\n Visits\n </Typography>\n <Typography variant={'body4'} className=\"text-secondary ml-auto\">\n {` ${footfall}`}\n </Typography>\n </div>\n </div>\n )\n }\n return null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst CustomTooltipCannibalisation = ({ active, payload, label }: any) => {\n if (active && payload && payload.length) {\n const distance = payload[0]?.payload?.distance\n const cannibalisation = payload[0]?.value\n return (\n <div className=\"flex bg-light-1 items-center justify-between rounded-lg shadow-md min-w-45 max-w-80 gap-2 p-2\">\n {/* Month Information */}\n <Typography variant={'body6'} className=\"text-primary\">\n {\n <div className=\"flex h-full justify-between items-center p-2 gap-4\">\n <div>{label}</div>\n <div> {distance + 'km'}</div>\n </div>\n }\n </Typography>\n {/* Footfall/Visits Information */}\n <Typography\n variant={'body4'}\n className=\"text-normal text-danger-1 ml-auto p-2\"\n >\n {`${cannibalisation}%`}\n </Typography>\n </div>\n )\n }\n return null\n}\n\n{\n /*--------- Store insights ----------*/\n}\ninterface StoreInsightsSectionProps {\n insights: ReportSnippetViewNS.CatchmentInsights[]\n // customButton?: React.ReactNode\n}\n\nconst StoreInsightsSection: FC<StoreInsightsSectionProps> = ({ insights }) => {\n return (\n <div>\n <div className=\"flex flex-row mb-4 justify-between\">\n <Typography variant=\"body4\" className=\"text-light-2\">\n Store Insight:\n </Typography>\n </div>\n\n <div className=\"bg-light-2 p-3 border border-neutral-1 rounded-lg\">\n <Typography variant=\"body4\" className=\"text-light-2 mb-2\">\n Presence of other brands in catchment:\n </Typography>\n\n {/* Render store insights data */}\n <div className=\"flex gap-1 flex-wrap\">\n {insights.map((item) => (\n <div\n key={item.type}\n className=\"flex items-center gap-1 bg-light-1 px-2 py-1 rounded-full border border-neutral-1\"\n >\n {/* Icon */}\n <img\n src={item.iconUrl}\n alt={`${item.type} Icon`}\n className=\"w-4 h-4\"\n />\n\n {/* Name and Count */}\n <Typography variant=\"body6\" className=\"text-light-2\">\n {item.count}\n </Typography>\n <div className=\"flex items-center gap-1\">\n <Typography variant=\"body6\" className=\"text-light-2\">\n {item.type === 'competitor' ? 'Competitors' : 'Complementary'}\n </Typography>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\n{\n /*--------- Store Overview ----------*/\n}\ninterface StoreOverviewSectionProps {\n highlights: ReportSnippetViewNS.StoreHighlights[]\n}\n\nconst StoreOverviewSection: FC<StoreOverviewSectionProps> = ({\n highlights,\n}) => {\n return (\n <div>\n <Typography variant={'body4'} className=\"text-light-2 mb-2\">\n Store Overview:\n </Typography>\n <div className=\"bg-light-2 p-1 border border-neutral-1 rounded-lg\">\n <div className=\"flex justify-evenly items-center\">\n {highlights.map((item, index) => (\n <React.Fragment key={index}>\n <div className=\"flex flex-col items-center justify-center text-center gap-1 p-\">\n {/* Trend Box */}\n <div\n className={trendBoxStyles({\n trend: item.trend?.toString() as '1' | '-1' | '0' | null,\n })}\n >\n {item.trend === 1 && (\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/trending_up_9d73d6fac5.svg\"\n alt=\"High Trend\"\n className={'w-3 h-3'}\n />\n )}\n {item.trend === -1 && (\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/trending_down_87adc7f3a6.svg\"\n alt=\"Low Trend\"\n className={'w-3 h-3'}\n />\n )}\n {item.value && item.trend ? (\n <Typography\n variant=\"body5\"\n className={trendValueStyles({\n trend: item.trend?.toString() as\n | '1'\n | '-1'\n | '0'\n | null,\n })}\n >\n {`${item.value}%`}\n </Typography>\n ) : (\n <Typography variant=\"body5\" className=\"text-sm\">\n -\n </Typography>\n )}\n </div>\n\n {/* Name */}\n {item.name && (\n <Typography variant={'body6'} className=\"text-light-2\">\n {item.name}\n </Typography>\n )}\n </div>\n\n {/* Separator */}\n {index < highlights.length - 1 && (\n <div className=\"border-l border-stroke-light-1 h-20 mx-1\" />\n )}\n </React.Fragment>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\n{\n /*----------------- Footfall Trends ------------------*/\n}\ninterface FootfallChartSectionProps {\n data: ReportSnippetViewNS.FootfallChartData[]\n}\n\nconst FootfallChartSection: FC<FootfallChartSectionProps> = ({ data }) => {\n if (!data || data.every((item) => item.footfall === null)) {\n return null\n }\n return (\n <div className=\"w-full h-full bg-light-2 border border-neutral-1 p-3 rounded-lg\">\n {/* Section heading */}\n <Typography variant={'body4'} className=\"text-light-2 mb-4\">\n Footfall trends\n </Typography>\n\n {/* Bar Chart */}\n <ResponsiveContainer width=\"100%\" height={300}>\n <BarChart\n data={data}\n margin={{\n top: 3,\n right: 3,\n bottom: -10,\n left: 3,\n }}\n barSize={24}\n >\n <CartesianGrid strokeDasharray=\"10 10\" />\n <XAxis\n dataKey=\"month\"\n style={{\n font: FONT_FAMILY,\n fontSize: '12px',\n fontWeight: '500',\n color: '#4A4A4A',\n }}\n />\n <YAxis\n className=\"text-4-grey\"\n style={{ fontSize: '12px', fontWeight: '500' }}\n tickFormatter={(val) => {\n if (val > 1000000) {\n return `${val / 1000000}M`\n }\n if (val > 1000) {\n return `${val / 1000}K`\n }\n return val\n }}\n label={{\n value: 'AVG FOOTFALL FOR A 3-MONTH PERIOD',\n angle: -90,\n position: 'insideLeft',\n dy: -5,\n style: {\n textAnchor: 'middle',\n fontSize: '12px',\n fontWeight: '500',\n },\n }}\n />\n <Tooltip content={<CustomTooltipFootfall />} />\n <Bar\n dataKey=\"footfall\"\n fill=\"#6D48EF\"\n radius={[4, 4, 4, 4]}\n style={{ cursor: 'pointer' }}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n}\n\n{\n /* -----------------Cannibalisation Effect------------------ */\n}\ninterface CannibalisationChartSectionProps {\n data: ReportSnippetViewNS.CannibalisationChartData[]\n}\n\nconst CannibalisationChartSection: FC<CannibalisationChartSectionProps> = ({\n data,\n}) => {\n if (!data || data.every((item) => item.cannibalisation === null)) {\n return null\n }\n const formatXAxisLabel = (label: string) => {\n const barCount = data.length\n let maxLength\n\n if (barCount <= 1) {\n maxLength = 50\n } else if (barCount <= 6) {\n maxLength = 22 - (barCount - 1) * 4\n } else {\n maxLength = 6\n }\n\n return label.length > maxLength ? `${label.slice(0, maxLength)}...` : label\n }\n return (\n <div className=\"w-full h-full bg-light-2 border border-neutral-1 p-3 rounded-lg\">\n {/* Section heading */}\n <Typography variant={'body4'} className=\"text-light-2 mb-4\">\n Cannibalisation effects\n </Typography>\n\n {/* Bar Chart */}\n <ResponsiveContainer width=\"100%\" height={300}>\n <BarChart\n data={data}\n margin={{\n top: 3,\n right: 3,\n bottom: 5,\n left: 3,\n }}\n barSize={24}\n >\n <CartesianGrid strokeDasharray=\"10 10\" />\n <XAxis\n dataKey=\"store_name\"\n tickFormatter={formatXAxisLabel}\n tickMargin={10}\n tick={(props) => {\n const { x, y, payload } = props\n return (\n <text x={x} y={y} textAnchor={'end'} fill=\"#666\">\n <tspan x={x} style={{ fontSize: 12 }}>\n {formatXAxisLabel(payload.value)}\n </tspan>\n <tspan\n x={x}\n dy=\"1.5em\"\n style={{\n fontSize: 10,\n whiteSpace: 'nowrap',\n paddingTop: '2px',\n }}\n >\n {data[payload.index].distance + ' kms'}\n </tspan>\n </text>\n )\n }}\n />\n <YAxis\n className=\"text-4-grey\"\n style={{ fontSize: '12px', fontWeight: '500' }}\n tickFormatter={(val) => {\n if (val > 1000000) {\n return `${val / 1000000}M`\n }\n if (val > 1000) {\n return `${val / 1000}K`\n }\n return val\n }}\n label={{\n value: 'CANNIBALISATION IN %',\n angle: -90,\n position: 'insideLeft',\n dy: -5,\n style: {\n textAnchor: 'middle',\n fontSize: '12px',\n fontWeight: '500',\n },\n }}\n domain={[0, 100]}\n />\n <Tooltip content={<CustomTooltipCannibalisation />} />\n <Bar\n dataKey=\"cannibalisation\"\n fill=\"#F93232\"\n radius={[4, 4, 4, 4]}\n style={{ cursor: 'pointer' }}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n}\n\nexport {\n ReportSnippetGalleryView,\n StoreInsightsSection,\n StoreOverviewSection,\n FootfallChartSection,\n CannibalisationChartSection,\n}\n"],"names":["ReportSnippetGalleryView","data","onToggle","isOpen","galleryActiveIndex","setgalleryActiveIndex","isDataAvailable","handleNext","prevIndex","handlePrev","handleThumbnailClick","index","toggleGallery","React","Dialog","X","ChevronLeft","ChevronRight","item","CustomTooltipFootfall","active","payload","label","year","footfall","Typography","CustomTooltipCannibalisation","distance","cannibalisation","StoreInsightsSection","insights","StoreOverviewSection","highlights","trendBoxStyles","trendValueStyles","FootfallChartSection","ResponsiveContainer","BarChart","CartesianGrid","XAxis","FONT_FAMILY","YAxis","val","Tooltip","Bar","CannibalisationChartSection","formatXAxisLabel","barCount","maxLength","props","x","y"],"mappings":"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"}
@@ -7,4 +7,4 @@ export {
7
7
  e as ImageEditorPortalContext,
8
8
  n as useImageEditorPortalContainer
9
9
  };
10
- //# sourceMappingURL=index143.es.js.map
10
+ //# sourceMappingURL=index.es137.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index143.es.js","sources":["../src/components/organisms/image-editor/components/portal-context.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nexport const ImageEditorPortalContext = createContext<HTMLElement | null>(null)\n\nexport function useImageEditorPortalContainer() {\n return useContext(ImageEditorPortalContext)\n}\n"],"names":["ImageEditorPortalContext","createContext","useImageEditorPortalContainer","useContext"],"mappings":";AAEO,MAAMA,IAA2BC,EAAkC,IAAI;AAEvE,SAASC,IAAgC;AAC9C,SAAOC,EAAWH,CAAwB;AAC5C;"}
1
+ {"version":3,"file":"index.es137.js","sources":["../src/components/organisms/image-editor/components/portal-context.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nexport const ImageEditorPortalContext = createContext<HTMLElement | null>(null)\n\nexport function useImageEditorPortalContainer() {\n return useContext(ImageEditorPortalContext)\n}\n"],"names":["ImageEditorPortalContext","createContext","useImageEditorPortalContainer","useContext"],"mappings":";AAEO,MAAMA,IAA2BC,EAAkC,IAAI;AAEvE,SAASC,IAAgC;AAC9C,SAAOC,EAAWH,CAAwB;AAC5C;"}
@@ -1,10 +1,11 @@
1
1
  import t from "react";
2
- import { LayersList as l } from "./index165.es.js";
3
- import { PanelAdjust as o } from "./index166.es.js";
4
- import { PanelCrop as s } from "./index167.es.js";
5
- import { PanelInsert as m } from "./index168.es.js";
6
- import { PanelSelected as c } from "./index169.es.js";
7
- const d = {
2
+ import { LayersList as l } from "./index.es167.js";
3
+ import { PanelAdjust as o } from "./index.es168.js";
4
+ import { PanelCrop as s } from "./index.es169.js";
5
+ import { PanelInsert as m } from "./index.es170.js";
6
+ import { PanelSelected as c } from "./index.es171.js";
7
+ import { SavedLayersList as d } from "./index.es172.js";
8
+ const n = {
8
9
  select: {
9
10
  title: "Adjust & layers",
10
11
  sub: "Adjust the photo, or click a layer"
@@ -15,11 +16,11 @@ const d = {
15
16
  shape: { title: "Shape", sub: "Drag to draw — becomes a layer" },
16
17
  sticker: { title: "Stickers", sub: "Click a sticker to drop it in" }
17
18
  };
18
- function f({ ui: e, engine: a }) {
19
- const r = d[e.mode];
20
- return /* @__PURE__ */ t.createElement("aside", { className: "image-editor-panel shrink-0 touch-pan-y overflow-y-auto overscroll-y-contain bg-light-3 p-4" }, /* @__PURE__ */ t.createElement("h3", { className: "mb-1 text-base font-semibold" }, r.title), /* @__PURE__ */ t.createElement("p", { className: "mb-3.5 text-xs text-light-4" }, r.sub), e.mode === "select" && e.selected == null && /* @__PURE__ */ t.createElement(o, { adjustments: e.adjustments, engine: a }), e.mode === "select" && e.selected != null && /* @__PURE__ */ t.createElement(c, { selected: e.selected, engine: a }), e.mode === "crop" && /* @__PURE__ */ t.createElement(s, { ui: e, engine: a }), (e.mode === "text" || e.mode === "draw" || e.mode === "shape" || e.mode === "sticker") && /* @__PURE__ */ t.createElement(m, { ui: e, engine: a }), e.hasImage && /* @__PURE__ */ t.createElement(l, { ui: e, engine: a }));
19
+ function k({ ui: e, engine: a }) {
20
+ const r = n[e.mode];
21
+ return /* @__PURE__ */ t.createElement("aside", { className: "image-editor-panel shrink-0 touch-pan-y overflow-y-auto overscroll-y-contain bg-light-3 p-4" }, /* @__PURE__ */ t.createElement("h3", { className: "mb-1 text-base font-semibold" }, r.title), /* @__PURE__ */ t.createElement("p", { className: "mb-3.5 text-xs text-light-4" }, r.sub), e.mode === "select" && e.selected == null && /* @__PURE__ */ t.createElement(o, { adjustments: e.adjustments, engine: a }), e.mode === "select" && e.selected != null && /* @__PURE__ */ t.createElement(c, { selected: e.selected, engine: a }), e.mode === "crop" && /* @__PURE__ */ t.createElement(s, { ui: e, engine: a }), (e.mode === "text" || e.mode === "draw" || e.mode === "shape" || e.mode === "sticker") && /* @__PURE__ */ t.createElement(m, { ui: e, engine: a }), /* @__PURE__ */ t.createElement(d, { ui: e, engine: a }), e.hasImage && /* @__PURE__ */ t.createElement(l, { ui: e, engine: a }));
21
22
  }
22
23
  export {
23
- f as Panel
24
+ k as Panel
24
25
  };
25
- //# sourceMappingURL=index144.es.js.map
26
+ //# sourceMappingURL=index.es138.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es138.js","sources":["../src/components/organisms/image-editor/components/panel.tsx"],"sourcesContent":["import React from 'react'\n\nimport {\n ImageEditorEngine,\n ImageEditorMode,\n ImageEditorUiState,\n} from '../image-editor.types'\nimport { LayersList } from './layers-list'\nimport { PanelAdjust } from './panel-adjust'\nimport { PanelCrop } from './panel-crop'\nimport { PanelInsert } from './panel-insert'\nimport { PanelSelected } from './panel-selected'\nimport { SavedLayersList } from './saved-layers-list'\n\ninterface PanelProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n}\n\nconst PANEL_HEADERS: Record<ImageEditorMode, { title: string; sub: string }> = {\n select: {\n title: 'Adjust & layers',\n sub: 'Adjust the photo, or click a layer',\n },\n crop: { title: 'Crop', sub: 'Trim to a region' },\n text: { title: 'Add text', sub: 'Click on the image to place' },\n draw: { title: 'Draw', sub: 'Freehand — becomes a layer' },\n shape: { title: 'Shape', sub: 'Drag to draw — becomes a layer' },\n sticker: { title: 'Stickers', sub: 'Click a sticker to drop it in' },\n}\n\nexport function Panel({ ui, engine }: PanelProps) {\n const header = PANEL_HEADERS[ui.mode]\n\n return (\n <aside className=\"image-editor-panel shrink-0 touch-pan-y overflow-y-auto overscroll-y-contain bg-light-3 p-4\">\n <h3 className=\"mb-1 text-base font-semibold\">{header.title}</h3>\n <p className=\"mb-3.5 text-xs text-light-4\">{header.sub}</p>\n\n {ui.mode === 'select' && ui.selected == null && (\n <PanelAdjust adjustments={ui.adjustments} engine={engine} />\n )}\n {ui.mode === 'select' && ui.selected != null && (\n <PanelSelected selected={ui.selected} engine={engine} />\n )}\n {ui.mode === 'crop' && <PanelCrop ui={ui} engine={engine} />}\n {(ui.mode === 'text' ||\n ui.mode === 'draw' ||\n ui.mode === 'shape' ||\n ui.mode === 'sticker') && <PanelInsert ui={ui} engine={engine} />}\n\n <SavedLayersList ui={ui} engine={engine} />\n\n {ui.hasImage && <LayersList ui={ui} engine={engine} />}\n </aside>\n )\n}\n"],"names":["PANEL_HEADERS","Panel","ui","engine","header","React","PanelAdjust","PanelSelected","PanelCrop","PanelInsert","SavedLayersList","LayersList"],"mappings":";;;;;;;AAmBA,MAAMA,IAAyE;AAAA,EAC7E,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAAA,EAEP,MAAM,EAAE,OAAO,QAAQ,KAAK,mBAAA;AAAA,EAC5B,MAAM,EAAE,OAAO,YAAY,KAAK,8BAAA;AAAA,EAChC,MAAM,EAAE,OAAO,QAAQ,KAAK,6BAAA;AAAA,EAC5B,OAAO,EAAE,OAAO,SAAS,KAAK,iCAAA;AAAA,EAC9B,SAAS,EAAE,OAAO,YAAY,KAAK,gCAAA;AACrC;AAEO,SAASC,EAAM,EAAE,IAAAC,GAAI,QAAAC,KAAsB;AAChD,QAAMC,IAASJ,EAAcE,EAAG,IAAI;AAEpC,yCACG,SAAA,EAAM,WAAU,8FAAA,GACfG,gBAAAA,EAAA,cAAC,QAAG,WAAU,+BAAA,GAAgCD,EAAO,KAAM,GAC3DC,gBAAAA,EAAA,cAAC,KAAA,EAAE,WAAU,iCAA+BD,EAAO,GAAI,GAEtDF,EAAG,SAAS,YAAYA,EAAG,YAAY,QACtCG,gBAAAA,EAAA,cAACC,GAAA,EAAY,aAAaJ,EAAG,aAAa,QAAAC,GAAgB,GAE3DD,EAAG,SAAS,YAAYA,EAAG,YAAY,wCACrCK,GAAA,EAAc,UAAUL,EAAG,UAAU,QAAAC,GAAgB,GAEvDD,EAAG,SAAS,0CAAWM,GAAA,EAAU,IAAAN,GAAQ,QAAAC,EAAA,CAAgB,IACxDD,EAAG,SAAS,UACZA,EAAG,SAAS,UACZA,EAAG,SAAS,WACZA,EAAG,SAAS,cAAcG,gBAAAA,EAAA,cAACI,GAAA,EAAY,IAAAP,GAAQ,QAAAC,GAAgB,GAEjEE,gBAAAA,EAAA,cAACK,GAAA,EAAgB,IAAAR,GAAQ,QAAAC,EAAA,CAAgB,GAExCD,EAAG,4CAAaS,GAAA,EAAW,IAAAT,GAAQ,QAAAC,GAAgB,CACtD;AAEJ;"}
@@ -1,7 +1,7 @@
1
1
  import { ImagePlus as s, Undo2 as i, Redo2 as d, RefreshCcw as b, RotateCcw as p, RotateCw as h, FlipHorizontal2 as E, FlipVertical2 as u, MousePointer2 as w, Crop as f, Type as N, Pen as x, Shapes as v, Sticker as C, ZoomOut as g, ZoomIn as k } from "lucide-react";
2
2
  import e from "react";
3
- import { Button as R } from "./index9.es.js";
4
- import { cn as y } from "./index89.es.js";
3
+ import { Button as R } from "./index.es9.js";
4
+ import { cn as y } from "./index.es89.js";
5
5
  function c({
6
6
  icon: a,
7
7
  label: t,
@@ -170,4 +170,4 @@ function F({ ui: a, engine: t, onOpenFile: r }) {
170
170
  export {
171
171
  F as Ribbon
172
172
  };
173
- //# sourceMappingURL=index145.es.js.map
173
+ //# sourceMappingURL=index.es139.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index145.es.js","sources":["../src/components/organisms/image-editor/components/ribbon.tsx"],"sourcesContent":["import {\n Crop,\n FlipHorizontal2,\n FlipVertical2,\n ImagePlus,\n MousePointer2,\n Pen,\n Redo2,\n RefreshCcw,\n RotateCcw,\n RotateCw,\n Shapes,\n Sticker,\n Type,\n Undo2,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react'\nimport React from 'react'\n\nimport { Button } from '@/components/atoms/button'\nimport { cn } from '@/lib/utils'\n\nimport {\n ImageEditorEngine,\n ImageEditorMode,\n ImageEditorUiState,\n} from '../image-editor.types'\n\ninterface ToolButtonProps {\n icon: React.ReactNode\n label: string\n active?: boolean\n disabled?: boolean\n onClick: () => void\n}\n\nfunction ToolButton({\n icon,\n label,\n active,\n disabled,\n onClick,\n}: ToolButtonProps) {\n return (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={disabled}\n onClick={onClick}\n className={cn(\n 'w-auto flex-col gap-0.5 h-auto min-w-[52px] border-neutral-1 px-2 py-1.5 text-[10.5px]',\n active && 'border-rest-p1 bg-rest-p1 text-white hover:bg-hover-p1'\n )}\n >\n {icon}\n {label}\n </Button>\n )\n}\n\ninterface ZoomControlProps {\n zoomPercent: number\n canZoomIn: boolean\n canZoomOut: boolean\n disabled: boolean\n onZoomIn: () => void\n onZoomOut: () => void\n onZoomReset: () => void\n}\n\nfunction ZoomControl({\n zoomPercent,\n canZoomIn,\n canZoomOut,\n disabled,\n onZoomIn,\n onZoomOut,\n onZoomReset,\n}: ZoomControlProps) {\n return (\n <div className=\"flex items-center gap-0.5 rounded-lg border border-neutral-1 bg-white p-0.5\">\n <button\n type=\"button\"\n title=\"Zoom out\"\n disabled={disabled || !canZoomOut}\n onClick={onZoomOut}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomOut className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n title=\"Reset zoom to fit\"\n disabled={disabled}\n onClick={onZoomReset}\n className=\"min-w-[38px] rounded-md py-1 text-[11px] font-medium text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n {zoomPercent}%\n </button>\n <button\n type=\"button\"\n title=\"Zoom in\"\n disabled={disabled || !canZoomIn}\n onClick={onZoomIn}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomIn className=\"h-4 w-4\" />\n </button>\n </div>\n )\n}\n\nexport interface RibbonProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n onOpenFile: () => void\n}\n\nconst MODE_TOOLS: {\n mode: ImageEditorMode\n label: string\n icon: React.ReactNode\n}[] = [\n {\n mode: 'select',\n label: 'Select',\n icon: <MousePointer2 className=\"h-4 w-4\" />,\n },\n { mode: 'crop', label: 'Crop', icon: <Crop className=\"h-4 w-4\" /> },\n { mode: 'text', label: 'Text', icon: <Type className=\"h-4 w-4\" /> },\n { mode: 'draw', label: 'Draw', icon: <Pen className=\"h-4 w-4\" /> },\n { mode: 'shape', label: 'Shape', icon: <Shapes className=\"h-4 w-4\" /> },\n { mode: 'sticker', label: 'Sticker', icon: <Sticker className=\"h-4 w-4\" /> },\n]\n\nexport function Ribbon({ ui, engine, onOpenFile }: RibbonProps) {\n const disabled = !ui.hasImage\n\n return (\n <div className=\"flex items-stretch gap-2 overflow-x-auto overscroll-x-contain border-b border-neutral-1 bg-light-3 p-2\">\n {ui.canOpenImage && (\n <div className=\"flex items-center gap-1.5 border-r border-neutral-1 pr-2\">\n <ToolButton\n icon={<ImagePlus className=\"h-4 w-4\" />}\n label=\"Open\"\n onClick={onOpenFile}\n />\n </div>\n )}\n\n <div className=\"mr-auto flex items-center gap-1.5\">\n {MODE_TOOLS.map((t) => (\n <ToolButton\n key={t.mode}\n icon={t.icon}\n label={t.label}\n disabled={disabled}\n active={ui.mode === t.mode}\n onClick={() => engine.setMode(t.mode)}\n />\n ))}\n </div>\n\n <div className=\"ml-auto flex items-center\">\n <ZoomControl\n zoomPercent={ui.zoomPercent}\n canZoomIn={ui.canZoomIn}\n canZoomOut={ui.canZoomOut}\n disabled={disabled}\n onZoomIn={engine.zoomIn}\n onZoomOut={engine.zoomOut}\n onZoomReset={engine.zoomToFit}\n />\n </div>\n\n <div className=\"ml-auto flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<Undo2 className=\"h-4 w-4\" />}\n label=\"Undo\"\n disabled={!ui.canUndo}\n onClick={engine.undo}\n />\n <ToolButton\n icon={<Redo2 className=\"h-4 w-4\" />}\n label=\"Redo\"\n disabled={!ui.canRedo}\n onClick={engine.redo}\n />\n <ToolButton\n icon={<RefreshCcw className=\"h-4 w-4\" />}\n label=\"Reset\"\n disabled={!ui.canReset}\n onClick={engine.resetToOriginal}\n />\n </div>\n\n <div className=\"flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<RotateCcw className=\"h-4 w-4\" />}\n label=\"Rotate L\"\n disabled={disabled}\n onClick={() => engine.rotate(-90)}\n />\n <ToolButton\n icon={<RotateCw className=\"h-4 w-4\" />}\n label=\"Rotate R\"\n disabled={disabled}\n onClick={() => engine.rotate(90)}\n />\n <ToolButton\n icon={<FlipHorizontal2 className=\"h-4 w-4\" />}\n label=\"Flip H\"\n disabled={disabled}\n onClick={() => engine.flip(true)}\n />\n <ToolButton\n icon={<FlipVertical2 className=\"h-4 w-4\" />}\n label=\"Flip V\"\n disabled={disabled}\n onClick={() => engine.flip(false)}\n />\n </div>\n </div>\n )\n}\n"],"names":["ToolButton","icon","label","active","disabled","onClick","React","Button","cn","ZoomControl","zoomPercent","canZoomIn","canZoomOut","onZoomIn","onZoomOut","onZoomReset","ZoomOut","ZoomIn","MODE_TOOLS","MousePointer2","Crop","Type","Pen","Shapes","Sticker","Ribbon","ui","engine","onOpenFile","ImagePlus","t","Undo2","Redo2","RefreshCcw","RotateCcw","RotateCw","FlipHorizontal2","FlipVertical2"],"mappings":"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"}
1
+ {"version":3,"file":"index.es139.js","sources":["../src/components/organisms/image-editor/components/ribbon.tsx"],"sourcesContent":["import {\n Crop,\n FlipHorizontal2,\n FlipVertical2,\n ImagePlus,\n MousePointer2,\n Pen,\n Redo2,\n RefreshCcw,\n RotateCcw,\n RotateCw,\n Shapes,\n Sticker,\n Type,\n Undo2,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react'\nimport React from 'react'\n\nimport { Button } from '@/components/atoms/button'\nimport { cn } from '@/lib/utils'\n\nimport {\n ImageEditorEngine,\n ImageEditorMode,\n ImageEditorUiState,\n} from '../image-editor.types'\n\ninterface ToolButtonProps {\n icon: React.ReactNode\n label: string\n active?: boolean\n disabled?: boolean\n onClick: () => void\n}\n\nfunction ToolButton({\n icon,\n label,\n active,\n disabled,\n onClick,\n}: ToolButtonProps) {\n return (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={disabled}\n onClick={onClick}\n className={cn(\n 'w-auto flex-col gap-0.5 h-auto min-w-[52px] border-neutral-1 px-2 py-1.5 text-[10.5px]',\n active && 'border-rest-p1 bg-rest-p1 text-white hover:bg-hover-p1'\n )}\n >\n {icon}\n {label}\n </Button>\n )\n}\n\ninterface ZoomControlProps {\n zoomPercent: number\n canZoomIn: boolean\n canZoomOut: boolean\n disabled: boolean\n onZoomIn: () => void\n onZoomOut: () => void\n onZoomReset: () => void\n}\n\nfunction ZoomControl({\n zoomPercent,\n canZoomIn,\n canZoomOut,\n disabled,\n onZoomIn,\n onZoomOut,\n onZoomReset,\n}: ZoomControlProps) {\n return (\n <div className=\"flex items-center gap-0.5 rounded-lg border border-neutral-1 bg-white p-0.5\">\n <button\n type=\"button\"\n title=\"Zoom out\"\n disabled={disabled || !canZoomOut}\n onClick={onZoomOut}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomOut className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n title=\"Reset zoom to fit\"\n disabled={disabled}\n onClick={onZoomReset}\n className=\"min-w-[38px] rounded-md py-1 text-[11px] font-medium text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n {zoomPercent}%\n </button>\n <button\n type=\"button\"\n title=\"Zoom in\"\n disabled={disabled || !canZoomIn}\n onClick={onZoomIn}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomIn className=\"h-4 w-4\" />\n </button>\n </div>\n )\n}\n\nexport interface RibbonProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n onOpenFile: () => void\n}\n\nconst MODE_TOOLS: {\n mode: ImageEditorMode\n label: string\n icon: React.ReactNode\n}[] = [\n {\n mode: 'select',\n label: 'Select',\n icon: <MousePointer2 className=\"h-4 w-4\" />,\n },\n { mode: 'crop', label: 'Crop', icon: <Crop className=\"h-4 w-4\" /> },\n { mode: 'text', label: 'Text', icon: <Type className=\"h-4 w-4\" /> },\n { mode: 'draw', label: 'Draw', icon: <Pen className=\"h-4 w-4\" /> },\n { mode: 'shape', label: 'Shape', icon: <Shapes className=\"h-4 w-4\" /> },\n { mode: 'sticker', label: 'Sticker', icon: <Sticker className=\"h-4 w-4\" /> },\n]\n\nexport function Ribbon({ ui, engine, onOpenFile }: RibbonProps) {\n const disabled = !ui.hasImage\n\n return (\n <div className=\"flex items-stretch gap-2 overflow-x-auto overscroll-x-contain border-b border-neutral-1 bg-light-3 p-2\">\n {ui.canOpenImage && (\n <div className=\"flex items-center gap-1.5 border-r border-neutral-1 pr-2\">\n <ToolButton\n icon={<ImagePlus className=\"h-4 w-4\" />}\n label=\"Open\"\n onClick={onOpenFile}\n />\n </div>\n )}\n\n <div className=\"mr-auto flex items-center gap-1.5\">\n {MODE_TOOLS.map((t) => (\n <ToolButton\n key={t.mode}\n icon={t.icon}\n label={t.label}\n disabled={disabled}\n active={ui.mode === t.mode}\n onClick={() => engine.setMode(t.mode)}\n />\n ))}\n </div>\n\n <div className=\"ml-auto flex items-center\">\n <ZoomControl\n zoomPercent={ui.zoomPercent}\n canZoomIn={ui.canZoomIn}\n canZoomOut={ui.canZoomOut}\n disabled={disabled}\n onZoomIn={engine.zoomIn}\n onZoomOut={engine.zoomOut}\n onZoomReset={engine.zoomToFit}\n />\n </div>\n\n <div className=\"ml-auto flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<Undo2 className=\"h-4 w-4\" />}\n label=\"Undo\"\n disabled={!ui.canUndo}\n onClick={engine.undo}\n />\n <ToolButton\n icon={<Redo2 className=\"h-4 w-4\" />}\n label=\"Redo\"\n disabled={!ui.canRedo}\n onClick={engine.redo}\n />\n <ToolButton\n icon={<RefreshCcw className=\"h-4 w-4\" />}\n label=\"Reset\"\n disabled={!ui.canReset}\n onClick={engine.resetToOriginal}\n />\n </div>\n\n <div className=\"flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<RotateCcw className=\"h-4 w-4\" />}\n label=\"Rotate L\"\n disabled={disabled}\n onClick={() => engine.rotate(-90)}\n />\n <ToolButton\n icon={<RotateCw className=\"h-4 w-4\" />}\n label=\"Rotate R\"\n disabled={disabled}\n onClick={() => engine.rotate(90)}\n />\n <ToolButton\n icon={<FlipHorizontal2 className=\"h-4 w-4\" />}\n label=\"Flip H\"\n disabled={disabled}\n onClick={() => engine.flip(true)}\n />\n <ToolButton\n icon={<FlipVertical2 className=\"h-4 w-4\" />}\n label=\"Flip V\"\n disabled={disabled}\n onClick={() => engine.flip(false)}\n />\n </div>\n </div>\n )\n}\n"],"names":["ToolButton","icon","label","active","disabled","onClick","React","Button","cn","ZoomControl","zoomPercent","canZoomIn","canZoomOut","onZoomIn","onZoomOut","onZoomReset","ZoomOut","ZoomIn","MODE_TOOLS","MousePointer2","Crop","Type","Pen","Shapes","Sticker","Ribbon","ui","engine","onOpenFile","ImagePlus","t","Undo2","Redo2","RefreshCcw","RotateCcw","RotateCw","FlipHorizontal2","FlipVertical2"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { cn as i } from "./index89.es.js";
1
+ import { cn as i } from "./index.es89.js";
2
2
  import m from "react";
3
3
  function a({
4
4
  className: t,
@@ -16,4 +16,4 @@ function a({
16
16
  export {
17
17
  a as Skeleton
18
18
  };
19
- //# sourceMappingURL=index14.es.js.map
19
+ //# sourceMappingURL=index.es14.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index14.es.js","sources":["../src/components/atoms/skeleton/skeleton.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport React from 'react'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('animate-pulse rounded-md bg-light-4', className)}\n id={props.id}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"],"names":["Skeleton","className","props","React","cn"],"mappings":";;AAGA,SAASA,EAAS;AAAA,EAChB,WAAAC;AAAA,EACA,GAAGC;AACL,GAAyC;AACvC,SACEC,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,uCAAuCH,CAAS;AAAA,MAC9D,IAAIC,EAAM;AAAA,MACT,GAAGA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
1
+ {"version":3,"file":"index.es14.js","sources":["../src/components/atoms/skeleton/skeleton.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport React from 'react'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('animate-pulse rounded-md bg-light-4', className)}\n id={props.id}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"],"names":["Skeleton","className","props","React","cn"],"mappings":";;AAGA,SAASA,EAAS;AAAA,EAChB,WAAAC;AAAA,EACA,GAAGC;AACL,GAAyC;AACvC,SACEC,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,uCAAuCH,CAAS;AAAA,MAC9D,IAAIC,EAAM;AAAA,MACT,GAAGA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1,6 +1,6 @@
1
1
  import { ImageUp as x, Loader2 as d } from "lucide-react";
2
2
  import e, { forwardRef as E } from "react";
3
- import { cn as g } from "./index89.es.js";
3
+ import { cn as g } from "./index.es89.js";
4
4
  const v = {
5
5
  backgroundImage: "linear-gradient(45deg,#e2e0d9 25%,transparent 25%),linear-gradient(-45deg,#e2e0d9 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e2e0d9 75%),linear-gradient(-45deg,transparent 75%,#e2e0d9 75%)",
6
6
  backgroundSize: "22px 22px",
@@ -82,4 +82,4 @@ const v = {
82
82
  export {
83
83
  R as Stage
84
84
  };
85
- //# sourceMappingURL=index146.es.js.map
85
+ //# sourceMappingURL=index.es140.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index146.es.js","sources":["../src/components/organisms/image-editor/components/stage.tsx"],"sourcesContent":["import { ImageUp, Loader2 } from 'lucide-react'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\nimport { ImageEditorUiState } from '../image-editor.types'\n\nexport interface StageHandle {\n stage: HTMLDivElement | null\n cwrap: HTMLDivElement | null\n canvas: HTMLCanvasElement | null\n overlay: HTMLCanvasElement | null\n textEditor: HTMLTextAreaElement | null\n}\n\ninterface StageProps {\n ui: ImageEditorUiState\n onChooseImage: () => void\n onDropFile: (file: File) => void\n}\n\nconst CHECKERBOARD_STYLE: React.CSSProperties = {\n backgroundImage:\n 'linear-gradient(45deg,#e2e0d9 25%,transparent 25%),linear-gradient(-45deg,#e2e0d9 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e2e0d9 75%),linear-gradient(-45deg,transparent 75%,#e2e0d9 75%)',\n backgroundSize: '22px 22px',\n backgroundPosition: '0 0, 0 11px, 11px -11px, -11px 0',\n backgroundColor: '#eceae4',\n}\n\nexport const Stage = forwardRef<StageHandle, StageProps>(function Stage(\n { ui, onChooseImage, onDropFile },\n ref\n) {\n const stageElRef = React.useRef<HTMLDivElement>(null)\n const cwrapElRef = React.useRef<HTMLDivElement>(null)\n const canvasElRef = React.useRef<HTMLCanvasElement>(null)\n const overlayElRef = React.useRef<HTMLCanvasElement>(null)\n const textEditorElRef = React.useRef<HTMLTextAreaElement>(null)\n\n React.useImperativeHandle(ref, () => ({\n stage: stageElRef.current,\n cwrap: cwrapElRef.current,\n canvas: canvasElRef.current,\n overlay: overlayElRef.current,\n textEditor: textEditorElRef.current,\n }))\n\n React.useEffect(() => {\n if (!ui.isEditingText) return\n const el = textEditorElRef.current\n if (!el) return\n let attempts = 0\n let raf = 0\n const tryFocus = () => {\n if (document.activeElement !== el) {\n el.focus()\n if (ui.editingSelectAll) el.select()\n }\n attempts += 1\n if (attempts < 3) raf = requestAnimationFrame(tryFocus)\n }\n tryFocus()\n return () => cancelAnimationFrame(raf)\n }, [ui.isEditingText, ui.editingSelectAll])\n\n return (\n <div\n ref={stageElRef}\n className=\"relative flex flex-1 touch-none overflow-auto overscroll-contain\"\n style={CHECKERBOARD_STYLE}\n onDragOver={(e) => e.preventDefault()}\n onDragEnter={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault()\n if (!ui.canOpenImage) return\n const file = e.dataTransfer.files[0]\n if (file && file.type.startsWith('image/')) onDropFile(file)\n }}\n >\n {!ui.hasImage && !ui.isLoadingImage && ui.canOpenImage && (\n <div className=\"m-auto max-w-[340px] px-8 text-center text-light-4\">\n <ImageUp className=\"mx-auto mb-3 h-14 w-14 stroke-[1.2]\" />\n <h2 className=\"mb-2 text-lg font-semibold text-light-2\">\n Drop a picture in\n </h2>\n <p className=\"text-sm leading-relaxed\">\n Open an image to crop, filter, rotate, and annotate. Text, shapes,\n and drawings become movable layers.\n </p>\n <button\n type=\"button\"\n onClick={onChooseImage}\n className=\"mt-4 inline-block rounded-lg bg-rest-p1 px-5 py-2 text-sm text-white hover:bg-hover-p1\"\n >\n Choose an image\n </button>\n </div>\n )}\n {!ui.hasImage && ui.isLoadingImage && (\n <div className=\"m-auto flex flex-col items-center gap-3 text-light-4\">\n <Loader2 className=\"h-10 w-10 animate-spin\" />\n <p className=\"text-sm\">Loading image…</p>\n </div>\n )}\n <div\n ref={cwrapElRef}\n className={cn(\n 'relative m-auto bg-white shadow-lg',\n !ui.hasImage && 'hidden'\n )}\n >\n <canvas ref={canvasElRef} className=\"image-editor-canvas block\" />\n <canvas\n ref={overlayElRef}\n className=\"image-editor-canvas absolute inset-0\"\n />\n <textarea\n ref={textEditorElRef}\n rows={1}\n className={cn(\n 'absolute z-30 resize-none overflow-hidden rounded-md border border-rest-p1 bg-white px-1.5 py-1 leading-[1.1] shadow-lg outline-none',\n !ui.isEditingText && 'hidden'\n )}\n />\n {ui.isLoadingImage && (\n <div className=\"absolute inset-0 z-40 flex flex-col items-center justify-center gap-3 bg-white text-light-4\">\n <Loader2 className=\"h-10 w-10 animate-spin\" />\n <p className=\"text-sm\">Loading image…</p>\n </div>\n )}\n </div>\n </div>\n )\n})\n"],"names":["CHECKERBOARD_STYLE","Stage","forwardRef","ui","onChooseImage","onDropFile","ref","stageElRef","React","cwrapElRef","canvasElRef","overlayElRef","textEditorElRef","el","attempts","raf","tryFocus","e","file","ImageUp","Loader2","cn"],"mappings":"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"}
1
+ {"version":3,"file":"index.es140.js","sources":["../src/components/organisms/image-editor/components/stage.tsx"],"sourcesContent":["import { ImageUp, Loader2 } from 'lucide-react'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\nimport { ImageEditorUiState } from '../image-editor.types'\n\nexport interface StageHandle {\n stage: HTMLDivElement | null\n cwrap: HTMLDivElement | null\n canvas: HTMLCanvasElement | null\n overlay: HTMLCanvasElement | null\n textEditor: HTMLTextAreaElement | null\n}\n\ninterface StageProps {\n ui: ImageEditorUiState\n onChooseImage: () => void\n onDropFile: (file: File) => void\n}\n\nconst CHECKERBOARD_STYLE: React.CSSProperties = {\n backgroundImage:\n 'linear-gradient(45deg,#e2e0d9 25%,transparent 25%),linear-gradient(-45deg,#e2e0d9 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e2e0d9 75%),linear-gradient(-45deg,transparent 75%,#e2e0d9 75%)',\n backgroundSize: '22px 22px',\n backgroundPosition: '0 0, 0 11px, 11px -11px, -11px 0',\n backgroundColor: '#eceae4',\n}\n\nexport const Stage = forwardRef<StageHandle, StageProps>(function Stage(\n { ui, onChooseImage, onDropFile },\n ref\n) {\n const stageElRef = React.useRef<HTMLDivElement>(null)\n const cwrapElRef = React.useRef<HTMLDivElement>(null)\n const canvasElRef = React.useRef<HTMLCanvasElement>(null)\n const overlayElRef = React.useRef<HTMLCanvasElement>(null)\n const textEditorElRef = React.useRef<HTMLTextAreaElement>(null)\n\n React.useImperativeHandle(ref, () => ({\n stage: stageElRef.current,\n cwrap: cwrapElRef.current,\n canvas: canvasElRef.current,\n overlay: overlayElRef.current,\n textEditor: textEditorElRef.current,\n }))\n\n React.useEffect(() => {\n if (!ui.isEditingText) return\n const el = textEditorElRef.current\n if (!el) return\n let attempts = 0\n let raf = 0\n const tryFocus = () => {\n if (document.activeElement !== el) {\n el.focus()\n if (ui.editingSelectAll) el.select()\n }\n attempts += 1\n if (attempts < 3) raf = requestAnimationFrame(tryFocus)\n }\n tryFocus()\n return () => cancelAnimationFrame(raf)\n }, [ui.isEditingText, ui.editingSelectAll])\n\n return (\n <div\n ref={stageElRef}\n className=\"relative flex flex-1 touch-none overflow-auto overscroll-contain\"\n style={CHECKERBOARD_STYLE}\n onDragOver={(e) => e.preventDefault()}\n onDragEnter={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault()\n if (!ui.canOpenImage) return\n const file = e.dataTransfer.files[0]\n if (file && file.type.startsWith('image/')) onDropFile(file)\n }}\n >\n {!ui.hasImage && !ui.isLoadingImage && ui.canOpenImage && (\n <div className=\"m-auto max-w-[340px] px-8 text-center text-light-4\">\n <ImageUp className=\"mx-auto mb-3 h-14 w-14 stroke-[1.2]\" />\n <h2 className=\"mb-2 text-lg font-semibold text-light-2\">\n Drop a picture in\n </h2>\n <p className=\"text-sm leading-relaxed\">\n Open an image to crop, filter, rotate, and annotate. Text, shapes,\n and drawings become movable layers.\n </p>\n <button\n type=\"button\"\n onClick={onChooseImage}\n className=\"mt-4 inline-block rounded-lg bg-rest-p1 px-5 py-2 text-sm text-white hover:bg-hover-p1\"\n >\n Choose an image\n </button>\n </div>\n )}\n {!ui.hasImage && ui.isLoadingImage && (\n <div className=\"m-auto flex flex-col items-center gap-3 text-light-4\">\n <Loader2 className=\"h-10 w-10 animate-spin\" />\n <p className=\"text-sm\">Loading image…</p>\n </div>\n )}\n <div\n ref={cwrapElRef}\n className={cn(\n 'relative m-auto bg-white shadow-lg',\n !ui.hasImage && 'hidden'\n )}\n >\n <canvas ref={canvasElRef} className=\"image-editor-canvas block\" />\n <canvas\n ref={overlayElRef}\n className=\"image-editor-canvas absolute inset-0\"\n />\n <textarea\n ref={textEditorElRef}\n rows={1}\n className={cn(\n 'absolute z-30 resize-none overflow-hidden rounded-md border border-rest-p1 bg-white px-1.5 py-1 leading-[1.1] shadow-lg outline-none',\n !ui.isEditingText && 'hidden'\n )}\n />\n {ui.isLoadingImage && (\n <div className=\"absolute inset-0 z-40 flex flex-col items-center justify-center gap-3 bg-white text-light-4\">\n <Loader2 className=\"h-10 w-10 animate-spin\" />\n <p className=\"text-sm\">Loading image…</p>\n </div>\n )}\n </div>\n </div>\n )\n})\n"],"names":["CHECKERBOARD_STYLE","Stage","forwardRef","ui","onChooseImage","onDropFile","ref","stageElRef","React","cwrapElRef","canvasElRef","overlayElRef","textEditorElRef","el","attempts","raf","tryFocus","e","file","ImageUp","Loader2","cn"],"mappings":"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"}