alchemy_cms 7.3.4 → 7.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +67 -1
  3. data/Gemfile +10 -3
  4. data/README.md +2 -2
  5. data/Rakefile +2 -0
  6. data/alchemy_cms.gemspec +1 -4
  7. data/app/assets/builds/alchemy/admin.css +9 -1
  8. data/app/assets/builds/alchemy/admin.css.map +1 -1
  9. data/app/assets/builds/alchemy/custom-properties.css +1 -1
  10. data/app/assets/builds/alchemy/custom-properties.css.map +1 -1
  11. data/app/assets/builds/alchemy/preview.min.js +1 -0
  12. data/app/assets/builds/alchemy/welcome.css +1 -1
  13. data/app/assets/builds/alchemy/welcome.css.map +1 -1
  14. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -1
  15. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css.map +1 -1
  16. data/app/assets/config/alchemy_manifest.js +0 -4
  17. data/app/assets/javascripts/alchemy/admin.js +8 -6
  18. data/app/assets/stylesheets/alchemy/admin/elements.scss +43 -7
  19. data/app/assets/stylesheets/alchemy/admin/forms.scss +4 -0
  20. data/app/assets/stylesheets/alchemy/admin/image_library.scss +40 -26
  21. data/app/assets/stylesheets/alchemy/admin/navigation.scss +9 -1
  22. data/app/assets/stylesheets/alchemy/admin/preview_window.scss +22 -17
  23. data/app/assets/stylesheets/alchemy/admin.scss +1 -1
  24. data/app/assets/stylesheets/alchemy/custom-properties.css +2 -1
  25. data/app/components/alchemy/ingredients/link_view.rb +7 -1
  26. data/app/components/alchemy/ingredients/picture_view.rb +5 -2
  27. data/app/components/alchemy/ingredients/text_view.rb +4 -1
  28. data/app/components/concerns/alchemy/ingredients/link_target.rb +18 -0
  29. data/app/controllers/alchemy/admin/base_controller.rb +34 -5
  30. data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
  31. data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
  32. data/app/controllers/alchemy/admin/layoutpages_controller.rb +1 -0
  33. data/app/controllers/alchemy/admin/pages_controller.rb +6 -6
  34. data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
  35. data/app/controllers/alchemy/elements_controller.rb +3 -0
  36. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  37. data/app/helpers/alchemy/admin/navigation_helper.rb +22 -1
  38. data/app/javascript/alchemy_admin/components/action.js +2 -1
  39. data/app/javascript/alchemy_admin/components/dialog_link.js +3 -18
  40. data/app/javascript/alchemy_admin/components/element_editor.js +9 -0
  41. data/app/javascript/alchemy_admin/components/elements_window.js +34 -0
  42. data/app/javascript/alchemy_admin/components/elements_window_handle.js +65 -0
  43. data/app/javascript/alchemy_admin/components/icon.js +2 -2
  44. data/app/javascript/alchemy_admin/components/index.js +1 -0
  45. data/app/javascript/alchemy_admin/components/preview_window.js +5 -5
  46. data/app/javascript/alchemy_admin/components/uploader/file_upload.js +1 -1
  47. data/app/javascript/alchemy_admin/confirm_dialog.js +9 -11
  48. data/app/javascript/alchemy_admin/dialog.js +329 -0
  49. data/app/javascript/alchemy_admin/hotkeys.js +3 -2
  50. data/app/javascript/alchemy_admin/image_cropper.js +57 -40
  51. data/app/javascript/alchemy_admin/image_overlay.js +73 -0
  52. data/app/javascript/alchemy_admin/initializer.js +51 -2
  53. data/app/javascript/alchemy_admin/link_dialog.js +2 -1
  54. data/app/javascript/alchemy_admin/node_tree.js +3 -1
  55. data/app/javascript/alchemy_admin/page_sorter.js +1 -1
  56. data/app/javascript/alchemy_admin/picture_selector.js +2 -1
  57. data/app/javascript/alchemy_admin/shoelace_theme.js +2 -2
  58. data/app/javascript/alchemy_admin/templates/compiled.js +1 -0
  59. data/app/javascript/alchemy_admin.js +10 -6
  60. data/app/javascript/preview.js +117 -0
  61. data/app/models/alchemy/image_cropper_settings.rb +3 -4
  62. data/app/views/alchemy/_menubar.html.erb +1 -1
  63. data/app/views/alchemy/_preview_mode_code.html.erb +1 -1
  64. data/app/views/alchemy/admin/crop.html.erb +19 -16
  65. data/app/views/alchemy/admin/dashboard/info.html.erb +1 -1
  66. data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +9 -8
  67. data/app/views/alchemy/admin/elements/_clipboard_button.html.erb +14 -0
  68. data/app/views/alchemy/admin/elements/_element.html.erb +2 -0
  69. data/app/views/alchemy/admin/elements/_form.html.erb +15 -13
  70. data/app/views/alchemy/admin/elements/create.turbo_stream.erb +34 -0
  71. data/app/views/alchemy/admin/elements/index.html.erb +3 -15
  72. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +1 -1
  73. data/app/views/alchemy/admin/layoutpages/edit.html.erb +7 -5
  74. data/app/views/alchemy/admin/nodes/_form.html.erb +1 -1
  75. data/app/views/alchemy/admin/pages/_current_page.html.erb +1 -1
  76. data/app/views/alchemy/admin/pages/_form.html.erb +43 -40
  77. data/app/views/alchemy/admin/pages/_locked_page.html.erb +1 -1
  78. data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +1 -1
  79. data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
  80. data/app/views/alchemy/admin/pages/_table.html.erb +2 -2
  81. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  82. data/app/views/alchemy/admin/pages/update.turbo_stream.erb +39 -0
  83. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +3 -4
  84. data/app/views/alchemy/admin/pictures/_picture_description_field.html.erb +7 -5
  85. data/app/views/alchemy/admin/pictures/index.html.erb +13 -9
  86. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +1 -1
  87. data/app/views/layouts/alchemy/admin.html.erb +8 -4
  88. data/bun.lockb +0 -0
  89. data/bundles/tinymce.js +2 -0
  90. data/config/alchemy/config.yml +3 -3
  91. data/config/alchemy/modules.yml +7 -6
  92. data/config/importmap.rb +4 -0
  93. data/config/routes.rb +1 -1
  94. data/lib/alchemy/engine.rb +6 -0
  95. data/lib/alchemy/modules.rb +0 -27
  96. data/lib/alchemy/resource.rb +14 -4
  97. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +10 -10
  98. data/lib/alchemy/tinymce.rb +2 -1
  99. data/lib/alchemy/upgrader/seven_point_four.rb +26 -0
  100. data/lib/alchemy/version.rb +1 -1
  101. data/lib/alchemy.rb +14 -0
  102. data/lib/alchemy_cms.rb +0 -2
  103. data/lib/generators/alchemy/ingredient/ingredient_generator.rb +5 -0
  104. data/lib/generators/alchemy/ingredient/templates/view.html.erb +1 -1
  105. data/lib/generators/alchemy/ingredient/templates/view_component.rb.tt +10 -0
  106. data/lib/generators/alchemy/install/install_generator.rb +0 -1
  107. data/lib/generators/alchemy/install/templates/elements.yml.tt +1 -1
  108. data/lib/tasks/alchemy/upgrade.rake +19 -20
  109. data/rollup.config.mjs +44 -1
  110. data/vendor/javascript/cropperjs.min.js +10 -0
  111. data/vendor/javascript/handlebars.min.js +29 -0
  112. data/vendor/javascript/jquery.min.js +2 -0
  113. data/vendor/javascript/select2.min.js +23 -0
  114. data/vendor/javascript/tinymce.min.js +1 -1
  115. metadata +40 -94
  116. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +0 -271
  117. data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +0 -54
  118. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +0 -97
  119. data/app/assets/javascripts/alchemy/preview.js +0 -1
  120. data/app/assets/javascripts/alchemy/templates/index.js +0 -2
  121. data/app/javascript/alchemy_admin/gui.js +0 -12
  122. data/app/views/alchemy/admin/elements/create.js.erb +0 -35
  123. data/app/views/alchemy/admin/pages/update.js.erb +0 -43
  124. data/lib/alchemy/upgrader/seven_point_zero.rb +0 -36
  125. data/vendor/assets/images/Jcrop.gif +0 -0
  126. data/vendor/assets/javascripts/jquery_plugins/jquery.Jcrop.min.js +0 -7
  127. data/vendor/assets/javascripts/jquery_plugins/select2.js +0 -3729
  128. data/vendor/assets/stylesheets/jquery.Jcrop.min.css +0 -2
  129. data/vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css +0 -1
  130. /data/app/{assets/javascripts/alchemy → javascript/alchemy_admin}/templates/node_folder.hbs +0 -0
  131. /data/app/{assets/javascripts/alchemy → javascript/alchemy_admin}/templates/page_folder.hbs +0 -0
  132. /data/app/{assets/javascripts/tinymce/icons/remixicons/icons.js → javascript/tinymce/icons/remixicons/index.js} +0 -0
  133. /data/app/{assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js → javascript/tinymce/plugins/alchemy_link/index.js} +0 -0
  134. /data/vendor/assets/{fonts → images}/remixicon.symbol.svg +0 -0
