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.
- package/dist/components/atoms/accordion/accordion.d.ts +2 -1
- package/dist/components/atoms/accordion/accordion.d.ts.map +1 -1
- package/dist/components/atoms/avatar/avatar.d.ts +2 -1
- package/dist/components/atoms/avatar/avatar.d.ts.map +1 -1
- package/dist/components/atoms/badge/badge.d.ts +2 -2
- package/dist/components/atoms/badge/badge.d.ts.map +1 -1
- package/dist/components/atoms/skeleton/skeleton.d.ts +1 -1
- package/dist/components/atoms/skeleton/skeleton.d.ts.map +1 -1
- package/dist/components/atoms/tooltip/tooltip.d.ts +2 -2
- package/dist/components/atoms/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/molecules/breadcrumb/breadcrumb-components.d.ts +2 -2
- package/dist/components/molecules/breadcrumb/breadcrumb.d.ts +2 -1
- package/dist/components/molecules/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/components/molecules/creatable-multi-combobox/creatable-multi-combobox.d.ts +2 -1
- package/dist/components/molecules/creatable-multi-combobox/creatable-multi-combobox.d.ts.map +1 -1
- package/dist/components/molecules/dropdown-menu/dropdown-menu-components.d.ts +1 -1
- package/dist/components/molecules/dropdown-menu/dropdown-menu.d.ts +2 -1
- package/dist/components/molecules/dropdown-menu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/molecules/multi-combobox/index.d.ts +2 -2
- package/dist/components/molecules/multi-combobox/index.d.ts.map +1 -1
- package/dist/components/molecules/multi-select/index.d.ts +2 -2
- package/dist/components/molecules/multi-select/index.d.ts.map +1 -1
- package/dist/components/molecules/pagination/pagination-components.d.ts +4 -4
- package/dist/components/molecules/single-combobox/single-combobox.d.ts +2 -2
- package/dist/components/molecules/single-combobox/single-combobox.d.ts.map +1 -1
- package/dist/components/molecules/stepper/stepper-components.d.ts +1 -1
- package/dist/components/molecules/stepper/stepper-components.d.ts.map +1 -1
- package/dist/components/molecules/stepper/stepper.d.ts +2 -1
- package/dist/components/molecules/stepper/stepper.d.ts.map +1 -1
- package/dist/components/molecules/stepper/stepper.mock.d.ts +2 -2
- package/dist/components/molecules/stepper/stepper.mock.d.ts.map +1 -1
- package/dist/components/molecules/swatch-grid/swatch-grid.d.ts +2 -1
- package/dist/components/molecules/swatch-grid/swatch-grid.d.ts.map +1 -1
- package/dist/components/molecules/toast/assets/svgs/danger-icon.d.ts +3 -1
- package/dist/components/molecules/toast/assets/svgs/danger-icon.d.ts.map +1 -1
- package/dist/components/molecules/toast/assets/svgs/info-icon.d.ts +3 -1
- package/dist/components/molecules/toast/assets/svgs/info-icon.d.ts.map +1 -1
- package/dist/components/molecules/toast/assets/svgs/success-icon.d.ts +3 -1
- package/dist/components/molecules/toast/assets/svgs/success-icon.d.ts.map +1 -1
- package/dist/components/molecules/toast/assets/svgs/warning-icon.d.ts +3 -1
- package/dist/components/molecules/toast/assets/svgs/warning-icon.d.ts.map +1 -1
- package/dist/components/molecules/toast/toast-components.d.ts +1 -1
- package/dist/components/molecules/toast/toast.d.ts +2 -1
- package/dist/components/molecules/toast/toast.d.ts.map +1 -1
- package/dist/components/molecules/toggle-multi-select/index.d.ts +2 -2
- package/dist/components/molecules/toggle-multi-select/index.d.ts.map +1 -1
- package/dist/components/organisms/alert-dialog/alert-dialog-components.d.ts +2 -2
- package/dist/components/organisms/alert-dialog/alert-dialog.d.ts +2 -1
- package/dist/components/organisms/alert-dialog/alert-dialog.d.ts.map +1 -1
- package/dist/components/organisms/dialog/dialog-components.d.ts +2 -2
- package/dist/components/organisms/dialog/dialog.d.ts +2 -1
- package/dist/components/organisms/dialog/dialog.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/color-picker.d.ts +3 -1
- package/dist/components/organisms/image-editor/components/color-picker.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/layers-list.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/layers-list.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel-adjust.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/panel-adjust.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel-crop.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/panel-crop.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel-insert.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel-selected.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/ribbon.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/ribbon.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/status-bar.d.ts +2 -1
- package/dist/components/organisms/image-editor/components/status-bar.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/image-editor-modal.d.ts +2 -1
- package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
- package/dist/components/organisms/sheet/sheet-components.d.ts +2 -2
- package/dist/components/organisms/sheet/sheet.d.ts +2 -1
- package/dist/components/organisms/sheet/sheet.d.ts.map +1 -1
- package/dist/components/organisms/sidebar/sidebar.d.ts +2 -1
- package/dist/components/organisms/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/ui/agent-snippet-view/agent-snippet-view.d.ts +1 -1
- package/dist/components/ui/agent-snippet-view/agent-snippet-view.d.ts.map +1 -1
- package/dist/components/ui/map-marker-hover-card/components/map-cluster-hover-card.d.ts +2 -1
- package/dist/components/ui/map-marker-hover-card/components/map-cluster-hover-card.d.ts.map +1 -1
- package/dist/components/ui/map-marker-hover-card/components/map-point-hover-card.d.ts +2 -1
- package/dist/components/ui/map-marker-hover-card/components/map-point-hover-card.d.ts.map +1 -1
- package/dist/components/ui/map-marker-hover-card/map-marker-hover-card.d.ts +2 -1
- package/dist/components/ui/map-marker-hover-card/map-marker-hover-card.d.ts.map +1 -1
- package/dist/components/ui/request-credits-view/component/request-credit-dialog.d.ts.map +1 -1
- package/dist/components/ui/star-score/star-score.d.ts +2 -1
- package/dist/components/ui/star-score/star-score.d.ts.map +1 -1
- package/dist/components/unstyled/calendar/calendar.d.ts +1 -1
- package/dist/components/unstyled/calendar/calendar.d.ts.map +1 -1
- package/dist/components/unstyled/command/index.d.ts +2 -2
- package/dist/components/unstyled/command/index.d.ts.map +1 -1
- package/dist/components/unstyled/date-picker/date-picker.d.ts +2 -2
- package/dist/components/unstyled/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/unstyled/hover-card/hover-card.d.ts +2 -1
- package/dist/components/unstyled/hover-card/hover-card.d.ts.map +1 -1
- package/dist/components/unstyled/popover/popover.d.ts +2 -1
- package/dist/components/unstyled/popover/popover.d.ts.map +1 -1
- package/dist/components/unstyled/table/table.d.ts +2 -2
- package/dist/components/unstyled/table/table.d.ts.map +1 -1
- package/dist/index.es.js +88 -88
- package/dist/{index.es10.js → index10.es.js} +3 -3
- package/dist/{index.es10.js.map → index10.es.js.map} +1 -1
- package/dist/{index.es102.js → index100.es.js} +1 -1
- package/dist/{index.es102.js.map → index100.es.js.map} +1 -1
- package/dist/{index.es126.js → index101.es.js} +1 -1
- package/dist/{index.es126.js.map → index101.es.js.map} +1 -1
- package/dist/{index.es99.js → index102.es.js} +2 -2
- package/dist/index102.es.js.map +1 -0
- package/dist/{index.es100.js → index103.es.js} +2 -2
- package/dist/{index.es100.js.map → index103.es.js.map} +1 -1
- package/dist/{index.es101.js → index104.es.js} +1 -1
- package/dist/{index.es101.js.map → index104.es.js.map} +1 -1
- package/dist/{index.es104.js → index105.es.js} +1 -1
- package/dist/{index.es104.js.map → index105.es.js.map} +1 -1
- package/dist/{index.es119.js → index106.es.js} +1 -1
- package/dist/{index.es119.js.map → index106.es.js.map} +1 -1
- package/dist/{index.es112.js → index107.es.js} +5 -5
- package/dist/{index.es112.js.map → index107.es.js.map} +1 -1
- package/dist/{index.es103.js → index108.es.js} +1 -1
- package/dist/{index.es103.js.map → index108.es.js.map} +1 -1
- package/dist/{index.es136.js → index109.es.js} +1 -1
- package/dist/{index.es136.js.map → index109.es.js.map} +1 -1
- package/dist/{index.es11.js → index11.es.js} +4 -4
- package/dist/{index.es11.js.map → index11.es.js.map} +1 -1
- package/dist/{index.es127.js → index110.es.js} +4 -4
- package/dist/{index.es127.js.map → index110.es.js.map} +1 -1
- package/dist/{index.es128.js → index111.es.js} +4 -4
- package/dist/{index.es128.js.map → index111.es.js.map} +1 -1
- package/dist/{index.es129.js → index112.es.js} +5 -5
- package/dist/{index.es129.js.map → index112.es.js.map} +1 -1
- package/dist/{index.es130.js → index113.es.js} +2 -2
- package/dist/{index.es130.js.map → index113.es.js.map} +1 -1
- package/dist/{index.es131.js → index114.es.js} +3 -3
- package/dist/{index.es131.js.map → index114.es.js.map} +1 -1
- package/dist/{index.es123.js → index115.es.js} +2 -2
- package/dist/{index.es123.js.map → index115.es.js.map} +1 -1
- package/dist/{index.es124.js → index116.es.js} +6 -6
- package/dist/{index.es124.js.map → index116.es.js.map} +1 -1
- package/dist/{index.es115.js → index117.es.js} +1 -1
- package/dist/{index.es115.js.map → index117.es.js.map} +1 -1
- package/dist/{index.es116.js → index118.es.js} +7 -7
- package/dist/{index.es116.js.map → index118.es.js.map} +1 -1
- package/dist/{index.es117.js → index119.es.js} +1 -1
- package/dist/{index.es117.js.map → index119.es.js.map} +1 -1
- package/dist/{index.es12.js → index12.es.js} +3 -3
- package/dist/{index.es12.js.map → index12.es.js.map} +1 -1
- package/dist/{index.es118.js → index120.es.js} +13 -13
- package/dist/{index.es118.js.map → index120.es.js.map} +1 -1
- package/dist/{index.es105.js → index121.es.js} +4 -4
- package/dist/{index.es105.js.map → index121.es.js.map} +1 -1
- package/dist/{index.es106.js → index122.es.js} +3 -3
- package/dist/{index.es106.js.map → index122.es.js.map} +1 -1
- package/dist/{index.es107.js → index123.es.js} +3 -3
- package/dist/{index.es107.js.map → index123.es.js.map} +1 -1
- package/dist/{index.es108.js → index124.es.js} +3 -3
- package/dist/{index.es108.js.map → index124.es.js.map} +1 -1
- package/dist/{index.es109.js → index125.es.js} +10 -10
- package/dist/{index.es109.js.map → index125.es.js.map} +1 -1
- package/dist/{index.es110.js → index126.es.js} +10 -10
- package/dist/{index.es110.js.map → index126.es.js.map} +1 -1
- package/dist/{index.es111.js → index127.es.js} +5 -5
- package/dist/{index.es111.js.map → index127.es.js.map} +1 -1
- package/dist/{index.es113.js → index128.es.js} +1 -1
- package/dist/{index.es113.js.map → index128.es.js.map} +1 -1
- package/dist/{index.es114.js → index129.es.js} +5 -5
- package/dist/{index.es114.js.map → index129.es.js.map} +1 -1
- package/dist/{index.es13.js → index13.es.js} +3 -3
- package/dist/{index.es13.js.map → index13.es.js.map} +1 -1
- package/dist/{index.es135.js → index130.es.js} +3 -3
- package/dist/{index.es135.js.map → index130.es.js.map} +1 -1
- package/dist/{index.es98.js → index131.es.js} +5 -5
- package/dist/index131.es.js.map +1 -0
- package/dist/{index.es132.js → index132.es.js} +3 -3
- package/dist/{index.es132.js.map → index132.es.js.map} +1 -1
- package/dist/{index.es120.js → index133.es.js} +1 -1
- package/dist/{index.es120.js.map → index133.es.js.map} +1 -1
- package/dist/{index.es134.js → index134.es.js} +1 -1
- package/dist/{index.es134.js.map → index134.es.js.map} +1 -1
- package/dist/{index.es125.js → index135.es.js} +3 -3
- package/dist/{index.es125.js.map → index135.es.js.map} +1 -1
- package/dist/{index.es97.js → index136.es.js} +1 -1
- package/dist/index136.es.js.map +1 -0
- package/dist/{index.es139.js → index137.es.js} +2 -2
- package/dist/{index.es139.js.map → index137.es.js.map} +1 -1
- package/dist/{index.es156.js → index138.es.js} +1 -1
- package/dist/{index.es156.js.map → index138.es.js.map} +1 -1
- package/dist/{index.es158.js → index139.es.js} +3 -3
- package/dist/{index.es158.js.map → index139.es.js.map} +1 -1
- package/dist/{index.es14.js → index14.es.js} +2 -2
- package/dist/{index.es14.js.map → index14.es.js.map} +1 -1
- package/dist/{index.es159.js → index140.es.js} +1 -1
- package/dist/{index.es159.js.map → index140.es.js.map} +1 -1
- package/dist/{index.es160.js → index141.es.js} +1 -1
- package/dist/{index.es160.js.map → index141.es.js.map} +1 -1
- package/dist/{index.es161.js → index142.es.js} +1 -1
- package/dist/{index.es161.js.map → index142.es.js.map} +1 -1
- package/dist/{index.es140.js → index143.es.js} +1 -1
- package/dist/{index.es140.js.map → index143.es.js.map} +1 -1
- package/dist/{index.es141.js → index144.es.js} +6 -6
- package/dist/{index.es141.js.map → index144.es.js.map} +1 -1
- package/dist/{index.es142.js → index145.es.js} +3 -3
- package/dist/{index.es142.js.map → index145.es.js.map} +1 -1
- package/dist/{index.es143.js → index146.es.js} +2 -2
- package/dist/{index.es143.js.map → index146.es.js.map} +1 -1
- package/dist/{index.es144.js → index147.es.js} +1 -1
- package/dist/{index.es144.js.map → index147.es.js.map} +1 -1
- package/dist/{index.es145.js → index148.es.js} +1 -1
- package/dist/{index.es145.js.map → index148.es.js.map} +1 -1
- package/dist/{index.es146.js → index149.es.js} +2 -2
- package/dist/{index.es146.js.map → index149.es.js.map} +1 -1
- package/dist/{index.es15.js → index15.es.js} +3 -3
- package/dist/{index.es15.js.map → index15.es.js.map} +1 -1
- package/dist/{index.es147.js → index150.es.js} +3 -3
- package/dist/{index.es147.js.map → index150.es.js.map} +1 -1
- package/dist/{index.es148.js → index151.es.js} +3 -3
- package/dist/{index.es148.js.map → index151.es.js.map} +1 -1
- package/dist/{index.es149.js → index152.es.js} +5 -5
- package/dist/{index.es149.js.map → index152.es.js.map} +1 -1
- package/dist/{index.es150.js → index153.es.js} +3 -3
- package/dist/{index.es150.js.map → index153.es.js.map} +1 -1
- package/dist/{index.es151.js → index154.es.js} +2 -2
- package/dist/{index.es151.js.map → index154.es.js.map} +1 -1
- package/dist/{index.es152.js → index155.es.js} +4 -4
- package/dist/{index.es152.js.map → index155.es.js.map} +1 -1
- package/dist/{index.es153.js → index156.es.js} +6 -6
- package/dist/{index.es153.js.map → index156.es.js.map} +1 -1
- package/dist/{index.es154.js → index157.es.js} +5 -5
- package/dist/{index.es154.js.map → index157.es.js.map} +1 -1
- package/dist/{index.es155.js → index158.es.js} +9 -9
- package/dist/{index.es155.js.map → index158.es.js.map} +1 -1
- package/dist/{index.es157.js → index159.es.js} +1 -1
- package/dist/{index.es157.js.map → index159.es.js.map} +1 -1
- package/dist/{index.es16.js → index16.es.js} +8 -8
- package/dist/{index.es16.js.map → index16.es.js.map} +1 -1
- package/dist/{index.es137.js → index160.es.js} +1 -1
- package/dist/{index.es137.js.map → index160.es.js.map} +1 -1
- package/dist/{index.es138.js → index161.es.js} +1 -1
- package/dist/{index.es138.js.map → index161.es.js.map} +1 -1
- package/dist/{index.es162.js → index162.es.js} +1 -1
- package/dist/{index.es162.js.map → index162.es.js.map} +1 -1
- package/dist/{index.es163.js → index163.es.js} +6 -6
- package/dist/{index.es163.js.map → index163.es.js.map} +1 -1
- package/dist/{index.es164.js → index164.es.js} +2 -2
- package/dist/{index.es164.js.map → index164.es.js.map} +1 -1
- package/dist/{index.es165.js → index165.es.js} +2 -2
- package/dist/{index.es165.js.map → index165.es.js.map} +1 -1
- package/dist/{index.es166.js → index166.es.js} +4 -4
- package/dist/{index.es166.js.map → index166.es.js.map} +1 -1
- package/dist/{index.es167.js → index167.es.js} +4 -4
- package/dist/{index.es167.js.map → index167.es.js.map} +1 -1
- package/dist/{index.es168.js → index168.es.js} +8 -8
- package/dist/{index.es168.js.map → index168.es.js.map} +1 -1
- package/dist/{index.es169.js → index169.es.js} +8 -8
- package/dist/{index.es169.js.map → index169.es.js.map} +1 -1
- package/dist/{index.es17.js → index17.es.js} +3 -3
- package/dist/{index.es17.js.map → index17.es.js.map} +1 -1
- package/dist/{index.es170.js → index170.es.js} +19 -19
- package/dist/{index.es170.js.map → index170.es.js.map} +1 -1
- package/dist/{index.es171.js → index171.es.js} +4 -4
- package/dist/{index.es171.js.map → index171.es.js.map} +1 -1
- package/dist/{index.es172.js → index172.es.js} +2 -2
- package/dist/{index.es172.js.map → index172.es.js.map} +1 -1
- package/dist/{index.es173.js → index173.es.js} +6 -6
- package/dist/{index.es173.js.map → index173.es.js.map} +1 -1
- package/dist/{index.es174.js → index174.es.js} +17 -16
- package/dist/{index.es174.js.map → index174.es.js.map} +1 -1
- package/dist/{index.es175.js → index175.es.js} +27 -26
- package/dist/{index.es175.js.map → index175.es.js.map} +1 -1
- package/dist/{index.es176.js → index176.es.js} +13 -12
- package/dist/{index.es176.js.map → index176.es.js.map} +1 -1
- package/dist/{index.es177.js → index177.es.js} +5 -5
- package/dist/{index.es177.js.map → index177.es.js.map} +1 -1
- package/dist/{index.es178.js → index178.es.js} +27 -26
- package/dist/{index.es178.js.map → index178.es.js.map} +1 -1
- package/dist/{index.es179.js → index179.es.js} +30 -29
- package/dist/{index.es179.js.map → index179.es.js.map} +1 -1
- package/dist/{index.es18.js → index18.es.js} +2 -2
- package/dist/{index.es18.js.map → index18.es.js.map} +1 -1
- package/dist/{index.es180.js → index180.es.js} +1 -1
- package/dist/{index.es180.js.map → index180.es.js.map} +1 -1
- package/dist/{index.es181.js → index181.es.js} +2 -2
- package/dist/{index.es181.js.map → index181.es.js.map} +1 -1
- package/dist/{index.es182.js → index182.es.js} +1 -1
- package/dist/{index.es182.js.map → index182.es.js.map} +1 -1
- package/dist/{index.es19.js → index19.es.js} +4 -4
- package/dist/{index.es19.js.map → index19.es.js.map} +1 -1
- package/dist/{index.es2.js → index2.es.js} +26 -26
- package/dist/index2.es.js.map +1 -0
- package/dist/{index.es20.js → index20.es.js} +5 -5
- package/dist/{index.es20.js.map → index20.es.js.map} +1 -1
- package/dist/{index.es21.js → index21.es.js} +6 -6
- package/dist/{index.es21.js.map → index21.es.js.map} +1 -1
- package/dist/{index.es22.js → index22.es.js} +2 -2
- package/dist/{index.es22.js.map → index22.es.js.map} +1 -1
- package/dist/{index.es23.js → index23.es.js} +7 -7
- package/dist/{index.es23.js.map → index23.es.js.map} +1 -1
- package/dist/{index.es24.js → index24.es.js} +7 -7
- package/dist/{index.es24.js.map → index24.es.js.map} +1 -1
- package/dist/{index.es25.js → index25.es.js} +3 -3
- package/dist/{index.es25.js.map → index25.es.js.map} +1 -1
- package/dist/{index.es26.js → index26.es.js} +2 -2
- package/dist/{index.es26.js.map → index26.es.js.map} +1 -1
- package/dist/{index.es27.js → index27.es.js} +7 -7
- package/dist/{index.es27.js.map → index27.es.js.map} +1 -1
- package/dist/{index.es28.js → index28.es.js} +9 -9
- package/dist/{index.es28.js.map → index28.es.js.map} +1 -1
- package/dist/{index.es29.js → index29.es.js} +5 -5
- package/dist/{index.es29.js.map → index29.es.js.map} +1 -1
- package/dist/{index.es3.js → index3.es.js} +3 -3
- package/dist/{index.es3.js.map → index3.es.js.map} +1 -1
- package/dist/{index.es30.js → index30.es.js} +3 -3
- package/dist/{index.es30.js.map → index30.es.js.map} +1 -1
- package/dist/{index.es31.js → index31.es.js} +1 -1
- package/dist/{index.es31.js.map → index31.es.js.map} +1 -1
- package/dist/{index.es32.js → index32.es.js} +2 -2
- package/dist/{index.es32.js.map → index32.es.js.map} +1 -1
- package/dist/{index.es33.js → index33.es.js} +3 -3
- package/dist/{index.es33.js.map → index33.es.js.map} +1 -1
- package/dist/{index.es34.js → index34.es.js} +5 -5
- package/dist/{index.es34.js.map → index34.es.js.map} +1 -1
- package/dist/{index.es35.js → index35.es.js} +6 -6
- package/dist/{index.es35.js.map → index35.es.js.map} +1 -1
- package/dist/{index.es36.js → index36.es.js} +5 -5
- package/dist/{index.es36.js.map → index36.es.js.map} +1 -1
- package/dist/{index.es37.js → index37.es.js} +6 -6
- package/dist/{index.es37.js.map → index37.es.js.map} +1 -1
- package/dist/{index.es38.js → index38.es.js} +2 -2
- package/dist/{index.es38.js.map → index38.es.js.map} +1 -1
- package/dist/{index.es39.js → index39.es.js} +3 -3
- package/dist/{index.es39.js.map → index39.es.js.map} +1 -1
- package/dist/{index.es4.js → index4.es.js} +2 -2
- package/dist/{index.es4.js.map → index4.es.js.map} +1 -1
- package/dist/{index.es40.js → index40.es.js} +4 -4
- package/dist/{index.es40.js.map → index40.es.js.map} +1 -1
- package/dist/{index.es41.js → index41.es.js} +5 -5
- package/dist/{index.es41.js.map → index41.es.js.map} +1 -1
- package/dist/{index.es42.js → index42.es.js} +4 -4
- package/dist/{index.es42.js.map → index42.es.js.map} +1 -1
- package/dist/{index.es43.js → index43.es.js} +2 -2
- package/dist/{index.es43.js.map → index43.es.js.map} +1 -1
- package/dist/{index.es44.js → index44.es.js} +2 -2
- package/dist/{index.es44.js.map → index44.es.js.map} +1 -1
- package/dist/{index.es45.js → index45.es.js} +5 -5
- package/dist/{index.es45.js.map → index45.es.js.map} +1 -1
- package/dist/{index.es46.js → index46.es.js} +9 -9
- package/dist/{index.es46.js.map → index46.es.js.map} +1 -1
- package/dist/{index.es47.js → index47.es.js} +7 -7
- package/dist/{index.es47.js.map → index47.es.js.map} +1 -1
- package/dist/{index.es48.js → index48.es.js} +10 -10
- package/dist/{index.es48.js.map → index48.es.js.map} +1 -1
- package/dist/{index.es49.js → index49.es.js} +2 -2
- package/dist/{index.es49.js.map → index49.es.js.map} +1 -1
- package/dist/{index.es5.js → index5.es.js} +2 -2
- package/dist/{index.es5.js.map → index5.es.js.map} +1 -1
- package/dist/{index.es50.js → index50.es.js} +1 -1
- package/dist/{index.es50.js.map → index50.es.js.map} +1 -1
- package/dist/{index.es51.js → index51.es.js} +2 -2
- package/dist/{index.es51.js.map → index51.es.js.map} +1 -1
- package/dist/{index.es52.js → index52.es.js} +3 -3
- package/dist/{index.es52.js.map → index52.es.js.map} +1 -1
- package/dist/{index.es53.js → index53.es.js} +7 -7
- package/dist/{index.es53.js.map → index53.es.js.map} +1 -1
- package/dist/{index.es54.js → index54.es.js} +4 -4
- package/dist/{index.es54.js.map → index54.es.js.map} +1 -1
- package/dist/{index.es55.js → index55.es.js} +5 -5
- package/dist/{index.es55.js.map → index55.es.js.map} +1 -1
- package/dist/{index.es56.js → index56.es.js} +3 -3
- package/dist/{index.es56.js.map → index56.es.js.map} +1 -1
- package/dist/{index.es57.js → index57.es.js} +9 -9
- package/dist/{index.es57.js.map → index57.es.js.map} +1 -1
- package/dist/{index.es58.js → index58.es.js} +4 -3
- package/dist/{index.es58.js.map → index58.es.js.map} +1 -1
- package/dist/{index.es59.js → index59.es.js} +2 -2
- package/dist/{index.es59.js.map → index59.es.js.map} +1 -1
- package/dist/{index.es6.js → index6.es.js} +2 -2
- package/dist/{index.es6.js.map → index6.es.js.map} +1 -1
- package/dist/{index.es60.js → index60.es.js} +3 -3
- package/dist/{index.es60.js.map → index60.es.js.map} +1 -1
- package/dist/{index.es61.js → index61.es.js} +2 -2
- package/dist/{index.es61.js.map → index61.es.js.map} +1 -1
- package/dist/{index.es62.js → index62.es.js} +2 -2
- package/dist/{index.es62.js.map → index62.es.js.map} +1 -1
- package/dist/{index.es63.js → index63.es.js} +2 -2
- package/dist/{index.es63.js.map → index63.es.js.map} +1 -1
- package/dist/{index.es64.js → index64.es.js} +3 -3
- package/dist/{index.es64.js.map → index64.es.js.map} +1 -1
- package/dist/{index.es65.js → index65.es.js} +3 -3
- package/dist/{index.es65.js.map → index65.es.js.map} +1 -1
- package/dist/{index.es66.js → index66.es.js} +2 -2
- package/dist/{index.es66.js.map → index66.es.js.map} +1 -1
- package/dist/{index.es67.js → index67.es.js} +3 -3
- package/dist/{index.es67.js.map → index67.es.js.map} +1 -1
- package/dist/{index.es68.js → index68.es.js} +3 -3
- package/dist/{index.es68.js.map → index68.es.js.map} +1 -1
- package/dist/{index.es69.js → index69.es.js} +6 -6
- package/dist/{index.es69.js.map → index69.es.js.map} +1 -1
- package/dist/{index.es7.js → index7.es.js} +2 -2
- package/dist/{index.es7.js.map → index7.es.js.map} +1 -1
- package/dist/{index.es70.js → index70.es.js} +6 -6
- package/dist/{index.es70.js.map → index70.es.js.map} +1 -1
- package/dist/{index.es71.js → index71.es.js} +4 -4
- package/dist/{index.es71.js.map → index71.es.js.map} +1 -1
- package/dist/{index.es72.js → index72.es.js} +8 -8
- package/dist/{index.es72.js.map → index72.es.js.map} +1 -1
- package/dist/{index.es73.js → index73.es.js} +5 -5
- package/dist/{index.es73.js.map → index73.es.js.map} +1 -1
- package/dist/{index.es74.js → index74.es.js} +1 -1
- package/dist/{index.es74.js.map → index74.es.js.map} +1 -1
- package/dist/{index.es75.js → index75.es.js} +1 -1
- package/dist/{index.es75.js.map → index75.es.js.map} +1 -1
- package/dist/{index.es76.js → index76.es.js} +1 -1
- package/dist/{index.es76.js.map → index76.es.js.map} +1 -1
- package/dist/{index.es77.js → index77.es.js} +1 -1
- package/dist/{index.es77.js.map → index77.es.js.map} +1 -1
- package/dist/{index.es78.js → index78.es.js} +2 -2
- package/dist/{index.es78.js.map → index78.es.js.map} +1 -1
- package/dist/{index.es79.js → index79.es.js} +1 -1
- package/dist/{index.es79.js.map → index79.es.js.map} +1 -1
- package/dist/{index.es8.js → index8.es.js} +3 -3
- package/dist/{index.es8.js.map → index8.es.js.map} +1 -1
- package/dist/{index.es80.js → index80.es.js} +3 -3
- package/dist/{index.es80.js.map → index80.es.js.map} +1 -1
- package/dist/{index.es81.js → index81.es.js} +4 -4
- package/dist/{index.es81.js.map → index81.es.js.map} +1 -1
- package/dist/{index.es82.js → index82.es.js} +1 -1
- package/dist/{index.es82.js.map → index82.es.js.map} +1 -1
- package/dist/{index.es83.js → index83.es.js} +1 -1
- package/dist/{index.es83.js.map → index83.es.js.map} +1 -1
- package/dist/{index.es84.js.map → index84.es.js.map} +1 -1
- package/dist/{index.es85.js → index85.es.js} +2 -2
- package/dist/{index.es85.js.map → index85.es.js.map} +1 -1
- package/dist/{index.es86.js → index86.es.js} +2 -2
- package/dist/{index.es86.js.map → index86.es.js.map} +1 -1
- package/dist/{index.es87.js → index87.es.js} +1 -1
- package/dist/{index.es87.js.map → index87.es.js.map} +1 -1
- package/dist/index88.es.js +5 -0
- package/dist/index88.es.js.map +1 -0
- package/dist/{index.es89.js → index89.es.js} +1 -1
- package/dist/{index.es89.js.map → index89.es.js.map} +1 -1
- package/dist/{index.es9.js → index9.es.js} +4 -4
- package/dist/{index.es9.js.map → index9.es.js.map} +1 -1
- package/dist/{index.es90.js → index90.es.js} +2 -2
- package/dist/{index.es90.js.map → index90.es.js.map} +1 -1
- package/dist/{index.es91.js → index91.es.js} +3 -3
- package/dist/{index.es91.js.map → index91.es.js.map} +1 -1
- package/dist/{index.es92.js → index92.es.js} +1 -1
- package/dist/{index.es92.js.map → index92.es.js.map} +1 -1
- package/dist/{index.es93.js → index93.es.js} +1 -1
- package/dist/{index.es93.js.map → index93.es.js.map} +1 -1
- package/dist/{index.es94.js → index94.es.js} +1 -1
- package/dist/{index.es94.js.map → index94.es.js.map} +1 -1
- package/dist/{index.es95.js → index95.es.js} +1 -1
- package/dist/{index.es95.js.map → index95.es.js.map} +1 -1
- package/dist/{index.es96.js → index96.es.js} +1 -1
- package/dist/{index.es96.js.map → index96.es.js.map} +1 -1
- package/dist/{index.es122.js → index97.es.js} +1 -1
- package/dist/index97.es.js.map +1 -0
- package/dist/{index.es133.js → index98.es.js} +1 -1
- package/dist/index98.es.js.map +1 -0
- package/dist/{index.es121.js → index99.es.js} +1 -1
- package/dist/index99.es.js.map +1 -0
- package/dist/styles.css +11 -17
- package/package.json +2 -1
- package/dist/index.es121.js.map +0 -1
- package/dist/index.es122.js.map +0 -1
- package/dist/index.es133.js.map +0 -1
- package/dist/index.es2.js.map +0 -1
- package/dist/index.es88.js +0 -5
- package/dist/index.es88.js.map +0 -1
- package/dist/index.es97.js.map +0 -1
- package/dist/index.es98.js.map +0 -1
- package/dist/index.es99.js.map +0 -1
- package/dist/{index.es84.js → index84.es.js} +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index141.es.js","sources":["../src/components/ui/form-renderer/context/form-values/form-values.context.ts"],"sourcesContent":["// contexts/FormValuesContext.tsx\nimport { createContext, useContext } from 'react'\nimport {\n AssetValue,\n FormField,\n FormFieldValue,\n FormStep,\n FormValues,\n onToggleImageEditor,\n} from '../../form.types'\n\ninterface FormValuesContextType {\n values: FormValues\n errors: Record<string, string>\n setValue: (fieldId: string, value: FormFieldValue) => void\n setFormValues: (formValues: FormValues) => void\n validateField: (field: FormField) => {\n isValid: boolean\n errorMessage: string\n }\n validateStep: (step: FormStep) => {\n isStepValid: boolean\n errors: Record<string, string>\n }\n submitForm: () => void\n onAssetUpload?: (file: File) => Promise<AssetValue>\n onToggleImageEditor?: onToggleImageEditor\n /** Returns headers for API requests (e.g. Authorization from cookie). Used by CreatableMultiCombobox */\n getRequestHeaders?: () =>\n | Record<string, string>\n | Promise<Record<string, string>>\n /** Returns extra body fields for create option API (e.g. { email } from cookie). Used by CreatableMultiCombobox */\n getCreateOptionExtraBody?: () =>\n | Record<string, unknown>\n | Promise<Record<string, unknown>>\n}\n\nexport const FormValuesContext = createContext<FormValuesContextType | null>(\n null\n)\n\nexport const useFormValues = () => {\n const context = useContext(FormValuesContext)\n if (!context) {\n throw new Error('useFormValues must be used within a FormValuesProvider')\n }\n return context\n}\n"],"names":["FormValuesContext","createContext","useFormValues","context","useContext"],"mappings":";AAqCO,MAAMA,IAAoBC;AAAA,EAC/B;AACF,GAEaC,IAAgB,MAAM;AACjC,QAAMC,IAAUC,EAAWJ,CAAiB;AAC5C,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,wDAAwD;AAE1E,SAAOA;AACT;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index142.es.js","sources":["../src/components/ui/form-renderer/form.enums.ts"],"sourcesContent":["export enum FormFieldType {\n // Text fields\n SHORT_TEXT = 'short-text',\n EMAIL = 'email',\n LONG_TEXT = 'long-text',\n // Number fields\n NUMBER = 'number',\n MOBILE_NUMBER = 'mobile-number',\n DATE_PICKER = 'date-picker',\n\n // Selection fields\n SINGLE_COMBOBOX = 'single-combobox',\n CREATABLE_MULTI_COMBOBOX = 'creatable-multi-combobox',\n MULTI_COMBOBOX = 'multi-combobox',\n RADIO_GROUP = 'radio-group',\n RADIO_GROUP_WITH_OPTIONAL_INPUT = 'radio-group-with-optional-input',\n CHECKBOX_GROUP = 'checkbox-group',\n\n // Upload fields\n SINGLE_IMAGE_PICKER = 'single-image-picker',\n MULTI_IMAGE_PICKER = 'multi-image-picker',\n TAGGABLE_MULTI_IMAGE_PICKER = 'taggable-multi-image-picker',\n SINGLE_VIDEO_PICKER = 'single-video-picker',\n MULTI_VIDEO_PICKER = 'multi-video-picker',\n SINGLE_VIDEO_PICKER_WITH_INPUT = 'single-video-picker-with-input',\n TAGGABLE_MULTI_IMAGE_PICKER_WITH_INPUT = 'taggable-multi-image-picker-with-input',\n\n REPEATABLE_GROUP_FIELD = 'repeatable-group-field',\n}\n"],"names":["FormFieldType"],"mappings":"AAAO,IAAKA,sBAAAA,OAEVA,EAAA,aAAa,cACbA,EAAA,QAAQ,SACRA,EAAA,YAAY,aAEZA,EAAA,SAAS,UACTA,EAAA,gBAAgB,iBAChBA,EAAA,cAAc,eAGdA,EAAA,kBAAkB,mBAClBA,EAAA,2BAA2B,4BAC3BA,EAAA,iBAAiB,kBACjBA,EAAA,cAAc,eACdA,EAAA,kCAAkC,mCAClCA,EAAA,iBAAiB,kBAGjBA,EAAA,sBAAsB,uBACtBA,EAAA,qBAAqB,sBACrBA,EAAA,8BAA8B,+BAC9BA,EAAA,sBAAsB,uBACtBA,EAAA,qBAAqB,sBACrBA,EAAA,iCAAiC,kCACjCA,EAAA,yCAAyC,0CAEzCA,EAAA,yBAAyB,0BA3BfA,IAAAA,KAAA,CAAA,CAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index143.es.js","sources":["../src/components/organisms/image-editor/components/portal-context.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nexport const ImageEditorPortalContext = createContext<HTMLElement | null>(null)\n\nexport function useImageEditorPortalContainer() {\n return useContext(ImageEditorPortalContext)\n}\n"],"names":["ImageEditorPortalContext","createContext","useImageEditorPortalContainer","useContext"],"mappings":";AAEO,MAAMA,IAA2BC,EAAkC,IAAI;AAEvE,SAASC,IAAgC;AAC9C,SAAOC,EAAWH,CAAwB;AAC5C;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import t from "react";
|
|
2
|
-
import { LayersList as l } from "./
|
|
3
|
-
import { PanelAdjust as o } from "./
|
|
4
|
-
import { PanelCrop as s } from "./
|
|
5
|
-
import { PanelInsert as m } from "./
|
|
6
|
-
import { PanelSelected as c } from "./
|
|
2
|
+
import { LayersList as l } from "./index165.es.js";
|
|
3
|
+
import { PanelAdjust as o } from "./index166.es.js";
|
|
4
|
+
import { PanelCrop as s } from "./index167.es.js";
|
|
5
|
+
import { PanelInsert as m } from "./index168.es.js";
|
|
6
|
+
import { PanelSelected as c } from "./index169.es.js";
|
|
7
7
|
const d = {
|
|
8
8
|
select: {
|
|
9
9
|
title: "Adjust & layers",
|
|
@@ -22,4 +22,4 @@ function f({ ui: e, engine: a }) {
|
|
|
22
22
|
export {
|
|
23
23
|
f as Panel
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=
|
|
25
|
+
//# sourceMappingURL=index144.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index144.es.js","sources":["../src/components/organisms/image-editor/components/panel.tsx"],"sourcesContent":["import React from 'react'\n\nimport {\n ImageEditorEngine,\n ImageEditorMode,\n ImageEditorUiState,\n} from '../image-editor.types'\nimport { LayersList } from './layers-list'\nimport { PanelAdjust } from './panel-adjust'\nimport { PanelCrop } from './panel-crop'\nimport { PanelInsert } from './panel-insert'\nimport { PanelSelected } from './panel-selected'\n\ninterface PanelProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n}\n\nconst PANEL_HEADERS: Record<ImageEditorMode, { title: string; sub: string }> = {\n select: {\n title: 'Adjust & layers',\n sub: 'Adjust the photo, or click a layer',\n },\n crop: { title: 'Crop', sub: 'Trim to a region' },\n text: { title: 'Add text', sub: 'Click on the image to place' },\n draw: { title: 'Draw', sub: 'Freehand — becomes a layer' },\n shape: { title: 'Shape', sub: 'Drag to draw — becomes a layer' },\n sticker: { title: 'Stickers', sub: 'Click a sticker to drop it in' },\n}\n\nexport function Panel({ ui, engine }: PanelProps) {\n const header = PANEL_HEADERS[ui.mode]\n\n return (\n <aside className=\"image-editor-panel shrink-0 touch-pan-y overflow-y-auto overscroll-y-contain bg-light-3 p-4\">\n <h3 className=\"mb-1 text-base font-semibold\">{header.title}</h3>\n <p className=\"mb-3.5 text-xs text-light-4\">{header.sub}</p>\n\n {ui.mode === 'select' && ui.selected == null && (\n <PanelAdjust adjustments={ui.adjustments} engine={engine} />\n )}\n {ui.mode === 'select' && ui.selected != null && (\n <PanelSelected selected={ui.selected} engine={engine} />\n )}\n {ui.mode === 'crop' && <PanelCrop ui={ui} engine={engine} />}\n {(ui.mode === 'text' ||\n ui.mode === 'draw' ||\n ui.mode === 'shape' ||\n ui.mode === 'sticker') && <PanelInsert ui={ui} engine={engine} />}\n\n {ui.hasImage && <LayersList ui={ui} engine={engine} />}\n </aside>\n )\n}\n"],"names":["PANEL_HEADERS","Panel","ui","engine","header","React","PanelAdjust","PanelSelected","PanelCrop","PanelInsert","LayersList"],"mappings":";;;;;;AAkBA,MAAMA,IAAyE;AAAA,EAC7E,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAAA,EAEP,MAAM,EAAE,OAAO,QAAQ,KAAK,mBAAA;AAAA,EAC5B,MAAM,EAAE,OAAO,YAAY,KAAK,8BAAA;AAAA,EAChC,MAAM,EAAE,OAAO,QAAQ,KAAK,6BAAA;AAAA,EAC5B,OAAO,EAAE,OAAO,SAAS,KAAK,iCAAA;AAAA,EAC9B,SAAS,EAAE,OAAO,YAAY,KAAK,gCAAA;AACrC;AAEO,SAASC,EAAM,EAAE,IAAAC,GAAI,QAAAC,KAAsB;AAChD,QAAMC,IAASJ,EAAcE,EAAG,IAAI;AAEpC,SACEG,gBAAAA,EAAA,cAAC,SAAA,EAAM,WAAU,iIACd,MAAA,EAAG,WAAU,+BAAA,GAAgCD,EAAO,KAAM,GAC3DC,gBAAAA,EAAA,cAAC,KAAA,EAAE,WAAU,iCAA+BD,EAAO,GAAI,GAEtDF,EAAG,SAAS,YAAYA,EAAG,YAAY,wCACrCI,GAAA,EAAY,aAAaJ,EAAG,aAAa,QAAAC,GAAgB,GAE3DD,EAAG,SAAS,YAAYA,EAAG,YAAY,QACtCG,gBAAAA,EAAA,cAACE,GAAA,EAAc,UAAUL,EAAG,UAAU,QAAAC,GAAgB,GAEvDD,EAAG,SAAS,UAAUG,gBAAAA,EAAA,cAACG,GAAA,EAAU,IAAAN,GAAQ,QAAAC,EAAA,CAAgB,IACxDD,EAAG,SAAS,UACZA,EAAG,SAAS,UACZA,EAAG,SAAS,WACZA,EAAG,SAAS,8CAAeO,GAAA,EAAY,IAAAP,GAAQ,QAAAC,GAAgB,GAEhED,EAAG,YAAYG,gBAAAA,EAAA,cAACK,GAAA,EAAW,IAAAR,GAAQ,QAAAC,GAAgB,CACtD;AAEJ;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ImagePlus as s, Undo2 as i, Redo2 as d, RefreshCcw as b, RotateCcw as p, RotateCw as h, FlipHorizontal2 as E, FlipVertical2 as u, MousePointer2 as w, Crop as f, Type as N, Pen as x, Shapes as v, Sticker as C, ZoomOut as g, ZoomIn as k } from "lucide-react";
|
|
2
2
|
import e from "react";
|
|
3
|
-
import { Button as R } from "./
|
|
4
|
-
import { cn as y } from "./
|
|
3
|
+
import { Button as R } from "./index9.es.js";
|
|
4
|
+
import { cn as y } from "./index89.es.js";
|
|
5
5
|
function c({
|
|
6
6
|
icon: a,
|
|
7
7
|
label: t,
|
|
@@ -170,4 +170,4 @@ function F({ ui: a, engine: t, onOpenFile: r }) {
|
|
|
170
170
|
export {
|
|
171
171
|
F as Ribbon
|
|
172
172
|
};
|
|
173
|
-
//# sourceMappingURL=
|
|
173
|
+
//# sourceMappingURL=index145.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es142.js","sources":["../src/components/organisms/image-editor/components/ribbon.tsx"],"sourcesContent":["import {\n Crop,\n FlipHorizontal2,\n FlipVertical2,\n ImagePlus,\n MousePointer2,\n Pen,\n Redo2,\n RefreshCcw,\n RotateCcw,\n RotateCw,\n Shapes,\n Sticker,\n Type,\n Undo2,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react'\nimport React from 'react'\n\nimport { Button } from '@/components/atoms/button'\nimport { cn } from '@/lib/utils'\n\nimport {\n ImageEditorEngine,\n ImageEditorMode,\n ImageEditorUiState,\n} from '../image-editor.types'\n\ninterface ToolButtonProps {\n icon: React.ReactNode\n label: string\n active?: boolean\n disabled?: boolean\n onClick: () => void\n}\n\nfunction ToolButton({\n icon,\n label,\n active,\n disabled,\n onClick,\n}: ToolButtonProps) {\n return (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={disabled}\n onClick={onClick}\n className={cn(\n 'w-auto flex-col gap-0.5 h-auto min-w-[52px] border-neutral-1 px-2 py-1.5 text-[10.5px]',\n active && 'border-rest-p1 bg-rest-p1 text-white hover:bg-hover-p1'\n )}\n >\n {icon}\n {label}\n </Button>\n )\n}\n\ninterface ZoomControlProps {\n zoomPercent: number\n canZoomIn: boolean\n canZoomOut: boolean\n disabled: boolean\n onZoomIn: () => void\n onZoomOut: () => void\n onZoomReset: () => void\n}\n\nfunction ZoomControl({\n zoomPercent,\n canZoomIn,\n canZoomOut,\n disabled,\n onZoomIn,\n onZoomOut,\n onZoomReset,\n}: ZoomControlProps) {\n return (\n <div className=\"flex items-center gap-0.5 rounded-lg border border-neutral-1 bg-white p-0.5\">\n <button\n type=\"button\"\n title=\"Zoom out\"\n disabled={disabled || !canZoomOut}\n onClick={onZoomOut}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomOut className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n title=\"Reset zoom to fit\"\n disabled={disabled}\n onClick={onZoomReset}\n className=\"min-w-[38px] rounded-md py-1 text-[11px] font-medium text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n {zoomPercent}%\n </button>\n <button\n type=\"button\"\n title=\"Zoom in\"\n disabled={disabled || !canZoomIn}\n onClick={onZoomIn}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomIn className=\"h-4 w-4\" />\n </button>\n </div>\n )\n}\n\nexport interface RibbonProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n onOpenFile: () => void\n}\n\nconst MODE_TOOLS: {\n mode: ImageEditorMode\n label: string\n icon: React.ReactNode\n}[] = [\n {\n mode: 'select',\n label: 'Select',\n icon: <MousePointer2 className=\"h-4 w-4\" />,\n },\n { mode: 'crop', label: 'Crop', icon: <Crop className=\"h-4 w-4\" /> },\n { mode: 'text', label: 'Text', icon: <Type className=\"h-4 w-4\" /> },\n { mode: 'draw', label: 'Draw', icon: <Pen className=\"h-4 w-4\" /> },\n { mode: 'shape', label: 'Shape', icon: <Shapes className=\"h-4 w-4\" /> },\n { mode: 'sticker', label: 'Sticker', icon: <Sticker className=\"h-4 w-4\" /> },\n]\n\nexport function Ribbon({ ui, engine, onOpenFile }: RibbonProps) {\n const disabled = !ui.hasImage\n\n return (\n <div className=\"flex items-stretch gap-2 overflow-x-auto overscroll-x-contain border-b border-neutral-1 bg-light-3 p-2\">\n {ui.canOpenImage && (\n <div className=\"flex items-center gap-1.5 border-r border-neutral-1 pr-2\">\n <ToolButton\n icon={<ImagePlus className=\"h-4 w-4\" />}\n label=\"Open\"\n onClick={onOpenFile}\n />\n </div>\n )}\n\n <div className=\"mr-auto flex items-center gap-1.5\">\n {MODE_TOOLS.map((t) => (\n <ToolButton\n key={t.mode}\n icon={t.icon}\n label={t.label}\n disabled={disabled}\n active={ui.mode === t.mode}\n onClick={() => engine.setMode(t.mode)}\n />\n ))}\n </div>\n\n <div className=\"ml-auto flex items-center\">\n <ZoomControl\n zoomPercent={ui.zoomPercent}\n canZoomIn={ui.canZoomIn}\n canZoomOut={ui.canZoomOut}\n disabled={disabled}\n onZoomIn={engine.zoomIn}\n onZoomOut={engine.zoomOut}\n onZoomReset={engine.zoomToFit}\n />\n </div>\n\n <div className=\"ml-auto flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<Undo2 className=\"h-4 w-4\" />}\n label=\"Undo\"\n disabled={!ui.canUndo}\n onClick={engine.undo}\n />\n <ToolButton\n icon={<Redo2 className=\"h-4 w-4\" />}\n label=\"Redo\"\n disabled={!ui.canRedo}\n onClick={engine.redo}\n />\n <ToolButton\n icon={<RefreshCcw className=\"h-4 w-4\" />}\n label=\"Reset\"\n disabled={!ui.canReset}\n onClick={engine.resetToOriginal}\n />\n </div>\n\n <div className=\"flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<RotateCcw className=\"h-4 w-4\" />}\n label=\"Rotate L\"\n disabled={disabled}\n onClick={() => engine.rotate(-90)}\n />\n <ToolButton\n icon={<RotateCw className=\"h-4 w-4\" />}\n label=\"Rotate R\"\n disabled={disabled}\n onClick={() => engine.rotate(90)}\n />\n <ToolButton\n icon={<FlipHorizontal2 className=\"h-4 w-4\" />}\n label=\"Flip H\"\n disabled={disabled}\n onClick={() => engine.flip(true)}\n />\n <ToolButton\n icon={<FlipVertical2 className=\"h-4 w-4\" />}\n label=\"Flip V\"\n disabled={disabled}\n onClick={() => engine.flip(false)}\n />\n </div>\n </div>\n )\n}\n"],"names":["ToolButton","icon","label","active","disabled","onClick","React","Button","cn","ZoomControl","zoomPercent","canZoomIn","canZoomOut","onZoomIn","onZoomOut","onZoomReset","ZoomOut","ZoomIn","MODE_TOOLS","MousePointer2","Crop","Type","Pen","Shapes","Sticker","Ribbon","ui","engine","onOpenFile","ImagePlus","t","Undo2","Redo2","RefreshCcw","RotateCcw","RotateCw","FlipHorizontal2","FlipVertical2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index145.es.js","sources":["../src/components/organisms/image-editor/components/ribbon.tsx"],"sourcesContent":["import {\n Crop,\n FlipHorizontal2,\n FlipVertical2,\n ImagePlus,\n MousePointer2,\n Pen,\n Redo2,\n RefreshCcw,\n RotateCcw,\n RotateCw,\n Shapes,\n Sticker,\n Type,\n Undo2,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react'\nimport React from 'react'\n\nimport { Button } from '@/components/atoms/button'\nimport { cn } from '@/lib/utils'\n\nimport {\n ImageEditorEngine,\n ImageEditorMode,\n ImageEditorUiState,\n} from '../image-editor.types'\n\ninterface ToolButtonProps {\n icon: React.ReactNode\n label: string\n active?: boolean\n disabled?: boolean\n onClick: () => void\n}\n\nfunction ToolButton({\n icon,\n label,\n active,\n disabled,\n onClick,\n}: ToolButtonProps) {\n return (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={disabled}\n onClick={onClick}\n className={cn(\n 'w-auto flex-col gap-0.5 h-auto min-w-[52px] border-neutral-1 px-2 py-1.5 text-[10.5px]',\n active && 'border-rest-p1 bg-rest-p1 text-white hover:bg-hover-p1'\n )}\n >\n {icon}\n {label}\n </Button>\n )\n}\n\ninterface ZoomControlProps {\n zoomPercent: number\n canZoomIn: boolean\n canZoomOut: boolean\n disabled: boolean\n onZoomIn: () => void\n onZoomOut: () => void\n onZoomReset: () => void\n}\n\nfunction ZoomControl({\n zoomPercent,\n canZoomIn,\n canZoomOut,\n disabled,\n onZoomIn,\n onZoomOut,\n onZoomReset,\n}: ZoomControlProps) {\n return (\n <div className=\"flex items-center gap-0.5 rounded-lg border border-neutral-1 bg-white p-0.5\">\n <button\n type=\"button\"\n title=\"Zoom out\"\n disabled={disabled || !canZoomOut}\n onClick={onZoomOut}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomOut className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n title=\"Reset zoom to fit\"\n disabled={disabled}\n onClick={onZoomReset}\n className=\"min-w-[38px] rounded-md py-1 text-[11px] font-medium text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n {zoomPercent}%\n </button>\n <button\n type=\"button\"\n title=\"Zoom in\"\n disabled={disabled || !canZoomIn}\n onClick={onZoomIn}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-light-2 hover:bg-light-2 disabled:pointer-events-none disabled:opacity-40\"\n >\n <ZoomIn className=\"h-4 w-4\" />\n </button>\n </div>\n )\n}\n\nexport interface RibbonProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n onOpenFile: () => void\n}\n\nconst MODE_TOOLS: {\n mode: ImageEditorMode\n label: string\n icon: React.ReactNode\n}[] = [\n {\n mode: 'select',\n label: 'Select',\n icon: <MousePointer2 className=\"h-4 w-4\" />,\n },\n { mode: 'crop', label: 'Crop', icon: <Crop className=\"h-4 w-4\" /> },\n { mode: 'text', label: 'Text', icon: <Type className=\"h-4 w-4\" /> },\n { mode: 'draw', label: 'Draw', icon: <Pen className=\"h-4 w-4\" /> },\n { mode: 'shape', label: 'Shape', icon: <Shapes className=\"h-4 w-4\" /> },\n { mode: 'sticker', label: 'Sticker', icon: <Sticker className=\"h-4 w-4\" /> },\n]\n\nexport function Ribbon({ ui, engine, onOpenFile }: RibbonProps) {\n const disabled = !ui.hasImage\n\n return (\n <div className=\"flex items-stretch gap-2 overflow-x-auto overscroll-x-contain border-b border-neutral-1 bg-light-3 p-2\">\n {ui.canOpenImage && (\n <div className=\"flex items-center gap-1.5 border-r border-neutral-1 pr-2\">\n <ToolButton\n icon={<ImagePlus className=\"h-4 w-4\" />}\n label=\"Open\"\n onClick={onOpenFile}\n />\n </div>\n )}\n\n <div className=\"mr-auto flex items-center gap-1.5\">\n {MODE_TOOLS.map((t) => (\n <ToolButton\n key={t.mode}\n icon={t.icon}\n label={t.label}\n disabled={disabled}\n active={ui.mode === t.mode}\n onClick={() => engine.setMode(t.mode)}\n />\n ))}\n </div>\n\n <div className=\"ml-auto flex items-center\">\n <ZoomControl\n zoomPercent={ui.zoomPercent}\n canZoomIn={ui.canZoomIn}\n canZoomOut={ui.canZoomOut}\n disabled={disabled}\n onZoomIn={engine.zoomIn}\n onZoomOut={engine.zoomOut}\n onZoomReset={engine.zoomToFit}\n />\n </div>\n\n <div className=\"ml-auto flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<Undo2 className=\"h-4 w-4\" />}\n label=\"Undo\"\n disabled={!ui.canUndo}\n onClick={engine.undo}\n />\n <ToolButton\n icon={<Redo2 className=\"h-4 w-4\" />}\n label=\"Redo\"\n disabled={!ui.canRedo}\n onClick={engine.redo}\n />\n <ToolButton\n icon={<RefreshCcw className=\"h-4 w-4\" />}\n label=\"Reset\"\n disabled={!ui.canReset}\n onClick={engine.resetToOriginal}\n />\n </div>\n\n <div className=\"flex items-center gap-1.5 border-l border-neutral-1 pl-2\">\n <ToolButton\n icon={<RotateCcw className=\"h-4 w-4\" />}\n label=\"Rotate L\"\n disabled={disabled}\n onClick={() => engine.rotate(-90)}\n />\n <ToolButton\n icon={<RotateCw className=\"h-4 w-4\" />}\n label=\"Rotate R\"\n disabled={disabled}\n onClick={() => engine.rotate(90)}\n />\n <ToolButton\n icon={<FlipHorizontal2 className=\"h-4 w-4\" />}\n label=\"Flip H\"\n disabled={disabled}\n onClick={() => engine.flip(true)}\n />\n <ToolButton\n icon={<FlipVertical2 className=\"h-4 w-4\" />}\n label=\"Flip V\"\n disabled={disabled}\n onClick={() => engine.flip(false)}\n />\n </div>\n </div>\n )\n}\n"],"names":["ToolButton","icon","label","active","disabled","onClick","React","Button","cn","ZoomControl","zoomPercent","canZoomIn","canZoomOut","onZoomIn","onZoomOut","onZoomReset","ZoomOut","ZoomIn","MODE_TOOLS","MousePointer2","Crop","Type","Pen","Shapes","Sticker","Ribbon","ui","engine","onOpenFile","ImagePlus","t","Undo2","Redo2","RefreshCcw","RotateCcw","RotateCw","FlipHorizontal2","FlipVertical2"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ImageUp as x, Loader2 as d } from "lucide-react";
|
|
2
2
|
import e, { forwardRef as E } from "react";
|
|
3
|
-
import { cn as g } from "./
|
|
3
|
+
import { cn as g } from "./index89.es.js";
|
|
4
4
|
const v = {
|
|
5
5
|
backgroundImage: "linear-gradient(45deg,#e2e0d9 25%,transparent 25%),linear-gradient(-45deg,#e2e0d9 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e2e0d9 75%),linear-gradient(-45deg,transparent 75%,#e2e0d9 75%)",
|
|
6
6
|
backgroundSize: "22px 22px",
|
|
@@ -82,4 +82,4 @@ const v = {
|
|
|
82
82
|
export {
|
|
83
83
|
R as Stage
|
|
84
84
|
};
|
|
85
|
-
//# sourceMappingURL=
|
|
85
|
+
//# sourceMappingURL=index146.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index146.es.js","sources":["../src/components/organisms/image-editor/components/stage.tsx"],"sourcesContent":["import { ImageUp, Loader2 } from 'lucide-react'\nimport React, { forwardRef } from 'react'\n\nimport { cn } from '@/lib/utils'\n\nimport { ImageEditorUiState } from '../image-editor.types'\n\nexport interface StageHandle {\n stage: HTMLDivElement | null\n cwrap: HTMLDivElement | null\n canvas: HTMLCanvasElement | null\n overlay: HTMLCanvasElement | null\n textEditor: HTMLTextAreaElement | null\n}\n\ninterface StageProps {\n ui: ImageEditorUiState\n onChooseImage: () => void\n onDropFile: (file: File) => void\n}\n\nconst CHECKERBOARD_STYLE: React.CSSProperties = {\n backgroundImage:\n 'linear-gradient(45deg,#e2e0d9 25%,transparent 25%),linear-gradient(-45deg,#e2e0d9 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#e2e0d9 75%),linear-gradient(-45deg,transparent 75%,#e2e0d9 75%)',\n backgroundSize: '22px 22px',\n backgroundPosition: '0 0, 0 11px, 11px -11px, -11px 0',\n backgroundColor: '#eceae4',\n}\n\nexport const Stage = forwardRef<StageHandle, StageProps>(function Stage(\n { ui, onChooseImage, onDropFile },\n ref\n) {\n const stageElRef = React.useRef<HTMLDivElement>(null)\n const cwrapElRef = React.useRef<HTMLDivElement>(null)\n const canvasElRef = React.useRef<HTMLCanvasElement>(null)\n const overlayElRef = React.useRef<HTMLCanvasElement>(null)\n const textEditorElRef = React.useRef<HTMLTextAreaElement>(null)\n\n React.useImperativeHandle(ref, () => ({\n stage: stageElRef.current,\n cwrap: cwrapElRef.current,\n canvas: canvasElRef.current,\n overlay: overlayElRef.current,\n textEditor: textEditorElRef.current,\n }))\n\n React.useEffect(() => {\n if (!ui.isEditingText) return\n const el = textEditorElRef.current\n if (!el) return\n let attempts = 0\n let raf = 0\n const tryFocus = () => {\n if (document.activeElement !== el) {\n el.focus()\n if (ui.editingSelectAll) el.select()\n }\n attempts += 1\n if (attempts < 3) raf = requestAnimationFrame(tryFocus)\n }\n tryFocus()\n return () => cancelAnimationFrame(raf)\n }, [ui.isEditingText, ui.editingSelectAll])\n\n return (\n <div\n ref={stageElRef}\n className=\"relative flex flex-1 touch-none overflow-auto overscroll-contain\"\n style={CHECKERBOARD_STYLE}\n onDragOver={(e) => e.preventDefault()}\n onDragEnter={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault()\n if (!ui.canOpenImage) return\n const file = e.dataTransfer.files[0]\n if (file && file.type.startsWith('image/')) onDropFile(file)\n }}\n >\n {!ui.hasImage && !ui.isLoadingImage && ui.canOpenImage && (\n <div className=\"m-auto max-w-[340px] px-8 text-center text-light-4\">\n <ImageUp className=\"mx-auto mb-3 h-14 w-14 stroke-[1.2]\" />\n <h2 className=\"mb-2 text-lg font-semibold text-light-2\">\n Drop a picture in\n </h2>\n <p className=\"text-sm leading-relaxed\">\n Open an image to crop, filter, rotate, and annotate. Text, shapes,\n and drawings become movable layers.\n </p>\n <button\n type=\"button\"\n onClick={onChooseImage}\n className=\"mt-4 inline-block rounded-lg bg-rest-p1 px-5 py-2 text-sm text-white hover:bg-hover-p1\"\n >\n Choose an image\n </button>\n </div>\n )}\n {!ui.hasImage && ui.isLoadingImage && (\n <div className=\"m-auto flex flex-col items-center gap-3 text-light-4\">\n <Loader2 className=\"h-10 w-10 animate-spin\" />\n <p className=\"text-sm\">Loading image…</p>\n </div>\n )}\n <div\n ref={cwrapElRef}\n className={cn(\n 'relative m-auto bg-white shadow-lg',\n !ui.hasImage && 'hidden'\n )}\n >\n <canvas ref={canvasElRef} className=\"image-editor-canvas block\" />\n <canvas\n ref={overlayElRef}\n className=\"image-editor-canvas absolute inset-0\"\n />\n <textarea\n ref={textEditorElRef}\n rows={1}\n className={cn(\n 'absolute z-30 resize-none overflow-hidden rounded-md border border-rest-p1 bg-white px-1.5 py-1 leading-[1.1] shadow-lg outline-none',\n !ui.isEditingText && 'hidden'\n )}\n />\n {ui.isLoadingImage && (\n <div className=\"absolute inset-0 z-40 flex flex-col items-center justify-center gap-3 bg-white text-light-4\">\n <Loader2 className=\"h-10 w-10 animate-spin\" />\n <p className=\"text-sm\">Loading image…</p>\n </div>\n )}\n </div>\n </div>\n )\n})\n"],"names":["CHECKERBOARD_STYLE","Stage","forwardRef","ui","onChooseImage","onDropFile","ref","stageElRef","React","cwrapElRef","canvasElRef","overlayElRef","textEditorElRef","el","attempts","raf","tryFocus","e","file","ImageUp","Loader2","cn"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index147.es.js","sources":["../src/components/organisms/image-editor/components/status-bar.tsx"],"sourcesContent":["import React from 'react'\n\nimport { ImageEditorUiState } from '../image-editor.types'\n\nexport function StatusBar({ ui }: { ui: ImageEditorUiState }) {\n return (\n <div className=\"flex h-[30px] shrink-0 items-center gap-4 border-t border-neutral-1 bg-light-3 px-4 text-xs text-light-4\">\n <span className=\"flex items-center gap-1.5\">\n <span className=\"inline-block h-1.5 w-1.5 rounded-full bg-rest-p1\" />\n {ui.statusText}\n </span>\n <span>{ui.dims}</span>\n </div>\n )\n}\n"],"names":["StatusBar","ui","React"],"mappings":";AAIO,SAASA,EAAU,EAAE,IAAAC,KAAkC;AAC5D,SACEC,gBAAAA,EAAA,cAAC,SAAI,WAAU,2GAAA,mCACZ,QAAA,EAAK,WAAU,+BACdA,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,mDAAA,CAAmD,GAClED,EAAG,UACN,mCACC,QAAA,MAAMA,EAAG,IAAK,CACjB;AAEJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index148.es.js","sources":["../src/components/organisms/image-editor/engine/constants.js"],"sourcesContent":["export const VERSION = '1.0.0'\n\nexport const FILTERS = [\n { id: 'none', name: 'Original' },\n { id: 'grayscale', name: 'B & W' },\n { id: 'vivid', name: 'Vivid' },\n { id: 'cool', name: 'Cool' },\n { id: 'warm', name: 'Warm' },\n { id: 'vintage', name: 'Vintage' },\n { id: 'fade', name: 'Fade' },\n { id: 'noir', name: 'Noir' },\n]\nexport const FILTER_CSS = {\n none: '',\n grayscale: 'grayscale(1) contrast(1.05)',\n vivid: 'saturate(1.7) contrast(1.15)',\n cool: 'hue-rotate(200deg) saturate(1.2)',\n warm: 'sepia(.35) saturate(1.3) brightness(1.05)',\n vintage: 'sepia(.5) contrast(.9) brightness(1.05) saturate(1.2)',\n fade: 'contrast(.82) brightness(1.12) saturate(.85)',\n noir: 'grayscale(1) contrast(1.4) brightness(.92)',\n}\nexport const SWATCHES = [\n '#d24b2f',\n '#2f5fd2',\n '#e8b423',\n '#2fa84f',\n '#111111',\n '#ffffff',\n '#8e44ad',\n '#ff5da2',\n]\nexport const SHAPES = [\n { id: 'rect', name: 'Rectangle' },\n { id: 'ellipse', name: 'Ellipse' },\n { id: 'circle', name: 'Circle' },\n { id: 'line', name: 'Line' },\n { id: 'dashedLine', name: 'Dashed line' },\n { id: 'arrow', name: 'Arrow' },\n { id: 'dashedArrow', name: 'Dashed arrow' },\n { id: 'doubleArrow', name: 'Double arrow' },\n { id: 'dashedDoubleArrow', name: 'Dashed double arrow' },\n]\nexport const FONTS = [\n { label: 'Serif', value: 'Iowan Old Style, Georgia, serif' },\n { label: 'Sans', value: 'Avenir Next, Segoe UI, sans-serif' },\n { label: 'Mono', value: 'Courier New, monospace' },\n { label: 'Impact', value: 'Impact, sans-serif' },\n]\nexport const CROP_RATIOS = [\n { label: 'Freeform', value: 'free' },\n { label: 'Square 1:1', value: '1' },\n { label: '4:3', value: '1.3333' },\n { label: '16:9', value: '1.7777' },\n { label: '3:4 portrait', value: '0.75' },\n]\n"],"names":["VERSION","FILTERS","FILTER_CSS","SWATCHES","SHAPES","FONTS","CROP_RATIOS"],"mappings":"AAAY,MAACA,IAAU,SAEVC,IAAU;AAAA,EACrB,EAAE,IAAI,QAAQ,MAAM,WAAU;AAAA,EAC9B,EAAE,IAAI,aAAa,MAAM,QAAO;AAAA,EAChC,EAAE,IAAI,SAAS,MAAM,QAAO;AAAA,EAC5B,EAAE,IAAI,QAAQ,MAAM,OAAM;AAAA,EAC1B,EAAE,IAAI,QAAQ,MAAM,OAAM;AAAA,EAC1B,EAAE,IAAI,WAAW,MAAM,UAAS;AAAA,EAChC,EAAE,IAAI,QAAQ,MAAM,OAAM;AAAA,EAC1B,EAAE,IAAI,QAAQ,MAAM,OAAM;AAC5B,GACaC,IAAa;AAAA,EACxB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR,GACaC,IAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACaC,IAAS;AAAA,EACpB,EAAE,IAAI,QAAQ,MAAM,YAAW;AAAA,EAC/B,EAAE,IAAI,WAAW,MAAM,UAAS;AAAA,EAChC,EAAE,IAAI,UAAU,MAAM,SAAQ;AAAA,EAC9B,EAAE,IAAI,QAAQ,MAAM,OAAM;AAAA,EAC1B,EAAE,IAAI,cAAc,MAAM,cAAa;AAAA,EACvC,EAAE,IAAI,SAAS,MAAM,QAAO;AAAA,EAC5B,EAAE,IAAI,eAAe,MAAM,eAAc;AAAA,EACzC,EAAE,IAAI,eAAe,MAAM,eAAc;AAAA,EACzC,EAAE,IAAI,qBAAqB,MAAM,sBAAqB;AACxD,GACaC,IAAQ;AAAA,EACnB,EAAE,OAAO,SAAS,OAAO,kCAAiC;AAAA,EAC1D,EAAE,OAAO,QAAQ,OAAO,oCAAmC;AAAA,EAC3D,EAAE,OAAO,QAAQ,OAAO,yBAAwB;AAAA,EAChD,EAAE,OAAO,UAAU,OAAO,qBAAoB;AAChD,GACaC,IAAc;AAAA,EACzB,EAAE,OAAO,YAAY,OAAO,OAAM;AAAA,EAClC,EAAE,OAAO,cAAc,OAAO,IAAG;AAAA,EACjC,EAAE,OAAO,OAAO,OAAO,SAAQ;AAAA,EAC/B,EAAE,OAAO,QAAQ,OAAO,SAAQ;AAAA,EAChC,EAAE,OAAO,gBAAgB,OAAO,OAAM;AACxC;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FONTS as a, VERSION as i } from "./
|
|
1
|
+
import { FONTS as a, VERSION as i } from "./index148.es.js";
|
|
2
2
|
const d = 30;
|
|
3
3
|
function o() {
|
|
4
4
|
const e = document.createElement("canvas");
|
|
@@ -117,4 +117,4 @@ export {
|
|
|
117
117
|
u as getState,
|
|
118
118
|
f as resetAdjValues
|
|
119
119
|
};
|
|
120
|
-
//# sourceMappingURL=
|
|
120
|
+
//# sourceMappingURL=index149.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index149.es.js","sources":["../src/components/organisms/image-editor/engine/state.js"],"sourcesContent":["import { FONTS, VERSION } from './constants.js'\n\nexport const MAX_HISTORY = 30\n\nexport function emptySourceCanvas() {\n const c = document.createElement('canvas')\n c.width = 0\n c.height = 0\n return c\n}\n\nexport function createState(config) {\n return {\n config,\n stickers: config.stickers || [],\n listeners: { open: [], close: [], save: [], change: [], load: [] },\n notify: () => {},\n\n sourceCanvas: emptySourceCanvas(),\n originalCanvas: null,\n layers: [],\n selectedId: null,\n nextId: 1,\n undoStack: [],\n redoStack: [],\n\n mode: 'select',\n viewScale: 1,\n zoom: 1,\n fitScale: 1,\n selectedShapeType: 'rect',\n shapeFill: 'stroke',\n shapeWidth: 6,\n brushSize: 8,\n brushStyle: 'round',\n textFont: FONTS[0].value,\n textSize: 64,\n textColor: '#111111',\n shapeColor: '#111111',\n drawColor: '#111111',\n cropRatio: 'free',\n isSaving: false,\n isLoadingImage: false,\n statusText: 'Ready',\n adj: {\n brightness: 100,\n contrast: 100,\n saturate: 100,\n sepia: 0,\n blur: 0,\n hue: 0,\n filter: 'none',\n },\n stickerImageCache: new Map(),\n\n canvasEl: null,\n overlayEl: null,\n textEditorEl: null,\n stageEl: null,\n ctx: null,\n octx: null,\n mounted: false,\n\n editingLayer: null,\n editingSelectAll: false,\n\n dragMode: null,\n dragStart: null,\n dragOrig: null,\n dragRect: null,\n resizeCorner: null,\n resizeAnchor: null,\n resizeCenter: null,\n resizeAnchorWorld: null,\n rotateStart: null,\n activePointerId: null,\n pendingShape: null,\n pendingStroke: null,\n cropRect: null,\n cropStart: null,\n\n isOpenFlag: false,\n }\n}\n\nexport function emit(state, ev, payload) {\n ;(state.listeners[ev] || []).forEach((fn) => {\n try {\n fn(payload)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n }\n })\n}\n\nexport function emitChange(state) {\n emit(state, 'change', { state: getState(state) })\n state.notify()\n}\n\nexport function getSel(state) {\n return state.selectedId != null\n ? state.layers.find((l) => l.id === state.selectedId)\n : null\n}\n\nexport function resetAdjValues(state) {\n state.adj.brightness = 100\n state.adj.contrast = 100\n state.adj.saturate = 100\n state.adj.sepia = 0\n state.adj.blur = 0\n state.adj.hue = 0\n state.adj.filter = 'none'\n}\n\nexport function getState(state) {\n if (!state.sourceCanvas.width) return null\n return {\n version: VERSION,\n image: state.sourceCanvas.toDataURL('image/png'),\n width: state.sourceCanvas.width,\n height: state.sourceCanvas.height,\n adjustments: { ...state.adj },\n layers: JSON.parse(\n JSON.stringify(\n state.layers.map((L) => {\n const c = { ...L }\n delete c._editing\n return c\n })\n )\n ),\n }\n}\n"],"names":["MAX_HISTORY","emptySourceCanvas","c","createState","config","FONTS","emit","state","ev","payload","fn","e","emitChange","getState","getSel","l","resetAdjValues","VERSION","L"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as t from "react";
|
|
2
2
|
import * as r from "@radix-ui/react-switch";
|
|
3
|
-
import { cn as a } from "./
|
|
4
|
-
import { SwitchVariants as o, SwitchThumbVariants as n } from "./
|
|
3
|
+
import { cn as a } from "./index89.es.js";
|
|
4
|
+
import { SwitchVariants as o, SwitchThumbVariants as n } from "./index84.es.js";
|
|
5
5
|
const h = t.forwardRef((m, i) => {
|
|
6
6
|
const { className: s, size: e, ...c } = m;
|
|
7
7
|
return /* @__PURE__ */ t.createElement(
|
|
@@ -19,4 +19,4 @@ export {
|
|
|
19
19
|
h as Switch,
|
|
20
20
|
o as SwitchVariants
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=
|
|
22
|
+
//# sourceMappingURL=index15.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index15.es.js","sources":["../src/components/atoms/switch/switch.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\nimport * as SwitchPrimitives from '@radix-ui/react-switch'\nimport { cn } from '@/lib/utils'\nimport { SwitchThumbVariants, SwitchVariants } from './switch.styles'\nimport { SwitchProps } from './switch.types'\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchProps\n>((props, ref) => {\n const { className, size, ...rest } = props\n\n return (\n <SwitchPrimitives.Root\n className={cn(SwitchVariants({ size }), className)}\n {...rest}\n ref={ref}\n >\n <SwitchPrimitives.Thumb className={cn(SwitchThumbVariants({ size }))} />\n </SwitchPrimitives.Root>\n )\n})\n\nSwitch.displayName = 'Switch'\n\nexport { Switch, SwitchVariants }\n"],"names":["Switch","React","props","ref","className","size","rest","SwitchPrimitives","cn","SwitchVariants","SwitchThumbVariants"],"mappings":";;;;AAOA,MAAMA,IAASC,EAAM,WAGnB,CAACC,GAAOC,MAAQ;AAChB,QAAM,EAAE,WAAAC,GAAW,MAAAC,GAAM,GAAGC,MAASJ;AAErC,SACE,gBAAAD,EAAA;AAAA,IAACM,EAAiB;AAAA,IAAjB;AAAA,MACC,WAAWC,EAAGC,EAAe,EAAE,MAAAJ,EAAA,CAAM,GAAGD,CAAS;AAAA,MAChD,GAAGE;AAAA,MACJ,KAAAH;AAAA,IAAA;AAAA,IAEA,gBAAAF,EAAA,cAACM,EAAiB,OAAjB,EAAuB,WAAWC,EAAGE,EAAoB,EAAE,MAAAL,EAAA,CAAM,CAAC,EAAA,CAAG;AAAA,EAAA;AAG5E,CAAC;AAEDL,EAAO,cAAc;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { supportsContextFilter as k } from "./
|
|
2
|
-
import { FILTER_CSS as T } from "./
|
|
1
|
+
import { supportsContextFilter as k } from "./index162.es.js";
|
|
2
|
+
import { FILTER_CSS as T } from "./index148.es.js";
|
|
3
3
|
function C(t) {
|
|
4
4
|
const { adj: e } = t;
|
|
5
5
|
let n = `brightness(${e.brightness}%) contrast(${e.contrast}%) saturate(${e.saturate}%) sepia(${e.sepia}%) blur(${e.blur}px) hue-rotate(${e.hue}deg)`;
|
|
@@ -322,4 +322,4 @@ export {
|
|
|
322
322
|
V as zoomOut,
|
|
323
323
|
j as zoomToFit
|
|
324
324
|
};
|
|
325
|
-
//# sourceMappingURL=
|
|
325
|
+
//# sourceMappingURL=index150.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es147.js","sources":["../src/components/organisms/image-editor/engine/rendering.js"],"sourcesContent":["import { supportsContextFilter } from './canvas-filter.js'\nimport { FILTER_CSS } from './constants.js'\n\nexport function baseFilter(state) {\n const { adj } = state\n let f = `brightness(${adj.brightness}%) contrast(${adj.contrast}%) saturate(${adj.saturate}%) sepia(${adj.sepia}%) blur(${adj.blur}px) hue-rotate(${adj.hue}deg)`\n if (adj.filter !== 'none') f += ' ' + FILTER_CSS[adj.filter]\n return f.trim()\n}\n\nexport const ZOOM_MIN = 0.25\nexport const ZOOM_MAX = 4\nconst ZOOM_STEP = 1.25\n\nexport function fitStage(state) {\n const pad = 48\n const fitScale = Math.min(\n (state.stageEl.clientWidth - pad) / state.sourceCanvas.width,\n (state.stageEl.clientHeight - pad) / state.sourceCanvas.height,\n 1\n )\n state.fitScale = fitScale\n const scale = fitScale * state.zoom\n state.viewScale = scale\n const w = Math.round(state.sourceCanvas.width * scale),\n h = Math.round(state.sourceCanvas.height * scale)\n state.canvasEl.style.width = state.overlayEl.style.width = w + 'px'\n state.canvasEl.style.height = state.overlayEl.style.height = h + 'px'\n}\n\nexport function applyZoom(state, zoom) {\n state.zoom = Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, zoom))\n if (!state.mounted || !state.sourceCanvas.width) {\n state.notify()\n return\n }\n fitStage(state)\n renderOverlay(state)\n state.notify()\n}\n\nexport function zoomIn(state) {\n applyZoom(state, state.zoom * ZOOM_STEP)\n}\n\nexport function zoomOut(state) {\n applyZoom(state, state.zoom / ZOOM_STEP)\n}\n\nexport function zoomToFit(state) {\n applyZoom(state, 1)\n}\n\nexport function syncCanvasSize(state) {\n state.canvasEl.width = state.overlayEl.width = state.sourceCanvas.width\n state.canvasEl.height = state.overlayEl.height = state.sourceCanvas.height\n fitStage(state)\n}\n\nexport function renderBase(state) {\n const { ctx, canvasEl, sourceCanvas } = state\n ctx.clearRect(0, 0, canvasEl.width, canvasEl.height)\n const filter = baseFilter(state)\n\n if (supportsContextFilter()) {\n canvasEl.style.filter = ''\n ctx.filter = filter\n ctx.drawImage(sourceCanvas, 0, 0)\n ctx.filter = 'none'\n return\n }\n\n canvasEl.style.filter = filter\n ctx.drawImage(sourceCanvas, 0, 0)\n}\n\nexport function render(state) {\n if (!state.mounted || !state.sourceCanvas.width) return\n renderBase(state)\n renderOverlay(state)\n}\n\nexport const TEXT_LINE_HEIGHT = 1.1\n\nexport function wrapTextLines(state, L) {\n state.octx.font = `${L.size}px ${L.font}`\n const maxWidth = Math.max(L.boxWidth, 1)\n const lines = []\n // Split on hard breaks first, then word-wrap each paragraph in the box.\n L.text.split('\\n').forEach((paragraph) => {\n const words = paragraph.split(' ')\n let current = ''\n words.forEach((word) => {\n const test = current ? current + ' ' + word : word\n if (current && state.octx.measureText(test).width > maxWidth) {\n lines.push(current)\n current = word\n } else {\n current = test\n }\n })\n lines.push(current)\n })\n return lines\n}\n\nexport function layerBounds(state, L) {\n if (L.type === 'text') {\n const lines = wrapTextLines(state, L)\n return {\n x: L.x,\n y: L.y,\n w: L.boxWidth,\n h: lines.length * L.size * TEXT_LINE_HEIGHT,\n }\n }\n if (L.type === 'shape' || L.type === 'sticker') {\n return {\n x: Math.min(L.x, L.x + L.w),\n y: Math.min(L.y, L.y + L.h),\n w: Math.abs(L.w),\n h: Math.abs(L.h),\n }\n }\n if (L.type === 'stroke') {\n let a = Infinity,\n b = Infinity,\n cc = -Infinity,\n d = -Infinity\n L.points.forEach((p) => {\n a = Math.min(a, p.x)\n b = Math.min(b, p.y)\n cc = Math.max(cc, p.x)\n d = Math.max(d, p.y)\n })\n const pad = L.width / 2\n return { x: a - pad, y: b - pad, w: cc - a + pad * 2, h: d - b + pad * 2 }\n }\n return { x: 0, y: 0, w: 0, h: 0 }\n}\n\nexport function clampTextSize(state, L) {\n if (L.type !== 'text') return\n const availH = state.sourceCanvas.height - L.y\n while (L.size > 10 && layerBounds(state, L).h > availH && availH > 0) {\n L.size -= 1\n }\n}\n\nexport function clampBoxWidth(state, L) {\n if (L.type !== 'text') return\n const availW = state.sourceCanvas.width - L.x\n L.boxWidth = Math.round(Math.max(20, Math.min(L.boxWidth, availW)))\n}\n\nexport function cornerPoints(b) {\n return [\n { corner: 'tl', x: b.x, y: b.y },\n { corner: 'tr', x: b.x + b.w, y: b.y },\n { corner: 'bl', x: b.x, y: b.y + b.h },\n { corner: 'br', x: b.x + b.w, y: b.y + b.h },\n ]\n}\n\nexport const DIRECTIONAL_SHAPES = [\n 'line',\n 'dashedLine',\n 'arrow',\n 'dashedArrow',\n 'doubleArrow',\n 'dashedDoubleArrow',\n]\n\nconst DASHED_SHAPES = ['dashedLine', 'dashedArrow', 'dashedDoubleArrow']\n\n// Which ends of the shaft get an arrow head.\nconst ARROW_HEAD_ENDS = {\n arrow: ['end'],\n dashedArrow: ['end'],\n doubleArrow: ['end', 'start'],\n dashedDoubleArrow: ['end', 'start'],\n}\n\n// Dash and gap scale with stroke width; the floors keep hairlines visible.\nfunction dashedLineDash(width) {\n const w = Math.max(1, width || 1)\n return [Math.max(6, w * 2.5), Math.max(4, w * 1.75)]\n}\n\nfunction drawArrowHead(c, tipX, tipY, ang, head) {\n c.beginPath()\n c.moveTo(tipX, tipY)\n c.lineTo(\n tipX - head * Math.cos(ang - Math.PI / 6),\n tipY - head * Math.sin(ang - Math.PI / 6)\n )\n c.moveTo(tipX, tipY)\n c.lineTo(\n tipX - head * Math.cos(ang + Math.PI / 6),\n tipY - head * Math.sin(ang + Math.PI / 6)\n )\n c.stroke()\n}\n\nconst ROTATE_HANDLE_GAP = 26\nconst ROTATE_HANDLE_RADIUS = 6\n\nexport function layerCenter(state, L) {\n const b = layerBounds(state, L)\n return { x: b.x + b.w / 2, y: b.y + b.h / 2 }\n}\n\n// Canvas convention: y grows downward, so a positive angle turns clockwise.\nexport function rotatePoint(p, c, deg) {\n if (!deg) return { x: p.x, y: p.y }\n const rad = (deg * Math.PI) / 180\n const cos = Math.cos(rad),\n sin = Math.sin(rad)\n const dx = p.x - c.x,\n dy = p.y - c.y\n return { x: c.x + dx * cos - dy * sin, y: c.y + dx * sin + dy * cos }\n}\n\n// Resize without swinging a rotated layer: `local` stays put on screen.\nexport function keepingFixed(state, L, local, mutate) {\n const rot = L.rotation || 0\n if (!rot) {\n mutate()\n return\n }\n const before = rotatePoint(local, layerCenter(state, L), rot)\n mutate()\n const after = rotatePoint(local, layerCenter(state, L), rot)\n L.x += before.x - after.x\n L.y += before.y - after.y\n}\n\n// A pointer in the layer's own unrotated frame, where x/y/w/h are stored.\nexport function toLayerSpace(state, L, p) {\n return rotatePoint(p, layerCenter(state, L), -(L.rotation || 0))\n}\n\n// Local frame; the overlay's transform is what makes the grip orbit.\nfunction rotateHandleLocalPoint(state, L) {\n const b = layerBounds(state, L)\n return {\n x: b.x + b.w / 2,\n y: b.y + b.h + ROTATE_HANDLE_GAP / state.viewScale,\n }\n}\n\nfunction rotateHandlePoint(state, L) {\n const local = rotateHandleLocalPoint(state, L)\n return rotatePoint(local, layerCenter(state, L), L.rotation || 0)\n}\n\nexport function onRotateHandle(state, p, L) {\n const rp = rotateHandlePoint(state, L)\n return Math.hypot(p.x - rp.x, p.y - rp.y) <= 14 / state.viewScale\n}\n\nexport function onResizeHandle(state, p, L) {\n if (L.type === 'stroke') return null\n const hs = 12 / state.viewScale\n const q = toLayerSpace(state, L, p)\n if (L.type === 'shape' && DIRECTIONAL_SHAPES.includes(L.shape)) {\n const ends = [\n { corner: 'start', x: L.x, y: L.y },\n { corner: 'end', x: L.x + L.w, y: L.y + L.h },\n ]\n const hit = ends.find(\n (ep) => Math.abs(q.x - ep.x) < hs && Math.abs(q.y - ep.y) < hs\n )\n return hit ? hit.corner : null\n }\n const b = layerBounds(state, L)\n const hit = cornerPoints(b).find(\n (cp) => Math.abs(q.x - cp.x) < hs && Math.abs(q.y - cp.y) < hs\n )\n return hit ? hit.corner : null\n}\n\nexport function paintLayer(state, c, L) {\n if (L._editing) return\n c.save()\n // Strokes only need the transform once they carry a rotation.\n if (L.type !== 'stroke' || L.rotation) {\n const b = layerBounds(state, L)\n const cx = b.x + b.w / 2,\n cy = b.y + b.h / 2\n c.translate(cx, cy)\n if (L.rotation) c.rotate((L.rotation * Math.PI) / 180)\n if (L.flipH || L.flipV) c.scale(L.flipH ? -1 : 1, L.flipV ? -1 : 1)\n c.translate(-cx, -cy)\n }\n if (L.type === 'text') {\n c.font = `${L.size}px ${L.font}`\n c.fillStyle = L.color\n c.textBaseline = 'top'\n c.shadowColor = 'rgba(0,0,0,.22)'\n c.shadowBlur = L.size * 0.05\n c.shadowOffsetY = L.size * 0.02\n const lineHeight = L.size * TEXT_LINE_HEIGHT\n wrapTextLines(state, L).forEach((line, i) => {\n c.fillText(line, L.x, L.y + i * lineHeight)\n })\n } else if (L.type === 'shape') {\n c.strokeStyle = L.color\n c.fillStyle = L.color\n c.lineWidth = L.width\n c.lineCap = 'round'\n c.lineJoin = 'round'\n const x = L.x,\n y = L.y,\n w = L.w,\n h = L.h\n if (L.shape === 'rect') {\n L.fill === 'fill' ? c.fillRect(x, y, w, h) : c.strokeRect(x, y, w, h)\n } else if (L.shape === 'ellipse') {\n c.beginPath()\n c.ellipse(\n x + w / 2,\n y + h / 2,\n Math.abs(w / 2),\n Math.abs(h / 2),\n 0,\n 0,\n Math.PI * 2\n )\n L.fill === 'fill' ? c.fill() : c.stroke()\n } else if (L.shape === 'circle') {\n const r = Math.min(Math.abs(w), Math.abs(h)) / 2\n c.beginPath()\n c.arc(x + w / 2, y + h / 2, r, 0, Math.PI * 2)\n L.fill === 'fill' ? c.fill() : c.stroke()\n } else if (DIRECTIONAL_SHAPES.includes(L.shape)) {\n const ex = x + w,\n ey = y + h\n const dashed = DASHED_SHAPES.includes(L.shape)\n if (dashed) {\n // Butt caps keep dashes crisp; round caps bleed into the gaps.\n c.lineCap = 'butt'\n c.setLineDash(dashedLineDash(L.width))\n }\n c.beginPath()\n c.moveTo(x, y)\n c.lineTo(ex, ey)\n c.stroke()\n if (dashed) {\n // Heads draw solid: a dash pattern would fragment them into stubs.\n c.setLineDash([])\n c.lineCap = 'round'\n }\n const ang = Math.atan2(h, w),\n head = Math.max(14, L.width * 3)\n ;(ARROW_HEAD_ENDS[L.shape] || []).forEach((which) => {\n if (which === 'end') drawArrowHead(c, ex, ey, ang, head)\n else drawArrowHead(c, x, y, ang + Math.PI, head)\n })\n }\n } else if (L.type === 'stroke') {\n c.strokeStyle = L.color\n c.lineWidth = L.width\n c.lineCap = 'round'\n c.lineJoin = 'round'\n c.globalAlpha = L.style === 'highlight' ? 0.35 : 1\n c.beginPath()\n L.points.forEach((pt, i) =>\n i === 0 ? c.moveTo(pt.x, pt.y) : c.lineTo(pt.x, pt.y)\n )\n if (L.points.length === 1)\n c.lineTo(L.points[0].x + 0.1, L.points[0].y + 0.1)\n c.stroke()\n } else if (L.type === 'sticker') {\n const img = state.stickerImageCache.get(L.src)\n if (img && img.complete && img.naturalWidth)\n c.drawImage(img, L.x, L.y, L.w, L.h)\n }\n c.restore()\n}\n\nexport function normRect(r) {\n return {\n x: Math.min(r.x, r.x + r.w),\n y: Math.min(r.y, r.y + r.h),\n w: Math.abs(r.w),\n h: Math.abs(r.h),\n }\n}\n\nexport function drawCropOverlay(state) {\n const { cropRect, overlayEl, octx, sourceCanvas } = state\n if (!cropRect) return\n const r = normRect(cropRect)\n const W = overlayEl.width,\n H = overlayEl.height\n octx.save()\n octx.fillStyle = 'rgba(0,0,0,.45)'\n octx.fillRect(0, 0, W, Math.max(0, r.y))\n octx.fillRect(0, Math.min(H, r.y + r.h), W, Math.max(0, H - (r.y + r.h)))\n octx.fillRect(0, r.y, Math.max(0, r.x), r.h)\n octx.fillRect(Math.min(W, r.x + r.w), r.y, Math.max(0, W - (r.x + r.w)), r.h)\n octx.strokeStyle = '#fff'\n octx.lineWidth = Math.max(1, sourceCanvas.width / 500)\n octx.setLineDash([8, 6])\n octx.strokeRect(r.x, r.y, r.w, r.h)\n octx.restore()\n}\n\nexport function renderOverlay(state) {\n const { octx, overlayEl, layers, mode, selectedId } = state\n octx.clearRect(0, 0, overlayEl.width, overlayEl.height)\n layers.forEach((L) => {\n try {\n paintLayer(state, octx, L)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[image-editor] failed to paint layer', L.id, L.type, err)\n }\n })\n if (mode === 'select' && selectedId != null) {\n const L = layers.find((l) => l.id === selectedId)\n if (L) {\n const b = layerBounds(state, L)\n octx.save()\n // The layer's frame, so box, handles and grip all tilt with it.\n if (L.rotation) {\n const c = layerCenter(state, L)\n octx.translate(c.x, c.y)\n octx.rotate((L.rotation * Math.PI) / 180)\n octx.translate(-c.x, -c.y)\n }\n octx.strokeStyle = '#2f5fd2'\n octx.lineWidth = Math.max(1.2, 1.5 / state.viewScale)\n octx.setLineDash([6 / state.viewScale, 4 / state.viewScale])\n octx.strokeRect(b.x - 4, b.y - 4, b.w + 8, b.h + 8)\n octx.setLineDash([])\n if (L.type !== 'stroke') {\n const hs = 9 / state.viewScale\n octx.fillStyle = '#fff'\n octx.strokeStyle = '#2f5fd2'\n const handlePoints =\n L.type === 'shape' && DIRECTIONAL_SHAPES.includes(L.shape)\n ? [\n { x: L.x, y: L.y },\n { x: L.x + L.w, y: L.y + L.h },\n ]\n : cornerPoints(b)\n handlePoints.forEach((cp) => {\n octx.fillRect(cp.x - hs / 2, cp.y - hs / 2, hs, hs)\n octx.strokeRect(cp.x - hs / 2, cp.y - hs / 2, hs, hs)\n })\n }\n // Rotate grip: every layer type gets one, strokes included.\n const rp = rotateHandleLocalPoint(state, L)\n octx.strokeStyle = '#2f5fd2'\n octx.fillStyle = '#fff'\n octx.beginPath()\n octx.moveTo(rp.x, b.y + b.h + 4)\n octx.lineTo(rp.x, rp.y)\n octx.stroke()\n octx.beginPath()\n octx.arc(\n rp.x,\n rp.y,\n ROTATE_HANDLE_RADIUS / state.viewScale,\n 0,\n Math.PI * 2\n )\n octx.fill()\n octx.stroke()\n octx.restore()\n }\n }\n if (state.pendingShape) paintLayer(state, octx, state.pendingShape)\n if (mode === 'crop' && state.cropRect) drawCropOverlay(state)\n}\n"],"names":["baseFilter","state","adj","f","FILTER_CSS","ZOOM_MIN","ZOOM_MAX","ZOOM_STEP","fitStage","fitScale","scale","w","h","applyZoom","zoom","renderOverlay","zoomIn","zoomOut","zoomToFit","syncCanvasSize","renderBase","ctx","canvasEl","sourceCanvas","filter","supportsContextFilter","render","TEXT_LINE_HEIGHT","wrapTextLines","L","maxWidth","lines","paragraph","words","current","word","test","layerBounds","a","b","cc","d","p","pad","clampTextSize","availH","clampBoxWidth","availW","cornerPoints","DIRECTIONAL_SHAPES","DASHED_SHAPES","ARROW_HEAD_ENDS","dashedLineDash","width","drawArrowHead","c","tipX","tipY","ang","head","ROTATE_HANDLE_GAP","ROTATE_HANDLE_RADIUS","layerCenter","rotatePoint","deg","rad","cos","sin","dx","dy","keepingFixed","local","mutate","rot","before","after","toLayerSpace","rotateHandleLocalPoint","rotateHandlePoint","onRotateHandle","rp","onResizeHandle","hs","q","hit","ep","cp","paintLayer","cx","cy","lineHeight","line","i","x","y","r","ex","ey","dashed","which","pt","img","normRect","drawCropOverlay","cropRect","overlayEl","octx","W","H","layers","mode","selectedId","err","l"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index150.es.js","sources":["../src/components/organisms/image-editor/engine/rendering.js"],"sourcesContent":["import { supportsContextFilter } from './canvas-filter.js'\nimport { FILTER_CSS } from './constants.js'\n\nexport function baseFilter(state) {\n const { adj } = state\n let f = `brightness(${adj.brightness}%) contrast(${adj.contrast}%) saturate(${adj.saturate}%) sepia(${adj.sepia}%) blur(${adj.blur}px) hue-rotate(${adj.hue}deg)`\n if (adj.filter !== 'none') f += ' ' + FILTER_CSS[adj.filter]\n return f.trim()\n}\n\nexport const ZOOM_MIN = 0.25\nexport const ZOOM_MAX = 4\nconst ZOOM_STEP = 1.25\n\nexport function fitStage(state) {\n const pad = 48\n const fitScale = Math.min(\n (state.stageEl.clientWidth - pad) / state.sourceCanvas.width,\n (state.stageEl.clientHeight - pad) / state.sourceCanvas.height,\n 1\n )\n state.fitScale = fitScale\n const scale = fitScale * state.zoom\n state.viewScale = scale\n const w = Math.round(state.sourceCanvas.width * scale),\n h = Math.round(state.sourceCanvas.height * scale)\n state.canvasEl.style.width = state.overlayEl.style.width = w + 'px'\n state.canvasEl.style.height = state.overlayEl.style.height = h + 'px'\n}\n\nexport function applyZoom(state, zoom) {\n state.zoom = Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, zoom))\n if (!state.mounted || !state.sourceCanvas.width) {\n state.notify()\n return\n }\n fitStage(state)\n renderOverlay(state)\n state.notify()\n}\n\nexport function zoomIn(state) {\n applyZoom(state, state.zoom * ZOOM_STEP)\n}\n\nexport function zoomOut(state) {\n applyZoom(state, state.zoom / ZOOM_STEP)\n}\n\nexport function zoomToFit(state) {\n applyZoom(state, 1)\n}\n\nexport function syncCanvasSize(state) {\n state.canvasEl.width = state.overlayEl.width = state.sourceCanvas.width\n state.canvasEl.height = state.overlayEl.height = state.sourceCanvas.height\n fitStage(state)\n}\n\nexport function renderBase(state) {\n const { ctx, canvasEl, sourceCanvas } = state\n ctx.clearRect(0, 0, canvasEl.width, canvasEl.height)\n const filter = baseFilter(state)\n\n if (supportsContextFilter()) {\n canvasEl.style.filter = ''\n ctx.filter = filter\n ctx.drawImage(sourceCanvas, 0, 0)\n ctx.filter = 'none'\n return\n }\n\n canvasEl.style.filter = filter\n ctx.drawImage(sourceCanvas, 0, 0)\n}\n\nexport function render(state) {\n if (!state.mounted || !state.sourceCanvas.width) return\n renderBase(state)\n renderOverlay(state)\n}\n\nexport const TEXT_LINE_HEIGHT = 1.1\n\nexport function wrapTextLines(state, L) {\n state.octx.font = `${L.size}px ${L.font}`\n const maxWidth = Math.max(L.boxWidth, 1)\n const lines = []\n // Split on hard breaks first, then word-wrap each paragraph in the box.\n L.text.split('\\n').forEach((paragraph) => {\n const words = paragraph.split(' ')\n let current = ''\n words.forEach((word) => {\n const test = current ? current + ' ' + word : word\n if (current && state.octx.measureText(test).width > maxWidth) {\n lines.push(current)\n current = word\n } else {\n current = test\n }\n })\n lines.push(current)\n })\n return lines\n}\n\nexport function layerBounds(state, L) {\n if (L.type === 'text') {\n const lines = wrapTextLines(state, L)\n return {\n x: L.x,\n y: L.y,\n w: L.boxWidth,\n h: lines.length * L.size * TEXT_LINE_HEIGHT,\n }\n }\n if (L.type === 'shape' || L.type === 'sticker') {\n return {\n x: Math.min(L.x, L.x + L.w),\n y: Math.min(L.y, L.y + L.h),\n w: Math.abs(L.w),\n h: Math.abs(L.h),\n }\n }\n if (L.type === 'stroke') {\n let a = Infinity,\n b = Infinity,\n cc = -Infinity,\n d = -Infinity\n L.points.forEach((p) => {\n a = Math.min(a, p.x)\n b = Math.min(b, p.y)\n cc = Math.max(cc, p.x)\n d = Math.max(d, p.y)\n })\n const pad = L.width / 2\n return { x: a - pad, y: b - pad, w: cc - a + pad * 2, h: d - b + pad * 2 }\n }\n return { x: 0, y: 0, w: 0, h: 0 }\n}\n\nexport function clampTextSize(state, L) {\n if (L.type !== 'text') return\n const availH = state.sourceCanvas.height - L.y\n while (L.size > 10 && layerBounds(state, L).h > availH && availH > 0) {\n L.size -= 1\n }\n}\n\nexport function clampBoxWidth(state, L) {\n if (L.type !== 'text') return\n const availW = state.sourceCanvas.width - L.x\n L.boxWidth = Math.round(Math.max(20, Math.min(L.boxWidth, availW)))\n}\n\nexport function cornerPoints(b) {\n return [\n { corner: 'tl', x: b.x, y: b.y },\n { corner: 'tr', x: b.x + b.w, y: b.y },\n { corner: 'bl', x: b.x, y: b.y + b.h },\n { corner: 'br', x: b.x + b.w, y: b.y + b.h },\n ]\n}\n\nexport const DIRECTIONAL_SHAPES = [\n 'line',\n 'dashedLine',\n 'arrow',\n 'dashedArrow',\n 'doubleArrow',\n 'dashedDoubleArrow',\n]\n\nconst DASHED_SHAPES = ['dashedLine', 'dashedArrow', 'dashedDoubleArrow']\n\n// Which ends of the shaft get an arrow head.\nconst ARROW_HEAD_ENDS = {\n arrow: ['end'],\n dashedArrow: ['end'],\n doubleArrow: ['end', 'start'],\n dashedDoubleArrow: ['end', 'start'],\n}\n\n// Dash and gap scale with stroke width; the floors keep hairlines visible.\nfunction dashedLineDash(width) {\n const w = Math.max(1, width || 1)\n return [Math.max(6, w * 2.5), Math.max(4, w * 1.75)]\n}\n\nfunction drawArrowHead(c, tipX, tipY, ang, head) {\n c.beginPath()\n c.moveTo(tipX, tipY)\n c.lineTo(\n tipX - head * Math.cos(ang - Math.PI / 6),\n tipY - head * Math.sin(ang - Math.PI / 6)\n )\n c.moveTo(tipX, tipY)\n c.lineTo(\n tipX - head * Math.cos(ang + Math.PI / 6),\n tipY - head * Math.sin(ang + Math.PI / 6)\n )\n c.stroke()\n}\n\nconst ROTATE_HANDLE_GAP = 26\nconst ROTATE_HANDLE_RADIUS = 6\n\nexport function layerCenter(state, L) {\n const b = layerBounds(state, L)\n return { x: b.x + b.w / 2, y: b.y + b.h / 2 }\n}\n\n// Canvas convention: y grows downward, so a positive angle turns clockwise.\nexport function rotatePoint(p, c, deg) {\n if (!deg) return { x: p.x, y: p.y }\n const rad = (deg * Math.PI) / 180\n const cos = Math.cos(rad),\n sin = Math.sin(rad)\n const dx = p.x - c.x,\n dy = p.y - c.y\n return { x: c.x + dx * cos - dy * sin, y: c.y + dx * sin + dy * cos }\n}\n\n// Resize without swinging a rotated layer: `local` stays put on screen.\nexport function keepingFixed(state, L, local, mutate) {\n const rot = L.rotation || 0\n if (!rot) {\n mutate()\n return\n }\n const before = rotatePoint(local, layerCenter(state, L), rot)\n mutate()\n const after = rotatePoint(local, layerCenter(state, L), rot)\n L.x += before.x - after.x\n L.y += before.y - after.y\n}\n\n// A pointer in the layer's own unrotated frame, where x/y/w/h are stored.\nexport function toLayerSpace(state, L, p) {\n return rotatePoint(p, layerCenter(state, L), -(L.rotation || 0))\n}\n\n// Local frame; the overlay's transform is what makes the grip orbit.\nfunction rotateHandleLocalPoint(state, L) {\n const b = layerBounds(state, L)\n return {\n x: b.x + b.w / 2,\n y: b.y + b.h + ROTATE_HANDLE_GAP / state.viewScale,\n }\n}\n\nfunction rotateHandlePoint(state, L) {\n const local = rotateHandleLocalPoint(state, L)\n return rotatePoint(local, layerCenter(state, L), L.rotation || 0)\n}\n\nexport function onRotateHandle(state, p, L) {\n const rp = rotateHandlePoint(state, L)\n return Math.hypot(p.x - rp.x, p.y - rp.y) <= 14 / state.viewScale\n}\n\nexport function onResizeHandle(state, p, L) {\n if (L.type === 'stroke') return null\n const hs = 12 / state.viewScale\n const q = toLayerSpace(state, L, p)\n if (L.type === 'shape' && DIRECTIONAL_SHAPES.includes(L.shape)) {\n const ends = [\n { corner: 'start', x: L.x, y: L.y },\n { corner: 'end', x: L.x + L.w, y: L.y + L.h },\n ]\n const hit = ends.find(\n (ep) => Math.abs(q.x - ep.x) < hs && Math.abs(q.y - ep.y) < hs\n )\n return hit ? hit.corner : null\n }\n const b = layerBounds(state, L)\n const hit = cornerPoints(b).find(\n (cp) => Math.abs(q.x - cp.x) < hs && Math.abs(q.y - cp.y) < hs\n )\n return hit ? hit.corner : null\n}\n\nexport function paintLayer(state, c, L) {\n if (L._editing) return\n c.save()\n // Strokes only need the transform once they carry a rotation.\n if (L.type !== 'stroke' || L.rotation) {\n const b = layerBounds(state, L)\n const cx = b.x + b.w / 2,\n cy = b.y + b.h / 2\n c.translate(cx, cy)\n if (L.rotation) c.rotate((L.rotation * Math.PI) / 180)\n if (L.flipH || L.flipV) c.scale(L.flipH ? -1 : 1, L.flipV ? -1 : 1)\n c.translate(-cx, -cy)\n }\n if (L.type === 'text') {\n c.font = `${L.size}px ${L.font}`\n c.fillStyle = L.color\n c.textBaseline = 'top'\n c.shadowColor = 'rgba(0,0,0,.22)'\n c.shadowBlur = L.size * 0.05\n c.shadowOffsetY = L.size * 0.02\n const lineHeight = L.size * TEXT_LINE_HEIGHT\n wrapTextLines(state, L).forEach((line, i) => {\n c.fillText(line, L.x, L.y + i * lineHeight)\n })\n } else if (L.type === 'shape') {\n c.strokeStyle = L.color\n c.fillStyle = L.color\n c.lineWidth = L.width\n c.lineCap = 'round'\n c.lineJoin = 'round'\n const x = L.x,\n y = L.y,\n w = L.w,\n h = L.h\n if (L.shape === 'rect') {\n L.fill === 'fill' ? c.fillRect(x, y, w, h) : c.strokeRect(x, y, w, h)\n } else if (L.shape === 'ellipse') {\n c.beginPath()\n c.ellipse(\n x + w / 2,\n y + h / 2,\n Math.abs(w / 2),\n Math.abs(h / 2),\n 0,\n 0,\n Math.PI * 2\n )\n L.fill === 'fill' ? c.fill() : c.stroke()\n } else if (L.shape === 'circle') {\n const r = Math.min(Math.abs(w), Math.abs(h)) / 2\n c.beginPath()\n c.arc(x + w / 2, y + h / 2, r, 0, Math.PI * 2)\n L.fill === 'fill' ? c.fill() : c.stroke()\n } else if (DIRECTIONAL_SHAPES.includes(L.shape)) {\n const ex = x + w,\n ey = y + h\n const dashed = DASHED_SHAPES.includes(L.shape)\n if (dashed) {\n // Butt caps keep dashes crisp; round caps bleed into the gaps.\n c.lineCap = 'butt'\n c.setLineDash(dashedLineDash(L.width))\n }\n c.beginPath()\n c.moveTo(x, y)\n c.lineTo(ex, ey)\n c.stroke()\n if (dashed) {\n // Heads draw solid: a dash pattern would fragment them into stubs.\n c.setLineDash([])\n c.lineCap = 'round'\n }\n const ang = Math.atan2(h, w),\n head = Math.max(14, L.width * 3)\n ;(ARROW_HEAD_ENDS[L.shape] || []).forEach((which) => {\n if (which === 'end') drawArrowHead(c, ex, ey, ang, head)\n else drawArrowHead(c, x, y, ang + Math.PI, head)\n })\n }\n } else if (L.type === 'stroke') {\n c.strokeStyle = L.color\n c.lineWidth = L.width\n c.lineCap = 'round'\n c.lineJoin = 'round'\n c.globalAlpha = L.style === 'highlight' ? 0.35 : 1\n c.beginPath()\n L.points.forEach((pt, i) =>\n i === 0 ? c.moveTo(pt.x, pt.y) : c.lineTo(pt.x, pt.y)\n )\n if (L.points.length === 1)\n c.lineTo(L.points[0].x + 0.1, L.points[0].y + 0.1)\n c.stroke()\n } else if (L.type === 'sticker') {\n const img = state.stickerImageCache.get(L.src)\n if (img && img.complete && img.naturalWidth)\n c.drawImage(img, L.x, L.y, L.w, L.h)\n }\n c.restore()\n}\n\nexport function normRect(r) {\n return {\n x: Math.min(r.x, r.x + r.w),\n y: Math.min(r.y, r.y + r.h),\n w: Math.abs(r.w),\n h: Math.abs(r.h),\n }\n}\n\nexport function drawCropOverlay(state) {\n const { cropRect, overlayEl, octx, sourceCanvas } = state\n if (!cropRect) return\n const r = normRect(cropRect)\n const W = overlayEl.width,\n H = overlayEl.height\n octx.save()\n octx.fillStyle = 'rgba(0,0,0,.45)'\n octx.fillRect(0, 0, W, Math.max(0, r.y))\n octx.fillRect(0, Math.min(H, r.y + r.h), W, Math.max(0, H - (r.y + r.h)))\n octx.fillRect(0, r.y, Math.max(0, r.x), r.h)\n octx.fillRect(Math.min(W, r.x + r.w), r.y, Math.max(0, W - (r.x + r.w)), r.h)\n octx.strokeStyle = '#fff'\n octx.lineWidth = Math.max(1, sourceCanvas.width / 500)\n octx.setLineDash([8, 6])\n octx.strokeRect(r.x, r.y, r.w, r.h)\n octx.restore()\n}\n\nexport function renderOverlay(state) {\n const { octx, overlayEl, layers, mode, selectedId } = state\n octx.clearRect(0, 0, overlayEl.width, overlayEl.height)\n layers.forEach((L) => {\n try {\n paintLayer(state, octx, L)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[image-editor] failed to paint layer', L.id, L.type, err)\n }\n })\n if (mode === 'select' && selectedId != null) {\n const L = layers.find((l) => l.id === selectedId)\n if (L) {\n const b = layerBounds(state, L)\n octx.save()\n // The layer's frame, so box, handles and grip all tilt with it.\n if (L.rotation) {\n const c = layerCenter(state, L)\n octx.translate(c.x, c.y)\n octx.rotate((L.rotation * Math.PI) / 180)\n octx.translate(-c.x, -c.y)\n }\n octx.strokeStyle = '#2f5fd2'\n octx.lineWidth = Math.max(1.2, 1.5 / state.viewScale)\n octx.setLineDash([6 / state.viewScale, 4 / state.viewScale])\n octx.strokeRect(b.x - 4, b.y - 4, b.w + 8, b.h + 8)\n octx.setLineDash([])\n if (L.type !== 'stroke') {\n const hs = 9 / state.viewScale\n octx.fillStyle = '#fff'\n octx.strokeStyle = '#2f5fd2'\n const handlePoints =\n L.type === 'shape' && DIRECTIONAL_SHAPES.includes(L.shape)\n ? [\n { x: L.x, y: L.y },\n { x: L.x + L.w, y: L.y + L.h },\n ]\n : cornerPoints(b)\n handlePoints.forEach((cp) => {\n octx.fillRect(cp.x - hs / 2, cp.y - hs / 2, hs, hs)\n octx.strokeRect(cp.x - hs / 2, cp.y - hs / 2, hs, hs)\n })\n }\n // Rotate grip: every layer type gets one, strokes included.\n const rp = rotateHandleLocalPoint(state, L)\n octx.strokeStyle = '#2f5fd2'\n octx.fillStyle = '#fff'\n octx.beginPath()\n octx.moveTo(rp.x, b.y + b.h + 4)\n octx.lineTo(rp.x, rp.y)\n octx.stroke()\n octx.beginPath()\n octx.arc(\n rp.x,\n rp.y,\n ROTATE_HANDLE_RADIUS / state.viewScale,\n 0,\n Math.PI * 2\n )\n octx.fill()\n octx.stroke()\n octx.restore()\n }\n }\n if (state.pendingShape) paintLayer(state, octx, state.pendingShape)\n if (mode === 'crop' && state.cropRect) drawCropOverlay(state)\n}\n"],"names":["baseFilter","state","adj","f","FILTER_CSS","ZOOM_MIN","ZOOM_MAX","ZOOM_STEP","fitStage","fitScale","scale","w","h","applyZoom","zoom","renderOverlay","zoomIn","zoomOut","zoomToFit","syncCanvasSize","renderBase","ctx","canvasEl","sourceCanvas","filter","supportsContextFilter","render","TEXT_LINE_HEIGHT","wrapTextLines","L","maxWidth","lines","paragraph","words","current","word","test","layerBounds","a","b","cc","d","p","pad","clampTextSize","availH","clampBoxWidth","availW","cornerPoints","DIRECTIONAL_SHAPES","DASHED_SHAPES","ARROW_HEAD_ENDS","dashedLineDash","width","drawArrowHead","c","tipX","tipY","ang","head","ROTATE_HANDLE_GAP","ROTATE_HANDLE_RADIUS","layerCenter","rotatePoint","deg","rad","cos","sin","dx","dy","keepingFixed","local","mutate","rot","before","after","toLayerSpace","rotateHandleLocalPoint","rotateHandlePoint","onRotateHandle","rp","onResizeHandle","hs","q","hit","ep","cp","paintLayer","cx","cy","lineHeight","line","i","x","y","r","ex","ey","dashed","which","pt","img","normRect","drawCropOverlay","cropRect","overlayEl","octx","W","H","layers","mode","selectedId","err","l"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { emitChange as o, MAX_HISTORY as c } from "./
|
|
2
|
-
import { syncCanvasSize as u, render as i } from "./
|
|
1
|
+
import { emitChange as o, MAX_HISTORY as c } from "./index149.es.js";
|
|
2
|
+
import { syncCanvasSize as u, render as i } from "./index150.es.js";
|
|
3
3
|
function d(n) {
|
|
4
4
|
const r = document.createElement("canvas");
|
|
5
5
|
return r.width = n.sourceCanvas.width, r.height = n.sourceCanvas.height, r.getContext("2d").drawImage(n.sourceCanvas, 0, 0), {
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
d as snapshot,
|
|
29
29
|
S as undo
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=
|
|
31
|
+
//# sourceMappingURL=index151.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index151.es.js","sources":["../src/components/organisms/image-editor/engine/history.js"],"sourcesContent":["import { MAX_HISTORY, emitChange } from './state.js'\nimport { render, syncCanvasSize } from './rendering.js'\n\nexport function snapshot(state) {\n const c = document.createElement('canvas')\n c.width = state.sourceCanvas.width\n c.height = state.sourceCanvas.height\n c.getContext('2d').drawImage(state.sourceCanvas, 0, 0)\n return {\n raster: c,\n layers: JSON.parse(JSON.stringify(state.layers)),\n adj: { ...state.adj },\n sel: state.selectedId,\n }\n}\n\nexport function pushHistory(state) {\n state.undoStack.push(snapshot(state))\n if (state.undoStack.length > MAX_HISTORY) state.undoStack.shift()\n state.redoStack = []\n emitChange(state)\n}\n\nexport function applySnapshot(state, s) {\n state.sourceCanvas.width = s.raster.width\n state.sourceCanvas.height = s.raster.height\n state.sourceCanvas.getContext('2d').drawImage(s.raster, 0, 0)\n state.layers = JSON.parse(JSON.stringify(s.layers))\n Object.assign(state.adj, s.adj)\n state.selectedId = s.sel\n syncCanvasSize(state)\n render(state)\n}\n\nexport function undo(state) {\n if (!state.undoStack.length) return\n state.redoStack.push(snapshot(state))\n applySnapshot(state, state.undoStack.pop())\n state.statusText = 'Undo'\n emitChange(state)\n}\n\nexport function redo(state) {\n if (!state.redoStack.length) return\n state.undoStack.push(snapshot(state))\n applySnapshot(state, state.redoStack.pop())\n state.statusText = 'Redo'\n emitChange(state)\n}\n"],"names":["snapshot","state","c","pushHistory","MAX_HISTORY","emitChange","applySnapshot","s","syncCanvasSize","render","undo","redo"],"mappings":";;AAGO,SAASA,EAASC,GAAO;AAC9B,QAAMC,IAAI,SAAS,cAAc,QAAQ;AACzC,SAAAA,EAAE,QAAQD,EAAM,aAAa,OAC7BC,EAAE,SAASD,EAAM,aAAa,QAC9BC,EAAE,WAAW,IAAI,EAAE,UAAUD,EAAM,cAAc,GAAG,CAAC,GAC9C;AAAA,IACL,QAAQC;AAAA,IACR,QAAQ,KAAK,MAAM,KAAK,UAAUD,EAAM,MAAM,CAAC;AAAA,IAC/C,KAAK,EAAE,GAAGA,EAAM,IAAG;AAAA,IACnB,KAAKA,EAAM;AAAA,EACf;AACA;AAEO,SAASE,EAAYF,GAAO;AACjC,EAAAA,EAAM,UAAU,KAAKD,EAASC,CAAK,CAAC,GAChCA,EAAM,UAAU,SAASG,KAAaH,EAAM,UAAU,MAAK,GAC/DA,EAAM,YAAY,CAAA,GAClBI,EAAWJ,CAAK;AAClB;AAEO,SAASK,EAAcL,GAAOM,GAAG;AACtC,EAAAN,EAAM,aAAa,QAAQM,EAAE,OAAO,OACpCN,EAAM,aAAa,SAASM,EAAE,OAAO,QACrCN,EAAM,aAAa,WAAW,IAAI,EAAE,UAAUM,EAAE,QAAQ,GAAG,CAAC,GAC5DN,EAAM,SAAS,KAAK,MAAM,KAAK,UAAUM,EAAE,MAAM,CAAC,GAClD,OAAO,OAAON,EAAM,KAAKM,EAAE,GAAG,GAC9BN,EAAM,aAAaM,EAAE,KACrBC,EAAeP,CAAK,GACpBQ,EAAOR,CAAK;AACd;AAEO,SAASS,EAAKT,GAAO;AAC1B,EAAKA,EAAM,UAAU,WACrBA,EAAM,UAAU,KAAKD,EAASC,CAAK,CAAC,GACpCK,EAAcL,GAAOA,EAAM,UAAU,IAAG,CAAE,GAC1CA,EAAM,aAAa,QACnBI,EAAWJ,CAAK;AAClB;AAEO,SAASU,EAAKV,GAAO;AAC1B,EAAKA,EAAM,UAAU,WACrBA,EAAM,UAAU,KAAKD,EAASC,CAAK,CAAC,GACpCK,EAAcL,GAAOA,EAAM,UAAU,IAAG,CAAE,GAC1CA,EAAM,aAAa,QACnBI,EAAWJ,CAAK;AAClB;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { pushHistory as d } from "./
|
|
2
|
-
import { emitChange as u, resetAdjValues as v } from "./
|
|
3
|
-
import { syncCanvasSize as C, render as x, normRect as w, layerBounds as R } from "./
|
|
4
|
-
import { setMode as g } from "./
|
|
1
|
+
import { pushHistory as d } from "./index151.es.js";
|
|
2
|
+
import { emitChange as u, resetAdjValues as v } from "./index149.es.js";
|
|
3
|
+
import { syncCanvasSize as C, render as x, normRect as w, layerBounds as R } from "./index150.es.js";
|
|
4
|
+
import { setMode as g } from "./index153.es.js";
|
|
5
5
|
function m(o, n, t) {
|
|
6
6
|
const r = R(o, n), a = { x: r.x + r.w / 2, y: r.y + r.h / 2 }, c = t(a);
|
|
7
7
|
return { x: c.x - a.x, y: c.y - a.y };
|
|
@@ -68,4 +68,4 @@ export {
|
|
|
68
68
|
T as rotate,
|
|
69
69
|
D as setCropRatio
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=
|
|
71
|
+
//# sourceMappingURL=index152.es.js.map
|