geoiq-frontend-ui-kit 2.0.2 → 2.0.3

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 (474) hide show
  1. package/dist/components/atoms/accordion/accordion.d.ts +2 -1
  2. package/dist/components/atoms/accordion/accordion.d.ts.map +1 -1
  3. package/dist/components/atoms/avatar/avatar.d.ts +2 -1
  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 +2 -1
  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 +2 -1
  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 +2 -1
  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 +2 -1
  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 +2 -1
  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 +3 -1
  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 +3 -1
  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 +3 -1
  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 +3 -1
  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 +2 -1
  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 +2 -1
  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 +2 -1
  52. package/dist/components/organisms/dialog/dialog.d.ts.map +1 -1
  53. package/dist/components/organisms/image-editor/components/color-picker.d.ts +3 -1
  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 +2 -1
  56. package/dist/components/organisms/image-editor/components/layers-list.d.ts.map +1 -1
  57. package/dist/components/organisms/image-editor/components/panel-adjust.d.ts +2 -1
  58. package/dist/components/organisms/image-editor/components/panel-adjust.d.ts.map +1 -1
  59. package/dist/components/organisms/image-editor/components/panel-crop.d.ts +2 -1
  60. package/dist/components/organisms/image-editor/components/panel-crop.d.ts.map +1 -1
  61. package/dist/components/organisms/image-editor/components/panel-insert.d.ts +2 -1
  62. package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
  63. package/dist/components/organisms/image-editor/components/panel-selected.d.ts +2 -1
  64. package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
  65. package/dist/components/organisms/image-editor/components/panel.d.ts +2 -1
  66. package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
  67. package/dist/components/organisms/image-editor/components/ribbon.d.ts +2 -1
  68. package/dist/components/organisms/image-editor/components/ribbon.d.ts.map +1 -1
  69. package/dist/components/organisms/image-editor/components/status-bar.d.ts +2 -1
  70. package/dist/components/organisms/image-editor/components/status-bar.d.ts.map +1 -1
  71. package/dist/components/organisms/image-editor/image-editor-modal.d.ts +2 -1
  72. package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
  73. package/dist/components/organisms/sheet/sheet-components.d.ts +2 -2
  74. package/dist/components/organisms/sheet/sheet.d.ts +2 -1
  75. package/dist/components/organisms/sheet/sheet.d.ts.map +1 -1
  76. package/dist/components/organisms/sidebar/sidebar.d.ts +2 -1
  77. package/dist/components/organisms/sidebar/sidebar.d.ts.map +1 -1
  78. package/dist/components/ui/agent-snippet-view/agent-snippet-view.d.ts +1 -1
  79. package/dist/components/ui/agent-snippet-view/agent-snippet-view.d.ts.map +1 -1
  80. package/dist/components/ui/map-marker-hover-card/components/map-cluster-hover-card.d.ts +2 -1
  81. package/dist/components/ui/map-marker-hover-card/components/map-cluster-hover-card.d.ts.map +1 -1
  82. package/dist/components/ui/map-marker-hover-card/components/map-point-hover-card.d.ts +2 -1
  83. package/dist/components/ui/map-marker-hover-card/components/map-point-hover-card.d.ts.map +1 -1
  84. package/dist/components/ui/map-marker-hover-card/map-marker-hover-card.d.ts +2 -1
  85. package/dist/components/ui/map-marker-hover-card/map-marker-hover-card.d.ts.map +1 -1
  86. package/dist/components/ui/request-credits-view/component/request-credit-dialog.d.ts.map +1 -1
  87. package/dist/components/ui/star-score/star-score.d.ts +2 -1
  88. package/dist/components/ui/star-score/star-score.d.ts.map +1 -1
  89. package/dist/components/unstyled/calendar/calendar.d.ts +1 -1
  90. package/dist/components/unstyled/calendar/calendar.d.ts.map +1 -1
  91. package/dist/components/unstyled/command/index.d.ts +2 -2
  92. package/dist/components/unstyled/command/index.d.ts.map +1 -1
  93. package/dist/components/unstyled/date-picker/date-picker.d.ts +2 -2
  94. package/dist/components/unstyled/date-picker/date-picker.d.ts.map +1 -1
  95. package/dist/components/unstyled/hover-card/hover-card.d.ts +2 -1
  96. package/dist/components/unstyled/hover-card/hover-card.d.ts.map +1 -1
  97. package/dist/components/unstyled/popover/popover.d.ts +2 -1
  98. package/dist/components/unstyled/popover/popover.d.ts.map +1 -1
  99. package/dist/components/unstyled/table/table.d.ts +2 -2
  100. package/dist/components/unstyled/table/table.d.ts.map +1 -1
  101. package/dist/index.es.js +88 -88
  102. package/dist/{index.es10.js → index10.es.js} +3 -3
  103. package/dist/{index.es10.js.map → index10.es.js.map} +1 -1
  104. package/dist/{index.es102.js → index100.es.js} +1 -1
  105. package/dist/{index.es102.js.map → index100.es.js.map} +1 -1
  106. package/dist/{index.es126.js → index101.es.js} +1 -1
  107. package/dist/{index.es126.js.map → index101.es.js.map} +1 -1
  108. package/dist/{index.es99.js → index102.es.js} +2 -2
  109. package/dist/index102.es.js.map +1 -0
  110. package/dist/{index.es100.js → index103.es.js} +2 -2
  111. package/dist/{index.es100.js.map → index103.es.js.map} +1 -1
  112. package/dist/{index.es101.js → index104.es.js} +1 -1
  113. package/dist/{index.es101.js.map → index104.es.js.map} +1 -1
  114. package/dist/{index.es104.js → index105.es.js} +1 -1
  115. package/dist/{index.es104.js.map → index105.es.js.map} +1 -1
  116. package/dist/{index.es119.js → index106.es.js} +1 -1
  117. package/dist/{index.es119.js.map → index106.es.js.map} +1 -1
  118. package/dist/{index.es112.js → index107.es.js} +5 -5
  119. package/dist/{index.es112.js.map → index107.es.js.map} +1 -1
  120. package/dist/{index.es103.js → index108.es.js} +1 -1
  121. package/dist/{index.es103.js.map → index108.es.js.map} +1 -1
  122. package/dist/{index.es136.js → index109.es.js} +1 -1
  123. package/dist/{index.es136.js.map → index109.es.js.map} +1 -1
  124. package/dist/{index.es11.js → index11.es.js} +4 -4
  125. package/dist/{index.es11.js.map → index11.es.js.map} +1 -1
  126. package/dist/{index.es127.js → index110.es.js} +4 -4
  127. package/dist/{index.es127.js.map → index110.es.js.map} +1 -1
  128. package/dist/{index.es128.js → index111.es.js} +4 -4
  129. package/dist/{index.es128.js.map → index111.es.js.map} +1 -1
  130. package/dist/{index.es129.js → index112.es.js} +5 -5
  131. package/dist/{index.es129.js.map → index112.es.js.map} +1 -1
  132. package/dist/{index.es130.js → index113.es.js} +2 -2
  133. package/dist/{index.es130.js.map → index113.es.js.map} +1 -1
  134. package/dist/{index.es131.js → index114.es.js} +3 -3
  135. package/dist/{index.es131.js.map → index114.es.js.map} +1 -1
  136. package/dist/{index.es123.js → index115.es.js} +2 -2
  137. package/dist/{index.es123.js.map → index115.es.js.map} +1 -1
  138. package/dist/{index.es124.js → index116.es.js} +6 -6
  139. package/dist/{index.es124.js.map → index116.es.js.map} +1 -1
  140. package/dist/{index.es115.js → index117.es.js} +1 -1
  141. package/dist/{index.es115.js.map → index117.es.js.map} +1 -1
  142. package/dist/{index.es116.js → index118.es.js} +7 -7
  143. package/dist/{index.es116.js.map → index118.es.js.map} +1 -1
  144. package/dist/{index.es117.js → index119.es.js} +1 -1
  145. package/dist/{index.es117.js.map → index119.es.js.map} +1 -1
  146. package/dist/{index.es12.js → index12.es.js} +3 -3
  147. package/dist/{index.es12.js.map → index12.es.js.map} +1 -1
  148. package/dist/{index.es118.js → index120.es.js} +13 -13
  149. package/dist/{index.es118.js.map → index120.es.js.map} +1 -1
  150. package/dist/{index.es105.js → index121.es.js} +4 -4
  151. package/dist/{index.es105.js.map → index121.es.js.map} +1 -1
  152. package/dist/{index.es106.js → index122.es.js} +3 -3
  153. package/dist/{index.es106.js.map → index122.es.js.map} +1 -1
  154. package/dist/{index.es107.js → index123.es.js} +3 -3
  155. package/dist/{index.es107.js.map → index123.es.js.map} +1 -1
  156. package/dist/{index.es108.js → index124.es.js} +3 -3
  157. package/dist/{index.es108.js.map → index124.es.js.map} +1 -1
  158. package/dist/{index.es109.js → index125.es.js} +10 -10
  159. package/dist/{index.es109.js.map → index125.es.js.map} +1 -1
  160. package/dist/{index.es110.js → index126.es.js} +10 -10
  161. package/dist/{index.es110.js.map → index126.es.js.map} +1 -1
  162. package/dist/{index.es111.js → index127.es.js} +5 -5
  163. package/dist/{index.es111.js.map → index127.es.js.map} +1 -1
  164. package/dist/{index.es113.js → index128.es.js} +1 -1
  165. package/dist/{index.es113.js.map → index128.es.js.map} +1 -1
  166. package/dist/{index.es114.js → index129.es.js} +5 -5
  167. package/dist/{index.es114.js.map → index129.es.js.map} +1 -1
  168. package/dist/{index.es13.js → index13.es.js} +3 -3
  169. package/dist/{index.es13.js.map → index13.es.js.map} +1 -1
  170. package/dist/{index.es135.js → index130.es.js} +3 -3
  171. package/dist/{index.es135.js.map → index130.es.js.map} +1 -1
  172. package/dist/{index.es98.js → index131.es.js} +5 -5
  173. package/dist/index131.es.js.map +1 -0
  174. package/dist/{index.es132.js → index132.es.js} +3 -3
  175. package/dist/{index.es132.js.map → index132.es.js.map} +1 -1
  176. package/dist/{index.es120.js → index133.es.js} +1 -1
  177. package/dist/{index.es120.js.map → index133.es.js.map} +1 -1
  178. package/dist/{index.es134.js → index134.es.js} +1 -1
  179. package/dist/{index.es134.js.map → index134.es.js.map} +1 -1
  180. package/dist/{index.es125.js → index135.es.js} +3 -3
  181. package/dist/{index.es125.js.map → index135.es.js.map} +1 -1
  182. package/dist/{index.es97.js → index136.es.js} +1 -1
  183. package/dist/index136.es.js.map +1 -0
  184. package/dist/{index.es139.js → index137.es.js} +2 -2
  185. package/dist/{index.es139.js.map → index137.es.js.map} +1 -1
  186. package/dist/{index.es156.js → index138.es.js} +1 -1
  187. package/dist/{index.es156.js.map → index138.es.js.map} +1 -1
  188. package/dist/{index.es158.js → index139.es.js} +3 -3
  189. package/dist/{index.es158.js.map → index139.es.js.map} +1 -1
  190. package/dist/{index.es14.js → index14.es.js} +2 -2
  191. package/dist/{index.es14.js.map → index14.es.js.map} +1 -1
  192. package/dist/{index.es159.js → index140.es.js} +1 -1
  193. package/dist/{index.es159.js.map → index140.es.js.map} +1 -1
  194. package/dist/{index.es160.js → index141.es.js} +1 -1
  195. package/dist/{index.es160.js.map → index141.es.js.map} +1 -1
  196. package/dist/{index.es161.js → index142.es.js} +1 -1
  197. package/dist/{index.es161.js.map → index142.es.js.map} +1 -1
  198. package/dist/{index.es140.js → index143.es.js} +1 -1
  199. package/dist/{index.es140.js.map → index143.es.js.map} +1 -1
  200. package/dist/{index.es141.js → index144.es.js} +6 -6
  201. package/dist/{index.es141.js.map → index144.es.js.map} +1 -1
  202. package/dist/{index.es142.js → index145.es.js} +3 -3
  203. package/dist/{index.es142.js.map → index145.es.js.map} +1 -1
  204. package/dist/{index.es143.js → index146.es.js} +2 -2
  205. package/dist/{index.es143.js.map → index146.es.js.map} +1 -1
  206. package/dist/{index.es144.js → index147.es.js} +1 -1
  207. package/dist/{index.es144.js.map → index147.es.js.map} +1 -1
  208. package/dist/{index.es145.js → index148.es.js} +1 -1
  209. package/dist/{index.es145.js.map → index148.es.js.map} +1 -1
  210. package/dist/{index.es146.js → index149.es.js} +2 -2
  211. package/dist/{index.es146.js.map → index149.es.js.map} +1 -1
  212. package/dist/{index.es15.js → index15.es.js} +3 -3
  213. package/dist/{index.es15.js.map → index15.es.js.map} +1 -1
  214. package/dist/{index.es147.js → index150.es.js} +3 -3
  215. package/dist/{index.es147.js.map → index150.es.js.map} +1 -1
  216. package/dist/{index.es148.js → index151.es.js} +3 -3
  217. package/dist/{index.es148.js.map → index151.es.js.map} +1 -1
  218. package/dist/{index.es149.js → index152.es.js} +5 -5
  219. package/dist/{index.es149.js.map → index152.es.js.map} +1 -1
  220. package/dist/{index.es150.js → index153.es.js} +3 -3
  221. package/dist/{index.es150.js.map → index153.es.js.map} +1 -1
  222. package/dist/{index.es151.js → index154.es.js} +2 -2
  223. package/dist/{index.es151.js.map → index154.es.js.map} +1 -1
  224. package/dist/{index.es152.js → index155.es.js} +4 -4
  225. package/dist/{index.es152.js.map → index155.es.js.map} +1 -1
  226. package/dist/{index.es153.js → index156.es.js} +6 -6
  227. package/dist/{index.es153.js.map → index156.es.js.map} +1 -1
  228. package/dist/{index.es154.js → index157.es.js} +5 -5
  229. package/dist/{index.es154.js.map → index157.es.js.map} +1 -1
  230. package/dist/{index.es155.js → index158.es.js} +9 -9
  231. package/dist/{index.es155.js.map → index158.es.js.map} +1 -1
  232. package/dist/{index.es157.js → index159.es.js} +1 -1
  233. package/dist/{index.es157.js.map → index159.es.js.map} +1 -1
  234. package/dist/{index.es16.js → index16.es.js} +8 -8
  235. package/dist/{index.es16.js.map → index16.es.js.map} +1 -1
  236. package/dist/{index.es137.js → index160.es.js} +1 -1
  237. package/dist/{index.es137.js.map → index160.es.js.map} +1 -1
  238. package/dist/{index.es138.js → index161.es.js} +1 -1
  239. package/dist/{index.es138.js.map → index161.es.js.map} +1 -1
  240. package/dist/{index.es162.js → index162.es.js} +1 -1
  241. package/dist/{index.es162.js.map → index162.es.js.map} +1 -1
  242. package/dist/{index.es163.js → index163.es.js} +6 -6
  243. package/dist/{index.es163.js.map → index163.es.js.map} +1 -1
  244. package/dist/{index.es164.js → index164.es.js} +2 -2
  245. package/dist/{index.es164.js.map → index164.es.js.map} +1 -1
  246. package/dist/{index.es165.js → index165.es.js} +2 -2
  247. package/dist/{index.es165.js.map → index165.es.js.map} +1 -1
  248. package/dist/{index.es166.js → index166.es.js} +4 -4
  249. package/dist/{index.es166.js.map → index166.es.js.map} +1 -1
  250. package/dist/{index.es167.js → index167.es.js} +4 -4
  251. package/dist/{index.es167.js.map → index167.es.js.map} +1 -1
  252. package/dist/{index.es168.js → index168.es.js} +8 -8
  253. package/dist/{index.es168.js.map → index168.es.js.map} +1 -1
  254. package/dist/{index.es169.js → index169.es.js} +8 -8
  255. package/dist/{index.es169.js.map → index169.es.js.map} +1 -1
  256. package/dist/{index.es17.js → index17.es.js} +3 -3
  257. package/dist/{index.es17.js.map → index17.es.js.map} +1 -1
  258. package/dist/{index.es170.js → index170.es.js} +19 -19
  259. package/dist/{index.es170.js.map → index170.es.js.map} +1 -1
  260. package/dist/{index.es171.js → index171.es.js} +4 -4
  261. package/dist/{index.es171.js.map → index171.es.js.map} +1 -1
  262. package/dist/{index.es172.js → index172.es.js} +2 -2
  263. package/dist/{index.es172.js.map → index172.es.js.map} +1 -1
  264. package/dist/{index.es173.js → index173.es.js} +6 -6
  265. package/dist/{index.es173.js.map → index173.es.js.map} +1 -1
  266. package/dist/{index.es174.js → index174.es.js} +17 -16
  267. package/dist/{index.es174.js.map → index174.es.js.map} +1 -1
  268. package/dist/{index.es175.js → index175.es.js} +27 -26
  269. package/dist/{index.es175.js.map → index175.es.js.map} +1 -1
  270. package/dist/{index.es176.js → index176.es.js} +13 -12
  271. package/dist/{index.es176.js.map → index176.es.js.map} +1 -1
  272. package/dist/{index.es177.js → index177.es.js} +5 -5
  273. package/dist/{index.es177.js.map → index177.es.js.map} +1 -1
  274. package/dist/{index.es178.js → index178.es.js} +27 -26
  275. package/dist/{index.es178.js.map → index178.es.js.map} +1 -1
  276. package/dist/{index.es179.js → index179.es.js} +30 -29
  277. package/dist/{index.es179.js.map → index179.es.js.map} +1 -1
  278. package/dist/{index.es18.js → index18.es.js} +2 -2
  279. package/dist/{index.es18.js.map → index18.es.js.map} +1 -1
  280. package/dist/{index.es180.js → index180.es.js} +1 -1
  281. package/dist/{index.es180.js.map → index180.es.js.map} +1 -1
  282. package/dist/{index.es181.js → index181.es.js} +2 -2
  283. package/dist/{index.es181.js.map → index181.es.js.map} +1 -1
  284. package/dist/{index.es182.js → index182.es.js} +1 -1
  285. package/dist/{index.es182.js.map → index182.es.js.map} +1 -1
  286. package/dist/{index.es19.js → index19.es.js} +4 -4
  287. package/dist/{index.es19.js.map → index19.es.js.map} +1 -1
  288. package/dist/{index.es2.js → index2.es.js} +26 -26
  289. package/dist/index2.es.js.map +1 -0
  290. package/dist/{index.es20.js → index20.es.js} +5 -5
  291. package/dist/{index.es20.js.map → index20.es.js.map} +1 -1
  292. package/dist/{index.es21.js → index21.es.js} +6 -6
  293. package/dist/{index.es21.js.map → index21.es.js.map} +1 -1
  294. package/dist/{index.es22.js → index22.es.js} +2 -2
  295. package/dist/{index.es22.js.map → index22.es.js.map} +1 -1
  296. package/dist/{index.es23.js → index23.es.js} +7 -7
  297. package/dist/{index.es23.js.map → index23.es.js.map} +1 -1
  298. package/dist/{index.es24.js → index24.es.js} +7 -7
  299. package/dist/{index.es24.js.map → index24.es.js.map} +1 -1
  300. package/dist/{index.es25.js → index25.es.js} +3 -3
  301. package/dist/{index.es25.js.map → index25.es.js.map} +1 -1
  302. package/dist/{index.es26.js → index26.es.js} +2 -2
  303. package/dist/{index.es26.js.map → index26.es.js.map} +1 -1
  304. package/dist/{index.es27.js → index27.es.js} +7 -7
  305. package/dist/{index.es27.js.map → index27.es.js.map} +1 -1
  306. package/dist/{index.es28.js → index28.es.js} +9 -9
  307. package/dist/{index.es28.js.map → index28.es.js.map} +1 -1
  308. package/dist/{index.es29.js → index29.es.js} +5 -5
  309. package/dist/{index.es29.js.map → index29.es.js.map} +1 -1
  310. package/dist/{index.es3.js → index3.es.js} +3 -3
  311. package/dist/{index.es3.js.map → index3.es.js.map} +1 -1
  312. package/dist/{index.es30.js → index30.es.js} +3 -3
  313. package/dist/{index.es30.js.map → index30.es.js.map} +1 -1
  314. package/dist/{index.es31.js → index31.es.js} +1 -1
  315. package/dist/{index.es31.js.map → index31.es.js.map} +1 -1
  316. package/dist/{index.es32.js → index32.es.js} +2 -2
  317. package/dist/{index.es32.js.map → index32.es.js.map} +1 -1
  318. package/dist/{index.es33.js → index33.es.js} +3 -3
  319. package/dist/{index.es33.js.map → index33.es.js.map} +1 -1
  320. package/dist/{index.es34.js → index34.es.js} +5 -5
  321. package/dist/{index.es34.js.map → index34.es.js.map} +1 -1
  322. package/dist/{index.es35.js → index35.es.js} +6 -6
  323. package/dist/{index.es35.js.map → index35.es.js.map} +1 -1
  324. package/dist/{index.es36.js → index36.es.js} +5 -5
  325. package/dist/{index.es36.js.map → index36.es.js.map} +1 -1
  326. package/dist/{index.es37.js → index37.es.js} +6 -6
  327. package/dist/{index.es37.js.map → index37.es.js.map} +1 -1
  328. package/dist/{index.es38.js → index38.es.js} +2 -2
  329. package/dist/{index.es38.js.map → index38.es.js.map} +1 -1
  330. package/dist/{index.es39.js → index39.es.js} +3 -3
  331. package/dist/{index.es39.js.map → index39.es.js.map} +1 -1
  332. package/dist/{index.es4.js → index4.es.js} +2 -2
  333. package/dist/{index.es4.js.map → index4.es.js.map} +1 -1
  334. package/dist/{index.es40.js → index40.es.js} +4 -4
  335. package/dist/{index.es40.js.map → index40.es.js.map} +1 -1
  336. package/dist/{index.es41.js → index41.es.js} +5 -5
  337. package/dist/{index.es41.js.map → index41.es.js.map} +1 -1
  338. package/dist/{index.es42.js → index42.es.js} +4 -4
  339. package/dist/{index.es42.js.map → index42.es.js.map} +1 -1
  340. package/dist/{index.es43.js → index43.es.js} +2 -2
  341. package/dist/{index.es43.js.map → index43.es.js.map} +1 -1
  342. package/dist/{index.es44.js → index44.es.js} +2 -2
  343. package/dist/{index.es44.js.map → index44.es.js.map} +1 -1
  344. package/dist/{index.es45.js → index45.es.js} +5 -5
  345. package/dist/{index.es45.js.map → index45.es.js.map} +1 -1
  346. package/dist/{index.es46.js → index46.es.js} +9 -9
  347. package/dist/{index.es46.js.map → index46.es.js.map} +1 -1
  348. package/dist/{index.es47.js → index47.es.js} +7 -7
  349. package/dist/{index.es47.js.map → index47.es.js.map} +1 -1
  350. package/dist/{index.es48.js → index48.es.js} +10 -10
  351. package/dist/{index.es48.js.map → index48.es.js.map} +1 -1
  352. package/dist/{index.es49.js → index49.es.js} +2 -2
  353. package/dist/{index.es49.js.map → index49.es.js.map} +1 -1
  354. package/dist/{index.es5.js → index5.es.js} +2 -2
  355. package/dist/{index.es5.js.map → index5.es.js.map} +1 -1
  356. package/dist/{index.es50.js → index50.es.js} +1 -1
  357. package/dist/{index.es50.js.map → index50.es.js.map} +1 -1
  358. package/dist/{index.es51.js → index51.es.js} +2 -2
  359. package/dist/{index.es51.js.map → index51.es.js.map} +1 -1
  360. package/dist/{index.es52.js → index52.es.js} +3 -3
  361. package/dist/{index.es52.js.map → index52.es.js.map} +1 -1
  362. package/dist/{index.es53.js → index53.es.js} +7 -7
  363. package/dist/{index.es53.js.map → index53.es.js.map} +1 -1
  364. package/dist/{index.es54.js → index54.es.js} +4 -4
  365. package/dist/{index.es54.js.map → index54.es.js.map} +1 -1
  366. package/dist/{index.es55.js → index55.es.js} +5 -5
  367. package/dist/{index.es55.js.map → index55.es.js.map} +1 -1
  368. package/dist/{index.es56.js → index56.es.js} +3 -3
  369. package/dist/{index.es56.js.map → index56.es.js.map} +1 -1
  370. package/dist/{index.es57.js → index57.es.js} +9 -9
  371. package/dist/{index.es57.js.map → index57.es.js.map} +1 -1
  372. package/dist/{index.es58.js → index58.es.js} +4 -3
  373. package/dist/{index.es58.js.map → index58.es.js.map} +1 -1
  374. package/dist/{index.es59.js → index59.es.js} +2 -2
  375. package/dist/{index.es59.js.map → index59.es.js.map} +1 -1
  376. package/dist/{index.es6.js → index6.es.js} +2 -2
  377. package/dist/{index.es6.js.map → index6.es.js.map} +1 -1
  378. package/dist/{index.es60.js → index60.es.js} +3 -3
  379. package/dist/{index.es60.js.map → index60.es.js.map} +1 -1
  380. package/dist/{index.es61.js → index61.es.js} +2 -2
  381. package/dist/{index.es61.js.map → index61.es.js.map} +1 -1
  382. package/dist/{index.es62.js → index62.es.js} +2 -2
  383. package/dist/{index.es62.js.map → index62.es.js.map} +1 -1
  384. package/dist/{index.es63.js → index63.es.js} +2 -2
  385. package/dist/{index.es63.js.map → index63.es.js.map} +1 -1
  386. package/dist/{index.es64.js → index64.es.js} +3 -3
  387. package/dist/{index.es64.js.map → index64.es.js.map} +1 -1
  388. package/dist/{index.es65.js → index65.es.js} +3 -3
  389. package/dist/{index.es65.js.map → index65.es.js.map} +1 -1
  390. package/dist/{index.es66.js → index66.es.js} +2 -2
  391. package/dist/{index.es66.js.map → index66.es.js.map} +1 -1
  392. package/dist/{index.es67.js → index67.es.js} +3 -3
  393. package/dist/{index.es67.js.map → index67.es.js.map} +1 -1
  394. package/dist/{index.es68.js → index68.es.js} +3 -3
  395. package/dist/{index.es68.js.map → index68.es.js.map} +1 -1
  396. package/dist/{index.es69.js → index69.es.js} +6 -6
  397. package/dist/{index.es69.js.map → index69.es.js.map} +1 -1
  398. package/dist/{index.es7.js → index7.es.js} +2 -2
  399. package/dist/{index.es7.js.map → index7.es.js.map} +1 -1
  400. package/dist/{index.es70.js → index70.es.js} +6 -6
  401. package/dist/{index.es70.js.map → index70.es.js.map} +1 -1
  402. package/dist/{index.es71.js → index71.es.js} +4 -4
  403. package/dist/{index.es71.js.map → index71.es.js.map} +1 -1
  404. package/dist/{index.es72.js → index72.es.js} +8 -8
  405. package/dist/{index.es72.js.map → index72.es.js.map} +1 -1
  406. package/dist/{index.es73.js → index73.es.js} +5 -5
  407. package/dist/{index.es73.js.map → index73.es.js.map} +1 -1
  408. package/dist/{index.es74.js → index74.es.js} +1 -1
  409. package/dist/{index.es74.js.map → index74.es.js.map} +1 -1
  410. package/dist/{index.es75.js → index75.es.js} +1 -1
  411. package/dist/{index.es75.js.map → index75.es.js.map} +1 -1
  412. package/dist/{index.es76.js → index76.es.js} +1 -1
  413. package/dist/{index.es76.js.map → index76.es.js.map} +1 -1
  414. package/dist/{index.es77.js → index77.es.js} +1 -1
  415. package/dist/{index.es77.js.map → index77.es.js.map} +1 -1
  416. package/dist/{index.es78.js → index78.es.js} +2 -2
  417. package/dist/{index.es78.js.map → index78.es.js.map} +1 -1
  418. package/dist/{index.es79.js → index79.es.js} +1 -1
  419. package/dist/{index.es79.js.map → index79.es.js.map} +1 -1
  420. package/dist/{index.es8.js → index8.es.js} +3 -3
  421. package/dist/{index.es8.js.map → index8.es.js.map} +1 -1
  422. package/dist/{index.es80.js → index80.es.js} +3 -3
  423. package/dist/{index.es80.js.map → index80.es.js.map} +1 -1
  424. package/dist/{index.es81.js → index81.es.js} +4 -4
  425. package/dist/{index.es81.js.map → index81.es.js.map} +1 -1
  426. package/dist/{index.es82.js → index82.es.js} +1 -1
  427. package/dist/{index.es82.js.map → index82.es.js.map} +1 -1
  428. package/dist/{index.es83.js → index83.es.js} +1 -1
  429. package/dist/{index.es83.js.map → index83.es.js.map} +1 -1
  430. package/dist/{index.es84.js.map → index84.es.js.map} +1 -1
  431. package/dist/{index.es85.js → index85.es.js} +2 -2
  432. package/dist/{index.es85.js.map → index85.es.js.map} +1 -1
  433. package/dist/{index.es86.js → index86.es.js} +2 -2
  434. package/dist/{index.es86.js.map → index86.es.js.map} +1 -1
  435. package/dist/{index.es87.js → index87.es.js} +1 -1
  436. package/dist/{index.es87.js.map → index87.es.js.map} +1 -1
  437. package/dist/index88.es.js +5 -0
  438. package/dist/index88.es.js.map +1 -0
  439. package/dist/{index.es89.js → index89.es.js} +1 -1
  440. package/dist/{index.es89.js.map → index89.es.js.map} +1 -1
  441. package/dist/{index.es9.js → index9.es.js} +4 -4
  442. package/dist/{index.es9.js.map → index9.es.js.map} +1 -1
  443. package/dist/{index.es90.js → index90.es.js} +2 -2
  444. package/dist/{index.es90.js.map → index90.es.js.map} +1 -1
  445. package/dist/{index.es91.js → index91.es.js} +3 -3
  446. package/dist/{index.es91.js.map → index91.es.js.map} +1 -1
  447. package/dist/{index.es92.js → index92.es.js} +1 -1
  448. package/dist/{index.es92.js.map → index92.es.js.map} +1 -1
  449. package/dist/{index.es93.js → index93.es.js} +1 -1
  450. package/dist/{index.es93.js.map → index93.es.js.map} +1 -1
  451. package/dist/{index.es94.js → index94.es.js} +1 -1
  452. package/dist/{index.es94.js.map → index94.es.js.map} +1 -1
  453. package/dist/{index.es95.js → index95.es.js} +1 -1
  454. package/dist/{index.es95.js.map → index95.es.js.map} +1 -1
  455. package/dist/{index.es96.js → index96.es.js} +1 -1
  456. package/dist/{index.es96.js.map → index96.es.js.map} +1 -1
  457. package/dist/{index.es122.js → index97.es.js} +1 -1
  458. package/dist/index97.es.js.map +1 -0
  459. package/dist/{index.es133.js → index98.es.js} +1 -1
  460. package/dist/index98.es.js.map +1 -0
  461. package/dist/{index.es121.js → index99.es.js} +1 -1
  462. package/dist/index99.es.js.map +1 -0
  463. package/dist/styles.css +11 -17
  464. package/package.json +2 -1
  465. package/dist/index.es121.js.map +0 -1
  466. package/dist/index.es122.js.map +0 -1
  467. package/dist/index.es133.js.map +0 -1
  468. package/dist/index.es2.js.map +0 -1
  469. package/dist/index.es88.js +0 -5
  470. package/dist/index.es88.js.map +0 -1
  471. package/dist/index.es97.js.map +0 -1
  472. package/dist/index.es98.js.map +0 -1
  473. package/dist/index.es99.js.map +0 -1
  474. package/dist/{index.es84.js → index84.es.js} +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.es149.js","sources":["../src/components/organisms/image-editor/engine/geometry.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange, resetAdjValues } from './state.js'\nimport { render, syncCanvasSize, normRect, layerBounds } from './rendering.js'\nimport { setMode } from './mode.js'\n\nfunction centerDelta(state, L, mapCenter) {\n const b = layerBounds(state, L)\n const oldCenter = { x: b.x + b.w / 2, y: b.y + b.h / 2 }\n const newCenter = mapCenter(oldCenter)\n return { x: newCenter.x - oldCenter.x, y: newCenter.y - oldCenter.y }\n}\n\nexport function rotate(state, deg) {\n pushHistory(state)\n const rad = (deg * Math.PI) / 180,\n ow = state.sourceCanvas.width,\n oh = state.sourceCanvas.height,\n nw = oh,\n nh = ow\n const tmp = document.createElement('canvas')\n tmp.width = nw\n tmp.height = nh\n const t = tmp.getContext('2d')\n t.translate(nw / 2, nh / 2)\n t.rotate(rad)\n t.drawImage(state.sourceCanvas, -ow / 2, -oh / 2)\n state.sourceCanvas.width = nw\n state.sourceCanvas.height = nh\n state.sourceCanvas.getContext('2d').drawImage(tmp, 0, 0)\n const rot = (x, y) => {\n const dx = x - ow / 2,\n dy = y - oh / 2\n return {\n x: dx * Math.cos(rad) - dy * Math.sin(rad) + nw / 2,\n y: dx * Math.sin(rad) + dy * Math.cos(rad) + nh / 2,\n }\n }\n state.layers.forEach((L) => {\n if (L.type === 'text' || L.type === 'shape' || L.type === 'sticker') {\n const delta = centerDelta(state, L, (c) => rot(c.x, c.y))\n L.x += delta.x\n L.y += delta.y\n L.rotation = ((((L.rotation || 0) + deg) % 360) + 360) % 360\n } else if (L.type === 'stroke') {\n L.points = L.points.map((pt) => rot(pt.x, pt.y))\n }\n })\n syncCanvasSize(state)\n render(state)\n state.statusText = deg < 0 ? 'Rotated left' : 'Rotated right'\n emitChange(state)\n}\n\nexport function flip(state, hz) {\n pushHistory(state)\n const w = state.sourceCanvas.width,\n h = state.sourceCanvas.height\n const tmp = document.createElement('canvas')\n tmp.width = w\n tmp.height = h\n const t = tmp.getContext('2d')\n if (hz) {\n t.translate(w, 0)\n t.scale(-1, 1)\n } else {\n t.translate(0, h)\n t.scale(1, -1)\n }\n t.drawImage(state.sourceCanvas, 0, 0)\n state.sourceCanvas.getContext('2d').clearRect(0, 0, w, h)\n state.sourceCanvas.getContext('2d').drawImage(tmp, 0, 0)\n const fx = (x) => (hz ? w - x : x),\n fy = (y) => (hz ? y : h - y)\n state.layers.forEach((L) => {\n if (L.type === 'text' || L.type === 'shape' || L.type === 'sticker') {\n const delta = centerDelta(state, L, (c) => ({ x: fx(c.x), y: fy(c.y) }))\n L.x += delta.x\n L.y += delta.y\n L.rotation = (360 - ((L.rotation || 0) % 360)) % 360\n if (hz) L.flipH = !L.flipH\n else L.flipV = !L.flipV\n } else if (L.type === 'stroke') {\n L.points = L.points.map((pt) => ({ x: fx(pt.x), y: fy(pt.y) }))\n }\n })\n render(state)\n state.statusText = hz ? 'Flipped horizontally' : 'Flipped vertically'\n emitChange(state)\n}\n\nexport function applyCrop(state) {\n if (\n !state.cropRect ||\n Math.abs(state.cropRect.w) < 4 ||\n Math.abs(state.cropRect.h) < 4\n ) {\n state.statusText = 'Draw a crop box first'\n state.notify()\n return\n }\n pushHistory(state)\n const r = normRect(state.cropRect)\n const tmp = document.createElement('canvas')\n tmp.width = Math.round(r.w)\n tmp.height = Math.round(r.h)\n tmp\n .getContext('2d')\n .drawImage(state.sourceCanvas, r.x, r.y, r.w, r.h, 0, 0, r.w, r.h)\n state.sourceCanvas.width = tmp.width\n state.sourceCanvas.height = tmp.height\n state.sourceCanvas.getContext('2d').drawImage(tmp, 0, 0)\n state.layers.forEach((L) => {\n if (L.type === 'text' || L.type === 'shape' || L.type === 'sticker') {\n L.x -= r.x\n L.y -= r.y\n } else if (L.type === 'stroke') {\n L.points = L.points.map((p) => ({ x: p.x - r.x, y: p.y - r.y }))\n }\n })\n state.cropRect = null\n setMode(state, 'select')\n syncCanvasSize(state)\n render(state)\n state.statusText = 'Cropped'\n emitChange(state)\n}\n\nexport function cancelCrop(state) {\n setMode(state, 'select')\n}\n\nexport function setCropRatio(state, v) {\n state.cropRatio = v\n state.notify()\n}\n\nexport function resetToOriginal(state) {\n if (!state.originalCanvas) return\n pushHistory(state)\n state.sourceCanvas.width = state.originalCanvas.width\n state.sourceCanvas.height = state.originalCanvas.height\n state.sourceCanvas.getContext('2d').drawImage(state.originalCanvas, 0, 0)\n state.layers = []\n state.selectedId = null\n state.zoom = 1\n resetAdjValues(state)\n syncCanvasSize(state)\n render(state)\n state.statusText = 'Reset to original'\n emitChange(state)\n}\n"],"names":["centerDelta","state","L","mapCenter","b","layerBounds","oldCenter","newCenter","rotate","deg","pushHistory","rad","ow","oh","nw","nh","tmp","t","rot","x","y","dx","dy","delta","c","pt","syncCanvasSize","render","emitChange","flip","hz","w","h","fx","fy","applyCrop","r","normRect","p","setMode","cancelCrop","setCropRatio","v","resetToOriginal","resetAdjValues"],"mappings":"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"}