@@ -27,35 +27,8 @@ module Alchemy
27
27
  def register_module(module_definition)
28
28
  definition_hash = module_definition.deep_stringify_keys
29
29
 
30
- ### Validate controller(s) existence
31
- if definition_hash["navigation"].is_a?(Hash)
32
- defined_controllers = [definition_hash["navigation"]["controller"]]
33
-
34
- if definition_hash["navigation"]["sub_navigation"].is_a?(Array)
35
- defined_controllers.concat(definition_hash["navigation"]["sub_navigation"].map { |x| x["controller"] })
36
- end
37
-
38
- validate_controllers_existence(defined_controllers, definition_hash)
39
- end
40
-
41
30
  @@alchemy_modules |= [definition_hash]
42
31
  end
43
-
44
- private
45
-
46
- def validate_controllers_existence(controllers, definition_hash)
47
- controllers.each do |controller_val|
48
- next if controller_val.blank?
49
-
50
- controller_name = "#{controller_val.camelize}Controller"
51
-
52
- begin
53
- controller_name.constantize
54
- rescue NameError
55
- raise "Error in AlchemyCMS module definition: '#{definition_hash["name"]}'. Could not find the matching controller class #{controller_name.sub(/^::/, "")} for the specified controller: '#{controller_val}'"
56
- end
57
- end
58
- end
59
32
  end
60
33
 
61
34
  # Get the module definition for given module name
@@ -188,11 +188,21 @@ module Alchemy
188
188
  end
189
189
  end
190
190
 
191
+ # Returns a sorted array of attributes.
192
+ #
193
+ # Attribute called "name" comes first.
194
+ # Attribute called "updated_at" comes last.
195
+ # Boolean type attributes come after non-boolean attributes but before "updated_at".
196
+ #
191
197
  def sorted_attributes
192
- @_sorted_attributes ||= attributes
193
- .sort_by { |attr| (attr[:name] == "name") ? 0 : 1 }
194
- .sort_by! { |attr| (attr[:type] == :boolean) ? 1 : 0 }
195
- .sort_by! { |attr| (attr[:name] == "updated_at") ? 1 : 0 }
198
+ @_sorted_attributes ||= attributes.sort_by! do |attr|
199
+ [
200
+ (attr[:name] == "name") ? 0 : 1,
201
+ (attr[:name] == "updated_at") ? 3 : 2,
202
+ (attr[:type] == :boolean) ? 2 : 1,
203
+ attr[:name]
204
+ ]
205
+ end
196
206
  end
197
207
 
198
208
  def editable_attributes
@@ -562,8 +562,8 @@ RSpec.shared_examples_for "having picture thumbnails" do
562
562
  context "size 200x50" do
563
563
  let(:size) { "200x50" }
564
564
 
565
- it "default box should be [0, 25, 200, 75]" do
566
- expect(subject[:default_box]).to eq([0, 25, 200, 75])
565
+ it "default box should be [0, 25, 200, 50]" do
566
+ expect(subject[:default_box]).to eq([0, 25, 200, 50])
567
567
  end
568
568
  end
569
569
 
@@ -578,16 +578,16 @@ RSpec.shared_examples_for "having picture thumbnails" do
578
578
  context "size 50x100" do
579
579
  let(:size) { "50x100" }
580
580
 
581
- it "the hash should be {x1: 75, y1: 0, x2: 125, y2: 100}" do
582
- expect(subject[:default_box]).to eq([75, 0, 125, 100])
581
+ it "the hash should be {x1: 75, y1: 0, x2: 50, y2: 100}" do
582
+ expect(subject[:default_box]).to eq([75, 0, 50, 100])
583
583
  end
584
584
  end
585
585
 
586
586
  context "size 50x50" do
587
587
  let(:size) { "50x50" }
588
588
 
589
- it "the hash should be {x1: 50, y1: 0, x2: 150, y2: 100}" do
590
- expect(subject[:default_box]).to eq([50, 0, 150, 100])
589
+ it "the hash should be {x1: 50, y1: 0, x2: 100, y2: 100}" do
590
+ expect(subject[:default_box]).to eq([50, 0, 100, 100])
591
591
  end
592
592
  end
593
593
 
@@ -602,16 +602,16 @@ RSpec.shared_examples_for "having picture thumbnails" do
602
602
  context "size 400x100" do
603
603
  let(:size) { "400x100" }
604
604
 
605
- it "the hash should be {x1: 0, y1: 25, x2: 200, y2: 75}" do
606
- expect(subject[:default_box]).to eq([0, 25, 200, 75])
605
+ it "the hash should be {x1: 0, y1: 25, x2: 200, y2: 50}" do
606
+ expect(subject[:default_box]).to eq([0, 25, 200, 50])
607
607
  end
608
608
  end
609
609
 
610
610
  context "size 200x200" do
611
611
  let(:size) { "200x200" }
612
612
 
613
- it "the hash should be {x1: 50, y1: 0, x2: 150, y2: 100}" do
614
- expect(subject[:default_box]).to eq([50, 0, 150, 100])
613
+ it "the hash should be {x1: 50, y1: 0, x2: 100, y2: 100}" do
614
+ expect(subject[:default_box]).to eq([50, 0, 100, 100])
615
615
  end
616
616
  end
617
617
  end
@@ -5,6 +5,7 @@ module Alchemy
5
5
  mattr_accessor :languages, :plugins
6
6
 
7
7
  DEFAULT_PLUGINS = %w[
8
+ alchemy_link
8
9
  anchor
9
10
  charmap
10
11
  code
@@ -14,7 +15,7 @@ module Alchemy
14
15
  lists
15
16
  ]
16
17
 
17
- @@plugins = DEFAULT_PLUGINS + %w[alchemy_link]
18
+ @@plugins = DEFAULT_PLUGINS
18
19
  @@init = {
19
20
  skin: "alchemy",
20
21
  content_css: "/assets/tinymce/skins/content/alchemy/content.min.css",
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "thor"
5
+
6
+ module Alchemy
7
+ class Upgrader::SevenPointFour < Upgrader
8
+ include Thor::Base
9
+ include Thor::Actions
10
+
11
+ class << self
12
+ def update_custom_css_config
13
+ if File.exist? "app/assets/config/manifest.js"
14
+ log "Removing alchemy/admin/custom.css from assets config file."
15
+ task.gsub_file "app/assets/config/manifest.js", %r{//= link alchemy/admin/custom.css\n}, ""
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def task
22
+ @_task || new
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "7.3.4"
4
+ VERSION = "7.4.0"
5
5
 
6
6
  def self.version
7
7
  VERSION
data/lib/alchemy.rb CHANGED
@@ -98,6 +98,20 @@ module Alchemy
98
98
  }])
99
99
  end
100
100
 
101
+ # Additional stylesheets to be included in the Alchemy admin UI
102
+ #
103
+ # == Example
104
+ #
105
+ # # lib/alchemy/devise/engine.rb
106
+ # initializer "alchemy.devise.stylesheets", before: "alchemy.admin_stylesheets" do
107
+ # Alchemy.admin_stylesheets << "alchemy/devise/admin.css"
108
+ # end
109
+ #
110
+ # @return [Set<String>]
111
+ def self.admin_stylesheets
112
+ @_admin_stylesheets ||= Set.new(["alchemy/admin/custom.css"])
113
+ end
114
+
101
115
  # Define page publish targets
102
116
  #
103
117
  # A publish target is a ActiveJob that gets performed
data/lib/alchemy_cms.rb CHANGED
@@ -11,9 +11,7 @@ require "awesome_nested_set"
11
11
  require "cancan"
12
12
  require "dragonfly"
13
13
  require "gutentag"
14
- require "handlebars_assets"
15
14
  require "importmap-rails"
16
- require "jquery-rails"
17
15
  require "kaminari"
18
16
  require "non_stupid_digest_assets"
19
17
  require "ransack"
@@ -14,6 +14,10 @@ module Alchemy
14
14
  @ingredients_view_path = "app/views/alchemy/ingredients"
15
15
  end
16
16
 
17
+ def create_view_component
18
+ template "view_component.rb.tt", "app/components/alchemy/ingredients/#{file_name}_view.rb"
19
+ end
20
+
17
21
  def create_model
18
22
  template "model.rb.tt", "app/models/alchemy/ingredients/#{file_name}.rb"
19
23
  end
@@ -21,6 +25,7 @@ module Alchemy
21
25
  def copy_templates
22
26
  @ingredient_editor_local = "#{file_name}_editor"
23
27
  @ingredient_view_local = "#{file_name}_view"
28
+ @ingredient_view_component_class = "#{@class_name}View"
24
29
  template "view.html.erb", "#{@ingredients_view_path}/_#{file_name}_view.html.erb"
25
30
  template "editor.html.erb", "#{@ingredients_view_path}/_#{file_name}_editor.html.erb"
26
31
  end
@@ -1 +1 @@
1
- <%%= <%= @ingredient_view_local %>.value %>
1
+ <%%= render Alchemy::Ingredients::<%= @ingredient_view_component_class %>.new(<%= @ingredient_view_local %>) %>
@@ -0,0 +1,10 @@
1
+ module Alchemy
2
+ module Ingredients
3
+ class <%= @class_name %>View < BaseView
4
+
5
+ def call
6
+ content_tag(:div, ingredient.value)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -66,7 +66,6 @@ module Alchemy
66
66
  def install_assets
67
67
  copy_file "all.js", app_vendor_assets_path.join("javascripts", "alchemy", "admin", "all.js")
68
68
  copy_file "custom.css", app_assets_path.join("stylesheets/alchemy/admin/custom.css")
69
- append_to_file Rails.root.join("app/assets/config/manifest.js"), "//= link alchemy/admin/custom.css\n"
70
69
  end
71
70
 
72
71
  def copy_demo_views
@@ -1,6 +1,6 @@
1
1
  # == In this configuration, you set up Alchemy's element layouts.
2
2
  #
3
- # For further information please see http://guides.alchemy-cms.com/stable/elements.html
3
+ # For further information please see http://guides.alchemy-cms.com/elements.html
4
4
 
5
5
  <%- unless @options[:skip_demo_files] -%>
6
6
  - name: article
@@ -7,8 +7,8 @@ namespace :alchemy do
7
7
  desc "Upgrades your app to AlchemyCMS v#{Alchemy::VERSION}."
8
8
  task upgrade: [
9
9
  "alchemy:upgrade:prepare",
10
- "alchemy:upgrade:7.0:run",
11
- "alchemy:upgrade:7.3:run"
10
+ "alchemy:upgrade:7.3:run",
11
+ "alchemy:upgrade:7.4:run"
12
12
  ] do
13
13
  Alchemy::Upgrader.display_todos
14
14
  end
@@ -31,14 +31,6 @@ namespace :alchemy do
31
31
  Alchemy::Upgrader.copy_new_config_file
32
32
  end
33
33
 
34
- desc "Upgrade Alchemy to v7.0"
35
- task "7.0" => [
36
- "alchemy:upgrade:prepare",
37
- "alchemy:upgrade:7.0:run"
38
- ] do
39
- Alchemy::Upgrader.display_todos
40
- end
41
-
42
34
  desc "Upgrade Alchemy to v7.3"
43
35
  task "7.3" => [
44
36
  "alchemy:upgrade:prepare",
@@ -47,16 +39,12 @@ namespace :alchemy do
47
39
  Alchemy::Upgrader.display_todos
48
40
  end
49
41
 
50
- namespace "7.0" do
51
- task "run" => [
52
- "alchemy:upgrade:7.0:remove_admin_entrypoint"
53
- ]
54
-
55
- desc "Remove alchemy admin entrypoint"
56
- task remove_admin_entrypoint: [:environment] do
57
- puts "removing npm_package..."
58
- Alchemy::Upgrader::SevenPointZero.remove_admin_entrypoint
59
- end
42
+ desc "Upgrade Alchemy to v7.4"
43
+ task "7.4" => [
44
+ "alchemy:upgrade:prepare",
45
+ "alchemy:upgrade:7.4:run"
46
+ ] do
47
+ Alchemy::Upgrader.display_todos
60
48
  end
61
49
 
62
50
  namespace "7.3" do
@@ -77,5 +65,16 @@ namespace :alchemy do
77
65
  Alchemy::Upgrader::SevenPointThree.generate_custom_css_entrypoint
78
66
  end
79
67
  end
68
+
69
+ namespace "7.4" do
70
+ task "run" => [
71
+ "alchemy:upgrade:7.4:update_custom_css_config"
72
+ ]
73
+
74
+ desc "Update custom alchemy admin stylesheet config"
75
+ task update_custom_css_config: [:environment] do
76
+ Alchemy::Upgrader::SevenPointFour.update_custom_css_config
77
+ end
78
+ end
80
79
  end
81
80
  end
data/rollup.config.mjs CHANGED
@@ -10,6 +10,14 @@ export default [
10
10
  },
11
11
  context: "window"
12
12
  },