1
+ {"version":3,"file":"index152.es.js","sources":["../src/components/organisms/image-editor/engine/geometry.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange, resetAdjValues } from './state.js'\nimport { render, syncCanvasSize, normRect, layerBounds } from './rendering.js'\nimport { setMode } from './mode.js'\n\nfunction centerDelta(state, L, mapCenter) {\n const b = layerBounds(state, L)\n const oldCenter = { x: b.x + b.w / 2, y: b.y + b.h / 2 }\n const newCenter = mapCenter(oldCenter)\n return { x: newCenter.x - oldCenter.x, y: newCenter.y - oldCenter.y }\n}\n\nexport function rotate(state, deg) {\n pushHistory(state)\n const rad = (deg * Math.PI) / 180,\n ow = state.sourceCanvas.width,\n oh = state.sourceCanvas.height,\n nw = oh,\n nh = ow\n const tmp = document.createElement('canvas')\n tmp.width = nw\n tmp.height = nh\n const t = tmp.getContext('2d')\n t.translate(nw / 2, nh / 2)\n t.rotate(rad)\n t.drawImage(state.sourceCanvas, -ow / 2, -oh / 2)\n state.sourceCanvas.width = nw\n state.sourceCanvas.height = nh\n state.sourceCanvas.getContext('2d').drawImage(tmp, 0, 0)\n const rot = (x, y) => {\n const dx = x - ow / 2,\n dy = y - oh / 2\n return {\n x: dx * Math.cos(rad) - dy * Math.sin(rad) + nw / 2,\n y: dx * Math.sin(rad) + dy * Math.cos(rad) + nh / 2,\n }\n }\n state.layers.forEach((L) => {\n if (L.type === 'text' || L.type === 'shape' || L.type === 'sticker') {\n const delta = centerDelta(state, L, (c) => rot(c.x, c.y))\n L.x += delta.x\n L.y += delta.y\n L.rotation = ((((L.rotation || 0) + deg) % 360) + 360) % 360\n } else if (L.type === 'stroke') {\n L.points = L.points.map((pt) => rot(pt.x, pt.y))\n }\n })\n syncCanvasSize(state)\n render(state)\n state.statusText = deg < 0 ? 'Rotated left' : 'Rotated right'\n emitChange(state)\n}\n\nexport function flip(state, hz) {\n pushHistory(state)\n const w = state.sourceCanvas.width,\n h = state.sourceCanvas.height\n const tmp = document.createElement('canvas')\n tmp.width = w\n tmp.height = h\n const t = tmp.getContext('2d')\n if (hz) {\n t.translate(w, 0)\n t.scale(-1, 1)\n } else {\n t.translate(0, h)\n t.scale(1, -1)\n }\n t.drawImage(state.sourceCanvas, 0, 0)\n state.sourceCanvas.getContext('2d').clearRect(0, 0, w, h)\n state.sourceCanvas.getContext('2d').drawImage(tmp, 0, 0)\n const fx = (x) => (hz ? w - x : x),\n fy = (y) => (hz ? y : h - y)\n state.layers.forEach((L) => {\n if (L.type === 'text' || L.type === 'shape' || L.type === 'sticker') {\n const delta = centerDelta(state, L, (c) => ({ x: fx(c.x), y: fy(c.y) }))\n L.x += delta.x\n L.y += delta.y\n L.rotation = (360 - ((L.rotation || 0) % 360)) % 360\n if (hz) L.flipH = !L.flipH\n else L.flipV = !L.flipV\n } else if (L.type === 'stroke') {\n L.points = L.points.map((pt) => ({ x: fx(pt.x), y: fy(pt.y) }))\n }\n })\n render(state)\n state.statusText = hz ? 'Flipped horizontally' : 'Flipped vertically'\n emitChange(state)\n}\n\nexport function applyCrop(state) {\n if (\n !state.cropRect ||\n Math.abs(state.cropRect.w) < 4 ||\n Math.abs(state.cropRect.h) < 4\n ) {\n state.statusText = 'Draw a crop box first'\n state.notify()\n return\n }\n pushHistory(state)\n const r = normRect(state.cropRect)\n const tmp = document.createElement('canvas')\n tmp.width = Math.round(r.w)\n tmp.height = Math.round(r.h)\n tmp\n .getContext('2d')\n .drawImage(state.sourceCanvas, r.x, r.y, r.w, r.h, 0, 0, r.w, r.h)\n state.sourceCanvas.width = tmp.width\n state.sourceCanvas.height = tmp.height\n state.sourceCanvas.getContext('2d').drawImage(tmp, 0, 0)\n state.layers.forEach((L) => {\n if (L.type === 'text' || L.type === 'shape' || L.type === 'sticker') {\n L.x -= r.x\n L.y -= r.y\n } else if (L.type === 'stroke') {\n L.points = L.points.map((p) => ({ x: p.x - r.x, y: p.y - r.y }))\n }\n })\n state.cropRect = null\n setMode(state, 'select')\n syncCanvasSize(state)\n render(state)\n state.statusText = 'Cropped'\n emitChange(state)\n}\n\nexport function cancelCrop(state) {\n setMode(state, 'select')\n}\n\nexport function setCropRatio(state, v) {\n state.cropRatio = v\n state.notify()\n}\n\nexport function resetToOriginal(state) {\n if (!state.originalCanvas) return\n pushHistory(state)\n state.sourceCanvas.width = state.originalCanvas.width\n state.sourceCanvas.height = state.originalCanvas.height\n state.sourceCanvas.getContext('2d').drawImage(state.originalCanvas, 0, 0)\n state.layers = []\n state.selectedId = null\n state.zoom = 1\n resetAdjValues(state)\n syncCanvasSize(state)\n render(state)\n state.statusText = 'Reset to original'\n emitChange(state)\n}\n"],"names":["centerDelta","state","L","mapCenter","b","layerBounds","oldCenter","newCenter","rotate","deg","pushHistory","rad","ow","oh","nw","nh","tmp","t","rot","x","y","dx","dy","delta","c","pt","syncCanvasSize","render","emitChange","flip","hz","w","h","fx","fy","applyCrop","r","normRect","p","setMode","cancelCrop","setCropRatio","v","resetToOriginal","resetAdjValues"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { renderOverlay as r } from "./index.es147.js";
2
- import { commitTextEdit as l } from "./index.es151.js";
1
+ import { renderOverlay as r } from "./index150.es.js";
2
+ import { commitTextEdit as l } from "./index154.es.js";
3
3
  const t = {
4
4
  select: "Select — click a layer to move it",
5
5
  crop: "Crop — drag a box",
@@ -32,4 +32,4 @@ export {
32
32
  u as selectLayer,
33
33
  p as setMode
34
34
  };
35
- //# sourceMappingURL=index.es150.js.map
35
+ //# sourceMappingURL=index153.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es150.js","sources":["../src/components/organisms/image-editor/engine/mode.js"],"sourcesContent":["import { renderOverlay } from './rendering.js'\nimport { commitTextEdit } from './text-editor.js'\n\nconst STATUS_BY_MODE = {\n select: 'Select — click a layer to move it',\n crop: 'Crop — drag a box',\n text: 'Text tool',\n draw: 'Draw tool',\n shape: 'Shape tool',\n sticker: 'Sticker tool',\n}\n\nfunction pencilCursor(color) {\n const stroke = encodeURIComponent(color)\n return `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='${stroke}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m18 2 4 4-14 14H4v-4L18 2z'/%3E%3Cpath d='m14.5 5.5 4 4'/%3E%3C/svg%3E\") 2 22, crosshair`\n}\n\nconst CURSOR_BY_MODE = {\n select: 'default',\n crop: 'crosshair',\n text: 'text',\n shape: 'crosshair',\n sticker: 'default',\n}\n\nexport function applyModeCursor(state) {\n if (!state.overlayEl) return\n state.overlayEl.style.cursor =\n state.mode === 'draw'\n ? pencilCursor(state.drawColor)\n : CURSOR_BY_MODE[state.mode] || 'default'\n}\n\nexport function setMode(state, m) {\n if (state.mode !== 'select') commitTextEdit(state)\n state.mode = m\n state.pendingShape = null\n state.cropRect = null\n applyModeCursor(state)\n renderOverlay(state)\n state.statusText = STATUS_BY_MODE[m]\n state.notify()\n}\n\nexport function selectLayer(state, id) {\n state.selectedId = id\n renderOverlay(state)\n state.notify()\n}\n"],"names":["STATUS_BY_MODE","pencilCursor","color","CURSOR_BY_MODE","applyModeCursor","state","setMode","m","commitTextEdit","renderOverlay","selectLayer","id"],"mappings":";;AAGA,MAAMA,IAAiB;AAAA,EACrB,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AACX;AAEA,SAASC,EAAaC,GAAO;AAE3B,SAAO,oIADQ,mBAAmBA,CAAK,CAC0G;AACnJ;AAEA,MAAMC,IAAiB;AAAA,EACrB,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AACX;AAEO,SAASC,EAAgBC,GAAO;AACrC,EAAKA,EAAM,cACXA,EAAM,UAAU,MAAM,SACpBA,EAAM,SAAS,SACXJ,EAAaI,EAAM,SAAS,IAC5BF,EAAeE,EAAM,IAAI,KAAK;AACtC;AAEO,SAASC,EAAQD,GAAOE,GAAG;AAChC,EAAIF,EAAM,SAAS,YAAUG,EAAeH,CAAK,GACjDA,EAAM,OAAOE,GACbF,EAAM,eAAe,MACrBA,EAAM,WAAW,MACjBD,EAAgBC,CAAK,GACrBI,EAAcJ,CAAK,GACnBA,EAAM,aAAaL,EAAeO,CAAC,GACnCF,EAAM,OAAM;AACd;AAEO,SAASK,EAAYL,GAAOM,GAAI;AACrC,EAAAN,EAAM,aAAaM,GACnBF,EAAcJ,CAAK,GACnBA,EAAM,OAAM;AACd;"}
1
+ {"version":3,"file":"index153.es.js","sources":["../src/components/organisms/image-editor/engine/mode.js"],"sourcesContent":["import { renderOverlay } from './rendering.js'\nimport { commitTextEdit } from './text-editor.js'\n\nconst STATUS_BY_MODE = {\n select: 'Select — click a layer to move it',\n crop: 'Crop — drag a box',\n text: 'Text tool',\n draw: 'Draw tool',\n shape: 'Shape tool',\n sticker: 'Sticker tool',\n}\n\nfunction pencilCursor(color) {\n const stroke = encodeURIComponent(color)\n return `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='${stroke}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m18 2 4 4-14 14H4v-4L18 2z'/%3E%3Cpath d='m14.5 5.5 4 4'/%3E%3C/svg%3E\") 2 22, crosshair`\n}\n\nconst CURSOR_BY_MODE = {\n select: 'default',\n crop: 'crosshair',\n text: 'text',\n shape: 'crosshair',\n sticker: 'default',\n}\n\nexport function applyModeCursor(state) {\n if (!state.overlayEl) return\n state.overlayEl.style.cursor =\n state.mode === 'draw'\n ? pencilCursor(state.drawColor)\n : CURSOR_BY_MODE[state.mode] || 'default'\n}\n\nexport function setMode(state, m) {\n if (state.mode !== 'select') commitTextEdit(state)\n state.mode = m\n state.pendingShape = null\n state.cropRect = null\n applyModeCursor(state)\n renderOverlay(state)\n state.statusText = STATUS_BY_MODE[m]\n state.notify()\n}\n\nexport function selectLayer(state, id) {\n state.selectedId = id\n renderOverlay(state)\n state.notify()\n}\n"],"names":["STATUS_BY_MODE","pencilCursor","color","CURSOR_BY_MODE","applyModeCursor","state","setMode","m","commitTextEdit","renderOverlay","selectLayer","id"],"mappings":";;AAGA,MAAMA,IAAiB;AAAA,EACrB,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AACX;AAEA,SAASC,EAAaC,GAAO;AAE3B,SAAO,oIADQ,mBAAmBA,CAAK,CAC0G;AACnJ;AAEA,MAAMC,IAAiB;AAAA,EACrB,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AACX;AAEO,SAASC,EAAgBC,GAAO;AACrC,EAAKA,EAAM,cACXA,EAAM,UAAU,MAAM,SACpBA,EAAM,SAAS,SACXJ,EAAaI,EAAM,SAAS,IAC5BF,EAAeE,EAAM,IAAI,KAAK;AACtC;AAEO,SAASC,EAAQD,GAAOE,GAAG;AAChC,EAAIF,EAAM,SAAS,YAAUG,EAAeH,CAAK,GACjDA,EAAM,OAAOE,GACbF,EAAM,eAAe,MACrBA,EAAM,WAAW,MACjBD,EAAgBC,CAAK,GACrBI,EAAcJ,CAAK,GACnBA,EAAM,aAAaL,EAAeO,CAAC,GACnCF,EAAM,OAAM;AACd;AAEO,SAASK,EAAYL,GAAOM,GAAI;AACrC,EAAAN,EAAM,aAAaM,GACnBF,EAAcJ,CAAK,GACnBA,EAAM,OAAM;AACd;"}
@@ -1,4 +1,4 @@
1
- import { keepingFixed as E, render as x, layerBounds as d, renderOverlay as y } from "./index.es147.js";
1
+ import { keepingFixed as E, render as x, layerBounds as d, renderOverlay as y } from "./index150.es.js";
2
2
  const u = 16, r = 28;
3
3
  function c(e) {
4
4
  const i = e.textEditorEl;
@@ -25,4 +25,4 @@ export {
25
25
  f as commitTextEdit,
26
26
  p as openTextEditor
27
27
  };
28
- //# sourceMappingURL=index.es151.js.map
28
+ //# sourceMappingURL=index154.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es151.js","sources":["../src/components/organisms/image-editor/engine/text-editor.js"],"sourcesContent":["import {\n keepingFixed,\n layerBounds,\n render,\n renderOverlay,\n} from './rendering.js'\n\nconst EDITOR_FONT_SIZE = 16\nconst EDITOR_MIN_HEIGHT = 28\n\n// Grow the box to fit what is typed; no-op while hidden (scrollHeight is 0).\nexport function autoGrowTextEditor(state) {\n const el = state.textEditorEl\n if (!el || el.offsetParent === null) return\n el.style.height = 'auto'\n el.style.height = Math.max(EDITOR_MIN_HEIGHT, el.scrollHeight) + 'px'\n}\n\nexport function openTextEditor(state, L, selectAll) {\n state.editingLayer = L\n state.editingSelectAll = !!selectAll\n const b = layerBounds(state, L),\n r = state.overlayEl.getBoundingClientRect(),\n wr = state.overlayEl.parentElement.getBoundingClientRect()\n state.textEditorEl.value = L.text === 'Text' ? '' : L.text\n state.textEditorEl.style.left =\n r.left - wr.left + b.x * state.viewScale + 'px'\n state.textEditorEl.style.top = r.top - wr.top + b.y * state.viewScale + 'px'\n state.textEditorEl.style.width = Math.max(60, b.w * state.viewScale) + 'px'\n state.textEditorEl.style.height =\n Math.max(EDITOR_MIN_HEIGHT, b.h * state.viewScale) + 'px'\n state.textEditorEl.style.fontFamily = L.font\n state.textEditorEl.style.fontSize = EDITOR_FONT_SIZE + 'px'\n state.textEditorEl.style.color = L.color\n L._editing = true\n renderOverlay(state)\n state.notify()\n // notify() is what un-hides the textarea, so measure on the next frame.\n requestAnimationFrame(() => autoGrowTextEditor(state))\n}\n\nexport function commitTextEdit(state) {\n if (!state.editingLayer) return\n const L = state.editingLayer\n // Longer text means taller bounds; hold the top-left corner.\n keepingFixed(state, L, { x: L.x, y: L.y }, () => {\n L.text =\n state.textEditorEl.value.trim() === '' ? 'Text' : state.textEditorEl.value\n })\n L._editing = false\n state.editingLayer = null\n render(state)\n state.notify()\n}\n\n// Committing alone leaves the hidden textarea focused, keeping the keyboard up.\nexport function blurTextEditor(state) {\n if (!state.editingLayer) return\n commitTextEdit(state)\n if (state.textEditorEl) state.textEditorEl.blur()\n}\n"],"names":["EDITOR_FONT_SIZE","EDITOR_MIN_HEIGHT","autoGrowTextEditor","state","el","openTextEditor","L","selectAll","b","layerBounds","r","wr","renderOverlay","commitTextEdit","keepingFixed","render","blurTextEditor"],"mappings":";AAOA,MAAMA,IAAmB,IACnBC,IAAoB;AAGnB,SAASC,EAAmBC,GAAO;AACxC,QAAMC,IAAKD,EAAM;AACjB,EAAI,CAACC,KAAMA,EAAG,iBAAiB,SAC/BA,EAAG,MAAM,SAAS,QAClBA,EAAG,MAAM,SAAS,KAAK,IAAIH,GAAmBG,EAAG,YAAY,IAAI;AACnE;AAEO,SAASC,EAAeF,GAAOG,GAAGC,GAAW;AAClD,EAAAJ,EAAM,eAAeG,GACrBH,EAAM,mBAAmB,CAAC,CAACI;AAC3B,QAAMC,IAAIC,EAAYN,GAAOG,CAAC,GAC5BI,IAAIP,EAAM,UAAU,sBAAqB,GACzCQ,IAAKR,EAAM,UAAU,cAAc,sBAAqB;AAC1D,EAAAA,EAAM,aAAa,QAAQG,EAAE,SAAS,SAAS,KAAKA,EAAE,MACtDH,EAAM,aAAa,MAAM,OACvBO,EAAE,OAAOC,EAAG,OAAOH,EAAE,IAAIL,EAAM,YAAY,MAC7CA,EAAM,aAAa,MAAM,MAAMO,EAAE,MAAMC,EAAG,MAAMH,EAAE,IAAIL,EAAM,YAAY,MACxEA,EAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,IAAIK,EAAE,IAAIL,EAAM,SAAS,IAAI,MACvEA,EAAM,aAAa,MAAM,SACvB,KAAK,IAAIF,GAAmBO,EAAE,IAAIL,EAAM,SAAS,IAAI,MACvDA,EAAM,aAAa,MAAM,aAAaG,EAAE,MACxCH,EAAM,aAAa,MAAM,WAAWH,IAAmB,MACvDG,EAAM,aAAa,MAAM,QAAQG,EAAE,OACnCA,EAAE,WAAW,IACbM,EAAcT,CAAK,GACnBA,EAAM,OAAM,GAEZ,sBAAsB,MAAMD,EAAmBC,CAAK,CAAC;AACvD;AAEO,SAASU,EAAeV,GAAO;AACpC,MAAI,CAACA,EAAM,aAAc;AACzB,QAAMG,IAAIH,EAAM;AAEhB,EAAAW,EAAaX,GAAOG,GAAG,EAAE,GAAGA,EAAE,GAAG,GAAGA,EAAE,EAAC,GAAI,MAAM;AAC/C,IAAAA,EAAE,OACAH,EAAM,aAAa,MAAM,KAAI,MAAO,KAAK,SAASA,EAAM,aAAa;AAAA,EACzE,CAAC,GACDG,EAAE,WAAW,IACbH,EAAM,eAAe,MACrBY,EAAOZ,CAAK,GACZA,EAAM,OAAM;AACd;AAGO,SAASa,EAAeb,GAAO;AACpC,EAAKA,EAAM,iBACXU,EAAeV,CAAK,GAChBA,EAAM,gBAAcA,EAAM,aAAa,KAAI;AACjD;"}
1
+ {"version":3,"file":"index154.es.js","sources":["../src/components/organisms/image-editor/engine/text-editor.js"],"sourcesContent":["import {\n keepingFixed,\n layerBounds,\n render,\n renderOverlay,\n} from './rendering.js'\n\nconst EDITOR_FONT_SIZE = 16\nconst EDITOR_MIN_HEIGHT = 28\n\n// Grow the box to fit what is typed; no-op while hidden (scrollHeight is 0).\nexport function autoGrowTextEditor(state) {\n const el = state.textEditorEl\n if (!el || el.offsetParent === null) return\n el.style.height = 'auto'\n el.style.height = Math.max(EDITOR_MIN_HEIGHT, el.scrollHeight) + 'px'\n}\n\nexport function openTextEditor(state, L, selectAll) {\n state.editingLayer = L\n state.editingSelectAll = !!selectAll\n const b = layerBounds(state, L),\n r = state.overlayEl.getBoundingClientRect(),\n wr = state.overlayEl.parentElement.getBoundingClientRect()\n state.textEditorEl.value = L.text === 'Text' ? '' : L.text\n state.textEditorEl.style.left =\n r.left - wr.left + b.x * state.viewScale + 'px'\n state.textEditorEl.style.top = r.top - wr.top + b.y * state.viewScale + 'px'\n state.textEditorEl.style.width = Math.max(60, b.w * state.viewScale) + 'px'\n state.textEditorEl.style.height =\n Math.max(EDITOR_MIN_HEIGHT, b.h * state.viewScale) + 'px'\n state.textEditorEl.style.fontFamily = L.font\n state.textEditorEl.style.fontSize = EDITOR_FONT_SIZE + 'px'\n state.textEditorEl.style.color = L.color\n L._editing = true\n renderOverlay(state)\n state.notify()\n // notify() is what un-hides the textarea, so measure on the next frame.\n requestAnimationFrame(() => autoGrowTextEditor(state))\n}\n\nexport function commitTextEdit(state) {\n if (!state.editingLayer) return\n const L = state.editingLayer\n // Longer text means taller bounds; hold the top-left corner.\n keepingFixed(state, L, { x: L.x, y: L.y }, () => {\n L.text =\n state.textEditorEl.value.trim() === '' ? 'Text' : state.textEditorEl.value\n })\n L._editing = false\n state.editingLayer = null\n render(state)\n state.notify()\n}\n\n// Committing alone leaves the hidden textarea focused, keeping the keyboard up.\nexport function blurTextEditor(state) {\n if (!state.editingLayer) return\n commitTextEdit(state)\n if (state.textEditorEl) state.textEditorEl.blur()\n}\n"],"names":["EDITOR_FONT_SIZE","EDITOR_MIN_HEIGHT","autoGrowTextEditor","state","el","openTextEditor","L","selectAll","b","layerBounds","r","wr","renderOverlay","commitTextEdit","keepingFixed","render","blurTextEditor"],"mappings":";AAOA,MAAMA,IAAmB,IACnBC,IAAoB;AAGnB,SAASC,EAAmBC,GAAO;AACxC,QAAMC,IAAKD,EAAM;AACjB,EAAI,CAACC,KAAMA,EAAG,iBAAiB,SAC/BA,EAAG,MAAM,SAAS,QAClBA,EAAG,MAAM,SAAS,KAAK,IAAIH,GAAmBG,EAAG,YAAY,IAAI;AACnE;AAEO,SAASC,EAAeF,GAAOG,GAAGC,GAAW;AAClD,EAAAJ,EAAM,eAAeG,GACrBH,EAAM,mBAAmB,CAAC,CAACI;AAC3B,QAAMC,IAAIC,EAAYN,GAAOG,CAAC,GAC5BI,IAAIP,EAAM,UAAU,sBAAqB,GACzCQ,IAAKR,EAAM,UAAU,cAAc,sBAAqB;AAC1D,EAAAA,EAAM,aAAa,QAAQG,EAAE,SAAS,SAAS,KAAKA,EAAE,MACtDH,EAAM,aAAa,MAAM,OACvBO,EAAE,OAAOC,EAAG,OAAOH,EAAE,IAAIL,EAAM,YAAY,MAC7CA,EAAM,aAAa,MAAM,MAAMO,EAAE,MAAMC,EAAG,MAAMH,EAAE,IAAIL,EAAM,YAAY,MACxEA,EAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,IAAIK,EAAE,IAAIL,EAAM,SAAS,IAAI,MACvEA,EAAM,aAAa,MAAM,SACvB,KAAK,IAAIF,GAAmBO,EAAE,IAAIL,EAAM,SAAS,IAAI,MACvDA,EAAM,aAAa,MAAM,aAAaG,EAAE,MACxCH,EAAM,aAAa,MAAM,WAAWH,IAAmB,MACvDG,EAAM,aAAa,MAAM,QAAQG,EAAE,OACnCA,EAAE,WAAW,IACbM,EAAcT,CAAK,GACnBA,EAAM,OAAM,GAEZ,sBAAsB,MAAMD,EAAmBC,CAAK,CAAC;AACvD;AAEO,SAASU,EAAeV,GAAO;AACpC,MAAI,CAACA,EAAM,aAAc;AACzB,QAAMG,IAAIH,EAAM;AAEhB,EAAAW,EAAaX,GAAOG,GAAG,EAAE,GAAGA,EAAE,GAAG,GAAGA,EAAE,EAAC,GAAI,MAAM;AAC/C,IAAAA,EAAE,OACAH,EAAM,aAAa,MAAM,KAAI,MAAO,KAAK,SAASA,EAAM,aAAa;AAAA,EACzE,CAAC,GACDG,EAAE,WAAW,IACbH,EAAM,eAAe,MACrBY,EAAOZ,CAAK,GACZA,EAAM,OAAM;AACd;AAGO,SAASa,EAAeb,GAAO;AACpC,EAAKA,EAAM,iBACXU,EAAeV,CAAK,GAChBA,EAAM,gBAAcA,EAAM,aAAa,KAAI;AACjD;"}
@@ -1,6 +1,6 @@
1
- import { pushHistory as t } from "./index.es148.js";
2
- import { emitChange as d } from "./index.es146.js";
3
- import { render as a } from "./index.es147.js";
1
+ import { pushHistory as t } from "./index151.es.js";
2
+ import { emitChange as d } from "./index149.es.js";
3
+ import { render as a } from "./index150.es.js";
4
4
  function h(o, n) {
5
5
  return new Promise((i, c) => {
6
6
  const r = o.stickerImageCache.get(n);
@@ -38,4 +38,4 @@ export {
38
38
  l as addSticker,
39
39
  h as loadStickerImage
40
40
  };
41
- //# sourceMappingURL=index.es152.js.map
41
+ //# sourceMappingURL=index155.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es152.js","sources":["../src/components/organisms/image-editor/engine/stickers.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange } from './state.js'\nimport { render } from './rendering.js'\n\nexport function loadStickerImage(state, src) {\n return new Promise((resolve, reject) => {\n const cached = state.stickerImageCache.get(src)\n if (cached && cached.complete && cached.naturalWidth) {\n resolve(cached)\n return\n }\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => {\n state.stickerImageCache.set(src, img)\n resolve(img)\n }\n img.onerror = reject\n img.src = src\n })\n}\n\nexport function addSticker(state, src) {\n loadStickerImage(state, src)\n .then((img) => {\n pushHistory(state)\n const w = state.sourceCanvas.width * 0.25\n const h = w * (img.naturalHeight / img.naturalWidth || 1)\n const L = {\n id: state.nextId++,\n type: 'sticker',\n src,\n x: (state.sourceCanvas.width - w) / 2,\n y: (state.sourceCanvas.height - h) / 2,\n w,\n h,\n rotation: 0,\n flipH: false,\n flipV: false,\n }\n state.layers.push(L)\n render(state)\n state.mode = 'select'\n state.selectedId = L.id\n state.statusText = 'Sticker added'\n emitChange(state)\n })\n .catch(() => {\n state.statusText = 'Could not load that sticker (CORS?)'\n state.notify()\n })\n}\n"],"names":["loadStickerImage","state","src","resolve","reject","cached","img","addSticker","pushHistory","w","h","L","render","emitChange"],"mappings":";;;AAIO,SAASA,EAAiBC,GAAOC,GAAK;AAC3C,SAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,UAAMC,IAASJ,EAAM,kBAAkB,IAAIC,CAAG;AAC9C,QAAIG,KAAUA,EAAO,YAAYA,EAAO,cAAc;AACpD,MAAAF,EAAQE,CAAM;AACd;AAAA,IACF;AACA,UAAMC,IAAM,IAAI,MAAK;AACrB,IAAAA,EAAI,cAAc,aAClBA,EAAI,SAAS,MAAM;AACjB,MAAAL,EAAM,kBAAkB,IAAIC,GAAKI,CAAG,GACpCH,EAAQG,CAAG;AAAA,IACb,GACAA,EAAI,UAAUF,GACdE,EAAI,MAAMJ;AAAA,EACZ,CAAC;AACH;AAEO,SAASK,EAAWN,GAAOC,GAAK;AACrC,EAAAF,EAAiBC,GAAOC,CAAG,EACxB,KAAK,CAACI,MAAQ;AACb,IAAAE,EAAYP,CAAK;AACjB,UAAMQ,IAAIR,EAAM,aAAa,QAAQ,MAC/BS,IAAID,KAAKH,EAAI,gBAAgBA,EAAI,gBAAgB,IACjDK,IAAI;AAAA,MACR,IAAIV,EAAM;AAAA,MACV,MAAM;AAAA,MACN,KAAAC;AAAA,MACA,IAAID,EAAM,aAAa,QAAQQ,KAAK;AAAA,MACpC,IAAIR,EAAM,aAAa,SAASS,KAAK;AAAA,MACrC,GAAAD;AAAA,MACA,GAAAC;AAAA,MACA,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,IACf;AACM,IAAAT,EAAM,OAAO,KAAKU,CAAC,GACnBC,EAAOX,CAAK,GACZA,EAAM,OAAO,UACbA,EAAM,aAAaU,EAAE,IACrBV,EAAM,aAAa,iBACnBY,EAAWZ,CAAK;AAAA,EAClB,CAAC,EACA,MAAM,MAAM;AACX,IAAAA,EAAM,aAAa,uCACnBA,EAAM,OAAM;AAAA,EACd,CAAC;AACL;"}
1
+ {"version":3,"file":"index155.es.js","sources":["../src/components/organisms/image-editor/engine/stickers.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange } from './state.js'\nimport { render } from './rendering.js'\n\nexport function loadStickerImage(state, src) {\n return new Promise((resolve, reject) => {\n const cached = state.stickerImageCache.get(src)\n if (cached && cached.complete && cached.naturalWidth) {\n resolve(cached)\n return\n }\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => {\n state.stickerImageCache.set(src, img)\n resolve(img)\n }\n img.onerror = reject\n img.src = src\n })\n}\n\nexport function addSticker(state, src) {\n loadStickerImage(state, src)\n .then((img) => {\n pushHistory(state)\n const w = state.sourceCanvas.width * 0.25\n const h = w * (img.naturalHeight / img.naturalWidth || 1)\n const L = {\n id: state.nextId++,\n type: 'sticker',\n src,\n x: (state.sourceCanvas.width - w) / 2,\n y: (state.sourceCanvas.height - h) / 2,\n w,\n h,\n rotation: 0,\n flipH: false,\n flipV: false,\n }\n state.layers.push(L)\n render(state)\n state.mode = 'select'\n state.selectedId = L.id\n state.statusText = 'Sticker added'\n emitChange(state)\n })\n .catch(() => {\n state.statusText = 'Could not load that sticker (CORS?)'\n state.notify()\n })\n}\n"],"names":["loadStickerImage","state","src","resolve","reject","cached","img","addSticker","pushHistory","w","h","L","render","emitChange"],"mappings":";;;AAIO,SAASA,EAAiBC,GAAOC,GAAK;AAC3C,SAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,UAAMC,IAASJ,EAAM,kBAAkB,IAAIC,CAAG;AAC9C,QAAIG,KAAUA,EAAO,YAAYA,EAAO,cAAc;AACpD,MAAAF,EAAQE,CAAM;AACd;AAAA,IACF;AACA,UAAMC,IAAM,IAAI,MAAK;AACrB,IAAAA,EAAI,cAAc,aAClBA,EAAI,SAAS,MAAM;AACjB,MAAAL,EAAM,kBAAkB,IAAIC,GAAKI,CAAG,GACpCH,EAAQG,CAAG;AAAA,IACb,GACAA,EAAI,UAAUF,GACdE,EAAI,MAAMJ;AAAA,EACZ,CAAC;AACH;AAEO,SAASK,EAAWN,GAAOC,GAAK;AACrC,EAAAF,EAAiBC,GAAOC,CAAG,EACxB,KAAK,CAACI,MAAQ;AACb,IAAAE,EAAYP,CAAK;AACjB,UAAMQ,IAAIR,EAAM,aAAa,QAAQ,MAC/BS,IAAID,KAAKH,EAAI,gBAAgBA,EAAI,gBAAgB,IACjDK,IAAI;AAAA,MACR,IAAIV,EAAM;AAAA,MACV,MAAM;AAAA,MACN,KAAAC;AAAA,MACA,IAAID,EAAM,aAAa,QAAQQ,KAAK;AAAA,MACpC,IAAIR,EAAM,aAAa,SAASS,KAAK;AAAA,MACrC,GAAAD;AAAA,MACA,GAAAC;AAAA,MACA,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,IACf;AACM,IAAAT,EAAM,OAAO,KAAKU,CAAC,GACnBC,EAAOX,CAAK,GACZA,EAAM,OAAO,UACbA,EAAM,aAAaU,EAAE,IACrBV,EAAM,aAAa,iBACnBY,EAAWZ,CAAK;AAAA,EAClB,CAAC,EACA,MAAM,MAAM;AACX,IAAAA,EAAM,aAAa,uCACnBA,EAAM,OAAM;AAAA,EACd,CAAC;AACL;"}
@@ -1,8 +1,8 @@
1
- import { pushHistory as l } from "./index.es148.js";
2
- import { emitChange as r, getSel as c } from "./index.es146.js";
3
- import { render as o, keepingFixed as u, clampTextSize as d, clampBoxWidth as y } from "./index.es147.js";
4
- import { SHAPES as p } from "./index.es145.js";
5
- import { applyModeCursor as h } from "./index.es150.js";
1
+ import { pushHistory as l } from "./index151.es.js";
2
+ import { emitChange as r, getSel as c } from "./index149.es.js";
3
+ import { render as o, keepingFixed as u, clampTextSize as d, clampBoxWidth as y } from "./index150.es.js";
4
+ import { SHAPES as p } from "./index148.es.js";
5
+ import { applyModeCursor as h } from "./index153.es.js";
6
6
  function t(e, n, i) {
7
7
  u(e, n, { x: n.x, y: n.y }, i);
8
8
  }
@@ -143,4 +143,4 @@ export {
143
143
  N as setTextFont,
144
144
  A as setTextSize
145
145
  };
146
- //# sourceMappingURL=index.es153.js.map
146
+ //# sourceMappingURL=index156.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es153.js","sources":["../src/components/organisms/image-editor/engine/layer-actions.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange, getSel } from './state.js'\nimport {\n render,\n clampTextSize,\n clampBoxWidth,\n keepingFixed,\n} from './rendering.js'\n\n// These all resize the bounds, which would swing a rotated layer's centre.\nfunction resizeInPlace(state, L, mutate) {\n keepingFixed(state, L, { x: L.x, y: L.y }, mutate)\n}\nimport { SHAPES } from './constants.js'\nimport { applyModeCursor } from './mode.js'\n\nexport function layerName(L) {\n if (L.type === 'text')\n return '“' + (L.text.length > 16 ? L.text.slice(0, 16) + '…' : L.text) + '”'\n if (L.type === 'stroke')\n return L.style === 'highlight' ? 'Highlighter' : 'Brush stroke'\n if (L.type === 'sticker') return 'Sticker'\n const s = SHAPES.find((s) => s.id === L.shape)\n return s ? s.name : L.shape\n}\n\nexport function deleteLayer(state, id) {\n pushHistory(state)\n state.layers = state.layers.filter((l) => l.id !== id)\n if (state.selectedId === id) state.selectedId = null\n render(state)\n state.statusText = 'Layer deleted'\n emitChange(state)\n}\n\nexport function deleteSelected(state) {\n if (state.selectedId != null) deleteLayer(state, state.selectedId)\n}\n\nexport function duplicateSelected(state) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n const copy = JSON.parse(JSON.stringify(L))\n copy.id = state.nextId++\n if (\n copy.type === 'text' ||\n copy.type === 'shape' ||\n copy.type === 'sticker'\n ) {\n copy.x += 20\n copy.y += 20\n } else if (copy.type === 'stroke') {\n copy.points = copy.points.map((p) => ({ x: p.x + 20, y: p.y + 20 }))\n }\n state.layers.push(copy)\n state.selectedId = copy.id\n render(state)\n state.statusText = 'Layer duplicated'\n emitChange(state)\n}\n\nexport function bringSelectedToFront(state) {\n const i = state.layers.findIndex((l) => l.id === state.selectedId)\n if (i < 0) return\n pushHistory(state)\n const [L] = state.layers.splice(i, 1)\n state.layers.push(L)\n render(state)\n emitChange(state)\n}\n\nexport function sendSelectedToBack(state) {\n const i = state.layers.findIndex((l) => l.id === state.selectedId)\n if (i < 0) return\n pushHistory(state)\n const [L] = state.layers.splice(i, 1)\n state.layers.unshift(L)\n render(state)\n emitChange(state)\n}\n\nexport function setAdjustment(state, key, value) {\n state.adj[key] = value\n render(state)\n state.notify()\n}\nexport function setFilter(state, id) {\n state.adj.filter = id\n render(state)\n emitChange(state)\n}\nexport function selectShapeType(state, id) {\n state.selectedShapeType = id\n state.notify()\n}\nexport function setShapeFill(state, v) {\n state.shapeFill = v\n state.notify()\n}\nexport function setShapeWidth(state, v) {\n state.shapeWidth = v\n state.notify()\n}\nexport function setBrushSize(state, v) {\n state.brushSize = v\n state.notify()\n}\nexport function setBrushStyle(state, v) {\n state.brushStyle = v\n state.notify()\n}\nexport function setTextFont(state, v) {\n state.textFont = v\n state.notify()\n}\nexport function setTextSize(state, v) {\n state.textSize = v\n state.notify()\n}\nexport function setTextColor(state, v) {\n state.textColor = v\n state.notify()\n}\nexport function setShapeColor(state, v) {\n state.shapeColor = v\n state.notify()\n}\nexport function setDrawColor(state, v) {\n state.drawColor = v\n applyModeCursor(state)\n state.notify()\n}\n\nexport function setSelectedColor(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n L.color = v\n render(state)\n emitChange(state)\n}\nexport function setSelectedText(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'text') return\n resizeInPlace(state, L, () => {\n L.text = v\n })\n render(state)\n state.notify()\n}\nexport function setSelectedFont(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n resizeInPlace(state, L, () => {\n L.font = v\n })\n render(state)\n emitChange(state)\n}\nexport function setSelectedTextSize(state, v) {\n const L = getSel(state)\n if (!L) return\n resizeInPlace(state, L, () => {\n L.size = v\n clampTextSize(state, L)\n })\n render(state)\n state.notify()\n}\nexport function setSelectedBoxWidth(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'text') return\n resizeInPlace(state, L, () => {\n L.boxWidth = v\n clampBoxWidth(state, L)\n clampTextSize(state, L)\n })\n render(state)\n state.notify()\n}\nexport function setSelectedShapeFill(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n L.fill = v\n render(state)\n emitChange(state)\n}\nexport function setSelectedWidth(state, v) {\n const L = getSel(state)\n if (!L) return\n resizeInPlace(state, L, () => {\n L.width = v\n })\n render(state)\n state.notify()\n}\n"],"names":["resizeInPlace","state","L","mutate","keepingFixed","layerName","s","SHAPES","deleteLayer","id","pushHistory","l","render","emitChange","deleteSelected","duplicateSelected","getSel","copy","p","bringSelectedToFront","i","sendSelectedToBack","setAdjustment","key","value","setFilter","selectShapeType","setShapeFill","v","setShapeWidth","setBrushSize","setBrushStyle","setTextFont","setTextSize","setTextColor","setShapeColor","setDrawColor","applyModeCursor","setSelectedColor","setSelectedText","setSelectedFont","setSelectedTextSize","clampTextSize","setSelectedBoxWidth","clampBoxWidth","setSelectedShapeFill","setSelectedWidth"],"mappings":"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"}
1
+ {"version":3,"file":"index156.es.js","sources":["../src/components/organisms/image-editor/engine/layer-actions.js"],"sourcesContent":["import { pushHistory } from './history.js'\nimport { emitChange, getSel } from './state.js'\nimport {\n render,\n clampTextSize,\n clampBoxWidth,\n keepingFixed,\n} from './rendering.js'\n\n// These all resize the bounds, which would swing a rotated layer's centre.\nfunction resizeInPlace(state, L, mutate) {\n keepingFixed(state, L, { x: L.x, y: L.y }, mutate)\n}\nimport { SHAPES } from './constants.js'\nimport { applyModeCursor } from './mode.js'\n\nexport function layerName(L) {\n if (L.type === 'text')\n return '“' + (L.text.length > 16 ? L.text.slice(0, 16) + '…' : L.text) + '”'\n if (L.type === 'stroke')\n return L.style === 'highlight' ? 'Highlighter' : 'Brush stroke'\n if (L.type === 'sticker') return 'Sticker'\n const s = SHAPES.find((s) => s.id === L.shape)\n return s ? s.name : L.shape\n}\n\nexport function deleteLayer(state, id) {\n pushHistory(state)\n state.layers = state.layers.filter((l) => l.id !== id)\n if (state.selectedId === id) state.selectedId = null\n render(state)\n state.statusText = 'Layer deleted'\n emitChange(state)\n}\n\nexport function deleteSelected(state) {\n if (state.selectedId != null) deleteLayer(state, state.selectedId)\n}\n\nexport function duplicateSelected(state) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n const copy = JSON.parse(JSON.stringify(L))\n copy.id = state.nextId++\n if (\n copy.type === 'text' ||\n copy.type === 'shape' ||\n copy.type === 'sticker'\n ) {\n copy.x += 20\n copy.y += 20\n } else if (copy.type === 'stroke') {\n copy.points = copy.points.map((p) => ({ x: p.x + 20, y: p.y + 20 }))\n }\n state.layers.push(copy)\n state.selectedId = copy.id\n render(state)\n state.statusText = 'Layer duplicated'\n emitChange(state)\n}\n\nexport function bringSelectedToFront(state) {\n const i = state.layers.findIndex((l) => l.id === state.selectedId)\n if (i < 0) return\n pushHistory(state)\n const [L] = state.layers.splice(i, 1)\n state.layers.push(L)\n render(state)\n emitChange(state)\n}\n\nexport function sendSelectedToBack(state) {\n const i = state.layers.findIndex((l) => l.id === state.selectedId)\n if (i < 0) return\n pushHistory(state)\n const [L] = state.layers.splice(i, 1)\n state.layers.unshift(L)\n render(state)\n emitChange(state)\n}\n\nexport function setAdjustment(state, key, value) {\n state.adj[key] = value\n render(state)\n state.notify()\n}\nexport function setFilter(state, id) {\n state.adj.filter = id\n render(state)\n emitChange(state)\n}\nexport function selectShapeType(state, id) {\n state.selectedShapeType = id\n state.notify()\n}\nexport function setShapeFill(state, v) {\n state.shapeFill = v\n state.notify()\n}\nexport function setShapeWidth(state, v) {\n state.shapeWidth = v\n state.notify()\n}\nexport function setBrushSize(state, v) {\n state.brushSize = v\n state.notify()\n}\nexport function setBrushStyle(state, v) {\n state.brushStyle = v\n state.notify()\n}\nexport function setTextFont(state, v) {\n state.textFont = v\n state.notify()\n}\nexport function setTextSize(state, v) {\n state.textSize = v\n state.notify()\n}\nexport function setTextColor(state, v) {\n state.textColor = v\n state.notify()\n}\nexport function setShapeColor(state, v) {\n state.shapeColor = v\n state.notify()\n}\nexport function setDrawColor(state, v) {\n state.drawColor = v\n applyModeCursor(state)\n state.notify()\n}\n\nexport function setSelectedColor(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n L.color = v\n render(state)\n emitChange(state)\n}\nexport function setSelectedText(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'text') return\n resizeInPlace(state, L, () => {\n L.text = v\n })\n render(state)\n state.notify()\n}\nexport function setSelectedFont(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n resizeInPlace(state, L, () => {\n L.font = v\n })\n render(state)\n emitChange(state)\n}\nexport function setSelectedTextSize(state, v) {\n const L = getSel(state)\n if (!L) return\n resizeInPlace(state, L, () => {\n L.size = v\n clampTextSize(state, L)\n })\n render(state)\n state.notify()\n}\nexport function setSelectedBoxWidth(state, v) {\n const L = getSel(state)\n if (!L || L.type !== 'text') return\n resizeInPlace(state, L, () => {\n L.boxWidth = v\n clampBoxWidth(state, L)\n clampTextSize(state, L)\n })\n render(state)\n state.notify()\n}\nexport function setSelectedShapeFill(state, v) {\n const L = getSel(state)\n if (!L) return\n pushHistory(state)\n L.fill = v\n render(state)\n emitChange(state)\n}\nexport function setSelectedWidth(state, v) {\n const L = getSel(state)\n if (!L) return\n resizeInPlace(state, L, () => {\n L.width = v\n })\n render(state)\n state.notify()\n}\n"],"names":["resizeInPlace","state","L","mutate","keepingFixed","layerName","s","SHAPES","deleteLayer","id","pushHistory","l","render","emitChange","deleteSelected","duplicateSelected","getSel","copy","p","bringSelectedToFront","i","sendSelectedToBack","setAdjustment","key","value","setFilter","selectShapeType","setShapeFill","v","setShapeWidth","setBrushSize","setBrushStyle","setTextFont","setTextSize","setTextColor","setShapeColor","setDrawColor","applyModeCursor","setSelectedColor","setSelectedText","setSelectedFont","setSelectedTextSize","clampTextSize","setSelectedBoxWidth","clampBoxWidth","setSelectedShapeFill","setSelectedWidth"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { supportsContextFilter as v, rasterizeWithFilter as C } from "./index.es162.js";
2
- import { syncCanvasSize as m, render as g, baseFilter as p, paintLayer as w } from "./index.es147.js";
3
- import { emit as l, emitChange as f, getState as y, resetAdjValues as S } from "./index.es146.js";
4
- import { loadStickerImage as I } from "./index.es152.js";
1
+ import { supportsContextFilter as v, rasterizeWithFilter as C } from "./index162.es.js";
2
+ import { syncCanvasSize as m, render as g, baseFilter as p, paintLayer as w } from "./index150.es.js";
3
+ import { emit as l, emitChange as f, getState as y, resetAdjValues as S } from "./index149.es.js";
4
+ import { loadStickerImage as I } from "./index155.es.js";
5
5
  function L(e) {
6
6
  const n = (e.type || "").toLowerCase();
7
7
  if (n === "image/heic" || n === "image/heif") return !0;
@@ -144,4 +144,4 @@ export {
144
144
  B as normalizeSource,
145
145
  O as produce
146
146
  };
147
- //# sourceMappingURL=index.es154.js.map
147
+ //# sourceMappingURL=index157.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es154.js","sources":["../src/components/organisms/image-editor/engine/save-export.js"],"sourcesContent":["import { rasterizeWithFilter, supportsContextFilter } from './canvas-filter.js'\nimport { render, syncCanvasSize, baseFilter, paintLayer } from './rendering.js'\nimport { emit, emitChange, getState, resetAdjValues } from './state.js'\nimport { loadStickerImage } from './stickers.js'\n\nfunction isHeic(file) {\n const type = (file.type || '').toLowerCase()\n if (type === 'image/heic' || type === 'image/heif') return true\n const name = file instanceof File ? file.name.toLowerCase() : ''\n return name.endsWith('.heic') || name.endsWith('.heif')\n}\n\nfunction toObjectURL(blob, cb) {\n cb(URL.createObjectURL(blob))\n}\n\nfunction convertHeicThenLoad(src, cb) {\n import('heic2any')\n .then(({ default: heic2any }) =>\n heic2any({ blob: src, toType: 'image/jpeg', quality: 0.8 })\n )\n .then((converted) =>\n toObjectURL(Array.isArray(converted) ? converted[0] : converted, cb)\n )\n .catch(() => toObjectURL(src, cb))\n}\n\nexport function normalizeSource(state, src, cb) {\n state.isLoadingImage = true\n state.notify()\n if (!src) {\n cb(null)\n return\n }\n if (src instanceof HTMLCanvasElement) {\n cb(src.toDataURL())\n return\n }\n if (\n typeof Blob !== 'undefined' &&\n (src instanceof Blob || src instanceof File)\n ) {\n if (isHeic(src)) {\n if (typeof createImageBitmap === 'function') {\n createImageBitmap(src)\n .then((bmp) => {\n bmp.close()\n toObjectURL(src, cb)\n })\n .catch(() => convertHeicThenLoad(src, cb))\n return\n }\n convertHeicThenLoad(src, cb)\n return\n }\n toObjectURL(src, cb)\n return\n }\n cb(src)\n}\n\nexport function doLoadImage(state, dataURL) {\n const revoke = () => {\n if (typeof dataURL === 'string' && dataURL.startsWith('blob:')) {\n URL.revokeObjectURL(dataURL)\n }\n }\n const im = new Image()\n im.crossOrigin = 'anonymous'\n im.onload = () => {\n let w = im.naturalWidth,\n h = im.naturalHeight\n const MAX = 2000\n if (Math.max(w, h) > MAX) {\n const s = MAX / Math.max(w, h)\n w = Math.round(w * s)\n h = Math.round(h * s)\n }\n state.sourceCanvas.width = w\n state.sourceCanvas.height = h\n state.sourceCanvas.getContext('2d').drawImage(im, 0, 0, w, h)\n state.originalCanvas = document.createElement('canvas')\n state.originalCanvas.width = w\n state.originalCanvas.height = h\n state.originalCanvas.getContext('2d').drawImage(state.sourceCanvas, 0, 0)\n revoke()\n state.layers = []\n state.selectedId = null\n state.undoStack = []\n state.redoStack = []\n state.zoom = 1\n resetAdjValues(state)\n if (state.mounted) syncCanvasSize(state)\n render(state)\n state.mode = 'select'\n state.isLoadingImage = false\n state.statusText = 'Image loaded'\n emit(state, 'load', { width: w, height: h })\n emitChange(state)\n }\n im.onerror = () => {\n revoke()\n state.isLoadingImage = false\n state.statusText = 'Could not load that image (CORS?)'\n // eslint-disable-next-line no-console\n console.warn(\n '[ImageEditor] Failed to load image (likely a CORS issue on the source URL). ' +\n 'Reset stays disabled since there is nothing to revert to.',\n typeof dataURL === 'string' ? dataURL.slice(0, 80) : dataURL\n )\n state.notify()\n }\n im.src = dataURL\n}\n\nexport function loadState(state, s) {\n if (!s || !s.image) return\n const im = new Image()\n im.onload = () => {\n state.sourceCanvas.width = s.width || im.naturalWidth\n state.sourceCanvas.height = s.height || im.naturalHeight\n state.sourceCanvas\n .getContext('2d')\n .drawImage(im, 0, 0, state.sourceCanvas.width, state.sourceCanvas.height)\n state.originalCanvas = document.createElement('canvas')\n state.originalCanvas.width = state.sourceCanvas.width\n state.originalCanvas.height = state.sourceCanvas.height\n state.originalCanvas\n .getContext('2d')\n .drawImage(im, 0, 0, state.sourceCanvas.width, state.sourceCanvas.height)\n state.layers = JSON.parse(JSON.stringify(s.layers || []))\n state.layers.forEach((L) => {\n if (L.id >= state.nextId) state.nextId = L.id + 1\n })\n Object.assign(state.adj, s.adjustments || {})\n state.selectedId = null\n state.undoStack = []\n state.redoStack = []\n state.zoom = 1\n if (state.mounted) syncCanvasSize(state)\n render(state)\n state.mode = 'select'\n state.statusText = 'State restored'\n emit(state, 'load', { restored: true })\n emitChange(state)\n const stickerSrcs = [\n ...new Set(\n state.layers.filter((L) => L.type === 'sticker').map((L) => L.src)\n ),\n ]\n if (stickerSrcs.length) {\n Promise.all(\n stickerSrcs.map((src) => loadStickerImage(state, src).catch(() => {}))\n ).then(() => render(state))\n }\n }\n im.src = s.image\n}\n\nasync function flatten(state) {\n const out = document.createElement('canvas')\n out.width = state.sourceCanvas.width\n out.height = state.sourceCanvas.height\n const o = out.getContext('2d')\n const filter = baseFilter(state)\n\n if (supportsContextFilter()) {\n o.filter = filter\n o.drawImage(state.sourceCanvas, 0, 0)\n o.filter = 'none'\n } else {\n try {\n const filtered = await rasterizeWithFilter(state.sourceCanvas, filter)\n o.drawImage(filtered, 0, 0)\n } catch {\n o.drawImage(state.sourceCanvas, 0, 0)\n }\n }\n\n state.layers.forEach((L) => {\n if (!L._editing) paintLayer(state, o, L)\n })\n return out\n}\n\nfunction buildResult(state, canvasEl, blob, type) {\n const dataURL = canvasEl.toDataURL(type || 'image/png')\n const result = {\n blob: blob,\n dataURL: dataURL,\n canvas: canvasEl,\n width: canvasEl.width,\n height: canvasEl.height,\n type: (blob && blob.type) || type || 'image/png',\n state: getState(state),\n getBlob: (t, q) =>\n new Promise((res) => canvasEl.toBlob((b) => res(b), t || 'image/png', q)),\n download: (filename) => {\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename || 'picture-studio.png'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n return result\n },\n }\n return result\n}\n\nexport function produce(state, type, quality) {\n return flatten(state).then(\n (canvasEl) =>\n new Promise((resolve) => {\n canvasEl.toBlob(\n (blob) =>\n resolve(buildResult(state, canvasEl, blob, type || 'image/png')),\n type || 'image/png',\n quality\n )\n })\n )\n}\n\nexport function doSave(state, self) {\n if (state.isSaving) return\n state.isSaving = true\n state.notify()\n return produce(state, 'image/jpeg', 0.92)\n .then((result) => {\n emit(state, 'save', result)\n const ret =\n typeof state.config.onSave === 'function'\n ? state.config.onSave(result, self)\n : undefined\n return Promise.resolve(ret).finally(() => {\n state.isSaving = false\n state.notify()\n if (!state.config.keepOpenOnSave) self.close()\n })\n })\n .catch(() => {\n state.isSaving = false\n state.notify()\n })\n}\n"],"names":["isHeic","file","type","name","toObjectURL","blob","cb","convertHeicThenLoad","src","heic2any","converted","normalizeSource","state","bmp","doLoadImage","dataURL","revoke","im","w","h","MAX","s","resetAdjValues","syncCanvasSize","render","emit","emitChange","loadState","L","stickerSrcs","loadStickerImage","flatten","out","o","filter","baseFilter","supportsContextFilter","filtered","rasterizeWithFilter","paintLayer","buildResult","canvasEl","result","getState","t","q","res","b","filename","url","a","produce","quality","resolve","doSave","self","ret"],"mappings":"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"}
1
+ {"version":3,"file":"index157.es.js","sources":["../src/components/organisms/image-editor/engine/save-export.js"],"sourcesContent":["import { rasterizeWithFilter, supportsContextFilter } from './canvas-filter.js'\nimport { render, syncCanvasSize, baseFilter, paintLayer } from './rendering.js'\nimport { emit, emitChange, getState, resetAdjValues } from './state.js'\nimport { loadStickerImage } from './stickers.js'\n\nfunction isHeic(file) {\n const type = (file.type || '').toLowerCase()\n if (type === 'image/heic' || type === 'image/heif') return true\n const name = file instanceof File ? file.name.toLowerCase() : ''\n return name.endsWith('.heic') || name.endsWith('.heif')\n}\n\nfunction toObjectURL(blob, cb) {\n cb(URL.createObjectURL(blob))\n}\n\nfunction convertHeicThenLoad(src, cb) {\n import('heic2any')\n .then(({ default: heic2any }) =>\n heic2any({ blob: src, toType: 'image/jpeg', quality: 0.8 })\n )\n .then((converted) =>\n toObjectURL(Array.isArray(converted) ? converted[0] : converted, cb)\n )\n .catch(() => toObjectURL(src, cb))\n}\n\nexport function normalizeSource(state, src, cb) {\n state.isLoadingImage = true\n state.notify()\n if (!src) {\n cb(null)\n return\n }\n if (src instanceof HTMLCanvasElement) {\n cb(src.toDataURL())\n return\n }\n if (\n typeof Blob !== 'undefined' &&\n (src instanceof Blob || src instanceof File)\n ) {\n if (isHeic(src)) {\n if (typeof createImageBitmap === 'function') {\n createImageBitmap(src)\n .then((bmp) => {\n bmp.close()\n toObjectURL(src, cb)\n })\n .catch(() => convertHeicThenLoad(src, cb))\n return\n }\n convertHeicThenLoad(src, cb)\n return\n }\n toObjectURL(src, cb)\n return\n }\n cb(src)\n}\n\nexport function doLoadImage(state, dataURL) {\n const revoke = () => {\n if (typeof dataURL === 'string' && dataURL.startsWith('blob:')) {\n URL.revokeObjectURL(dataURL)\n }\n }\n const im = new Image()\n im.crossOrigin = 'anonymous'\n im.onload = () => {\n let w = im.naturalWidth,\n h = im.naturalHeight\n const MAX = 2000\n if (Math.max(w, h) > MAX) {\n const s = MAX / Math.max(w, h)\n w = Math.round(w * s)\n h = Math.round(h * s)\n }\n state.sourceCanvas.width = w\n state.sourceCanvas.height = h\n state.sourceCanvas.getContext('2d').drawImage(im, 0, 0, w, h)\n state.originalCanvas = document.createElement('canvas')\n state.originalCanvas.width = w\n state.originalCanvas.height = h\n state.originalCanvas.getContext('2d').drawImage(state.sourceCanvas, 0, 0)\n revoke()\n state.layers = []\n state.selectedId = null\n state.undoStack = []\n state.redoStack = []\n state.zoom = 1\n resetAdjValues(state)\n if (state.mounted) syncCanvasSize(state)\n render(state)\n state.mode = 'select'\n state.isLoadingImage = false\n state.statusText = 'Image loaded'\n emit(state, 'load', { width: w, height: h })\n emitChange(state)\n }\n im.onerror = () => {\n revoke()\n state.isLoadingImage = false\n state.statusText = 'Could not load that image (CORS?)'\n // eslint-disable-next-line no-console\n console.warn(\n '[ImageEditor] Failed to load image (likely a CORS issue on the source URL). ' +\n 'Reset stays disabled since there is nothing to revert to.',\n typeof dataURL === 'string' ? dataURL.slice(0, 80) : dataURL\n )\n state.notify()\n }\n im.src = dataURL\n}\n\nexport function loadState(state, s) {\n if (!s || !s.image) return\n const im = new Image()\n im.onload = () => {\n state.sourceCanvas.width = s.width || im.naturalWidth\n state.sourceCanvas.height = s.height || im.naturalHeight\n state.sourceCanvas\n .getContext('2d')\n .drawImage(im, 0, 0, state.sourceCanvas.width, state.sourceCanvas.height)\n state.originalCanvas = document.createElement('canvas')\n state.originalCanvas.width = state.sourceCanvas.width\n state.originalCanvas.height = state.sourceCanvas.height\n state.originalCanvas\n .getContext('2d')\n .drawImage(im, 0, 0, state.sourceCanvas.width, state.sourceCanvas.height)\n state.layers = JSON.parse(JSON.stringify(s.layers || []))\n state.layers.forEach((L) => {\n if (L.id >= state.nextId) state.nextId = L.id + 1\n })\n Object.assign(state.adj, s.adjustments || {})\n state.selectedId = null\n state.undoStack = []\n state.redoStack = []\n state.zoom = 1\n if (state.mounted) syncCanvasSize(state)\n render(state)\n state.mode = 'select'\n state.statusText = 'State restored'\n emit(state, 'load', { restored: true })\n emitChange(state)\n const stickerSrcs = [\n ...new Set(\n state.layers.filter((L) => L.type === 'sticker').map((L) => L.src)\n ),\n ]\n if (stickerSrcs.length) {\n Promise.all(\n stickerSrcs.map((src) => loadStickerImage(state, src).catch(() => {}))\n ).then(() => render(state))\n }\n }\n im.src = s.image\n}\n\nasync function flatten(state) {\n const out = document.createElement('canvas')\n out.width = state.sourceCanvas.width\n out.height = state.sourceCanvas.height\n const o = out.getContext('2d')\n const filter = baseFilter(state)\n\n if (supportsContextFilter()) {\n o.filter = filter\n o.drawImage(state.sourceCanvas, 0, 0)\n o.filter = 'none'\n } else {\n try {\n const filtered = await rasterizeWithFilter(state.sourceCanvas, filter)\n o.drawImage(filtered, 0, 0)\n } catch {\n o.drawImage(state.sourceCanvas, 0, 0)\n }\n }\n\n state.layers.forEach((L) => {\n if (!L._editing) paintLayer(state, o, L)\n })\n return out\n}\n\nfunction buildResult(state, canvasEl, blob, type) {\n const dataURL = canvasEl.toDataURL(type || 'image/png')\n const result = {\n blob: blob,\n dataURL: dataURL,\n canvas: canvasEl,\n width: canvasEl.width,\n height: canvasEl.height,\n type: (blob && blob.type) || type || 'image/png',\n state: getState(state),\n getBlob: (t, q) =>\n new Promise((res) => canvasEl.toBlob((b) => res(b), t || 'image/png', q)),\n download: (filename) => {\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename || 'picture-studio.png'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n return result\n },\n }\n return result\n}\n\nexport function produce(state, type, quality) {\n return flatten(state).then(\n (canvasEl) =>\n new Promise((resolve) => {\n canvasEl.toBlob(\n (blob) =>\n resolve(buildResult(state, canvasEl, blob, type || 'image/png')),\n type || 'image/png',\n quality\n )\n })\n )\n}\n\nexport function doSave(state, self) {\n if (state.isSaving) return\n state.isSaving = true\n state.notify()\n return produce(state, 'image/jpeg', 0.92)\n .then((result) => {\n emit(state, 'save', result)\n const ret =\n typeof state.config.onSave === 'function'\n ? state.config.onSave(result, self)\n : undefined\n return Promise.resolve(ret).finally(() => {\n state.isSaving = false\n state.notify()\n if (!state.config.keepOpenOnSave) self.close()\n })\n })\n .catch(() => {\n state.isSaving = false\n state.notify()\n })\n}\n"],"names":["isHeic","file","type","name","toObjectURL","blob","cb","convertHeicThenLoad","src","heic2any","converted","normalizeSource","state","bmp","doLoadImage","dataURL","revoke","im","w","h","MAX","s","resetAdjValues","syncCanvasSize","render","emit","emitChange","loadState","L","stickerSrcs","loadStickerImage","flatten","out","o","filter","baseFilter","supportsContextFilter","filtered","rasterizeWithFilter","paintLayer","buildResult","canvasEl","result","getState","t","q","res","b","filename","url","a","produce","quality","resolve","doSave","self","ret"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { onDown as u, onMove as y, onUp as E, onDbl as f } from "./index.es163.js";
2
- import { autoGrowTextEditor as a, commitTextEdit as m, blurTextEditor as g } from "./index.es151.js";
3
- import { undo as L, redo as x } from "./index.es148.js";
4
- import { applyModeCursor as k, selectLayer as l, setMode as D } from "./index.es150.js";
5
- import { fitStage as w, render as p, syncCanvasSize as P } from "./index.es147.js";
6
- import { normalizeSource as T, doLoadImage as z } from "./index.es154.js";
7
- import { deleteLayer as K } from "./index.es153.js";
8
- import { panPointerUp as t, resetPan as c, panPointerDown as C, panPointerMove as h } from "./index.es164.js";
1
+ import { onDown as u, onMove as y, onUp as E, onDbl as f } from "./index163.es.js";
2
+ import { autoGrowTextEditor as a, commitTextEdit as m, blurTextEditor as g } from "./index154.es.js";
3
+ import { undo as L, redo as x } from "./index151.es.js";
4
+ import { applyModeCursor as k, selectLayer as l, setMode as D } from "./index153.es.js";
5
+ import { fitStage as w, render as p, syncCanvasSize as P } from "./index150.es.js";
6
+ import { normalizeSource as T, doLoadImage as z } from "./index157.es.js";
7
+ import { deleteLayer as K } from "./index156.es.js";
8
+ import { panPointerUp as t, resetPan as c, panPointerDown as C, panPointerMove as h } from "./index164.es.js";
9
9
  function A(e, i, o) {
10
10
  e.canvasEl = o.canvas, e.overlayEl = o.overlay, e.textEditorEl = o.textEditor, e.stageEl = o.stage, e.ctx = e.canvasEl.getContext("2d"), e.octx = e.overlayEl.getContext("2d"), e.mounted = !0, k(e), e.overlayEl.addEventListener(
11
11
  "lostpointercapture",
@@ -47,4 +47,4 @@ function A(e, i, o) {
47
47
  export {
48
48
  A as mount
49
49
  };
50
- //# sourceMappingURL=index.es155.js.map
50
+ //# sourceMappingURL=index158.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es155.js","sources":["../src/components/organisms/image-editor/engine/mount.js"],"sourcesContent":["import { onDown, onMove, onUp, onDbl } from './pointer.js'\nimport {\n autoGrowTextEditor,\n blurTextEditor,\n commitTextEdit,\n} from './text-editor.js'\nimport { undo, redo } from './history.js'\nimport { setMode, selectLayer, applyModeCursor } from './mode.js'\nimport { fitStage, render, syncCanvasSize } from './rendering.js'\nimport { normalizeSource, doLoadImage } from './save-export.js'\nimport { deleteLayer } from './layer-actions.js'\nimport {\n panPointerDown,\n panPointerMove,\n panPointerUp,\n resetPan,\n} from './touch-pan.js'\n\nexport function mount(state, self, refs) {\n state.canvasEl = refs.canvas\n state.overlayEl = refs.overlay\n state.textEditorEl = refs.textEditor\n state.stageEl = refs.stage\n state.ctx = state.canvasEl.getContext('2d')\n state.octx = state.overlayEl.getContext('2d')\n state.mounted = true\n applyModeCursor(state)\n\n state.overlayEl.addEventListener('lostpointercapture', (e) =>\n panPointerUp(state, e)\n )\n state.overlayEl.addEventListener('pointerdown', (e) => {\n e.preventDefault()\n if (e.isPrimary && state.panPointers?.size) resetPan(state)\n if (panPointerDown(state, e)) return\n onDown(state, e)\n })\n state.overlayEl.addEventListener('pointermove', (e) => {\n e.preventDefault()\n if (panPointerMove(state, e)) return\n onMove(state, e)\n })\n state.overlayEl.addEventListener('pointerup', (e) => {\n panPointerUp(state, e)\n onUp(state, e)\n })\n state.overlayEl.addEventListener('pointercancel', (e) => {\n resetPan(state)\n onUp(state, e)\n })\n state.overlayEl.addEventListener('dblclick', (e) => onDbl(state, e))\n\n // Commit, unfocus, deselect — guarded so an ordinary drag never deselects.\n const endTextEdit = () => {\n if (!state.editingLayer) return\n blurTextEditor(state)\n selectLayer(state, null)\n }\n\n state.textEditorEl.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n // Enter inserts a newline; stopped so no parent form reads it as submit.\n e.stopPropagation()\n if (e.metaKey || e.ctrlKey) {\n e.preventDefault()\n endTextEdit()\n }\n } else if (e.key === 'Escape') {\n // Escape discards the edit, so restore nothing — just let go.\n e.stopPropagation()\n if (state.editingLayer) state.editingLayer._editing = false\n state.editingLayer = null\n state.textEditorEl.blur()\n selectLayer(state, null)\n }\n })\n state.textEditorEl.addEventListener('input', () => autoGrowTextEditor(state))\n state.textEditorEl.addEventListener('blur', () => commitTextEdit(state))\n\n // Capture phase: the overlay preventDefaults away the implicit blur.\n state.stageEl.addEventListener(\n 'pointerdown',\n (e) => {\n if (e.target === state.textEditorEl) return\n endTextEdit()\n // Presses on the padding deselect; presses on the image are onDown's.\n if (e.target !== state.overlayEl && state.selectedId != null) {\n selectLayer(state, null)\n }\n },\n true\n )\n\n ;['dragover', 'dragenter'].forEach((ev) =>\n state.stageEl.addEventListener(ev, (e) => e.preventDefault())\n )\n state.stageEl.addEventListener('drop', (e) => {\n e.preventDefault()\n const f = e.dataTransfer.files[0]\n if (f && f.type.startsWith('image/'))\n normalizeSource(state, f, (d) => doLoadImage(state, d))\n })\n\n self._keyHandler = (e) => {\n if (!self.isOpen()) return\n const tag = document.activeElement && document.activeElement.tagName\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return\n if ((e.metaKey || e.ctrlKey) && e.key === 'z' && !e.shiftKey) {\n e.preventDefault()\n undo(state)\n } else if (\n (e.metaKey || e.ctrlKey) &&\n (e.key === 'y' || (e.shiftKey && e.key === 'z'))\n ) {\n e.preventDefault()\n redo(state)\n } else if (e.key === 'Escape') {\n if (state.mode !== 'select' || state.selectedId != null) {\n setMode(state, 'select')\n selectLayer(state, null)\n } else if (state.config.closeOnEscape !== false) self.close()\n } else if (\n (e.key === 'Delete' || e.key === 'Backspace') &&\n state.selectedId != null &&\n state.mode === 'select'\n ) {\n e.preventDefault()\n deleteLayer(state, state.selectedId)\n }\n }\n document.addEventListener('keydown', self._keyHandler)\n\n self._resizeHandler = () => {\n if (state.sourceCanvas.width && self.isOpen()) {\n fitStage(state)\n render(state)\n }\n }\n window.addEventListener('resize', self._resizeHandler)\n\n if (state.sourceCanvas.width) {\n syncCanvasSize(state)\n render(state)\n }\n}\n"],"names":["mount","state","self","refs","applyModeCursor","e","panPointerUp","resetPan","panPointerDown","onDown","panPointerMove","onMove","onUp","onDbl","endTextEdit","blurTextEditor","selectLayer","autoGrowTextEditor","commitTextEdit","ev","f","normalizeSource","d","doLoadImage","tag","undo","redo","setMode","deleteLayer","fitStage","render","syncCanvasSize"],"mappings":"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"}
1
+ {"version":3,"file":"index158.es.js","sources":["../src/components/organisms/image-editor/engine/mount.js"],"sourcesContent":["import { onDown, onMove, onUp, onDbl } from './pointer.js'\nimport {\n autoGrowTextEditor,\n blurTextEditor,\n commitTextEdit,\n} from './text-editor.js'\nimport { undo, redo } from './history.js'\nimport { setMode, selectLayer, applyModeCursor } from './mode.js'\nimport { fitStage, render, syncCanvasSize } from './rendering.js'\nimport { normalizeSource, doLoadImage } from './save-export.js'\nimport { deleteLayer } from './layer-actions.js'\nimport {\n panPointerDown,\n panPointerMove,\n panPointerUp,\n resetPan,\n} from './touch-pan.js'\n\nexport function mount(state, self, refs) {\n state.canvasEl = refs.canvas\n state.overlayEl = refs.overlay\n state.textEditorEl = refs.textEditor\n state.stageEl = refs.stage\n state.ctx = state.canvasEl.getContext('2d')\n state.octx = state.overlayEl.getContext('2d')\n state.mounted = true\n applyModeCursor(state)\n\n state.overlayEl.addEventListener('lostpointercapture', (e) =>\n panPointerUp(state, e)\n )\n state.overlayEl.addEventListener('pointerdown', (e) => {\n e.preventDefault()\n if (e.isPrimary && state.panPointers?.size) resetPan(state)\n if (panPointerDown(state, e)) return\n onDown(state, e)\n })\n state.overlayEl.addEventListener('pointermove', (e) => {\n e.preventDefault()\n if (panPointerMove(state, e)) return\n onMove(state, e)\n })\n state.overlayEl.addEventListener('pointerup', (e) => {\n panPointerUp(state, e)\n onUp(state, e)\n })\n state.overlayEl.addEventListener('pointercancel', (e) => {\n resetPan(state)\n onUp(state, e)\n })\n state.overlayEl.addEventListener('dblclick', (e) => onDbl(state, e))\n\n // Commit, unfocus, deselect — guarded so an ordinary drag never deselects.\n const endTextEdit = () => {\n if (!state.editingLayer) return\n blurTextEditor(state)\n selectLayer(state, null)\n }\n\n state.textEditorEl.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n // Enter inserts a newline; stopped so no parent form reads it as submit.\n e.stopPropagation()\n if (e.metaKey || e.ctrlKey) {\n e.preventDefault()\n endTextEdit()\n }\n } else if (e.key === 'Escape') {\n // Escape discards the edit, so restore nothing — just let go.\n e.stopPropagation()\n if (state.editingLayer) state.editingLayer._editing = false\n state.editingLayer = null\n state.textEditorEl.blur()\n selectLayer(state, null)\n }\n })\n state.textEditorEl.addEventListener('input', () => autoGrowTextEditor(state))\n state.textEditorEl.addEventListener('blur', () => commitTextEdit(state))\n\n // Capture phase: the overlay preventDefaults away the implicit blur.\n state.stageEl.addEventListener(\n 'pointerdown',\n (e) => {\n if (e.target === state.textEditorEl) return\n endTextEdit()\n // Presses on the padding deselect; presses on the image are onDown's.\n if (e.target !== state.overlayEl && state.selectedId != null) {\n selectLayer(state, null)\n }\n },\n true\n )\n\n ;['dragover', 'dragenter'].forEach((ev) =>\n state.stageEl.addEventListener(ev, (e) => e.preventDefault())\n )\n state.stageEl.addEventListener('drop', (e) => {\n e.preventDefault()\n const f = e.dataTransfer.files[0]\n if (f && f.type.startsWith('image/'))\n normalizeSource(state, f, (d) => doLoadImage(state, d))\n })\n\n self._keyHandler = (e) => {\n if (!self.isOpen()) return\n const tag = document.activeElement && document.activeElement.tagName\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return\n if ((e.metaKey || e.ctrlKey) && e.key === 'z' && !e.shiftKey) {\n e.preventDefault()\n undo(state)\n } else if (\n (e.metaKey || e.ctrlKey) &&\n (e.key === 'y' || (e.shiftKey && e.key === 'z'))\n ) {\n e.preventDefault()\n redo(state)\n } else if (e.key === 'Escape') {\n if (state.mode !== 'select' || state.selectedId != null) {\n setMode(state, 'select')\n selectLayer(state, null)\n } else if (state.config.closeOnEscape !== false) self.close()\n } else if (\n (e.key === 'Delete' || e.key === 'Backspace') &&\n state.selectedId != null &&\n state.mode === 'select'\n ) {\n e.preventDefault()\n deleteLayer(state, state.selectedId)\n }\n }\n document.addEventListener('keydown', self._keyHandler)\n\n self._resizeHandler = () => {\n if (state.sourceCanvas.width && self.isOpen()) {\n fitStage(state)\n render(state)\n }\n }\n window.addEventListener('resize', self._resizeHandler)\n\n if (state.sourceCanvas.width) {\n syncCanvasSize(state)\n render(state)\n }\n}\n"],"names":["mount","state","self","refs","applyModeCursor","e","panPointerUp","resetPan","panPointerDown","onDown","panPointerMove","onMove","onUp","onDbl","endTextEdit","blurTextEditor","selectLayer","autoGrowTextEditor","commitTextEdit","ev","f","normalizeSource","d","doLoadImage","tag","undo","redo","setMode","deleteLayer","fitStage","render","syncCanvasSize"],"mappings":";;;;;;;;AAkBO,SAASA,EAAMC,GAAOC,GAAMC,GAAM;AACvC,EAAAF,EAAM,WAAWE,EAAK,QACtBF,EAAM,YAAYE,EAAK,SACvBF,EAAM,eAAeE,EAAK,YAC1BF,EAAM,UAAUE,EAAK,OACrBF,EAAM,MAAMA,EAAM,SAAS,WAAW,IAAI,GAC1CA,EAAM,OAAOA,EAAM,UAAU,WAAW,IAAI,GAC5CA,EAAM,UAAU,IAChBG,EAAgBH,CAAK,GAErBA,EAAM,UAAU;AAAA,IAAiB;AAAA,IAAsB,CAACI,MACtDC,EAAaL,GAAOI,CAAC;AAAA,EACzB,GACEJ,EAAM,UAAU,iBAAiB,eAAe,CAACI,MAAM;AAGrD,IAFAA,EAAE,eAAc,GACZA,EAAE,aAAaJ,EAAM,aAAa,QAAMM,EAASN,CAAK,GACtD,CAAAO,EAAeP,GAAOI,CAAC,KAC3BI,EAAOR,GAAOI,CAAC;AAAA,EACjB,CAAC,GACDJ,EAAM,UAAU,iBAAiB,eAAe,CAACI,MAAM;AAErD,IADAA,EAAE,eAAc,GACZ,CAAAK,EAAeT,GAAOI,CAAC,KAC3BM,EAAOV,GAAOI,CAAC;AAAA,EACjB,CAAC,GACDJ,EAAM,UAAU,iBAAiB,aAAa,CAACI,MAAM;AACnD,IAAAC,EAAaL,GAAOI,CAAC,GACrBO,EAAKX,GAAOI,CAAC;AAAA,EACf,CAAC,GACDJ,EAAM,UAAU,iBAAiB,iBAAiB,CAACI,MAAM;AACvD,IAAAE,EAASN,CAAK,GACdW,EAAKX,GAAOI,CAAC;AAAA,EACf,CAAC,GACDJ,EAAM,UAAU,iBAAiB,YAAY,CAACI,MAAMQ,EAAMZ,GAAOI,CAAC,CAAC;AAGnE,QAAMS,IAAc,MAAM;AACxB,IAAKb,EAAM,iBACXc,EAAed,CAAK,GACpBe,EAAYf,GAAO,IAAI;AAAA,EACzB;AAEA,EAAAA,EAAM,aAAa,iBAAiB,WAAW,CAACI,MAAM;AACpD,IAAIA,EAAE,QAAQ,WAEZA,EAAE,gBAAe,IACbA,EAAE,WAAWA,EAAE,aACjBA,EAAE,eAAc,GAChBS,EAAW,MAEJT,EAAE,QAAQ,aAEnBA,EAAE,gBAAe,GACbJ,EAAM,iBAAcA,EAAM,aAAa,WAAW,KACtDA,EAAM,eAAe,MACrBA,EAAM,aAAa,KAAI,GACvBe,EAAYf,GAAO,IAAI;AAAA,EAE3B,CAAC,GACDA,EAAM,aAAa,iBAAiB,SAAS,MAAMgB,EAAmBhB,CAAK,CAAC,GAC5EA,EAAM,aAAa,iBAAiB,QAAQ,MAAMiB,EAAejB,CAAK,CAAC,GAGvEA,EAAM,QAAQ;AAAA,IACZ;AAAA,IACA,CAACI,MAAM;AACL,MAAIA,EAAE,WAAWJ,EAAM,iBACvBa,EAAW,GAEPT,EAAE,WAAWJ,EAAM,aAAaA,EAAM,cAAc,QACtDe,EAAYf,GAAO,IAAI;AAAA,IAE3B;AAAA,IACA;AAAA,EACJ,GAEG,CAAC,YAAY,WAAW,EAAE;AAAA,IAAQ,CAACkB,MAClClB,EAAM,QAAQ,iBAAiBkB,GAAI,CAACd,MAAMA,EAAE,eAAc,CAAE;AAAA,EAChE,GACEJ,EAAM,QAAQ,iBAAiB,QAAQ,CAACI,MAAM;AAC5C,IAAAA,EAAE,eAAc;AAChB,UAAMe,IAAIf,EAAE,aAAa,MAAM,CAAC;AAChC,IAAIe,KAAKA,EAAE,KAAK,WAAW,QAAQ,KACjCC,EAAgBpB,GAAOmB,GAAG,CAACE,MAAMC,EAAYtB,GAAOqB,CAAC,CAAC;AAAA,EAC1D,CAAC,GAEDpB,EAAK,cAAc,CAACG,MAAM;AACxB,QAAI,CAACH,EAAK,SAAU;AACpB,UAAMsB,IAAM,SAAS,iBAAiB,SAAS,cAAc;AAC7D,IAAIA,MAAQ,WAAWA,MAAQ,cAAcA,MAAQ,cAChDnB,EAAE,WAAWA,EAAE,YAAYA,EAAE,QAAQ,OAAO,CAACA,EAAE,YAClDA,EAAE,eAAc,GAChBoB,EAAKxB,CAAK,MAETI,EAAE,WAAWA,EAAE,aACfA,EAAE,QAAQ,OAAQA,EAAE,YAAYA,EAAE,QAAQ,QAE3CA,EAAE,eAAc,GAChBqB,EAAKzB,CAAK,KACDI,EAAE,QAAQ,WACfJ,EAAM,SAAS,YAAYA,EAAM,cAAc,QACjD0B,EAAQ1B,GAAO,QAAQ,GACvBe,EAAYf,GAAO,IAAI,KACdA,EAAM,OAAO,kBAAkB,MAAOC,EAAK,MAAK,KAE1DG,EAAE,QAAQ,YAAYA,EAAE,QAAQ,gBACjCJ,EAAM,cAAc,QACpBA,EAAM,SAAS,aAEfI,EAAE,eAAc,GAChBuB,EAAY3B,GAAOA,EAAM,UAAU;AAAA,EAEvC,GACA,SAAS,iBAAiB,WAAWC,EAAK,WAAW,GAErDA,EAAK,iBAAiB,MAAM;AAC1B,IAAID,EAAM,aAAa,SAASC,EAAK,OAAM,MACzC2B,EAAS5B,CAAK,GACd6B,EAAO7B,CAAK;AAAA,EAEhB,GACA,OAAO,iBAAiB,UAAUC,EAAK,cAAc,GAEjDD,EAAM,aAAa,UACrB8B,EAAe9B,CAAK,GACpB6B,EAAO7B,CAAK;AAEhB;"}
@@ -44,4 +44,4 @@ const s = r(
44
44
  export {
45
45
  s as OTPInputVariants
46
46
  };
47
- //# sourceMappingURL=index.es157.js.map
47
+ //# sourceMappingURL=index159.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es157.js","sources":["../src/components/unstyled/otp-input/otp-input.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const OTPInputVariants = cva(\n `relative flex h-12 w-11 items-center justify-center border-y border-r border-input text-light-1 transition-all\n first:rounded-l-md first:border-l last:rounded-r-md`,\n {\n variants: {\n isError: {\n true: '',\n false: '',\n },\n isFocused: {\n true: '',\n false: '',\n },\n },\n defaultVariants: {\n isError: false,\n isFocused: false,\n },\n compoundVariants: [\n {\n isError: true,\n isFocused: true,\n className: 'border-danger-2 ring-4 ring-danger-1',\n },\n {\n isError: false,\n isFocused: true,\n className: 'border-primary-2 ring-4 ring-primary-1',\n },\n {\n isError: true,\n isFocused: false,\n className: 'border-danger-2',\n },\n {\n isError: false,\n isFocused: false,\n className: 'border-neutral-2',\n },\n ],\n }\n)\n"],"names":["OTPInputVariants","cva"],"mappings":";AAEO,MAAMA,IAAmBC;AAAA,EAC9B;AAAA;AAAA,EAEA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IAAA;AAAA,IAEb,kBAAkB;AAAA,MAChB;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"index159.es.js","sources":["../src/components/unstyled/otp-input/otp-input.styles.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const OTPInputVariants = cva(\n `relative flex h-12 w-11 items-center justify-center border-y border-r border-input text-light-1 transition-all\n first:rounded-l-md first:border-l last:rounded-r-md`,\n {\n variants: {\n isError: {\n true: '',\n false: '',\n },\n isFocused: {\n true: '',\n false: '',\n },\n },\n defaultVariants: {\n isError: false,\n isFocused: false,\n },\n compoundVariants: [\n {\n isError: true,\n isFocused: true,\n className: 'border-danger-2 ring-4 ring-danger-1',\n },\n {\n isError: false,\n isFocused: true,\n className: 'border-primary-2 ring-4 ring-primary-1',\n },\n {\n isError: true,\n isFocused: false,\n className: 'border-danger-2',\n },\n {\n isError: false,\n isFocused: false,\n className: 'border-neutral-2',\n },\n ],\n }\n)\n"],"names":["OTPInputVariants","cva"],"mappings":";AAEO,MAAMA,IAAmBC;AAAA,EAC9B;AAAA;AAAA,EAEA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IAAA;AAAA,IAEb,kBAAkB;AAAA,MAChB;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF;AAEJ;"}
@@ -1,12 +1,12 @@
1
1
  import * as e from "react";
2
- import { cn as u } from "./index.es89.js";
3
- import { Typography as n } from "./index.es19.js";
2
+ import { cn as u } from "./index89.es.js";
3
+ import { Typography as n } from "./index19.es.js";
4
4
  import "lucide-react";
5
- import "./index.es60.js";
6
- import "./index.es90.js";
7
- import "./index.es29.js";
8
- import "./index.es35.js";
9
- import { TextAreaVariants as m } from "./index.es126.js";
5
+ import "./index60.es.js";
6
+ import "./index90.es.js";
7
+ import "./index29.es.js";
8
+ import "./index35.es.js";
9
+ import { TextAreaVariants as m } from "./index101.es.js";
10
10
  const g = e.forwardRef(
11
11
  ({ className: o, inputLabel: i, showTextCount: l, maximumTextCount: a, id: d, ...t }, f) => {
12
12
  const [r, s] = e.useState(!1), c = e.useRef(null);
@@ -46,4 +46,4 @@ g.displayName = "Textarea";
46
46
  export {
47
47
  g as Textarea
48
48
  };
49
- //# sourceMappingURL=index.es16.js.map
49
+ //# sourceMappingURL=index16.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es16.js","sources":["../src/components/atoms/textarea/textarea.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { Typography } from '@/index'\nimport { TextAreaVariants } from './textarea.styles'\nimport type { TextareaProps } from './textarea.types'\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n { className, inputLabel, showTextCount, maximumTextCount, id, ...props },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false)\n const inputRef = React.useRef<HTMLInputElement>(null)\n React.useEffect(() => {\n if (isFocused) {\n inputRef.current?.focus()\n }\n }, [isFocused])\n return (\n <div id={id}>\n {inputLabel && (\n <Typography variant={'body4'} className={`text-light-3`}>\n {inputLabel}\n </Typography>\n )}\n <textarea\n className={cn(\n 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className,\n TextAreaVariants({\n isFocused,\n disabled: props.disabled,\n className,\n })\n )}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n ref={ref}\n maxLength={maximumTextCount}\n {...props}\n />\n\n {showTextCount && (\n <Typography\n variant={'body4'}\n className={`text-light-4 mt-1.5 flex justify-end`}\n >\n {props.value?.toString().length}/{maximumTextCount}\n </Typography>\n )}\n </div>\n )\n }\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n"],"names":["Textarea","React","className","inputLabel","showTextCount","maximumTextCount","id","props","ref","isFocused","setIsFocused","inputRef","Typography","cn","TextAreaVariants"],"mappings":";;;;;;;;;AAOA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CACE,EAAE,WAAAC,GAAW,YAAAC,GAAY,eAAAC,GAAe,kBAAAC,GAAkB,IAAAC,GAAI,GAAGC,EAAA,GACjEC,MACG;AACH,UAAM,CAACC,GAAWC,CAAY,IAAIT,EAAM,SAAS,EAAK,GAChDU,IAAWV,EAAM,OAAyB,IAAI;AACpD,WAAAA,EAAM,UAAU,MAAM;AACpB,MAAIQ,KACFE,EAAS,SAAS,MAAA;AAAA,IAEtB,GAAG,CAACF,CAAS,CAAC,GAEZ,gBAAAR,EAAA,cAAC,OAAA,EAAI,IAAAK,EAAA,GACFH,KACC,gBAAAF,EAAA,cAACW,GAAA,EAAW,SAAS,SAAS,WAAW,eAAA,GACtCT,CACH,GAEF,gBAAAF,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWY;AAAA,UACT;AAAA,UACAX;AAAA,UACAY,EAAiB;AAAA,YACf,WAAAL;AAAA,YACA,UAAUF,EAAM;AAAA,YAChB,WAAAL;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,QAEH,SAAS,MAAMQ,EAAa,EAAI;AAAA,QAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,QAChC,KAAAF;AAAA,QACA,WAAWH;AAAA,QACV,GAAGE;AAAA,MAAA;AAAA,IAAA,GAGLH,KACC,gBAAAH,EAAA;AAAA,MAACW;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,MAEVL,EAAM,OAAO,SAAA,EAAW;AAAA,MAAO;AAAA,MAAEF;AAAA,IAAA,CAGxC;AAAA,EAEJ;AACF;AACAL,EAAS,cAAc;"}
1
+ {"version":3,"file":"index16.es.js","sources":["../src/components/atoms/textarea/textarea.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\nimport { Typography } from '@/index'\nimport { TextAreaVariants } from './textarea.styles'\nimport type { TextareaProps } from './textarea.types'\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n { className, inputLabel, showTextCount, maximumTextCount, id, ...props },\n ref\n ) => {\n const [isFocused, setIsFocused] = React.useState(false)\n const inputRef = React.useRef<HTMLInputElement>(null)\n React.useEffect(() => {\n if (isFocused) {\n inputRef.current?.focus()\n }\n }, [isFocused])\n return (\n <div id={id}>\n {inputLabel && (\n <Typography variant={'body4'} className={`text-light-3`}>\n {inputLabel}\n </Typography>\n )}\n <textarea\n className={cn(\n 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className,\n TextAreaVariants({\n isFocused,\n disabled: props.disabled,\n className,\n })\n )}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n ref={ref}\n maxLength={maximumTextCount}\n {...props}\n />\n\n {showTextCount && (\n <Typography\n variant={'body4'}\n className={`text-light-4 mt-1.5 flex justify-end`}\n >\n {props.value?.toString().length}/{maximumTextCount}\n </Typography>\n )}\n </div>\n )\n }\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n"],"names":["Textarea","React","className","inputLabel","showTextCount","maximumTextCount","id","props","ref","isFocused","setIsFocused","inputRef","Typography","cn","TextAreaVariants"],"mappings":";;;;;;;;;AAOA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CACE,EAAE,WAAAC,GAAW,YAAAC,GAAY,eAAAC,GAAe,kBAAAC,GAAkB,IAAAC,GAAI,GAAGC,EAAA,GACjEC,MACG;AACH,UAAM,CAACC,GAAWC,CAAY,IAAIT,EAAM,SAAS,EAAK,GAChDU,IAAWV,EAAM,OAAyB,IAAI;AACpD,WAAAA,EAAM,UAAU,MAAM;AACpB,MAAIQ,KACFE,EAAS,SAAS,MAAA;AAAA,IAEtB,GAAG,CAACF,CAAS,CAAC,GAEZ,gBAAAR,EAAA,cAAC,OAAA,EAAI,IAAAK,EAAA,GACFH,KACC,gBAAAF,EAAA,cAACW,GAAA,EAAW,SAAS,SAAS,WAAW,eAAA,GACtCT,CACH,GAEF,gBAAAF,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWY;AAAA,UACT;AAAA,UACAX;AAAA,UACAY,EAAiB;AAAA,YACf,WAAAL;AAAA,YACA,UAAUF,EAAM;AAAA,YAChB,WAAAL;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,QAEH,SAAS,MAAMQ,EAAa,EAAI;AAAA,QAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,QAChC,KAAAF;AAAA,QACA,WAAWH;AAAA,QACV,GAAGE;AAAA,MAAA;AAAA,IAAA,GAGLH,KACC,gBAAAH,EAAA;AAAA,MAACW;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,MAEVL,EAAM,OAAO,SAAA,EAAW;AAAA,MAAO;AAAA,MAAEF;AAAA,IAAA,CAGxC;AAAA,EAEJ;AACF;AACAL,EAAS,cAAc;"}
@@ -2,4 +2,4 @@ const a = "Plus Jakarta Sans";
2
2
  export {
3
3
  a as FONT_FAMILY
4
4
  };
5
- //# sourceMappingURL=index.es137.js.map
5
+ //# sourceMappingURL=index160.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es137.js","sources":["../src/lib/constants.ts"],"sourcesContent":["export const FONT_FAMILY = 'Plus Jakarta Sans'\n"],"names":["FONT_FAMILY"],"mappings":"AAAO,MAAMA,IAAc;"}
1
+ {"version":3,"file":"index160.es.js","sources":["../src/lib/constants.ts"],"sourcesContent":["export const FONT_FAMILY = 'Plus Jakarta Sans'\n"],"names":["FONT_FAMILY"],"mappings":"AAAO,MAAMA,IAAc;"}
@@ -25,4 +25,4 @@ export {
25
25
  t as trendBoxStyles,
26
26
  s as trendValueStyles
27
27
  };
28
- //# sourceMappingURL=index.es138.js.map
28
+ //# sourceMappingURL=index161.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es138.js","sources":["../src/components/ui/report-snippet-view/report-snippet-view-style.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const trendBoxStyles = cva(\n 'w-auto min-w-[50px] h-5 flex items-center justify-center gap-2 px-1 py-0.5 rounded-[4px]',\n {\n variants: {\n trend: {\n '1': 'bg-success-1 border border-success-1',\n '-1': 'bg-danger-1 border border-danger-1',\n '0': '',\n null: '',\n },\n },\n }\n)\n\nexport const trendValueStyles = cva('text-sm', {\n variants: {\n trend: {\n '1': 'text-success-1',\n '-1': 'text-danger-1',\n '0': '',\n null: '',\n },\n },\n})\n"],"names":["trendBoxStyles","cva","trendValueStyles"],"mappings":";AAEO,MAAMA,IAAiBC;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,GAAK;AAAA,QACL,MAAM;AAAA,QACN,GAAK;AAAA,QACL,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,EACF;AAEJ,GAEaC,IAAmBD,EAAI,WAAW;AAAA,EAC7C,UAAU;AAAA,IACR,OAAO;AAAA,MACL,GAAK;AAAA,MACL,MAAM;AAAA,MACN,GAAK;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,CAAC;"}
1
+ {"version":3,"file":"index161.es.js","sources":["../src/components/ui/report-snippet-view/report-snippet-view-style.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const trendBoxStyles = cva(\n 'w-auto min-w-[50px] h-5 flex items-center justify-center gap-2 px-1 py-0.5 rounded-[4px]',\n {\n variants: {\n trend: {\n '1': 'bg-success-1 border border-success-1',\n '-1': 'bg-danger-1 border border-danger-1',\n '0': '',\n null: '',\n },\n },\n }\n)\n\nexport const trendValueStyles = cva('text-sm', {\n variants: {\n trend: {\n '1': 'text-success-1',\n '-1': 'text-danger-1',\n '0': '',\n null: '',\n },\n },\n})\n"],"names":["trendBoxStyles","cva","trendValueStyles"],"mappings":";AAEO,MAAMA,IAAiBC;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,GAAK;AAAA,QACL,MAAM;AAAA,QACN,GAAK;AAAA,QACL,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,EACF;AAEJ,GAEaC,IAAmBD,EAAI,WAAW;AAAA,EAC7C,UAAU;AAAA,IACR,OAAO;AAAA,MACL,GAAK;AAAA,MACL,MAAM;AAAA,MACN,GAAK;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,CAAC;"}
@@ -91,4 +91,4 @@ export {
91
91
  v as rasterizeWithFilter,
92
92
  d as supportsContextFilter
93
93
  };
94
- //# sourceMappingURL=index.es162.js.map
94
+ //# sourceMappingURL=index162.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es162.js","sources":["../src/components/organisms/image-editor/engine/canvas-filter.js"],"sourcesContent":["let contextFilterSupport = null\n\nexport function supportsContextFilter() {\n if (contextFilterSupport !== null) return contextFilterSupport\n if (typeof document === 'undefined') return false\n const ctx = document.createElement('canvas').getContext('2d')\n contextFilterSupport = !!ctx && 'filter' in ctx\n return contextFilterSupport\n}\n\nfunction escapeXml(value) {\n return String(value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n}\n\nfunction toAmount(raw) {\n const value = parseFloat(raw)\n if (Number.isNaN(value)) return null\n return raw.trim().endsWith('%') ? value / 100 : value\n}\n\nfunction componentTransfer(slope, intercept) {\n const fn = ['R', 'G', 'B']\n .map(\n (c) =>\n `<feFunc${c} type=\"linear\" slope=\"${slope}\" intercept=\"${intercept}\"/>`\n )\n .join('')\n return `<feComponentTransfer>${fn}</feComponentTransfer>`\n}\n\nfunction sepiaMatrix(amount) {\n const r = 1 - amount\n const m = [\n 0.393 + 0.607 * r,\n 0.769 - 0.769 * r,\n 0.189 - 0.189 * r,\n 0,\n 0,\n 0.349 - 0.349 * r,\n 0.686 + 0.314 * r,\n 0.168 - 0.168 * r,\n 0,\n 0,\n 0.272 - 0.272 * r,\n 0.534 - 0.534 * r,\n 0.131 + 0.869 * r,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n ]\n return `<feColorMatrix type=\"matrix\" values=\"${m.join(' ')}\"/>`\n}\n\nfunction toSvgPrimitives(filter) {\n const primitives = []\n const re = /([a-zA-Z-]+)\\(([^)]*)\\)/g\n let match\n\n while ((match = re.exec(filter)) !== null) {\n const name = match[1].toLowerCase()\n const amount = toAmount(match[2])\n if (amount === null) continue\n\n switch (name) {\n case 'brightness':\n primitives.push(componentTransfer(amount, 0))\n break\n case 'contrast':\n primitives.push(componentTransfer(amount, -0.5 * amount + 0.5))\n break\n case 'saturate':\n primitives.push(`<feColorMatrix type=\"saturate\" values=\"${amount}\"/>`)\n break\n case 'grayscale':\n primitives.push(\n `<feColorMatrix type=\"saturate\" values=\"${1 - amount}\"/>`\n )\n break\n case 'sepia':\n primitives.push(sepiaMatrix(amount))\n break\n case 'hue-rotate':\n primitives.push(`<feColorMatrix type=\"hueRotate\" values=\"${amount}\"/>`)\n break\n case 'blur':\n if (amount > 0) {\n primitives.push(`<feGaussianBlur stdDeviation=\"${amount}\"/>`)\n }\n break\n default:\n break\n }\n }\n\n return primitives\n}\n\nexport function rasterizeWithFilter(sourceCanvas, filter) {\n return new Promise((resolve, reject) => {\n const primitives = toSvgPrimitives(filter)\n if (!primitives.length) {\n reject(new Error('no translatable filter primitives'))\n return\n }\n\n const { width, height } = sourceCanvas\n const href = sourceCanvas.toDataURL('image/png')\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">` +\n `<filter id=\"f\" color-interpolation-filters=\"sRGB\" ` +\n `x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">${primitives.join('')}</filter>` +\n `<image href=\"${escapeXml(href)}\" width=\"${width}\" height=\"${height}\" ` +\n `filter=\"url(#f)\"/>` +\n `</svg>`\n\n const img = new Image()\n img.onload = () => resolve(img)\n img.onerror = () => reject(new Error('filter rasterisation failed'))\n img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg)\n })\n}\n"],"names":["contextFilterSupport","supportsContextFilter","ctx","escapeXml","value","toAmount","raw","componentTransfer","slope","intercept","c","sepiaMatrix","amount","r","toSvgPrimitives","filter","primitives","re","match","name","rasterizeWithFilter","sourceCanvas","resolve","reject","width","height","href","svg","img"],"mappings":"AAAA,IAAIA,IAAuB;AAEpB,SAASC,IAAwB;AACtC,MAAID,MAAyB,KAAM,QAAOA;AAC1C,MAAI,OAAO,WAAa,IAAa,QAAO;AAC5C,QAAME,IAAM,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI;AAC5D,SAAAF,IAAuB,CAAC,CAACE,KAAO,YAAYA,GACrCF;AACT;AAEA,SAASG,EAAUC,GAAO;AACxB,SAAO,OAAOA,CAAK,EAChB,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ;AAC3B;AAEA,SAASC,EAASC,GAAK;AACrB,QAAMF,IAAQ,WAAWE,CAAG;AAC5B,SAAI,OAAO,MAAMF,CAAK,IAAU,OACzBE,EAAI,OAAO,SAAS,GAAG,IAAIF,IAAQ,MAAMA;AAClD;AAEA,SAASG,EAAkBC,GAAOC,GAAW;AAO3C,SAAO,wBANI,CAAC,KAAK,KAAK,GAAG,EACtB;AAAA,IACC,CAACC,MACC,UAAUA,CAAC,yBAAyBF,CAAK,gBAAgBC,CAAS;AAAA,EAC1E,EACK,KAAK,EAAE,CACuB;AACnC;AAEA,SAASE,EAAYC,GAAQ;AAC3B,QAAMC,IAAI,IAAID;AAuBd,SAAO,wCAtBG;AAAA,IACR,QAAQ,QAAQC;AAAA,IAChB,QAAQ,QAAQA;AAAA,IAChB,QAAQ,QAAQA;AAAA,IAChB;AAAA,IACA;AAAA,IACA,QAAQ,QAAQA;AAAA,IAChB,QAAQ,QAAQA;AAAA,IAChB,QAAQ,QAAQA;AAAA,IAChB;AAAA,IACA;AAAA,IACA,QAAQ,QAAQA;AAAA,IAChB,QAAQ,QAAQA;AAAA,IAChB,QAAQ,QAAQA;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,EACmD,KAAK,GAAG,CAAC;AAC5D;AAEA,SAASC,EAAgBC,GAAQ;AAC/B,QAAMC,IAAa,CAAA,GACbC,IAAK;AACX,MAAIC;AAEJ,UAAQA,IAAQD,EAAG,KAAKF,CAAM,OAAO,QAAM;AACzC,UAAMI,IAAOD,EAAM,CAAC,EAAE,YAAW,GAC3BN,IAASP,EAASa,EAAM,CAAC,CAAC;AAChC,QAAIN,MAAW;AAEf,cAAQO,GAAI;AAAA,QACV,KAAK;AACH,UAAAH,EAAW,KAAKT,EAAkBK,GAAQ,CAAC,CAAC;AAC5C;AAAA,QACF,KAAK;AACH,UAAAI,EAAW,KAAKT,EAAkBK,GAAQ,OAAOA,IAAS,GAAG,CAAC;AAC9D;AAAA,QACF,KAAK;AACH,UAAAI,EAAW,KAAK,0CAA0CJ,CAAM,KAAK;AACrE;AAAA,QACF,KAAK;AACH,UAAAI,EAAW;AAAA,YACT,0CAA0C,IAAIJ,CAAM;AAAA,UAC9D;AACQ;AAAA,QACF,KAAK;AACH,UAAAI,EAAW,KAAKL,EAAYC,CAAM,CAAC;AACnC;AAAA,QACF,KAAK;AACH,UAAAI,EAAW,KAAK,2CAA2CJ,CAAM,KAAK;AACtE;AAAA,QACF,KAAK;AACH,UAAIA,IAAS,KACXI,EAAW,KAAK,iCAAiCJ,CAAM,KAAK;AAE9D;AAAA,MAGR;AAAA,EACE;AAEA,SAAOI;AACT;AAEO,SAASI,EAAoBC,GAAcN,GAAQ;AACxD,SAAO,IAAI,QAAQ,CAACO,GAASC,MAAW;AACtC,UAAMP,IAAaF,EAAgBC,CAAM;AACzC,QAAI,CAACC,EAAW,QAAQ;AACtB,MAAAO,EAAO,IAAI,MAAM,mCAAmC,CAAC;AACrD;AAAA,IACF;AAEA,UAAM,EAAE,OAAAC,GAAO,QAAAC,MAAWJ,GACpBK,IAAOL,EAAa,UAAU,WAAW,GACzCM,IACJ,kDAAkDH,CAAK,aAAaC,CAAM,8FAEhCT,EAAW,KAAK,EAAE,CAAC,yBAC7Cb,EAAUuB,CAAI,CAAC,YAAYF,CAAK,aAAaC,CAAM,8BAI/DG,IAAM,IAAI,MAAK;AACrB,IAAAA,EAAI,SAAS,MAAMN,EAAQM,CAAG,GAC9BA,EAAI,UAAU,MAAML,EAAO,IAAI,MAAM,6BAA6B,CAAC,GACnEK,EAAI,MAAM,sCAAsC,mBAAmBD,CAAG;AAAA,EACxE,CAAC;AACH;"}
1
+ {"version":3,"file":"index162.es.js","sources":["../src/components/organisms/image-editor/engine/canvas-filter.js"],"sourcesContent":["let contextFilterSupport = null\n\nexport function supportsContextFilter() {\n if (contextFilterSupport !== null) return contextFilterSupport\n if (typeof document === 'undefined') return false\n const ctx = document.createElement('canvas').getContext('2d')\n contextFilterSupport = !!ctx && 'filter' in ctx\n return contextFilterSupport\n}\n\nfunction escapeXml(value) {\n return String(value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n}\n\nfunction toAmount(raw) {\n const value = parseFloat(raw)\n if (Number.isNaN(value)) return null\n return raw.trim().endsWith('%') ? value / 100 : value\n}\n\nfunction componentTransfer(slope, intercept) {\n const fn = ['R', 'G', 'B']\n .map(\n (c) =>\n `<feFunc${c} type=\"linear\" slope=\"${slope}\" intercept=\"${intercept}\"/>`\n )\n .join('')\n return `<feComponentTransfer>${fn}</feComponentTransfer>`\n}\n\nfunction sepiaMatrix(amount) {\n const r = 1 - amount\n const m = [\n 0.393 + 0.607 * r,\n 0.769 - 0.769 * r,\n 0.189 - 0.189 * r,\n 0,\n 0,\n 0.349 - 0.349 * r,\n 0.686 + 0.314 * r,\n 0.168 - 0.168 * r,\n 0,\n 0,\n 0.272 - 0.272 * r,\n 0.534 - 0.534 * r,\n 0.131 + 0.869 * r,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n ]\n return `<feColorMatrix type=\"matrix\" values=\"${m.join(' ')}\"/>`\n}\n\nfunction toSvgPrimitives(filter) {\n const primitives = []\n const re = /([a-zA-Z-]+)\\(([^)]*)\\)/g\n let match\n\n while ((match = re.exec(filter)) !== null) {\n const name = match[1].toLowerCase()\n const amount = toAmount(match[2])\n if (amount === null) continue\n\n switch (name) {\n case 'brightness':\n primitives.push(componentTransfer(amount, 0))\n break\n case 'contrast':\n primitives.push(componentTransfer(amount, -0.5 * amount + 0.5))\n break\n case 'saturate':\n primitives.push(`<feColorMatrix type=\"saturate\" values=\"${amount}\"/>`)\n break\n case 'grayscale':\n primitives.push(\n `<feColorMatrix type=\"saturate\" values=\"${1 - amount}\"/>`\n )\n break\n case 'sepia':\n primitives.push(sepiaMatrix(amount))\n break\n case 'hue-rotate':\n primitives.push(`<feColorMatrix type=\"hueRotate\" values=\"${amount}\"/>`)\n break\n case 'blur':\n if (amount > 0) {\n primitives.push(`<feGaussianBlur stdDeviation=\"${amount}\"/>`)\n }\n break\n default:\n break\n }\n }\n\n return primitives\n}\n\nexport function rasterizeWithFilter(sourceCanvas, filter) {\n return new Promise((resolve, reject) => {\n const primitives = toSvgPrimitives(filter)\n if (!primitives.length) {\n reject(new Error('no translatable filter primitives'))\n return\n }\n\n const { width, height } = sourceCanvas\n const href = sourceCanvas.toDataURL('image/png')\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">` +\n `<filter id=\"f\" color-interpolation-filters=\"sRGB\" ` +\n `x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">${primitives.join('')}</filter>` +\n `<image href=\"${escapeXml(href)}\" width=\"${width}\" height=\"${height}\" ` +\n `filter=\"url(#f)\"/>` +\n `</svg>`\n\n const img = new Image()\n img.onload = () => resolve(img)\n img.onerror = () => reject(new Error('filter rasterisation failed'))\n img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg)\n })\n}\n"],"names":["contextFilterSupport","supportsContextFilter","ctx","escapeXml","value","toAmount","raw","componentTransfer","slope","intercept","c","sepiaMatrix","amount","r","toSvgPrimitives","filter","primitives","re","match","name","rasterizeWithFilter","sourceCanvas","resolve","reject","width","height","href","svg","img"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { pushHistory as x } from "./index.es148.js";
2
- import { emitChange as v } from "./index.es146.js";
3
- import { onRotateHandle as I, layerCenter as a, onResizeHandle as C, DIRECTIONAL_SHAPES as S, layerBounds as w, rotatePoint as M, clampBoxWidth as E, clampTextSize as b, renderOverlay as p, paintLayer as z, render as s, normRect as k, toLayerSpace as P } from "./index.es147.js";
4
- import { selectLayer as g, setMode as R } from "./index.es150.js";
5
- import { openTextEditor as O } from "./index.es151.js";
1
+ import { pushHistory as x } from "./index151.es.js";
2
+ import { emitChange as v } from "./index149.es.js";
3
+ import { onRotateHandle as I, layerCenter as a, onResizeHandle as C, DIRECTIONAL_SHAPES as S, layerBounds as w, rotatePoint as M, clampBoxWidth as E, clampTextSize as b, renderOverlay as p, paintLayer as z, render as s, normRect as k, toLayerSpace as P } from "./index150.es.js";
4
+ import { selectLayer as g, setMode as R } from "./index153.es.js";
5
+ import { openTextEditor as O } from "./index154.es.js";
6
6
  function f(r, l) {
7
7
  const e = r.dragMode && r.dragRect ? r.dragRect : r.overlayEl.getBoundingClientRect(), o = (l.clientX - e.left) / e.width * r.sourceCanvas.width, n = (l.clientY - e.top) / e.height * r.sourceCanvas.height;
8
8
  return {
@@ -213,4 +213,4 @@ export {
213
213
  $ as onUp,
214
214
  f as toSource
215
215
  };
216
- //# sourceMappingURL=index.es163.js.map
216
+ //# sourceMappingURL=index163.es.js.map