13
+ {
14
+ input: "node_modules/cropperjs/dist/cropper.esm.js",
15
+ output: {
16
+ file: "vendor/javascript/cropperjs.min.js"
17
+ },
18
+ plugins: [terser()],
19
+ context: "window"
20
+ },
13
21
  {
14
22
  input: "node_modules/flatpickr/dist/esm/index.js",
15
23
  output: {
@@ -18,6 +26,20 @@ export default [
18
26
  plugins: [resolve(), terser()],
19
27
  context: "window"
20
28
  },
29
+ {
30
+ input: "node_modules/handlebars/dist/handlebars.min.js",
31
+ output: {
32
+ file: "vendor/javascript/handlebars.min.js"
33
+ },
34
+ context: "window"
35
+ },
36
+ {
37
+ input: "node_modules/jquery/dist/jquery.min.js",
38
+ output: {
39
+ file: "vendor/javascript/jquery.min.js"
40
+ },
41
+ context: "window"
42
+ },
21
43
  {
22
44
  input: "node_modules/keymaster/keymaster.js",
23
45
  output: {
@@ -33,6 +55,13 @@ export default [
33
55
  },
34
56
  plugins: [terser()]
35
57
  },
58
+ {
59
+ input: "node_modules/select2/select2.min.js",
60
+ output: {
61
+ file: "vendor/javascript/select2.min.js"
62
+ },
63
+ context: "window"
64
+ },
36
65
  {
37
66
  input: "node_modules/@ungap/custom-elements/min.js",
38
67
  output: {
@@ -60,6 +89,20 @@ export default [
60
89
  name: "tinymce",
61
90
  format: "esm"
62
91
  },
63
- plugins: [resolve(), commonjs(), terser()]
92
+ plugins: [
93
+ resolve({
94
+ modulePaths: ["app/javascript"]
95
+ }),
96
+ commonjs(),
97
+ terser()
98
+ ]
99
+ },
100
+ {
101
+ input: "app/javascript/preview.js",
102
+ output: {
103
+ file: "app/assets/builds/alchemy/preview.min.js"
104
+ },
105
+ context: "window",
106
+ plugins: [terser()]
64
107
  }
65
108
  ]
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * Cropper.js v1.6.2
3
+ * https://fengyuanchen.github.io/cropperjs
4
+ *
5
+ * Copyright 2015-present Chen Fengyuan
6
+ * Released under the MIT license
7
+ *
8
+ * Date: 2024-04-21T07:43:05.335Z
9
+ */
10
+ function t(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function e(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?t(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var a=i.call(t,e||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function n(t,e){for(var a=0;a<e.length;a++){var n=e[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function o(t,e,a){return(e=i(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function r(t){return function(t){if(Array.isArray(t))return h(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return h(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);"Object"===i&&t.constructor&&(i=t.constructor.name);if("Map"===i||"Set"===i)return Array.from(t);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return h(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}var s="undefined"!=typeof window&&void 0!==window.document,c=s?window:{},l=!(!s||!c.document.documentElement)&&"ontouchstart"in c.document.documentElement,d=!!s&&"PointerEvent"in c,p="cropper",m="all",u="crop",g="move",f="zoom",v="e",w="w",b="s",y="n",x="ne",M="nw",C="se",D="sw",B="".concat(p,"-crop"),k="".concat(p,"-disabled"),O="".concat(p,"-hidden"),T="".concat(p,"-hide"),E="".concat(p,"-invisible"),W="".concat(p,"-modal"),H="".concat(p,"-move"),N="".concat(p,"Action"),L="".concat(p,"Preview"),z="crop",Y="move",X="none",R="crop",S="cropend",j="cropmove",A="cropstart",P="dblclick",I=d?"pointerdown":l?"touchstart":"mousedown",U=d?"pointermove":l?"touchmove":"mousemove",q=d?"pointerup pointercancel":l?"touchend touchcancel":"mouseup",$="ready",Q="resize",K="wheel",Z="zoom",G="image/jpeg",V=/^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/,F=/^data:/,J=/^data:image\/jpeg;base64,/,_=/^img|canvas$/i,tt={viewMode:0,dragMode:z,initialAspectRatio:NaN,aspectRatio:NaN,data:null,preview:"",responsive:!0,restore:!0,checkCrossOrigin:!0,checkOrientation:!0,modal:!0,guides:!0,center:!0,highlight:!0,background:!0,autoCrop:!0,autoCropArea:.8,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,wheelZoomRatio:.1,cropBoxMovable:!0,cropBoxResizable:!0,toggleDragModeOnDblclick:!0,minCanvasWidth:0,minCanvasHeight:0,minCropBoxWidth:0,minCropBoxHeight:0,minContainerWidth:200,minContainerHeight:100,ready:null,cropstart:null,cropmove:null,cropend:null,crop:null,zoom:null},et=Number.isNaN||c.isNaN;function it(t){return"number"==typeof t&&!et(t)}var at=function(t){return t>0&&t<1/0};function nt(t){return void 0===t}function ot(t){return"object"===a(t)&&null!==t}var rt=Object.prototype.hasOwnProperty;function ht(t){if(!ot(t))return!1;try{var e=t.constructor,i=e.prototype;return e&&i&&rt.call(i,"isPrototypeOf")}catch(t){return!1}}function st(t){return"function"==typeof t}var ct=Array.prototype.slice;function lt(t){return Array.from?Array.from(t):ct.call(t)}function dt(t,e){return t&&st(e)&&(Array.isArray(t)||it(t.length)?lt(t).forEach((function(i,a){e.call(t,i,a,t)})):ot(t)&&Object.keys(t).forEach((function(i){e.call(t,t[i],i,t)}))),t}var pt=Object.assign||function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),a=1;a<e;a++)i[a-1]=arguments[a];return ot(t)&&i.length>0&&i.forEach((function(e){ot(e)&&Object.keys(e).forEach((function(i){t[i]=e[i]}))})),t},mt=/\.\d*(?:0|9){12}\d*$/;function ut(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e11;return mt.test(t)?Math.round(t*e)/e:t}var gt=/^width|height|left|top|marginLeft|marginTop$/;function ft(t,e){var i=t.style;dt(e,(function(t,e){gt.test(e)&&it(t)&&(t="".concat(t,"px")),i[e]=t}))}function vt(t,e){if(e)if(it(t.length))dt(t,(function(t){vt(t,e)}));else if(t.classList)t.classList.add(e);else{var i=t.className.trim();i?i.indexOf(e)<0&&(t.className="".concat(i," ").concat(e)):t.className=e}}function wt(t,e){e&&(it(t.length)?dt(t,(function(t){wt(t,e)})):t.classList?t.classList.remove(e):t.className.indexOf(e)>=0&&(t.className=t.className.replace(e,"")))}function bt(t,e,i){e&&(it(t.length)?dt(t,(function(t){bt(t,e,i)})):i?vt(t,e):wt(t,e))}var yt=/([a-z\d])([A-Z])/g;function xt(t){return t.replace(yt,"$1-$2").toLowerCase()}function Mt(t,e){return ot(t[e])?t[e]:t.dataset?t.dataset[e]:t.getAttribute("data-".concat(xt(e)))}function Ct(t,e,i){ot(i)?t[e]=i:t.dataset?t.dataset[e]=i:t.setAttribute("data-".concat(xt(e)),i)}var Dt=/\s\s*/,Bt=function(){var t=!1;if(s){var e=!1,i=function(){},a=Object.defineProperty({},"once",{get:function(){return t=!0,e},set:function(t){e=t}});c.addEventListener("test",i,a),c.removeEventListener("test",i,a)}return t}();function kt(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=i;e.trim().split(Dt).forEach((function(e){if(!Bt){var o=t.listeners;o&&o[e]&&o[e][i]&&(n=o[e][i],delete o[e][i],0===Object.keys(o[e]).length&&delete o[e],0===Object.keys(o).length&&delete t.listeners)}t.removeEventListener(e,n,a)}))}function Ot(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=i;e.trim().split(Dt).forEach((function(e){if(a.once&&!Bt){var o=t.listeners,r=void 0===o?{}:o;n=function(){delete r[e][i],t.removeEventListener(e,n,a);for(var o=arguments.length,h=new Array(o),s=0;s<o;s++)h[s]=arguments[s];i.apply(t,h)},r[e]||(r[e]={}),r[e][i]&&t.removeEventListener(e,r[e][i],a),r[e][i]=n,t.listeners=r}t.addEventListener(e,n,a)}))}function Tt(t,e,i){var a;return st(Event)&&st(CustomEvent)?a=new CustomEvent(e,{detail:i,bubbles:!0,cancelable:!0}):(a=document.createEvent("CustomEvent")).initCustomEvent(e,!0,!0,i),t.dispatchEvent(a)}function Et(t){var e=t.getBoundingClientRect();return{left:e.left+(window.pageXOffset-document.documentElement.clientLeft),top:e.top+(window.pageYOffset-document.documentElement.clientTop)}}var Wt=c.location,Ht=/^(\w+:)\/\/([^:/?#]*):?(\d*)/i;function Nt(t){var e=t.match(Ht);return null!==e&&(e[1]!==Wt.protocol||e[2]!==Wt.hostname||e[3]!==Wt.port)}function Lt(t){var e="timestamp=".concat((new Date).getTime());return t+(-1===t.indexOf("?")?"?":"&")+e}function zt(t){var e=t.rotate,i=t.scaleX,a=t.scaleY,n=t.translateX,o=t.translateY,r=[];it(n)&&0!==n&&r.push("translateX(".concat(n,"px)")),it(o)&&0!==o&&r.push("translateY(".concat(o,"px)")),it(e)&&0!==e&&r.push("rotate(".concat(e,"deg)")),it(i)&&1!==i&&r.push("scaleX(".concat(i,")")),it(a)&&1!==a&&r.push("scaleY(".concat(a,")"));var h=r.length?r.join(" "):"none";return{WebkitTransform:h,msTransform:h,transform:h}}function Yt(t,i){var a=t.pageX,n=t.pageY,o={endX:a,endY:n};return i?o:e({startX:a,startY:n},o)}function Xt(t){var e=t.aspectRatio,i=t.height,a=t.width,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"contain",o=at(a),r=at(i);if(o&&r){var h=i*e;"contain"===n&&h>a||"cover"===n&&h<a?i=a/e:a=i*e}else o?i=a/e:r&&(a=i*e);return{width:a,height:i}}var Rt=String.fromCharCode;var St=/^data:.*,/;function jt(t){var e,i=new DataView(t);try{var a,n,o;if(255===i.getUint8(0)&&216===i.getUint8(1))for(var r=i.byteLength,h=2;h+1<r;){if(255===i.getUint8(h)&&225===i.getUint8(h+1)){n=h;break}h+=1}if(n){var s=n+10;if("Exif"===function(t,e,i){var a="";i+=e;for(var n=e;n<i;n+=1)a+=Rt(t.getUint8(n));return a}(i,n+4,4)){var c=i.getUint16(s);if(((a=18761===c)||19789===c)&&42===i.getUint16(s+2,a)){var l=i.getUint32(s+4,a);l>=8&&(o=s+l)}}}if(o){var d,p,m=i.getUint16(o,a);for(p=0;p<m;p+=1)if(d=o+12*p+2,274===i.getUint16(d,a)){d+=8,e=i.getUint16(d,a),i.setUint16(d,1,a);break}}}catch(t){e=1}return e}var At={render:function(){this.initContainer(),this.initCanvas(),this.initCropBox(),this.renderCanvas(),this.cropped&&this.renderCropBox()},initContainer:function(){var t=this.element,e=this.options,i=this.container,a=this.cropper,n=Number(e.minContainerWidth),o=Number(e.minContainerHeight);vt(a,O),wt(t,O);var r={width:Math.max(i.offsetWidth,n>=0?n:200),height:Math.max(i.offsetHeight,o>=0?o:100)};this.containerData=r,ft(a,{width:r.width,height:r.height}),vt(t,O),wt(a,O)},initCanvas:function(){var t=this.containerData,e=this.imageData,i=this.options.viewMode,a=Math.abs(e.rotate)%180==90,n=a?e.naturalHeight:e.naturalWidth,o=a?e.naturalWidth:e.naturalHeight,r=n/o,h=t.width,s=t.height;t.height*r>t.width?3===i?h=t.height*r:s=t.width/r:3===i?s=t.width/r:h=t.height*r;var c={aspectRatio:r,naturalWidth:n,naturalHeight:o,width:h,height:s};this.canvasData=c,this.limited=1===i||2===i,this.limitCanvas(!0,!0),c.width=Math.min(Math.max(c.width,c.minWidth),c.maxWidth),c.height=Math.min(Math.max(c.height,c.minHeight),c.maxHeight),c.left=(t.width-c.width)/2,c.top=(t.height-c.height)/2,c.oldLeft=c.left,c.oldTop=c.top,this.initialCanvasData=pt({},c)},limitCanvas:function(t,e){var i=this.options,a=this.containerData,n=this.canvasData,o=this.cropBoxData,r=i.viewMode,h=n.aspectRatio,s=this.cropped&&o;if(t){var c=Number(i.minCanvasWidth)||0,l=Number(i.minCanvasHeight)||0;r>1?(c=Math.max(c,a.width),l=Math.max(l,a.height),3===r&&(l*h>c?c=l*h:l=c/h)):r>0&&(c?c=Math.max(c,s?o.width:0):l?l=Math.max(l,s?o.height:0):s&&(c=o.width,(l=o.height)*h>c?c=l*h:l=c/h));var d=Xt({aspectRatio:h,width:c,height:l});c=d.width,l=d.height,n.minWidth=c,n.minHeight=l,n.maxWidth=1/0,n.maxHeight=1/0}if(e)if(r>(s?0:1)){var p=a.width-n.width,m=a.height-n.height;n.minLeft=Math.min(0,p),n.minTop=Math.min(0,m),n.maxLeft=Math.max(0,p),n.maxTop=Math.max(0,m),s&&this.limited&&(n.minLeft=Math.min(o.left,o.left+(o.width-n.width)),n.minTop=Math.min(o.top,o.top+(o.height-n.height)),n.maxLeft=o.left,n.maxTop=o.top,2===r&&(n.width>=a.width&&(n.minLeft=Math.min(0,p),n.maxLeft=Math.max(0,p)),n.height>=a.height&&(n.minTop=Math.min(0,m),n.maxTop=Math.max(0,m))))}else n.minLeft=-n.width,n.minTop=-n.height,n.maxLeft=a.width,n.maxTop=a.height},renderCanvas:function(t,e){var i=this.canvasData,a=this.imageData;if(e){var n=function(t){var e=t.width,i=t.height,a=t.degree;if(90==(a=Math.abs(a)%180))return{width:i,height:e};var n=a%90*Math.PI/180,o=Math.sin(n),r=Math.cos(n),h=e*r+i*o,s=e*o+i*r;return a>90?{width:s,height:h}:{width:h,height:s}}({width:a.naturalWidth*Math.abs(a.scaleX||1),height:a.naturalHeight*Math.abs(a.scaleY||1),degree:a.rotate||0}),o=n.width,r=n.height,h=i.width*(o/i.naturalWidth),s=i.height*(r/i.naturalHeight);i.left-=(h-i.width)/2,i.top-=(s-i.height)/2,i.width=h,i.height=s,i.aspectRatio=o/r,i.naturalWidth=o,i.naturalHeight=r,this.limitCanvas(!0,!1)}(i.width>i.maxWidth||i.width<i.minWidth)&&(i.left=i.oldLeft),(i.height>i.maxHeight||i.height<i.minHeight)&&(i.top=i.oldTop),i.width=Math.min(Math.max(i.width,i.minWidth),i.maxWidth),i.height=Math.min(Math.max(i.height,i.minHeight),i.maxHeight),this.limitCanvas(!1,!0),i.left=Math.min(Math.max(i.left,i.minLeft),i.maxLeft),i.top=Math.min(Math.max(i.top,i.minTop),i.maxTop),i.oldLeft=i.left,i.oldTop=i.top,ft(this.canvas,pt({width:i.width,height:i.height},zt({translateX:i.left,translateY:i.top}))),this.renderImage(t),this.cropped&&this.limited&&this.limitCropBox(!0,!0)},renderImage:function(t){var e=this.canvasData,i=this.imageData,a=i.naturalWidth*(e.width/e.naturalWidth),n=i.naturalHeight*(e.height/e.naturalHeight);pt(i,{width:a,height:n,left:(e.width-a)/2,top:(e.height-n)/2}),ft(this.image,pt({width:i.width,height:i.height},zt(pt({translateX:i.left,translateY:i.top},i)))),t&&this.output()},initCropBox:function(){var t=this.options,e=this.canvasData,i=t.aspectRatio||t.initialAspectRatio,a=Number(t.autoCropArea)||.8,n={width:e.width,height:e.height};i&&(e.height*i>e.width?n.height=n.width/i:n.width=n.height*i),this.cropBoxData=n,this.limitCropBox(!0,!0),n.width=Math.min(Math.max(n.width,n.minWidth),n.maxWidth),n.height=Math.min(Math.max(n.height,n.minHeight),n.maxHeight),n.width=Math.max(n.minWidth,n.width*a),n.height=Math.max(n.minHeight,n.height*a),n.left=e.left+(e.width-n.width)/2,n.top=e.top+(e.height-n.height)/2,n.oldLeft=n.left,n.oldTop=n.top,this.initialCropBoxData=pt({},n)},limitCropBox:function(t,e){var i=this.options,a=this.containerData,n=this.canvasData,o=this.cropBoxData,r=this.limited,h=i.aspectRatio;if(t){var s=Number(i.minCropBoxWidth)||0,c=Number(i.minCropBoxHeight)||0,l=r?Math.min(a.width,n.width,n.width+n.left,a.width-n.left):a.width,d=r?Math.min(a.height,n.height,n.height+n.top,a.height-n.top):a.height;s=Math.min(s,a.width),c=Math.min(c,a.height),h&&(s&&c?c*h>s?c=s/h:s=c*h:s?c=s/h:c&&(s=c*h),d*h>l?d=l/h:l=d*h),o.minWidth=Math.min(s,l),o.minHeight=Math.min(c,d),o.maxWidth=l,o.maxHeight=d}e&&(r?(o.minLeft=Math.max(0,n.left),o.minTop=Math.max(0,n.top),o.maxLeft=Math.min(a.width,n.left+n.width)-o.width,o.maxTop=Math.min(a.height,n.top+n.height)-o.height):(o.minLeft=0,o.minTop=0,o.maxLeft=a.width-o.width,o.maxTop=a.height-o.height))},renderCropBox:function(){var t=this.options,e=this.containerData,i=this.cropBoxData;(i.width>i.maxWidth||i.width<i.minWidth)&&(i.left=i.oldLeft),(i.height>i.maxHeight||i.height<i.minHeight)&&(i.top=i.oldTop),i.width=Math.min(Math.max(i.width,i.minWidth),i.maxWidth),i.height=Math.min(Math.max(i.height,i.minHeight),i.maxHeight),this.limitCropBox(!1,!0),i.left=Math.min(Math.max(i.left,i.minLeft),i.maxLeft),i.top=Math.min(Math.max(i.top,i.minTop),i.maxTop),i.oldLeft=i.left,i.oldTop=i.top,t.movable&&t.cropBoxMovable&&Ct(this.face,N,i.width>=e.width&&i.height>=e.height?g:m),ft(this.cropBox,pt({width:i.width,height:i.height},zt({translateX:i.left,translateY:i.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),Tt(this.element,R,this.getData())}},Pt={initPreview:function(){var t=this.element,e=this.crossOrigin,i=this.options.preview,a=e?this.crossOriginUrl:this.url,n=t.alt||"The image to preview",o=document.createElement("img");if(e&&(o.crossOrigin=e),o.src=a,o.alt=n,this.viewBox.appendChild(o),this.viewBoxImage=o,i){var r=i;"string"==typeof i?r=t.ownerDocument.querySelectorAll(i):i.querySelector&&(r=[i]),this.previews=r,dt(r,(function(t){var i=document.createElement("img");Ct(t,L,{width:t.offsetWidth,height:t.offsetHeight,html:t.innerHTML}),e&&(i.crossOrigin=e),i.src=a,i.alt=n,i.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',t.innerHTML="",t.appendChild(i)}))}},resetPreview:function(){dt(this.previews,(function(t){var e=Mt(t,L);ft(t,{width:e.width,height:e.height}),t.innerHTML=e.html,function(t,e){if(ot(t[e]))try{delete t[e]}catch(i){t[e]=void 0}else if(t.dataset)try{delete t.dataset[e]}catch(i){t.dataset[e]=void 0}else t.removeAttribute("data-".concat(xt(e)))}(t,L)}))},preview:function(){var t=this.imageData,e=this.canvasData,i=this.cropBoxData,a=i.width,n=i.height,o=t.width,r=t.height,h=i.left-e.left-t.left,s=i.top-e.top-t.top;this.cropped&&!this.disabled&&(ft(this.viewBoxImage,pt({width:o,height:r},zt(pt({translateX:-h,translateY:-s},t)))),dt(this.previews,(function(e){var i=Mt(e,L),c=i.width,l=i.height,d=c,p=l,m=1;a&&(p=n*(m=c/a)),n&&p>l&&(d=a*(m=l/n),p=l),ft(e,{width:d,height:p}),ft(e.getElementsByTagName("img")[0],pt({width:o*m,height:r*m},zt(pt({translateX:-h*m,translateY:-s*m},t))))})))}},It={bind:function(){var t=this.element,e=this.options,i=this.cropper;st(e.cropstart)&&Ot(t,A,e.cropstart),st(e.cropmove)&&Ot(t,j,e.cropmove),st(e.cropend)&&Ot(t,S,e.cropend),st(e.crop)&&Ot(t,R,e.crop),st(e.zoom)&&Ot(t,Z,e.zoom),Ot(i,I,this.onCropStart=this.cropStart.bind(this)),e.zoomable&&e.zoomOnWheel&&Ot(i,K,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),e.toggleDragModeOnDblclick&&Ot(i,P,this.onDblclick=this.dblclick.bind(this)),Ot(t.ownerDocument,U,this.onCropMove=this.cropMove.bind(this)),Ot(t.ownerDocument,q,this.onCropEnd=this.cropEnd.bind(this)),e.responsive&&Ot(window,Q,this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,e=this.options,i=this.cropper;st(e.cropstart)&&kt(t,A,e.cropstart),st(e.cropmove)&&kt(t,j,e.cropmove),st(e.cropend)&&kt(t,S,e.cropend),st(e.crop)&&kt(t,R,e.crop),st(e.zoom)&&kt(t,Z,e.zoom),kt(i,I,this.onCropStart),e.zoomable&&e.zoomOnWheel&&kt(i,K,this.onWheel,{passive:!1,capture:!0}),e.toggleDragModeOnDblclick&&kt(i,P,this.onDblclick),kt(t.ownerDocument,U,this.onCropMove),kt(t.ownerDocument,q,this.onCropEnd),e.responsive&&kt(window,Q,this.onResize)}},Ut={resize:function(){if(!this.disabled){var t,e,i=this.options,a=this.container,n=this.containerData,o=a.offsetWidth/n.width,r=a.offsetHeight/n.height,h=Math.abs(o-1)>Math.abs(r-1)?o:r;if(1!==h)i.restore&&(t=this.getCanvasData(),e=this.getCropBoxData()),this.render(),i.restore&&(this.setCanvasData(dt(t,(function(e,i){t[i]=e*h}))),this.setCropBoxData(dt(e,(function(t,i){e[i]=t*h}))))}},dblclick:function(){var t,e;this.disabled||this.options.dragMode===X||this.setDragMode((t=this.dragBox,e=B,(t.classList?t.classList.contains(e):t.className.indexOf(e)>-1)?Y:z))},wheel:function(t){var e=this,i=Number(this.options.wheelZoomRatio)||.1,a=1;this.disabled||(t.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout((function(){e.wheeling=!1}),50),t.deltaY?a=t.deltaY>0?1:-1:t.wheelDelta?a=-t.wheelDelta/120:t.detail&&(a=t.detail>0?1:-1),this.zoom(-a*i,t)))},cropStart:function(t){var e=t.buttons,i=t.button;if(!(this.disabled||("mousedown"===t.type||"pointerdown"===t.type&&"mouse"===t.pointerType)&&(it(e)&&1!==e||it(i)&&0!==i||t.ctrlKey))){var a,n=this.options,o=this.pointers;t.changedTouches?dt(t.changedTouches,(function(t){o[t.identifier]=Yt(t)})):o[t.pointerId||0]=Yt(t),a=Object.keys(o).length>1&&n.zoomable&&n.zoomOnTouch?f:Mt(t.target,N),V.test(a)&&!1!==Tt(this.element,A,{originalEvent:t,action:a})&&(t.preventDefault(),this.action=a,this.cropping=!1,a===u&&(this.cropping=!0,vt(this.dragBox,W)))}},cropMove:function(t){var e=this.action;if(!this.disabled&&e){var i=this.pointers;t.preventDefault(),!1!==Tt(this.element,j,{originalEvent:t,action:e})&&(t.changedTouches?dt(t.changedTouches,(function(t){pt(i[t.identifier]||{},Yt(t,!0))})):pt(i[t.pointerId||0]||{},Yt(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var e=this.action,i=this.pointers;t.changedTouches?dt(t.changedTouches,(function(t){delete i[t.identifier]})):delete i[t.pointerId||0],e&&(t.preventDefault(),Object.keys(i).length||(this.action=""),this.cropping&&(this.cropping=!1,bt(this.dragBox,W,this.cropped&&this.options.modal)),Tt(this.element,S,{originalEvent:t,action:e}))}}},qt={change:function(t){var i,a=this.options,n=this.canvasData,o=this.containerData,r=this.cropBoxData,h=this.pointers,s=this.action,c=a.aspectRatio,l=r.left,d=r.top,p=r.width,B=r.height,k=l+p,T=d+B,E=0,W=0,H=o.width,N=o.height,L=!0;!c&&t.shiftKey&&(c=p&&B?p/B:1),this.limited&&(E=r.minLeft,W=r.minTop,H=E+Math.min(o.width,n.width,n.left+n.width),N=W+Math.min(o.height,n.height,n.top+n.height));var z=h[Object.keys(h)[0]],Y={x:z.endX-z.startX,y:z.endY-z.startY},X=function(t){switch(t){case v:k+Y.x>H&&(Y.x=H-k);break;case w:l+Y.x<E&&(Y.x=E-l);break;case y:d+Y.y<W&&(Y.y=W-d);break;case b:T+Y.y>N&&(Y.y=N-T)}};switch(s){case m:l+=Y.x,d+=Y.y;break;case v:if(Y.x>=0&&(k>=H||c&&(d<=W||T>=N))){L=!1;break}X(v),(p+=Y.x)<0&&(s=w,l-=p=-p),c&&(B=p/c,d+=(r.height-B)/2);break;case y:if(Y.y<=0&&(d<=W||c&&(l<=E||k>=H))){L=!1;break}X(y),B-=Y.y,d+=Y.y,B<0&&(s=b,d-=B=-B),c&&(p=B*c,l+=(r.width-p)/2);break;case w:if(Y.x<=0&&(l<=E||c&&(d<=W||T>=N))){L=!1;break}X(w),p-=Y.x,l+=Y.x,p<0&&(s=v,l-=p=-p),c&&(B=p/c,d+=(r.height-B)/2);break;case b:if(Y.y>=0&&(T>=N||c&&(l<=E||k>=H))){L=!1;break}X(b),(B+=Y.y)<0&&(s=y,d-=B=-B),c&&(p=B*c,l+=(r.width-p)/2);break;case x:if(c){if(Y.y<=0&&(d<=W||k>=H)){L=!1;break}X(y),B-=Y.y,d+=Y.y,p=B*c}else X(y),X(v),Y.x>=0?k<H?p+=Y.x:Y.y<=0&&d<=W&&(L=!1):p+=Y.x,Y.y<=0?d>W&&(B-=Y.y,d+=Y.y):(B-=Y.y,d+=Y.y);p<0&&B<0?(s=D,d-=B=-B,l-=p=-p):p<0?(s=M,l-=p=-p):B<0&&(s=C,d-=B=-B);break;case M:if(c){if(Y.y<=0&&(d<=W||l<=E)){L=!1;break}X(y),B-=Y.y,d+=Y.y,p=B*c,l+=r.width-p}else X(y),X(w),Y.x<=0?l>E?(p-=Y.x,l+=Y.x):Y.y<=0&&d<=W&&(L=!1):(p-=Y.x,l+=Y.x),Y.y<=0?d>W&&(B-=Y.y,d+=Y.y):(B-=Y.y,d+=Y.y);p<0&&B<0?(s=C,d-=B=-B,l-=p=-p):p<0?(s=x,l-=p=-p):B<0&&(s=D,d-=B=-B);break;case D:if(c){if(Y.x<=0&&(l<=E||T>=N)){L=!1;break}X(w),p-=Y.x,l+=Y.x,B=p/c}else X(b),X(w),Y.x<=0?l>E?(p-=Y.x,l+=Y.x):Y.y>=0&&T>=N&&(L=!1):(p-=Y.x,l+=Y.x),Y.y>=0?T<N&&(B+=Y.y):B+=Y.y;p<0&&B<0?(s=x,d-=B=-B,l-=p=-p):p<0?(s=C,l-=p=-p):B<0&&(s=M,d-=B=-B);break;case C:if(c){if(Y.x>=0&&(k>=H||T>=N)){L=!1;break}X(v),B=(p+=Y.x)/c}else X(b),X(v),Y.x>=0?k<H?p+=Y.x:Y.y>=0&&T>=N&&(L=!1):p+=Y.x,Y.y>=0?T<N&&(B+=Y.y):B+=Y.y;p<0&&B<0?(s=M,d-=B=-B,l-=p=-p):p<0?(s=D,l-=p=-p):B<0&&(s=x,d-=B=-B);break;case g:this.move(Y.x,Y.y),L=!1;break;case f:this.zoom(function(t){var i=e({},t),a=0;return dt(t,(function(t,e){delete i[e],dt(i,(function(e){var i=Math.abs(t.startX-e.startX),n=Math.abs(t.startY-e.startY),o=Math.abs(t.endX-e.endX),r=Math.abs(t.endY-e.endY),h=Math.sqrt(i*i+n*n),s=(Math.sqrt(o*o+r*r)-h)/h;Math.abs(s)>Math.abs(a)&&(a=s)}))})),a}(h),t),L=!1;break;case u:if(!Y.x||!Y.y){L=!1;break}i=Et(this.cropper),l=z.startX-i.left,d=z.startY-i.top,p=r.minWidth,B=r.minHeight,Y.x>0?s=Y.y>0?C:x:Y.x<0&&(l-=p,s=Y.y>0?D:M),Y.y<0&&(d-=B),this.cropped||(wt(this.cropBox,O),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}L&&(r.width=p,r.height=B,r.left=l,r.top=d,this.action=s,this.renderCropBox()),dt(h,(function(t){t.startX=t.endX,t.startY=t.endY}))}},$t={crop:function(){return!this.ready||this.cropped||this.disabled||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&vt(this.dragBox,W),wt(this.cropBox,O),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=pt({},this.initialImageData),this.canvasData=pt({},this.initialCanvasData),this.cropBoxData=pt({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(pt(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),wt(this.dragBox,W),vt(this.cropBox,O)),this},replace:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!this.disabled&&t&&(this.isImg&&(this.element.src=t),e?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,dt(this.previews,(function(e){e.getElementsByTagName("img")[0].src=t})))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,wt(this.cropper,k)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,vt(this.cropper,k)),this},destroy:function(){var t=this.element;return t[p]?(t[p]=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,i=this.canvasData,a=i.left,n=i.top;return this.moveTo(nt(t)?t:a+Number(t),nt(e)?e:n+Number(e))},moveTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,i=this.canvasData,a=!1;return t=Number(t),e=Number(e),this.ready&&!this.disabled&&this.options.movable&&(it(t)&&(i.left=t,a=!0),it(e)&&(i.top=e,a=!0),a&&this.renderCanvas(!0)),this},zoom:function(t,e){var i=this.canvasData;return t=(t=Number(t))<0?1/(1-t):1+t,this.zoomTo(i.width*t/i.naturalWidth,null,e)},zoomTo:function(t,e,i){var a=this.options,n=this.canvasData,o=n.width,r=n.height,h=n.naturalWidth,s=n.naturalHeight;if((t=Number(t))>=0&&this.ready&&!this.disabled&&a.zoomable){var c=h*t,l=s*t;if(!1===Tt(this.element,Z,{ratio:t,oldRatio:o/h,originalEvent:i}))return this;if(i){var d=this.pointers,p=Et(this.cropper),m=d&&Object.keys(d).length?function(t){var e=0,i=0,a=0;return dt(t,(function(t){var n=t.startX,o=t.startY;e+=n,i+=o,a+=1})),{pageX:e/=a,pageY:i/=a}}(d):{pageX:i.pageX,pageY:i.pageY};n.left-=(c-o)*((m.pageX-p.left-n.left)/o),n.top-=(l-r)*((m.pageY-p.top-n.top)/r)}else ht(e)&&it(e.x)&&it(e.y)?(n.left-=(c-o)*((e.x-n.left)/o),n.top-=(l-r)*((e.y-n.top)/r)):(n.left-=(c-o)/2,n.top-=(l-r)/2);n.width=c,n.height=l,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return it(t=Number(t))&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var e=this.imageData.scaleY;return this.scale(t,it(e)?e:1)},scaleY:function(t){var e=this.imageData.scaleX;return this.scale(it(e)?e:1,t)},scale:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,i=this.imageData,a=!1;return t=Number(t),e=Number(e),this.ready&&!this.disabled&&this.options.scalable&&(it(t)&&(i.scaleX=t,a=!0),it(e)&&(i.scaleY=e,a=!0),a&&this.renderCanvas(!0,!0)),this},getData:function(){var t,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.options,a=this.imageData,n=this.canvasData,o=this.cropBoxData;if(this.ready&&this.cropped){t={x:o.left-n.left,y:o.top-n.top,width:o.width,height:o.height};var r=a.width/a.naturalWidth;if(dt(t,(function(e,i){t[i]=e/r})),e){var h=Math.round(t.y+t.height),s=Math.round(t.x+t.width);t.x=Math.round(t.x),t.y=Math.round(t.y),t.width=s-t.x,t.height=h-t.y}}else t={x:0,y:0,width:0,height:0};return i.rotatable&&(t.rotate=a.rotate||0),i.scalable&&(t.scaleX=a.scaleX||1,t.scaleY=a.scaleY||1),t},setData:function(t){var e=this.options,i=this.imageData,a=this.canvasData,n={};if(this.ready&&!this.disabled&&ht(t)){var o=!1;e.rotatable&&it(t.rotate)&&t.rotate!==i.rotate&&(i.rotate=t.rotate,o=!0),e.scalable&&(it(t.scaleX)&&t.scaleX!==i.scaleX&&(i.scaleX=t.scaleX,o=!0),it(t.scaleY)&&t.scaleY!==i.scaleY&&(i.scaleY=t.scaleY,o=!0)),o&&this.renderCanvas(!0,!0);var r=i.width/i.naturalWidth;it(t.x)&&(n.left=t.x*r+a.left),it(t.y)&&(n.top=t.y*r+a.top),it(t.width)&&(n.width=t.width*r),it(t.height)&&(n.height=t.height*r),this.setCropBoxData(n)}return this},getContainerData:function(){return this.ready?pt({},this.containerData):{}},getImageData:function(){return this.sized?pt({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,e={};return this.ready&&dt(["left","top","width","height","naturalWidth","naturalHeight"],(function(i){e[i]=t[i]})),e},setCanvasData:function(t){var e=this.canvasData,i=e.aspectRatio;return this.ready&&!this.disabled&&ht(t)&&(it(t.left)&&(e.left=t.left),it(t.top)&&(e.top=t.top),it(t.width)?(e.width=t.width,e.height=t.width/i):it(t.height)&&(e.height=t.height,e.width=t.height*i),this.renderCanvas(!0)),this},getCropBoxData:function(){var t,e=this.cropBoxData;return this.ready&&this.cropped&&(t={left:e.left,top:e.top,width:e.width,height:e.height}),t||{}},setCropBoxData:function(t){var e,i,a=this.cropBoxData,n=this.options.aspectRatio;return this.ready&&this.cropped&&!this.disabled&&ht(t)&&(it(t.left)&&(a.left=t.left),it(t.top)&&(a.top=t.top),it(t.width)&&t.width!==a.width&&(e=!0,a.width=t.width),it(t.height)&&t.height!==a.height&&(i=!0,a.height=t.height),n&&(e?a.height=a.width/n:i&&(a.width=a.height*n)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var e=this.canvasData,i=function(t,e,i,a){var n=e.aspectRatio,o=e.naturalWidth,h=e.naturalHeight,s=e.rotate,c=void 0===s?0:s,l=e.scaleX,d=void 0===l?1:l,p=e.scaleY,m=void 0===p?1:p,u=i.aspectRatio,g=i.naturalWidth,f=i.naturalHeight,v=a.fillColor,w=void 0===v?"transparent":v,b=a.imageSmoothingEnabled,y=void 0===b||b,x=a.imageSmoothingQuality,M=void 0===x?"low":x,C=a.maxWidth,D=void 0===C?1/0:C,B=a.maxHeight,k=void 0===B?1/0:B,O=a.minWidth,T=void 0===O?0:O,E=a.minHeight,W=void 0===E?0:E,H=document.createElement("canvas"),N=H.getContext("2d"),L=Xt({aspectRatio:u,width:D,height:k}),z=Xt({aspectRatio:u,width:T,height:W},"cover"),Y=Math.min(L.width,Math.max(z.width,g)),X=Math.min(L.height,Math.max(z.height,f)),R=Xt({aspectRatio:n,width:D,height:k}),S=Xt({aspectRatio:n,width:T,height:W},"cover"),j=Math.min(R.width,Math.max(S.width,o)),A=Math.min(R.height,Math.max(S.height,h)),P=[-j/2,-A/2,j,A];return H.width=ut(Y),H.height=ut(X),N.fillStyle=w,N.fillRect(0,0,Y,X),N.save(),N.translate(Y/2,X/2),N.rotate(c*Math.PI/180),N.scale(d,m),N.imageSmoothingEnabled=y,N.imageSmoothingQuality=M,N.drawImage.apply(N,[t].concat(r(P.map((function(t){return Math.floor(ut(t))}))))),N.restore(),H}(this.image,this.imageData,e,t);if(!this.cropped)return i;var a=this.getData(t.rounded),n=a.x,o=a.y,h=a.width,s=a.height,c=i.width/Math.floor(e.naturalWidth);1!==c&&(n*=c,o*=c,h*=c,s*=c);var l=h/s,d=Xt({aspectRatio:l,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),p=Xt({aspectRatio:l,width:t.minWidth||0,height:t.minHeight||0},"cover"),m=Xt({aspectRatio:l,width:t.width||(1!==c?i.width:h),height:t.height||(1!==c?i.height:s)}),u=m.width,g=m.height;u=Math.min(d.width,Math.max(p.width,u)),g=Math.min(d.height,Math.max(p.height,g));var f=document.createElement("canvas"),v=f.getContext("2d");f.width=ut(u),f.height=ut(g),v.fillStyle=t.fillColor||"transparent",v.fillRect(0,0,u,g);var w=t.imageSmoothingEnabled,b=void 0===w||w,y=t.imageSmoothingQuality;v.imageSmoothingEnabled=b,y&&(v.imageSmoothingQuality=y);var x,M,C,D,B,k,O=i.width,T=i.height,E=n,W=o;E<=-h||E>O?(E=0,x=0,C=0,B=0):E<=0?(C=-E,E=0,B=x=Math.min(O,h+E)):E<=O&&(C=0,B=x=Math.min(h,O-E)),x<=0||W<=-s||W>T?(W=0,M=0,D=0,k=0):W<=0?(D=-W,W=0,k=M=Math.min(T,s+W)):W<=T&&(D=0,k=M=Math.min(s,T-W));var H=[E,W,x,M];if(B>0&&k>0){var N=u/h;H.push(C*N,D*N,B*N,k*N)}return v.drawImage.apply(v,[i].concat(r(H.map((function(t){return Math.floor(ut(t))}))))),f},setAspectRatio:function(t){var e=this.options;return this.disabled||nt(t)||(e.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var e=this.options,i=this.dragBox,a=this.face;if(this.ready&&!this.disabled){var n=t===z,o=e.movable&&t===Y;t=n||o?t:X,e.dragMode=t,Ct(i,N,t),bt(i,B,n),bt(i,H,o),e.cropBoxMovable||(Ct(a,N,t),bt(a,B,n),bt(a,H,o))}return this}},Qt=c.Cropper,Kt=function(){function t(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e||!_.test(e.tagName))throw new Error("The first argument is required and must be an <img> or <canvas> element.");this.element=e,this.options=pt({},tt,ht(i)&&i),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return e=t,a=[{key:"noConflict",value:function(){return window.Cropper=Qt,t}},{key:"setDefaults",value:function(t){pt(tt,ht(t)&&t)}}],(i=[{key:"init",value:function(){var t,e=this.element,i=e.tagName.toLowerCase();if(!e[p]){if(e[p]=this,"img"===i){if(this.isImg=!0,t=e.getAttribute("src")||"",this.originalUrl=t,!t)return;t=e.src}else"canvas"===i&&window.HTMLCanvasElement&&(t=e.toDataURL());this.load(t)}}},{key:"load",value:function(t){var e=this;if(t){this.url=t,this.imageData={};var i=this.element,a=this.options;if(a.rotatable||a.scalable||(a.checkOrientation=!1),a.checkOrientation&&window.ArrayBuffer)if(F.test(t))J.test(t)?this.read((n=t.replace(St,""),o=atob(n),r=new ArrayBuffer(o.length),dt(h=new Uint8Array(r),(function(t,e){h[e]=o.charCodeAt(e)})),r)):this.clone();else{var n,o,r,h,s=new XMLHttpRequest,c=this.clone.bind(this);this.reloading=!0,this.xhr=s,s.onabort=c,s.onerror=c,s.ontimeout=c,s.onprogress=function(){s.getResponseHeader("content-type")!==G&&s.abort()},s.onload=function(){e.read(s.response)},s.onloadend=function(){e.reloading=!1,e.xhr=null},a.checkCrossOrigin&&Nt(t)&&i.crossOrigin&&(t=Lt(t)),s.open("GET",t,!0),s.responseType="arraybuffer",s.withCredentials="use-credentials"===i.crossOrigin,s.send()}else this.clone()}}},{key:"read",value:function(t){var e=this.options,i=this.imageData,a=jt(t),n=0,o=1,r=1;if(a>1){this.url=function(t,e){for(var i=[],a=new Uint8Array(t);a.length>0;)i.push(Rt.apply(null,lt(a.subarray(0,8192)))),a=a.subarray(8192);return"data:".concat(e,";base64,").concat(btoa(i.join("")))}(t,G);var h=function(t){var e=0,i=1,a=1;switch(t){case 2:i=-1;break;case 3:e=-180;break;case 4:a=-1;break;case 5:e=90,a=-1;break;case 6:e=90;break;case 7:e=90,i=-1;break;case 8:e=-90}return{rotate:e,scaleX:i,scaleY:a}}(a);n=h.rotate,o=h.scaleX,r=h.scaleY}e.rotatable&&(i.rotate=n),e.scalable&&(i.scaleX=o,i.scaleY=r),this.clone()}},{key:"clone",value:function(){var t=this.element,e=this.url,i=t.crossOrigin,a=e;this.options.checkCrossOrigin&&Nt(e)&&(i||(i="anonymous"),a=Lt(e)),this.crossOrigin=i,this.crossOriginUrl=a;var n=document.createElement("img");i&&(n.crossOrigin=i),n.src=a||e,n.alt=t.alt||"The image to crop",this.image=n,n.onload=this.start.bind(this),n.onerror=this.stop.bind(this),vt(n,T),t.parentNode.insertBefore(n,t.nextSibling)}},{key:"start",value:function(){var t=this,e=this.image;e.onload=null,e.onerror=null,this.sizing=!0;var i=c.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(c.navigator.userAgent),a=function(e,i){pt(t.imageData,{naturalWidth:e,naturalHeight:i,aspectRatio:e/i}),t.initialImageData=pt({},t.imageData),t.sizing=!1,t.sized=!0,t.build()};if(!e.naturalWidth||i){var n=document.createElement("img"),o=document.body||document.documentElement;this.sizingImage=n,n.onload=function(){a(n.width,n.height),i||o.removeChild(n)},n.src=e.src,i||(n.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",o.appendChild(n))}else a(e.naturalWidth,e.naturalHeight)}},{key:"stop",value:function(){var t=this.image;t.onload=null,t.onerror=null,t.parentNode.removeChild(t),this.image=null}},{key:"build",value:function(){if(this.sized&&!this.ready){var t=this.element,e=this.options,i=this.image,a=t.parentNode,n=document.createElement("div");n.innerHTML='<div class="cropper-container" touch-action="none"><div class="cropper-wrap-box"><div class="cropper-canvas"></div></div><div class="cropper-drag-box"></div><div class="cropper-crop-box"><span class="cropper-view-box"></span><span class="cropper-dashed dashed-h"></span><span class="cropper-dashed dashed-v"></span><span class="cropper-center"></span><span class="cropper-face"></span><span class="cropper-line line-e" data-cropper-action="e"></span><span class="cropper-line line-n" data-cropper-action="n"></span><span class="cropper-line line-w" data-cropper-action="w"></span><span class="cropper-line line-s" data-cropper-action="s"></span><span class="cropper-point point-e" data-cropper-action="e"></span><span class="cropper-point point-n" data-cropper-action="n"></span><span class="cropper-point point-w" data-cropper-action="w"></span><span class="cropper-point point-s" data-cropper-action="s"></span><span class="cropper-point point-ne" data-cropper-action="ne"></span><span class="cropper-point point-nw" data-cropper-action="nw"></span><span class="cropper-point point-sw" data-cropper-action="sw"></span><span class="cropper-point point-se" data-cropper-action="se"></span></div></div>';var o=n.querySelector(".".concat(p,"-container")),r=o.querySelector(".".concat(p,"-canvas")),h=o.querySelector(".".concat(p,"-drag-box")),s=o.querySelector(".".concat(p,"-crop-box")),c=s.querySelector(".".concat(p,"-face"));this.container=a,this.cropper=o,this.canvas=r,this.dragBox=h,this.cropBox=s,this.viewBox=o.querySelector(".".concat(p,"-view-box")),this.face=c,r.appendChild(i),vt(t,O),a.insertBefore(o,t.nextSibling),wt(i,T),this.initPreview(),this.bind(),e.initialAspectRatio=Math.max(0,e.initialAspectRatio)||NaN,e.aspectRatio=Math.max(0,e.aspectRatio)||NaN,e.viewMode=Math.max(0,Math.min(3,Math.round(e.viewMode)))||0,vt(s,O),e.guides||vt(s.getElementsByClassName("".concat(p,"-dashed")),O),e.center||vt(s.getElementsByClassName("".concat(p,"-center")),O),e.background&&vt(o,"".concat(p,"-bg")),e.highlight||vt(c,E),e.cropBoxMovable&&(vt(c,H),Ct(c,N,m)),e.cropBoxResizable||(vt(s.getElementsByClassName("".concat(p,"-line")),O),vt(s.getElementsByClassName("".concat(p,"-point")),O)),this.render(),this.ready=!0,this.setDragMode(e.dragMode),e.autoCrop&&this.crop(),this.setData(e.data),st(e.ready)&&Ot(t,$,e.ready,{once:!0}),Tt(t,$)}}},{key:"unbuild",value:function(){if(this.ready){this.ready=!1,this.unbind(),this.resetPreview();var t=this.cropper.parentNode;t&&t.removeChild(this.cropper),wt(this.element,O)}}},{key:"uncreate",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}])&&n(e.prototype,i),a&&n(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,a}();pt(Kt.prototype,At,Pt,It,Ut,qt,$t);export{Kt as default};