alchemy_cms 8.3.11 → 8.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +58 -10
  4. data/app/assets/builds/alchemy/admin/page-select.css +1 -1
  5. data/app/assets/builds/alchemy/admin/print.css +1 -1
  6. data/app/assets/builds/alchemy/admin/remote-select.css +1 -0
  7. data/app/assets/builds/alchemy/admin/tags-autocomplete.css +1 -0
  8. data/app/assets/builds/alchemy/admin.css +4 -4
  9. data/app/assets/builds/alchemy/alchemy_admin.min.js +1 -1
  10. data/app/assets/builds/alchemy/alchemy_admin.min.js.map +1 -1
  11. data/app/assets/builds/alchemy/dark-theme.css +1 -1
  12. data/app/assets/builds/alchemy/light-theme.css +1 -1
  13. data/app/assets/builds/alchemy/preview.min.js +1 -1
  14. data/app/assets/builds/alchemy/theme.css +1 -1
  15. data/app/assets/builds/alchemy/welcome.css +1 -1
  16. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -1
  17. data/app/assets/builds/tinymce/skins/content/alchemy-dark/content.min.css +1 -1
  18. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css +1 -1
  19. data/app/assets/builds/tinymce/skins/ui/alchemy-dark/skin.min.css +1 -1
  20. data/app/assets/images/alchemy/icons-sprite.svg +1 -1
  21. data/app/components/alchemy/admin/dashboard/widgets/greeting.html.erb +1 -1
  22. data/app/components/alchemy/admin/dashboard/widgets/news_reader.html.erb +38 -0
  23. data/app/components/alchemy/admin/dashboard/widgets/news_reader.rb +54 -0
  24. data/app/components/alchemy/admin/dashboard/widgets/online_users.html.erb +1 -1
  25. data/app/components/alchemy/admin/dashboard/widgets/recent_pages.html.erb +1 -1
  26. data/app/components/alchemy/admin/dashboard/widgets/system_info.html.erb +11 -3
  27. data/app/components/alchemy/admin/dashboard/widgets/system_info.rb +6 -1
  28. data/app/components/alchemy/admin/element_editor.html.erb +1 -1
  29. data/app/components/alchemy/admin/element_select.rb +30 -20
  30. data/app/components/alchemy/admin/element_status_indicators.html.erb +16 -0
  31. data/app/components/alchemy/admin/element_status_indicators.rb +31 -0
  32. data/app/components/alchemy/admin/link_dialog/external_tab.rb +2 -1
  33. data/app/components/alchemy/admin/main_navigation/entry.rb +61 -0
  34. data/app/components/alchemy/admin/main_navigation/menu.rb +21 -0
  35. data/app/components/alchemy/admin/main_navigation/sub_navigation.rb +31 -0
  36. data/app/components/alchemy/admin/page_node.html.erb +1 -1
  37. data/app/components/alchemy/admin/page_permitted_roles_select.html.erb +11 -0
  38. data/app/components/alchemy/admin/page_permitted_roles_select.rb +35 -0
  39. data/app/components/alchemy/admin/page_select.rb +18 -8
  40. data/app/components/alchemy/admin/preview_time_select.rb +1 -1
  41. data/app/components/alchemy/admin/toolbar_button.rb +43 -20
  42. data/app/components/alchemy/admin/uploader_button.rb +66 -0
  43. data/app/components/alchemy/ingredients/base_editor.rb +10 -1
  44. data/app/components/alchemy/ingredients/boolean_editor.rb +1 -0
  45. data/app/components/alchemy/ingredients/color_editor.rb +6 -3
  46. data/app/components/alchemy/ingredients/datetime_view.rb +1 -1
  47. data/app/components/alchemy/ingredients/picture_view.rb +2 -4
  48. data/app/components/alchemy/menubar.html.erb +157 -0
  49. data/app/components/alchemy/menubar.rb +15 -0
  50. data/app/controllers/alchemy/admin/attachments_controller.rb +12 -9
  51. data/app/controllers/alchemy/admin/base_controller.rb +34 -21
  52. data/app/controllers/alchemy/admin/dashboard_controller.rb +4 -0
  53. data/app/controllers/alchemy/admin/elements_controller.rb +4 -23
  54. data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
  55. data/app/controllers/alchemy/admin/nodes_controller.rb +1 -1
  56. data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
  57. data/app/controllers/alchemy/admin/pictures_controller.rb +6 -3
  58. data/app/controllers/alchemy/admin/resources_controller.rb +5 -5
  59. data/app/controllers/alchemy/admin/sites_controller.rb +1 -1
  60. data/app/controllers/alchemy/base_controller.rb +24 -16
  61. data/app/controllers/alchemy/pages_controller.rb +29 -8
  62. data/app/controllers/alchemy/sitemap_controller.rb +58 -0
  63. data/app/controllers/concerns/alchemy/admin/csp_protection.rb +43 -0
  64. data/app/controllers/concerns/alchemy/admin/current_language.rb +1 -1
  65. data/app/controllers/concerns/alchemy/admin/resource_filter.rb +3 -1
  66. data/{lib → app/controllers/concerns}/alchemy/controller_actions.rb +13 -0
  67. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +4 -4
  68. data/app/helpers/alchemy/admin/base_helper.rb +4 -1
  69. data/app/helpers/alchemy/admin/form_helper.rb +0 -2
  70. data/app/helpers/alchemy/admin/navigation_helper.rb +10 -181
  71. data/app/helpers/alchemy/elements_block_helper.rb +14 -0
  72. data/app/helpers/alchemy/resources_helper.rb +15 -1
  73. data/app/javascript/alchemy_admin/components/attachment_select.js +11 -20
  74. data/app/javascript/alchemy_admin/components/auto_submit.js +2 -4
  75. data/app/javascript/alchemy_admin/components/button.js +0 -6
  76. data/app/javascript/alchemy_admin/components/clear_schedule_button.js +21 -0
  77. data/app/javascript/alchemy_admin/components/color_select.js +50 -45
  78. data/app/javascript/alchemy_admin/components/conditional_field.js +50 -0
  79. data/app/javascript/alchemy_admin/components/dirty_guard.js +77 -0
  80. data/app/javascript/alchemy_admin/components/dom_id_select.js +17 -10
  81. data/app/javascript/alchemy_admin/components/element_editor/delete_element_button.js +7 -2
  82. data/app/javascript/alchemy_admin/components/element_editor.js +29 -56
  83. data/app/javascript/alchemy_admin/components/element_select.js +26 -66
  84. data/app/javascript/alchemy_admin/components/icon.js +9 -4
  85. data/app/javascript/alchemy_admin/{image_cropper.js → components/image_cropper.js} +39 -53
  86. data/app/javascript/alchemy_admin/components/image_overlay_link.js +14 -0
  87. data/app/javascript/alchemy_admin/components/index.js +12 -1
  88. data/app/javascript/alchemy_admin/components/main_navi_entry.js +75 -0
  89. data/app/javascript/alchemy_admin/components/menu_node.js +73 -0
  90. data/app/javascript/alchemy_admin/components/news_reader.js +109 -0
  91. data/app/javascript/alchemy_admin/components/node_folder.js +36 -0
  92. data/app/javascript/alchemy_admin/components/node_form.js +34 -0
  93. data/app/javascript/alchemy_admin/components/node_select.js +25 -30
  94. data/app/javascript/alchemy_admin/components/node_tree.js +56 -0
  95. data/app/javascript/alchemy_admin/components/page_node.js +2 -1
  96. data/app/javascript/alchemy_admin/components/page_select.js +16 -34
  97. data/app/javascript/alchemy_admin/components/picture_archive.js +92 -0
  98. data/app/javascript/alchemy_admin/components/picture_editor.js +2 -1
  99. data/app/javascript/alchemy_admin/components/preview_window.js +11 -3
  100. data/app/javascript/alchemy_admin/components/remote_select.js +461 -81
  101. data/app/javascript/alchemy_admin/components/select.js +26 -88
  102. data/app/javascript/alchemy_admin/components/sitemap.js +2 -1
  103. data/app/javascript/alchemy_admin/components/sortable_elements.js +2 -1
  104. data/app/javascript/alchemy_admin/components/tags_autocomplete.js +63 -48
  105. data/app/javascript/alchemy_admin/components/tinymce.js +2 -1
  106. data/app/javascript/alchemy_admin/components/uploader/file_upload.js +3 -2
  107. data/app/javascript/alchemy_admin/components/uploader.js +19 -3
  108. data/app/javascript/alchemy_admin/confirm_dialog.js +7 -1
  109. data/app/javascript/alchemy_admin/dialog.js +182 -110
  110. data/app/javascript/alchemy_admin/hotkeys.js +0 -5
  111. data/app/javascript/alchemy_admin/i18n.js +3 -9
  112. data/app/javascript/alchemy_admin/image_overlay.js +58 -42
  113. data/app/javascript/alchemy_admin/initializer.js +2 -2
  114. data/app/javascript/alchemy_admin/link_dialog.js +15 -2
  115. data/app/javascript/alchemy_admin/routes.js +18 -0
  116. data/app/javascript/alchemy_admin/turbo_stream_actions.js +88 -0
  117. data/app/javascript/alchemy_admin/utils/ajax.js +14 -3
  118. data/app/javascript/alchemy_admin/utils/events.js +5 -0
  119. data/app/javascript/alchemy_admin/utils/json_script.js +12 -0
  120. data/app/javascript/alchemy_admin/utils/tom_select.js +171 -0
  121. data/app/javascript/alchemy_admin.js +2 -19
  122. data/app/javascript/preview.js +131 -113
  123. data/app/jobs/alchemy/invalidate_elements_cache_job.rb +1 -1
  124. data/app/models/alchemy/admin/content_security_policy.rb +143 -0
  125. data/app/models/alchemy/admin/filters/base.rb +7 -0
  126. data/app/models/alchemy/admin/filters/datepicker.rb +1 -1
  127. data/app/models/alchemy/admin/filters/select.rb +20 -7
  128. data/app/models/alchemy/attachment.rb +14 -7
  129. data/app/models/alchemy/cache_control.rb +104 -0
  130. data/app/models/alchemy/current.rb +1 -1
  131. data/app/models/alchemy/eager_loading.rb +0 -2
  132. data/app/models/alchemy/element.rb +23 -8
  133. data/app/models/alchemy/element_definition.rb +1 -0
  134. data/app/models/alchemy/elements_repository.rb +11 -0
  135. data/app/models/alchemy/folded_page.rb +5 -1
  136. data/app/models/alchemy/ingredient.rb +26 -0
  137. data/app/models/alchemy/ingredients/datetime.rb +1 -1
  138. data/app/models/alchemy/ingredients/link.rb +2 -0
  139. data/app/models/alchemy/ingredients/picture.rb +3 -0
  140. data/app/models/alchemy/ingredients/text.rb +2 -0
  141. data/app/models/alchemy/language.rb +19 -7
  142. data/app/models/alchemy/legacy_page_url.rb +6 -1
  143. data/app/models/alchemy/node.rb +51 -0
  144. data/app/models/alchemy/page/page_natures.rb +41 -8
  145. data/app/models/alchemy/page/page_scopes.rb +23 -0
  146. data/app/models/alchemy/page/sitemap_cache_key.rb +56 -0
  147. data/app/models/alchemy/page.rb +88 -32
  148. data/app/models/alchemy/page_definition.rb +1 -1
  149. data/app/models/alchemy/page_mutex.rb +16 -0
  150. data/app/models/alchemy/page_version.rb +24 -1
  151. data/app/models/alchemy/permissions.rb +6 -5
  152. data/app/models/alchemy/picture.rb +15 -7
  153. data/app/models/alchemy/picture_description.rb +22 -0
  154. data/app/models/alchemy/picture_thumb.rb +18 -0
  155. data/app/models/alchemy/publishable/timestamp_resolver.rb +70 -0
  156. data/app/models/alchemy/resource.rb +1 -1
  157. data/app/models/alchemy/safe_url_validator.rb +34 -0
  158. data/app/models/alchemy/site.rb +8 -3
  159. data/app/models/alchemy/storage_adapter/active_storage/preprocessor.rb +7 -3
  160. data/app/models/alchemy/storage_adapter/active_storage.rb +4 -1
  161. data/app/models/alchemy/tag.rb +10 -4
  162. data/{lib → app/models/concerns}/alchemy/filetypes.rb +5 -0
  163. data/app/models/concerns/alchemy/picture_thumbnails.rb +61 -6
  164. data/app/models/concerns/alchemy/publishable.rb +14 -27
  165. data/app/models/concerns/alchemy/taggable.rb +92 -0
  166. data/app/models/concerns/alchemy/user_methods.rb +95 -0
  167. data/app/services/alchemy/duplicate_element.rb +5 -2
  168. data/app/services/alchemy/element_preloader.rb +1 -2
  169. data/app/stylesheets/alchemy/_custom-properties.scss +1 -0
  170. data/app/stylesheets/alchemy/_extends.scss +0 -8
  171. data/app/stylesheets/alchemy/_themes.scss +10 -9
  172. data/app/stylesheets/alchemy/admin/_empty-state.scss +29 -0
  173. data/app/stylesheets/alchemy/admin/_help.scss +10 -0
  174. data/app/stylesheets/alchemy/admin/_tom-select.scss +104 -15
  175. data/app/stylesheets/alchemy/admin/archive.scss +56 -11
  176. data/app/stylesheets/alchemy/admin/base.scss +4 -5
  177. data/app/stylesheets/alchemy/admin/buttons.scss +12 -1
  178. data/app/stylesheets/alchemy/admin/dashboard.scss +150 -20
  179. data/app/stylesheets/alchemy/admin/dialogs.scss +27 -36
  180. data/app/stylesheets/alchemy/admin/element-select.scss +1 -1
  181. data/app/stylesheets/alchemy/admin/elements.scss +8 -24
  182. data/app/stylesheets/alchemy/admin/flash.scss +2 -1
  183. data/app/stylesheets/alchemy/admin/forms.scss +60 -24
  184. data/app/stylesheets/alchemy/admin/frame.scss +40 -4
  185. data/app/stylesheets/alchemy/admin/image_library.scss +9 -12
  186. data/app/stylesheets/alchemy/admin/navigation.scss +17 -14
  187. data/app/stylesheets/alchemy/admin/node-select.scss +13 -37
  188. data/app/stylesheets/alchemy/admin/nodes.scss +1 -1
  189. data/app/stylesheets/alchemy/admin/page-select.scss +6 -97
  190. data/app/stylesheets/alchemy/admin/print.scss +0 -4
  191. data/app/stylesheets/alchemy/admin/remote-select.scss +170 -0
  192. data/app/stylesheets/alchemy/admin/search.scss +2 -3
  193. data/app/stylesheets/alchemy/admin/selects.scss +1 -294
  194. data/app/stylesheets/alchemy/admin/sitemap.scss +2 -1
  195. data/app/stylesheets/alchemy/admin/tables.scss +7 -1
  196. data/app/stylesheets/alchemy/admin/tags-autocomplete.scss +17 -0
  197. data/app/stylesheets/alchemy/admin/tags.scss +0 -13
  198. data/app/stylesheets/alchemy/admin/toolbar.scss +9 -6
  199. data/app/stylesheets/alchemy/admin/upload.scss +61 -1
  200. data/app/stylesheets/alchemy/admin.scss +4 -1
  201. data/app/types/alchemy/cache_control_type.rb +84 -0
  202. data/app/views/alchemy/_edit_mode.html.erb +1 -1
  203. data/app/views/alchemy/_menubar.html.erb +2 -154
  204. data/app/views/alchemy/_preview_mode_code.html.erb +0 -3
  205. data/app/views/alchemy/admin/_left_menu.html.erb +18 -5
  206. data/app/views/alchemy/admin/_top_menu.html.erb +1 -1
  207. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +5 -4
  208. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +3 -3
  209. data/app/views/alchemy/admin/attachments/_files_list.html.erb +71 -83
  210. data/app/views/alchemy/admin/attachments/assign.turbo_stream.erb +8 -0
  211. data/app/views/alchemy/admin/attachments/index.html.erb +32 -7
  212. data/app/views/alchemy/admin/clipboard/insert.turbo_stream.erb +1 -1
  213. data/app/views/alchemy/admin/crop.html.erb +20 -20
  214. data/app/views/alchemy/admin/dashboard/_footer.html.erb +0 -3
  215. data/app/views/alchemy/admin/dashboard/_top.html.erb +1 -0
  216. data/app/views/alchemy/admin/dashboard/help.html.erb +84 -57
  217. data/app/views/alchemy/admin/dashboard/license.html.erb +6 -0
  218. data/app/views/alchemy/admin/elements/_footer.html.erb +0 -1
  219. data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
  220. data/app/views/alchemy/admin/elements/_header.html.erb +2 -19
  221. data/app/views/alchemy/admin/elements/_preview_text_quote.html.erb +3 -0
  222. data/app/views/alchemy/admin/elements/_schedule.html.erb +7 -7
  223. data/app/views/alchemy/admin/elements/_toolbar.html.erb +1 -1
  224. data/app/views/alchemy/admin/elements/create.turbo_stream.erb +1 -1
  225. data/app/views/alchemy/admin/elements/index.html.erb +1 -1
  226. data/app/views/alchemy/admin/elements/publish.turbo_stream.erb +2 -2
  227. data/app/views/alchemy/admin/elements/update.turbo_stream.erb +31 -0
  228. data/app/views/alchemy/admin/ingredients/update.turbo_stream.erb +6 -3
  229. data/app/views/alchemy/admin/languages/_table.html.erb +0 -2
  230. data/app/views/alchemy/admin/languages/index.html.erb +25 -29
  231. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +1 -3
  232. data/app/views/alchemy/admin/layoutpages/edit.html.erb +1 -1
  233. data/app/views/alchemy/admin/layoutpages/index.html.erb +26 -7
  234. data/app/views/alchemy/admin/nodes/_form.html.erb +3 -21
  235. data/app/views/alchemy/admin/nodes/_node.html.erb +93 -88
  236. data/app/views/alchemy/admin/nodes/index.html.erb +15 -23
  237. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +2 -6
  238. data/app/views/alchemy/admin/pages/_form.html.erb +2 -1
  239. data/app/views/alchemy/admin/pages/_publication_fields.html.erb +1 -1
  240. data/app/views/alchemy/admin/pages/_table.html.erb +2 -4
  241. data/app/views/alchemy/admin/pages/_toolbar.html.erb +2 -1
  242. data/app/views/alchemy/admin/pages/edit.html.erb +10 -21
  243. data/app/views/alchemy/admin/pages/flush.turbo_stream.erb +1 -1
  244. data/app/views/alchemy/admin/pages/index.html.erb +26 -31
  245. data/app/views/alchemy/admin/pages/info.html.erb +2 -2
  246. data/app/views/alchemy/admin/pages/update.turbo_stream.erb +2 -2
  247. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +1 -1
  248. data/app/views/alchemy/admin/partials/_routes.html.erb +24 -48
  249. data/app/views/alchemy/admin/pictures/_archive.html.erb +3 -17
  250. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -1
  251. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +5 -3
  252. data/app/views/alchemy/admin/pictures/_form.html.erb +0 -1
  253. data/app/views/alchemy/admin/pictures/_infos.html.erb +5 -1
  254. data/app/views/alchemy/admin/pictures/_picture.html.erb +1 -1
  255. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +3 -4
  256. data/app/views/alchemy/admin/pictures/assign.turbo_stream.erb +7 -0
  257. data/app/views/alchemy/admin/pictures/index.html.erb +38 -30
  258. data/app/views/alchemy/admin/pictures/show.html.erb +41 -41
  259. data/app/views/alchemy/admin/resources/_empty_state.html.erb +27 -0
  260. data/app/views/alchemy/admin/resources/_pagination.html.erb +1 -1
  261. data/app/views/alchemy/admin/resources/_per_page_select.html.erb +1 -1
  262. data/app/views/alchemy/admin/resources/_resource_table.html.erb +0 -2
  263. data/app/views/alchemy/admin/resources/_resource_usage_info.html.erb +3 -2
  264. data/app/views/alchemy/admin/resources/index.html.erb +32 -13
  265. data/app/views/alchemy/admin/sites/index.html.erb +24 -22
  266. data/app/views/alchemy/admin/styleguide/index.html.erb +35 -12
  267. data/app/views/alchemy/admin/tags/index.html.erb +27 -25
  268. data/app/views/alchemy/admin/tinymce/_setup.html.erb +6 -8
  269. data/app/views/alchemy/admin/translations/_en.js +3 -0
  270. data/app/views/alchemy/admin/uploader/_button.html.erb +11 -17
  271. data/app/views/alchemy/admin/uploader/_setup.html.erb +3 -3
  272. data/app/views/alchemy/pages/sitemap.xml.erb +2 -0
  273. data/app/views/kaminari/alchemy/_first_page.html.erb +1 -2
  274. data/app/views/kaminari/alchemy/_gap.html.erb +0 -1
  275. data/app/views/kaminari/alchemy/_last_page.html.erb +1 -2
  276. data/app/views/kaminari/alchemy/_next_page.html.erb +1 -2
  277. data/app/views/kaminari/alchemy/_page.html.erb +1 -2
  278. data/app/views/kaminari/alchemy/_paginator.html.erb +0 -1
  279. data/app/views/kaminari/alchemy/_prev_page.html.erb +1 -2
  280. data/app/views/layouts/alchemy/admin/dialog.html.erb +3 -0
  281. data/app/views/layouts/alchemy/admin.html.erb +5 -6
  282. data/config/brakeman.ignore +23 -1
  283. data/config/importmap.rb +10 -8
  284. data/config/initializers/dragonfly.rb +21 -17
  285. data/config/locales/alchemy.en.yml +52 -11
  286. data/config/routes.rb +3 -3
  287. data/db/migrate/20260727120000_add_permitted_roles_to_alchemy_pages.rb +23 -0
  288. data/db/migrate/20260820120000_add_cached_tag_list_to_taggables.rb +57 -0
  289. data/lib/alchemy/configuration/number_option.rb +13 -0
  290. data/lib/alchemy/configuration/proc_option.rb +13 -0
  291. data/lib/alchemy/configuration.rb +2 -0
  292. data/lib/alchemy/configurations/admin_components.rb +30 -0
  293. data/lib/alchemy/configurations/format_matchers.rb +7 -1
  294. data/lib/alchemy/configurations/main.rb +103 -4
  295. data/lib/alchemy/configurations/menu.rb +91 -0
  296. data/lib/alchemy/configurations/menu_item.rb +123 -0
  297. data/lib/alchemy/configurations/sitemap.rb +1 -0
  298. data/lib/alchemy/configurations/uploader.rb +15 -1
  299. data/lib/alchemy/engine.rb +0 -6
  300. data/lib/alchemy/i18n.rb +26 -0
  301. data/lib/alchemy/modules.rb +52 -50
  302. data/lib/alchemy/tasks/generate_thumbnails.rb +99 -0
  303. data/lib/alchemy/tasks/tidy.rb +1 -1
  304. data/lib/alchemy/test_support/capybara_helpers.rb +48 -37
  305. data/lib/alchemy/test_support/current_language_shared_examples.rb +1 -1
  306. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +4 -1
  307. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +132 -0
  308. data/lib/alchemy/test_support/shared_ingredient_examples.rb +52 -0
  309. data/lib/alchemy/test_support/shared_publishable_examples.rb +29 -4
  310. data/lib/alchemy/upgrader/eight_four.rb +237 -0
  311. data/lib/alchemy/upgrader/register_module_rewriter.rb +177 -0
  312. data/lib/alchemy/upgrader.rb +2 -1
  313. data/lib/alchemy/version.rb +1 -1
  314. data/lib/alchemy.rb +0 -1
  315. data/lib/alchemy_cms.rb +0 -13
  316. data/lib/generators/alchemy/elements/templates/view.html.erb +1 -1
  317. data/lib/generators/alchemy/elements/templates/view.html.haml +1 -1
  318. data/lib/generators/alchemy/elements/templates/view.html.slim +1 -1
  319. data/lib/generators/alchemy/install/install_generator.rb +2 -13
  320. data/lib/generators/alchemy/install/templates/alchemy.rb.tt +24 -9
  321. data/lib/generators/alchemy/module/module_generator.rb +1 -0
  322. data/lib/generators/alchemy/module/templates/ability.rb.tt +1 -1
  323. data/lib/generators/alchemy/module/templates/module_config.rb.tt +16 -18
  324. data/lib/generators/alchemy/user_columns_migration/templates/migration.rb.tt +19 -0
  325. data/lib/generators/alchemy/user_columns_migration/user_columns_migration_generator.rb +30 -0
  326. data/lib/tasks/alchemy/thumbnails.rake +16 -29
  327. data/lib/tasks/alchemy/upgrade.rake +45 -3
  328. data/vendor/javascript/cropperjs.min.js +3 -3
  329. data/vendor/javascript/floating-ui.min.js +1 -1
  330. data/vendor/javascript/tinymce.min.js +5 -5
  331. data/vendor/javascript/tom-select.min.js +1 -1
  332. metadata +85 -65
  333. data/app/javascript/alchemy_admin/components/action.js +0 -50
  334. data/app/javascript/alchemy_admin/dirty.js +0 -55
  335. data/app/javascript/alchemy_admin/node_tree.js +0 -82
  336. data/app/javascript/alchemy_admin/picture_selector.js +0 -67
  337. data/app/javascript/alchemy_admin/templates/compiled.js +0 -1
  338. data/app/javascript/alchemy_admin/templates/node_folder.hbs +0 -3
  339. data/app/stylesheets/alchemy/admin/attachment-select.scss +0 -19
  340. data/app/views/alchemy/admin/_main_navi.html.erb +0 -6
  341. data/app/views/alchemy/admin/attachments/assign.js.erb +0 -15
  342. data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +0 -30
  343. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +0 -20
  344. data/app/views/alchemy/admin/partials/_sub_navigation.html.erb +0 -11
  345. data/app/views/alchemy/admin/pictures/assign.js.erb +0 -13
  346. data/app/views/alchemy/base/error_notice.js.erb +0 -1
  347. data/app/views/alchemy/base/permission_denied.js.erb +0 -3
  348. data/app/views/alchemy/base/redirect.js.erb +0 -11
  349. data/config/alchemy/config.yml +0 -217
  350. data/config/alchemy/modules.yml +0 -82
  351. data/config/initializers/rails_live_reload.rb +0 -13
  352. data/lib/alchemy/dev_support/live_reload_watcher.rb +0 -5
  353. data/lib/alchemy/taggable.rb +0 -49
  354. data/lib/generators/alchemy/install/templates/dragonfly.rb.tt +0 -34
  355. data/vendor/assets/stylesheets/alchemy_admin/select2.css +0 -1
  356. data/vendor/javascript/handlebars.min.js +0 -29
  357. data/vendor/javascript/jquery.min.js +0 -2
  358. data/vendor/javascript/rails-ujs.min.js +0 -1
  359. data/vendor/javascript/select2.min.js +0 -23
  360. /data/{lib → app/controllers/concerns}/alchemy/ability_helper.rb +0 -0
  361. /data/{lib → app/controllers/concerns}/alchemy/admin/locale.rb +0 -0
  362. /data/{lib → app/controllers/concerns}/alchemy/admin/preview_time.rb +0 -0
  363. /data/{lib → app/controllers/concerns}/alchemy/admin/timezone.rb +0 -0
  364. /data/{lib → app/controllers/concerns}/alchemy/configuration_methods.rb +0 -0
  365. /data/{lib → app/models}/alchemy/admin/preview_url.rb +0 -0
  366. /data/{lib → app/models/concerns}/alchemy/hints.rb +0 -0
  367. /data/{lib → app/models/concerns}/alchemy/name_conversions.rb +0 -0
  368. /data/{lib → app/services}/alchemy/elements_finder.rb +0 -0
@@ -1,2 +1,2 @@
1
- import"handlebars";import"jquery";import"@ungap/custom-elements";import{Turbo as e}from"@hotwired/turbo-rails";import"select2";import t from"@rails/ujs";import"keymaster";import"clipboard";import i from"flatpickr";import s from"sortablejs";import"tinymce";import{setDefaultAnimation as n,registerIconLibrary as o}from"shoelace";import r from"cropperjs";const l=/\./;function a(e){const t=c(),i=Alchemy.translations;return i?l.test(e)?function(e,t){const i=t.split(l),s=e[i[0]];return s&&s[i[1]]||t}(i,e):i[e]||e:(console.warn(`Translations for locale ${t} not found!`),e)}function c(){return document.documentElement.lang?document.documentElement.lang:"en"}function d(e,t=void 0){let i=a(e);return t?i.replace(/%\{.+\}/,t):i}async function h(){const e=c();"en"!==e&&(await import(`select2/${e}.js`),$.extend($.fn.select2.defaults,$.fn.select2.locales[e]))}const u=[];function p(e=document){e instanceof jQuery&&(e=e[0]),e===document&&u.forEach(e=>key.unbind(e));const t=e.querySelectorAll(".search_input_field"),i=e.querySelectorAll(".search_field_clear, .js_filter_field_clear");key("alt+f",function(){return key.setScope("search"),t.forEach(e=>e.focus({focusVisible:!0})),!1}),u.push("alt+f"),key("esc","search",function(){i.forEach(e=>e.click()),t.forEach(e=>e.blur())}),u.push("esc"),e.querySelectorAll("[data-alchemy-hotkey]").forEach(function(e){const t=e.dataset.alchemyHotkey;key(t,()=>e.click()),u.push(t)})}function m(e){const t=document.createElement("template");return t.innerHTML=e,t.content.children[0]}let g=class{constructor(e,t="currentColor"){this.size=e,this.color=t,this.spinner=void 0}get el(){return this.spinner}spin(e){return void 0===e&&(e=document.body),this.spinner=m(`<alchemy-spinner size="${this.size}" color="${this.color}"></alchemy-spinner>`),e.append(this.spinner),this}stop(){this.spinner&&(this.spinner.remove(),this.spinner=void 0)}};const f=[],v={header_height:36,size:"400x300",padding:!0,title:"",modal:!0,overflow:"visible",ready:()=>{},closed:()=>{}};class y{constructor(e,t={}){this.url=e,this.options={...v,...t},this.$document=$(document),this.$window=$(window),this.$body=$("body");const i=this.options.size.split("x");this.width=parseInt(i[0],10),this.height=parseInt(i[1],10),this.build(),this.resize()}open(){this.dialog.trigger("Alchemy.DialogOpen"),this.bind_close_events(),window.requestAnimationFrame(()=>{if(this.dialog_container.addClass("open"),null!=this.overlay)return this.overlay.addClass("open")}),this.$body.addClass("prevent-scrolling"),f.push(this),this.load()}close(){return this.dialog.trigger("DialogClose.Alchemy"),this.$document.off("keydown"),this.dialog_container.removeClass("open"),null!=this.overlay&&this.overlay.removeClass("open"),this.$document.on("webkitTransitionEnd transitionend oTransitionEnd",()=>{if(this.$document.off("webkitTransitionEnd transitionend oTransitionEnd"),this.dialog_container.remove(),null!=this.overlay&&this.overlay.remove(),this.$body.removeClass("prevent-scrolling"),f.pop(this),null!=this.options.closed)return this.options.closed()}),!0}load(){this.show_spinner(),$.get(this.url,e=>{this.replace(e)}).fail(e=>{this.show_error(e)})}reload(){this.dialog_body.empty(),this.load()}replace(e){this.remove_spinner(),this.dialog_body.hide(),this.dialog_body.html(e),this.init(),this.dialog[0].dispatchEvent(new CustomEvent("DialogReady.Alchemy",{bubbles:!0,detail:{body:this.dialog_body[0]}})),null!=this.options.ready&&this.options.ready(this.dialog_body),this.dialog_body.show()}show_spinner(){this.spinner=new g("medium"),this.spinner.spin(this.dialog_body[0])}remove_spinner(){this.spinner.stop()}init(){p(this.dialog_body),this.watch_remote_forms(),window.requestAnimationFrame(()=>{this.dialog_body.find("[autofocus]").focus()})}watch_remote_forms(){const e=$('[data-remote="true"]',this.dialog_body);e.on("ajax:success",e=>{const t=e.detail[2];t.getResponseHeader("Content-Type").match(/javascript/)||(this.dialog_body.html(t.responseText),this.init())}),e.on("ajax:error",e=>{const t=e.detail[1],i=e.detail[2];this.show_error(i,t)})}show_error(e,t){if(422===e.status)return this.dialog_body.html(e.responseText),void this.init();const{error_body:i,error_header:s,error_type:n}=this.error_messages(e,t),o=$(`<alchemy-message type="${n}">\n <h1>${s}</h1>\n <p>${i}</p>\n </alchemy-message>`);this.dialog_body.html(o)}error_messages(e,t){let i,s,n="warning";switch(e.status){case 0:s="The server does not respond.",i="Please check server and try again.";break;case 403:s="You are not authorized!",i="Please close this window.";break;default:n="error",t?(s=t,console.error(e.responseText)):s=`${e.statusText} (${e.status})`,i="Please check log and try again."}return{error_header:s,error_body:i,error_type:n}}bind_close_events(){this.close_button.on("click",()=>{this.close()}),this.dialog_container.addClass("closable").on("click",e=>e.target!==this.dialog_container.get(0)||(this.close(),!1)),this.$document.keydown(e=>27!==e.which||(this.close(),!1))}build(){this.dialog_container=$('<div class="alchemy-dialog-container" />'),this.dialog=$('<div class="alchemy-dialog" />'),this.dialog_body=$('<div class="alchemy-dialog-body" />'),this.dialog_header=$('<div class="alchemy-dialog-header" />'),this.dialog_title=$('<div class="alchemy-dialog-title" />'),this.close_button=$('<button class="alchemy-dialog-close"><alchemy-icon name="close"></alchemy-icon></button>'),this.dialog_title.text(this.options.title),this.dialog_header.append(this.dialog_title),this.dialog_header.append(this.close_button),this.dialog.append(this.dialog_header),this.dialog.append(this.dialog_body),this.dialog_container.append(this.dialog),this.options.modal&&this.dialog.addClass("modal"),this.options.padding&&this.dialog_body.addClass("padded"),this.options.modal&&(this.overlay=$('<div class="alchemy-dialog-overlay" />'),this.$body.append(this.overlay)),this.$body.append(this.dialog_container)}resize(){const{width:e,height:t}=this.getSize();this.dialog.css({width:e,"min-height":t,overflow:this.options.overflow}),"hidden"===this.options.overflow?this.dialog_body.css({height:t,overflow:"auto"}):this.dialog_body.css({"min-height":t,overflow:"visible"})}getSize(){const e=this.options.padding?16:0,t=this.$window.width(),i=this.$window.height();let s=this.width,n=this.height;return s>=t&&(s=t-e),n>=i&&(n=i-e-v.header_height),{width:s,height:n}}}function b(){const{length:e}=f;if(0!==e)return f[e-1]}function w(e){const t=b();if(null!=t)return t.options.closed=e,t.close()}function E(e,t){if(!e)throw"No url given! Please provide an url.";new y(e,t).open()}class k{constructor(e,t={}){this.message=e,this.options={...{size:"300x100",title:d("Please confirm"),ok_label:d("Yes"),cancel_label:d("No"),on_ok(){}},...t},this.#e(),this.#t()}open(){requestAnimationFrame(()=>{this.dialog.show()})}#e(){const e=this.options.size.split("x")[0];this.dialog=m(`\n <sl-dialog label="${this.options.title}" style="--width: ${e}px">\n ${this.message}\n <button slot="footer" type="reset" class="secondary mx-1 my-0" autofocus>\n ${this.options.cancel_label}\n </button>\n <button slot="footer" type="submit" class="mx-1 my-0">\n ${this.options.ok_label}\n </button>\n </sl-dialog>\n `),document.body.append(this.dialog)}#t(){this.cancelButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_cancel(),this.dialog.hide()}),this.okButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_ok(),this.dialog.hide()}),this.dialog.addEventListener("sl-request-close",e=>{"overlay"===e.detail.source&&(this.options.on_cancel(),e.preventDefault())}),this.dialog.addEventListener("sl-after-hide",()=>{this.dialog.remove()})}get cancelButton(){return this.dialog.querySelector("button[type=reset]")}get okButton(){return this.dialog.querySelector("button[type=submit]")}}function _(e,t={}){return new Promise(i=>{new k(e,{...t,on_ok(){i(!0)},on_cancel(){i(!1)}}).open()})}function L(e=!0){document.querySelector("alchemy-overlay").show=!!e}function S(e){let t=()=>{};$(e).is("form")?t=function(){const t=$(`<form action="${e.action}" method="POST" style="display: none" />`);t.append($(e).find("input")),t.appendTo("body"),L(),t.trigger("submit")}:$(e).is("a")&&(t=()=>Turbo.visit(e.pathname));return!(document.querySelectorAll("alchemy-element-editor.dirty").length>0)||(_(d("page_dirty_notice"),{title:d("warning"),ok_label:d("ok"),cancel_label:d("cancel")}).then(e=>{e&&(window.onbeforeunload=void 0,t())}),!1)}var x={checkPageDirtyness:S,PageLeaveObserver:function(){document.querySelectorAll("#main_navi a").forEach(e=>{e.addEventListener("click",e=>{S(e.currentTarget)||e.preventDefault()})})}};function C(e){const t=document.getElementById("fixed-elements"),i=`fixed-element-${e}`;t.querySelector(`sl-tab[panel="${i}"]`).remove(),t.querySelector(`sl-tab-panel[name="${i}"]`).remove(),t.show("main-content-elements")}var A=Object.freeze({__proto__:null,createTab:function(e,t){const i=document.getElementById("fixed-elements"),s=`fixed-element-${e}`,n=`<sl-tab slot="nav" panel="${s}">${t}</sl-tab>`,o=`<sl-tab-panel name="${s}" style="--padding: 0" />`;i.innerHTML+=n+o,window.requestAnimationFrame(function(){i.show(s)})},removeTab:C});function T(e,t="notice"){!function(e,t){const i=document.getElementById("flash_notices"),s=m(`\n <alchemy-message type="${t}" dismissable>\n ${e}\n </alchemy-message>\n `);i.append(s)}(e,t)}function O(e){return!(!$(e.target).is("input, textarea")&&"?"===String.fromCharCode(e.which))||(E("/admin/help",{title:Alchemy.t("help"),size:"400x492"}),!1)}const I=/#[\w.~-]+$/;class F extends HTMLIFrameElement{#i;#s;#n;handleEvent(e){"load"===e.type&&(this.#o(),this.#r(),this.#i?.call(this,e))}#l=e=>{"Alchemy.previewReady"===e.data.message&&(this.#o(),this.#r(),this.#i?.call(this,e))};connectedCallback(){let e=this.url;this.addEventListener("load",this),this.#a(),window.addEventListener("message",this.#l),window.localStorage.getItem("alchemy-preview-url")&&(e=window.localStorage.getItem("alchemy-preview-url"),this.previewUrlSelect.value=e),this.refresh(e)}disconnectedCallback(){this.removeEventListener("load",this),key.unbind("alt+r"),window.removeEventListener("message",this.#l)}postMessage(e){this.contentWindow.postMessage(e,"*")}resize(e){this.style.width=`${e}px`}refresh(e){return this.#c(),this.src=e||this.url,this.#o(),this.#n=setTimeout(()=>{this.#r(),T(d("Preview failed to load"),"warning")},5e3),new Promise(e=>{this.#i=e})}set isDragged(e){this.style.transitionProperty=e?"none":null,this.style.pointerEvents=e?"none":null}#a(){this.reloadButton?.addEventListener("click",e=>{e.preventDefault(),this.refresh()}),key("alt+r",()=>this.refresh()),this.sizeSelect.addEventListener("change",e=>{const t=e.target.value;""===t?this.style.width=null:this.resize(t)}),this.previewUrlSelect?.addEventListener("change",e=>{const t=e.target.value;window.localStorage.setItem("alchemy-preview-url",t),this.refresh(t)})}#c(){this.reloadButton.innerHTML.includes("alchemy-spinner")||(this.#s=this.reloadButton.innerHTML),this.reloadButton.innerHTML='<alchemy-spinner size="small"></alchemy-spinner>'}#r(){this.reloadButton.innerHTML=this.#s}#o(){this.#n&&(clearTimeout(this.#n),this.#n=null)}get url(){return this.getAttribute("url")}get sizeSelect(){return document.querySelector("select#preview_size")}get previewUrlSelect(){return document.querySelector("select#preview_url")}get reloadButton(){return document.querySelector("#reload_preview_button")}}function q(){document.getElementById("alchemy_preview_window").refresh()}customElements.define("alchemy-preview-window",F,{extends:"iframe"});class D{static updateIcon(e,t=!1){const i=document.querySelector(`[data-ingredient-id="${e}"]`);if(i){i.querySelector(".edit-ingredient-anchor-link alchemy-icon").setAttribute("icon-style",t?"fill":"line")}}}class M extends HTMLElement{constructor(){super(),this.actions={closeCurrentDialog:w,reloadPreview:q,removeFixedElement:C,updateAnchorIcon:D.updateIcon,hidePleaseWaitOverlay(){L(!1)}}}connectedCallback(){const e=this.actions[this.name];e?e(...this.params):console.error(`Unknown Alchemy action: ${this.name}`),this.remove()}get name(){return this.getAttribute("name")}get params(){return this.hasAttribute("params")?JSON.parse(this.getAttribute("params")):[]}}function B(e){return`${e}`.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function P(e,t){const i=B(e);return t?i.replace(new RegExp(String(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"),e=>`<em>${e}</em>`):i}customElements.define("alchemy-action",M);class z extends HTMLElement{#d=null;async connectedCallback(){await h(),this.isConnected&&(this.input.classList.add("alchemy_selectbox"),this.#d=$(this.input).select2(this.select2Config).on("select2-open",this.#h).on("change",this.#u))}disconnectedCallback(){this.#d&&(this.#d.off("select2-open",this.#h),this.#d.off("change",this.#u),this.#d.select2("destroy"),this.#d=null)}#h=e=>this.onOpen(e);#u=e=>this.onChange(e);onChange(e){e.added&&this.setAttribute("selection",JSON.stringify(e.added)),this.dispatchCustomEvent("RemoteSelect.Change",{removed:e.removed,added:e.added})}onOpen(e){setTimeout(()=>{document.querySelector("#select2-drop .select2-input").focus()},100)}dispatchCustomEvent(e,t={}){this.dispatchEvent(new CustomEvent(`Alchemy.${e}`,{bubbles:!0,detail:t}))}get allowClear(){return this.hasAttribute("allow-clear")}get selection(){return this.getAttribute("selection")}get placeholder(){return this.getAttribute("placeholder")??""}get queryParams(){return this.getAttribute("query-params")??"{}"}get url(){return this.getAttribute("url")??""}get input(){return this.getElementsByTagName("input")[0]}get select2Config(){return{placeholder:this.placeholder,allowClear:this.allowClear,initSelection:(e,t)=>{this.selection&&t(JSON.parse(this.selection))},ajax:this.ajaxConfig,formatSelection:e=>this._renderResult(e),formatResult:(e,t,i)=>this._renderListEntry(e,i.term)}}get ajaxConfig(){return{url:this.url,datatype:"json",quietMillis:300,data:(e,t)=>this._searchQuery(e,t),results:e=>this._parseResponse(e)}}_searchQuery(e,t){return{q:{name_cont:e,...JSON.parse(this.queryParams)},page:t}}_parseResponse(e){const t=e.meta;return{results:e.data,more:t.page*t.per_page<t.total_count}}_renderResult(){throw new Error("You need to define a _renderResult function on your sub class!")}_renderListEntry(){throw new Error("You need to define a _renderListEntry function on your sub class!")}_hightlightTerm(e,t){return P(e,t)}}class H extends z{_renderResult(e){return this._renderListEntry(e)}_renderListEntry(e,t){return`\n <div class="attachment-select--attachment">\n <alchemy-icon name="${B(e.icon_css_class)}"></alchemy-icon>\n <span class="attachment-select--attachment-name">${this._hightlightTerm(e.name,t)}</span>\n </div>\n `}}customElements.define("alchemy-attachment-select",H);class R extends HTMLElement{connectedCallback(){$(this).on("change",this.#u)}disconnectedCallback(){$(this).off("change",this.#u)}#u=e=>{const t=new Event("submit",{bubbles:!0,cancelable:!0});return e.target.form.dispatchEvent(t),!1}}customElements.define("alchemy-auto-submit",R);class N extends HTMLButtonElement{connectedCallback(){this.form?(this.form.addEventListener("submit",this),"true"==this.form.dataset.remote&&this.form.addEventListener("ajax:complete",this),this.form.addEventListener("turbo:submit-end",this)):console.warn("No form for button found!",this)}handleEvent(e){switch(e.type){case"submit":"disabled"===this.getAttribute("disabled")?(e.preventDefault(),e.stopPropagation()):this.disable();break;case"ajax:complete":case"turbo:submit-end":this.enable()}}disable(){const e=new g("small"),t=this.getBoundingClientRect();this.dataset.initialButtonText=this.innerHTML,this.setAttribute("disabled","disabled"),this.setAttribute("tabindex","-1"),this.classList.add("disabled"),this.style.width=`${t.width}px`,this.style.height=`${t.height}px`,this.innerHTML="&nbsp;",e.spin(this)}enable(){this.classList.remove("disabled"),this.removeAttribute("disabled"),this.removeAttribute("tabindex"),this.style.width=null,this.style.height=null,this.innerHTML=this.dataset.initialButtonText}}customElements.define("alchemy-button",N,{extends:"button"});class j extends HTMLElement{connectedCallback(){this.translation=d("allowed_chars",this.maxChars),this.formField=this.getFormField(),this.formField&&(this.createDisplayElement(),this.countCharacters(),this.formField.addEventListener("keyup",this))}disconnectedCallback(){this.formField?.removeEventListener("keyup",this)}handleEvent(e){"keyup"===e.type&&this.countCharacters()}getFormField(){const e=this.querySelectorAll("input, textarea");return e.length>0?e[0]:void 0}createDisplayElement(){this.display=this.querySelector(":scope > .alchemy-char-counter"),this.display||(this.display=document.createElement("small"),this.display.className="alchemy-char-counter",this.formField.after(this.display))}countCharacters(){const e=this.formField.value.length;this.display.textContent=`${e} ${this.translation}`,this.display.classList.toggle("too-long",e>this.maxChars)}get maxChars(){return this.getAttribute("max-chars")??60}}customElements.define("alchemy-char-counter",j);class V extends HTMLElement{connectedCallback(){this.innerHTML='<alchemy-icon name="clipboard"></alchemy-icon>',this.clipboard=new ClipboardJS(this,{text:()=>this.getAttribute("content")}),this.clipboard.on("success",()=>{T(this.getAttribute("success-text"))})}disconnectedCallback(){this.clipboard.destroy()}}customElements.define("alchemy-clipboard-button",V);const W=e=>{const t=e.element[0],i=t.dataset.swatch||t.value;return`\n <div class="select-color-option">\n ${"custom_color"===t.value?'<alchemy-icon name="palette"></alchemy-icon>':`<span class="color-indicator" style="--color: ${i}"></span>`}\n <span>${e.text}</span>\n </div>`};class U extends HTMLElement{#d=null;connectedCallback(){this.select?(this.#p(),this.#d.on("change",this.#m)):(this.colorInput?.addEventListener("input",this),this.textInput?.addEventListener("input",this),this.#g(!0))}handleEvent(e){switch(e.target){case this.colorInput:this.textInput.value=this.colorInput.value;break;case this.textInput:this.colorInput.value=this.textInput.value}}disconnectedCallback(){this.colorInput?.removeEventListener("input",this),this.textInput?.removeEventListener("input",this),this.#d&&(this.#d.off("change",this.#m),this.#d.select2("destroy"),this.#d=null)}#m=e=>{this.#g("custom_color"===e.val)};#p(){this.select.classList.add("alchemy_selectbox");const e={minimumResultsForSearch:10,formatResult:W,formatSelection:W};this.#d=$(this.select).select2(e)}#g(e=!0){this.colorInput.disabled=!e}get colorInput(){return this.querySelector("input[type='color']")}get textInput(){return this.querySelector("input[type='text']")}get select(){return this.querySelector("select")}}customElements.define("alchemy-color-select",U);const K=c();class J extends HTMLElement{async connectedCallback(){"en"!==K&&await import(`flatpickr/${K}.js`),this.isConnected&&(this.flatpickr=i(this.inputField,this.flatpickrOptions))}disconnectedCallback(){this.flatpickr?.destroy()}get flatpickrOptions(){const e=/time/.test(this.inputType),t={locale:K.slice(0,2),altInput:!0,altFormat:d(`formats.${this.inputType}`),altInputClass:"flatpickr-input",enableTime:e,noCalendar:"time"===this.inputType,time_24hr:d("formats.time_24hr"),onValueUpdate(e,t,i){i.element.closest("alchemy-element-editor")?.setDirty(this.inputField)}};return e&&(t.dateFormat="Z"),t}get inputField(){return this.querySelector("input")}get inputType(){return this.getAttribute("input-type")||"date"}}customElements.define("alchemy-datepicker",J);class G extends HTMLAnchorElement{connectedCallback(){this.addEventListener("click",this)}disconnectedCallback(){this.removeEventListener("click",this)}handleEvent(e){this.disabled||this.openDialog(),e.preventDefault()}openDialog(){this.dialog=new y(this.getAttribute("href"),this.dialogOptions),this.dialog.open()}get dialogOptions(){return this.dataset.dialogOptions?JSON.parse(this.dataset.dialogOptions):{}}get disabled(){return this.classList.contains("disabled")}}customElements.define("alchemy-dialog-link",G,{extends:"a"});const Q="application/json";function X(e){return"get"===e.toLowerCase()}function Y(e,t,i){const s=function(e){return{"Content-Type":"application/json; charset=utf-8",Accept:e,"X-Requested-With":"XMLHttpRequest","X-CSRF-Token":Z()}}(i),n={method:e,headers:s};return t&&!X(e)&&(n.body=JSON.stringify(t)),n}function Z(){return document.querySelector('meta[name="csrf-token"]').attributes.content.textContent}function ee(e,t){return se("GET",e,t)}function te(e,t,i){return se("PATCH",e,t,i)}function ie(e,t,i=Q){return se("POST",e,t,i)}async function se(e,t,i,s=Q){const n=await fetch(function(e,t,i){const s=new URL(window.location.origin+e);return t&&X(i)&&(s.search=new URLSearchParams(t).toString()),s.toString()}(t,i,e),Y(e,i,s)),o=n.headers.get("content-type"),r=o?.includes(Q),l=o?.includes("text/vnd.turbo-stream.html");let a=null;if(r?a=await n.json():l&&(a=await n.text(),"undefined"!=typeof Turbo&&Turbo.renderStreamMessage(a)),n.ok)return{data:a,status:n.status};throw a||new Error("An error occurred during the transaction")}class ne extends HTMLElement{dataItem(e){return{id:`#${e}`,text:`#${e}`}}get selectElement(){return this.querySelector('select[is="alchemy-select"]')}}function oe(e){document.dispatchEvent(new CustomEvent("alchemy:page-dirty",{detail:{tooltip:e.publishButtonTooltip}}))}customElements.define("alchemy-dom-id-api-select",class extends ne{#f=void 0;connectedCallback(){this.page=this.getAttribute("page")}async#v(){const e=(await ee(Alchemy.routes.api_ingredients_path,{page_id:this.#f})).data.ingredients.filter(e=>e.data?.dom_id).map(e=>this.dataItem(e.data.dom_id)),t=e.length>0?d("None"):d("No anchors found");this.selectElement.setOptions(e,t),this.selectElement.enable()}#y(){requestAnimationFrame(()=>{this.selectElement.disable(),this.selectElement.setOptions([],d("Select a page first"))})}set page(e){this.#f=e,e?this.#v():this.#y()}}),customElements.define("alchemy-dom-id-preview-select",class extends ne{connectedCallback(){requestAnimationFrame(()=>{const e=document.getElementById("alchemy_preview_window"),t=e.contentDocument?.querySelectorAll("[id]")||[];if(t.length>0){const e=Array.from(t).map(e=>this.dataItem(e.id));this.selectElement.setOptions(e,d("None"))}})}});class re extends HTMLElement{#b;connectedCallback(){this.#b=this.scheduleButton.getAttribute("variant"),this.publishButton.addEventListener("click",this),this.dropdown.addEventListener("sl-show",this),this.dropdown.addEventListener("sl-hide",this)}disconnectedCallback(){this.publishButton.removeEventListener("click",this),this.dropdown.removeEventListener("sl-show",this),this.dropdown.removeEventListener("sl-hide",this)}handleEvent(e){switch(e.type){case"click":this.publishButton.loading=!0;break;case"sl-show":this.scheduleButton.setAttribute("variant","primary");break;case"sl-hide":this.scheduleButton.setAttribute("variant",this.#b)}}get publishButton(){return this.querySelector("sl-button[type='submit']")}get dropdown(){return this.querySelector("sl-dropdown")}get scheduleButton(){return this.querySelector("sl-button[slot='trigger']")}}customElements.define("alchemy-publish-element-button",re);class le extends HTMLElement{connectedCallback(){this.button?.addEventListener("click",this)}disconnectedCallback(){this.button?.removeEventListener("click",this)}async handleEvent(){if(await _(this.message)){const e=await se("DELETE",this.url);this.#w(e.data)}}#w(e){const t=this.closest("alchemy-element-editor");t.addEventListener("transitionend",()=>{t.fixed&&C(t.elementId),t.remove()}),t.classList.add("dismiss"),T(e.message),e.pageHasUnpublishedChanges&&oe(e),q()}get url(){return this.getAttribute("href")}get message(){return this.getAttribute("message")}get button(){return this.querySelector("button")}}customElements.define("alchemy-delete-element-button",le);class ae extends HTMLElement{#E=null;#k=null;#_=null;connectedCallback(){this.classList.contains("ui-sortable-placeholder")||(this.addEventListener("click",this),this.addEventListener("alchemy:element-update-title",this),this.addEventListener("ajax:complete",this),this.#E=this.form,this.#E&&$(this.#E).on("change",this.onChange),this.#k=this.header,this.#k?.addEventListener("dblclick",this.#L),this.#_=this.toggleButton,this.#_?.addEventListener("click",this.#S),this.hasAttribute("created")&&(this.focusElement(),this.previewWindow?.refresh().then(()=>{this.focusElementPreview()}),this.removeAttribute("created")))}disconnectedCallback(){this.removeEventListener("click",this),this.removeEventListener("alchemy:element-update-title",this),this.removeEventListener("ajax:complete",this),this.#E&&($(this.#E).off("change",this.onChange),this.#E=null),this.#k?.removeEventListener("dblclick",this.#L),this.#k=null,this.#_?.removeEventListener("click",this.#S),this.#_=null}handleEvent(e){switch(e.type){case"click":e.target.closest("alchemy-element-editor")===this&&this.onClickElement();break;case"ajax:complete":if(e.target===this.body){const t=e.detail[0];e.stopPropagation(),this.onSaveElement(t)}break;case"alchemy:element-update-title":this.hasEditors||e.target!=this.firstChild||this.setTitle(e.detail.title)}}onChange=e=>{const t=e.target;if(!t.classList.contains("nested-elements"))return this.setDirty(t),e.stopPropagation(),!1};async focusElement(){document.querySelector("#fixed-elements")&&await this.selectTabForElement(),await this.expand(),this.selectElement(!0)}focusElementPreview(){this.previewWindow?.postMessage({message:"Alchemy.focusElement",element_id:this.elementId})}onClickElement(){this.selectElement(),this.focusElementPreview()}onSaveElement(e){const t=JSON.parse(e.responseText);if(this.setClean(),422===e.status){const e=t.warning;t.ingredientsWithErrors.forEach(e=>{const t=this.querySelector(`[data-ingredient-id="${e.id}"]`),i=m(`<small class="error">${e.errorMessage}</small>`);t?.appendChild(i),t?.classList.add("validation_failed")}),T(e,"warn"),this.elementErrors.classList.remove("hidden")}else T(t.notice),this.previewWindow?.refresh().then(()=>{this.focusElementPreview()}),this.updateTitle(t.previewText),t.ingredientAnchors.forEach(e=>{D.updateIcon(e.ingredientId,e.active)}),t.pageHasUnpublishedChanges&&oe(t)}scrollToElement(){setTimeout(()=>{this.scrollIntoView({behavior:"smooth"})},50)}selectElement(e=!1){document.querySelectorAll("alchemy-element-editor.selected").forEach(e=>{e.classList.remove("selected")}),window.requestAnimationFrame(()=>{this.classList.add("selected")}),e&&this.scrollToElement()}selectTabForElement(){return new Promise((e,t)=>{const i=document.querySelector("#fixed-elements"),s=this.closest("sl-tab-panel");i&&s?(i.show(s.getAttribute("name")),e()):t(new Error("No tabs present"))})}setClean(){this.dirty=!1,window.onbeforeunload=null,this.elementErrors.classList.add("hidden"),this.hasEditors&&this.body.querySelectorAll(".ingredient-editor").forEach(e=>{e.classList.remove("dirty","validation_failed"),e.querySelectorAll("small.error").forEach(e=>e.remove())})}setDirty(e){this.hasEditors&&(this.dirty=!0,window.onbeforeunload||(window.onbeforeunload=e=>e.preventDefault()),e?.closest(".ingredient-editor")?.classList.add("dirty"))}setTitle(e){const t=this.querySelector(".element-header .preview_text_quote");t&&(t.textContent=e)}async toggle(){this.collapsed?await this.expand():await this.collapse()}collapse(){if(this.collapsed||this.compact||this.fixed)return Promise.resolve("Element is already collapsed.");const e=new Alchemy.Spinner("small");return e.spin(this.toggleButton),this.toggleIcon?.classList?.add("hidden"),ie(Alchemy.routes.collapse_admin_element_path(this.elementId)).then(e=>{const t=e.data;if(this.collapsed=!0,this.toggleButton?.setAttribute("title",t.title),t.nestedElementIds.length){const e=t.nestedElementIds.map(e=>`#element_${e}`).join(", ");this.querySelectorAll(e).forEach(e=>{e.collapsed=!0,e.toggleButton?.setAttribute("title",t.title)})}}).catch(e=>{T(e.message,"error"),console.error(e)}).finally(()=>{this.toggleIcon?.classList?.remove("hidden"),e.stop()})}expand(){if(this.expanded&&!this.compact)return Promise.resolve("Element is already expanded.");if(this.compact&&this.parentElementEditor)return this.parentElementEditor.expand();{const e=new Alchemy.Spinner("small");return e.spin(this.toggleButton),this.toggleIcon?.classList.add("hidden"),new Promise((t,i)=>{ie(Alchemy.routes.expand_admin_element_path(this.elementId)).then(e=>{const i=e.data;if(i.parentElementIds.length){const e=i.parentElementIds.map(e=>`#element_${e}`).join(", ");document.querySelectorAll(e).forEach(e=>{e.collapsed=!1,e.toggleButton?.setAttribute("title",i.title)})}this.collapsed=!1,this.toggleButton?.setAttribute("title",i.title),t()}).catch(e=>{T(e.message,"error"),console.error(e),i(e)}).finally(()=>{this.toggleIcon?.classList?.remove("hidden"),e.stop()})})}}updateTitle(e){this.setTitle(e),this.dispatchEvent(new CustomEvent("alchemy:element-update-title",{bubbles:!0,detail:{title:e}}))}set published(e){e?this.classList.remove("element-hidden"):this.classList.add("element-hidden")}get published(){return!this.classList.contains("hidden")}get compact(){return null!==this.getAttribute("compact")}get fixed(){return null!==this.getAttribute("fixed")}set collapsed(e){this.classList.toggle("folded",e),this.classList.toggle("expanded",!e),this.toggleIcon&&(this.toggleIcon.name=e?"arrow-left-s":"arrow-down-s")}get collapsed(){return this.classList.contains("folded")}get expanded(){return!this.collapsed}set dirty(e){this.classList.toggle("dirty",e)}get dirty(){return this.classList.contains("dirty")}get header(){return this.querySelector(".element-header")}get body(){return this.querySelector(this.bodySelector)}get bodySelector(){return`#${this.id} > .element-body`}get footer(){return this.querySelector(`#${this.id} > .element-footer`)}get toggleButton(){return this.querySelector(".element-toggle")}get toggleIcon(){return this.toggleButton?.querySelector("alchemy-icon")}get elementErrors(){return this.body.querySelector(".element_errors")}get elementId(){return this.dataset.elementId}get elementName(){return this.dataset.elementName}get hasEditors(){return!!this.body?.querySelector(".element-ingredient-editors")}get hasChildren(){return!!this.querySelector(".nested-elements")}get firstChild(){return this.querySelector("alchemy-element-editor")}get form(){return this.querySelector("form.element-body")}get parentElementEditor(){return this.parentElement?.closest("alchemy-element-editor")}get previewWindow(){return document.getElementById("alchemy_preview_window")}#L=()=>{this.toggle()};#S=e=>{e.target.closest("alchemy-element-editor")===this&&this.toggle()}}customElements.define("alchemy-element-editor",ae);const ce=e=>`\n <div class="element-select-name">\n ${e.icon}<span>${e.text}</span>\n </div>\n `;class de extends HTMLElement{#d=null;connectedCallback(){const e=this.options,t={minimumResultsForSearch:3,dropdownAutoWidth:!0,data:()=>({results:e}),formatResult:(e,t,i)=>{let s;return""===e.id?e.text:(s=""!==i.term?P(e.text,i.term):e.text,((e,t,i)=>{const s=i?`<div class="element-select-description">${i}</div>`:"";return`\n <div class="element-select-item">\n ${ce({icon:e,text:t})}\n ${s}\n </div>\n `})(e.icon,s,e.hint))},formatSelection:ce,placeholder:this.placeholder};this.#d=$(this.inputField).select2(t)}disconnectedCallback(){this.#d?.select2("destroy"),this.#d=null}get options(){return JSON.parse(this.getAttribute("options"))}get placeholder(){return this.getAttribute("placeholder")}get inputField(){return this.querySelector("input")}}customElements.define("alchemy-element-select",de);class he extends HTMLElement{#x=!0;#C=null;connectedCallback(){this.toggleButton?.addEventListener("click",this.#S),this.collapseButton?.addEventListener("click",this.#A),window.addEventListener("message",this.#T),document.body.addEventListener("click",this.#O),window.location.hash&&this.focusElementEditor(window.location.hash),this.resize()}disconnectedCallback(){this.toggleButton?.removeEventListener("click",this.#S),this.collapseButton?.removeEventListener("click",this.#A),window.removeEventListener("message",this.#T),document.body.removeEventListener("click",this.#O)}#S=e=>{e.preventDefault(),this.toggle()};#A=()=>{this.collapseAllElements()};#T=e=>{const t=e.data;if("Alchemy.focusElementEditor"==t?.message){const e=document.getElementById(`element_${t.element_id}`);this.show(),e?.focusElement()}};#O=e=>{e.target.closest("alchemy-element-editor")||(this.querySelectorAll("alchemy-element-editor").forEach(e=>{e.classList.remove("selected")}),this.previewWindow?.postMessage({message:"Alchemy.blurElements"}))};collapseAllElements(){this.querySelectorAll("alchemy-element-editor:not([compact]):not([fixed])").forEach(e=>e.collapse())}toggle(){this.#x?this.hide():this.show()}show(){document.body.classList.add("elements-window-visible"),this.#x=!0,this.toggleButton.closest("sl-tooltip").content=Alchemy.t("Hide elements"),this.toggleButton.querySelector("alchemy-icon").setAttribute("name","menu-unfold"),this.resize()}hide(){document.body.classList.remove("elements-window-visible"),document.body.style.removeProperty("--elements-window-width"),this.#x=!1,this.toggleButton.closest("sl-tooltip").content=Alchemy.t("Show elements"),this.toggleButton.querySelector("alchemy-icon").setAttribute("name","menu-fold")}resize(e){void 0===e&&(e=this.widthFromCookie),e&&(document.body.style.setProperty("--elements-window-width",`${e}px`),document.cookie=`alchemy-elements-window-width=${e}; SameSite=Lax; Path=/;`)}focusElementEditor(e){const t=document.querySelector(e);t instanceof ae&&t.focusElement()&&t.focusElementPreview()}get collapseButton(){return this.querySelector("#collapse-all-elements-button")}get toggleButton(){return document.querySelector("#element_window_button")}get previewWindow(){return document.getElementById("alchemy_preview_window")}get turboFrame(){return this.#C||(this.#C=this.closest("turbo-frame")),this.#C}get widthFromCookie(){return document.cookie.split("; ").find(e=>e.startsWith("alchemy-elements-window-width="))?.split("=")[1]}set isDragged(e){this.turboFrame.style.transitionProperty=e?"none":null,this.turboFrame.style.pointerEvents=e?"none":null}}customElements.define("alchemy-elements-window",he);class ue extends HTMLElement{#I=!1;#F=null;#$=null;#q=400;#D=1e3;connectedCallback(){this.addEventListener("mousedown",this),window.addEventListener("mousemove",this),window.addEventListener("mouseup",this)}disconnectedCallback(){this.removeEventListener("mousedown",this),window.removeEventListener("mousemove",this),window.removeEventListener("mouseup",this)}handleEvent(e){switch(e.type){case"mousedown":e.stopPropagation(),this.onMouseDown();break;case"mouseup":this.onMouseUp();break;case"mousemove":this.#I&&this.onDrag(e.pageX)}}onMouseDown(){this.#I=!0;const e=getComputedStyle(this.elementsWindow);this.#q=parseFloat(e.minWidth)||400,this.#D="none"===e.maxWidth?1e3:parseFloat(e.maxWidth),this.elementsWindow.isDragged=!0,this.previewWindow.isDragged=!0,this.classList.add("is-dragged")}onMouseUp(){this.#I=!1,this.elementsWindow.isDragged=!1,this.previewWindow.isDragged=!1,this.classList.remove("is-dragged")}onDrag(e){const t=window.innerWidth-e,i=Math.min(Math.max(t,this.#q),this.#D);this.elementsWindow.resize(i)}get elementsWindow(){return this.#F||(this.#F=document.querySelector("alchemy-elements-window")),this.#F}get previewWindow(){return this.#$||(this.#$=document.getElementById("alchemy_preview_window")),this.#$}}customElements.define("alchemy-elements-window-handle",ue);class pe extends HTMLElement{connectedCallback(){this.deleteLink=this.querySelector(".remove_file_link"),this.fileIcon=this.querySelector(".file_icon"),this.fileName=this.querySelector(".file_name"),this.formFieldId=this.deleteLink?.dataset.formFieldId,this.formField=this.querySelector(`#${this.formFieldId}`),this.deleteLink?.addEventListener("click",this)}disconnectedCallback(){this.deleteLink?.removeEventListener("click",this)}handleEvent(e){"click"===e.type&&this.removeFile(),e.stopPropagation()}removeFile(){this.formField.value="",this.fileIcon.innerHTML="",this.fileName.innerHTML="",this.deleteLink?.classList.add("hidden"),this.closest("alchemy-element-editor").setDirty(this.formField)}}customElements.define("alchemy-file-editor",pe);class me extends HTMLElement{#M;#B=null;#P=null;connectedCallback(){this.hotkey&&key(this.hotkey,this.#z),this.#B=this.filterField,this.#B.addEventListener("keyup",this.#H),this.#B.addEventListener("focus",this.#R),this.#P=this.clearButton,this.#P.addEventListener("click",this.#N),key("esc","list_filter",this.#j)}disconnectedCallback(){clearTimeout(this.#M),this.#B?.removeEventListener("keyup",this.#H),this.#B?.removeEventListener("focus",this.#R),this.#B=null,this.#P?.removeEventListener("click",this.#N),this.#P=null,this.hotkey&&key.unbind(this.hotkey),key.unbind("esc","list_filter")}filter(e){""===e&&(this.clearButton.style.visibility="hidden");const t=[],i=new Set,s=e.toLowerCase();this.items.forEach(e=>{const n=e.getAttribute(this.nameAttribute)?.toLowerCase();if(-1!==n.indexOf(s)){t.push(e),i.add(e);let s=e.parentElement?.closest(this.itemsSelector);for(;s;)i.add(s),s=s.parentElement?.closest(this.itemsSelector)}}),this.items.forEach(e=>{e.classList.toggle("hidden",!i.has(e))}),1===t.length&&t[0].scrollIntoView({behavior:"smooth",block:"nearest"})}clear(){this.filterField.value="",this.clearButton.style.visibility="hidden",this.items.forEach(e=>e.classList.remove("hidden"))}get nameAttribute(){return this.getAttribute("name-attribute")||"name"}get clearButton(){return this.querySelector('button[type="button"]')}get filterField(){return this.querySelector('input[type="text"]')}get items(){return document.querySelectorAll(this.itemsSelector)}get itemsSelector(){return this.getAttribute("items-selector")}get debounceTime(){return parseInt(this.getAttribute("debounce-time"))||150}get hotkey(){return this.getAttribute("hotkey")}#z=()=>(this.filterField.focus(),!1);#H=()=>{clearTimeout(this.#M),this.#M=setTimeout(()=>{const e=this.filterField.value;this.clearButton.style.visibility=e?"visible":"hidden",this.filter(e)},this.debounceTime)};#R=()=>key.setScope("list_filter");#N=e=>{e.preventDefault(),this.clear()};#j=()=>{this.clear(),this.filterField.blur()}}customElements.define("alchemy-list-filter",me);class ge extends HTMLElement{#V=null;handleEvent(e){"click"===e.type&&this.dismiss()}connectedCallback(){if(!this.querySelector(":scope > alchemy-icon")){const e=this.dismissable&&"error"===this.type?'<alchemy-icon name="close"></alchemy-icon>':"";this.insertAdjacentHTML("afterbegin",`<alchemy-icon name="${this.iconName}"></alchemy-icon>${e}`)}(this.dismissable||"error"===this.type)&&this.addEventListener("click",this),this.dismissable&&"error"!==this.type&&(this.#V=setTimeout(()=>{this.dismiss()},this.dismissDelay))}disconnectedCallback(){null!==this.#V&&(clearTimeout(this.#V),this.#V=null)}dismiss(){this.addEventListener("transitionend",()=>this.remove()),this.classList.add("dismissed")}get dismissable(){return this.hasAttribute("dismissable")}get icon(){return this.getAttribute("icon")}get type(){return this.getAttribute("type")||"notice"}get dismissDelay(){return parseInt(this.noticesWrapper?.dataset.autoDismissDelay||5e3)}get iconName(){switch(this.icon||this.type){case"warning":case"warn":case"alert":return"alert";case"notice":return"check";case"info":case"hint":return"information";case"error":return"bug";default:return this.type}}get noticesWrapper(){return this.closest("#flash_notices")}}customElements.define("alchemy-message",ge);class fe extends HTMLElement{connectedCallback(){T(this.message,this.getAttribute("type")||"notice"),this.remove()}get message(){return this.getAttribute("message")||this.innerHTML}}customElements.define("alchemy-growl",fe);class ve extends HTMLElement{static get observedAttributes(){return["name","size","icon-style"]}constructor(){super(),this.spriteUrl=document.querySelector('link[rel="preload"][as="image"]').getAttribute("href")}connectedCallback(){this.render()}attributeChangedCallback(){this.render()}render(){const e=this.size?` icon--${this.size}`:"";this.innerHTML=`<svg class="icon${e}"><use href="${this.spriteUrl}#ri-${this.iconName}${this.style}" /></svg>`}set name(e){this.setAttribute("name",e)}get iconName(){return this.getAttribute("name")}get size(){return this.getAttribute("size")}get style(){const e=this.getAttribute("icon-style");switch(e){case"none":return"";case null:return"-line";default:return`-${e}`}}}customElements.define("alchemy-icon",ve);class ye extends HTMLDetailsElement{#W="Alchemy.expanded_ingredient_groups";connectedCallback(){this.addEventListener("toggle",this),this.isInLocalStorage&&(this.open=!0)}disconnectedCallback(){this.removeEventListener("toggle",this)}handleEvent(){let e=this.localStorageItem;this.open?(this.toggleIcon.name="arrow-down-s",this.isInLocalStorage||e.push(this.id)):(this.toggleIcon.name="arrow-right-s",e=e.filter(e=>e!==this.id)),localStorage.setItem(this.#W,JSON.stringify(e))}get isInLocalStorage(){return this.localStorageItem.includes(this.id)}get localStorageItem(){const e=localStorage.getItem(this.#W);if(!e)return[];try{return JSON.parse(e)}catch(e){return console.error(e),[]}}get toggleIcon(){return this.querySelector("alchemy-icon")}}customElements.define("alchemy-ingredient-group",ye,{extends:"details"});class be extends HTMLButtonElement{connectedCallback(){this.addEventListener("click",this),this.classList.add("icon_button"),this.setAttribute("type","button"),this.innerHTML='<alchemy-icon name="link" icon-style="m"></alchemy-icon>'}handleEvent(e){new Alchemy.LinkDialog({url:this.linkUrl,title:this.linkTitle,target:this.linkTarget,type:this.linkClass}).open().then(e=>this.setLink(e)),e.preventDefault()}setLink(e){""===e.url?(this.classList.remove("linked"),this.dispatchEvent(new CustomEvent("alchemy:unlink",{bubbles:!0}))):(this.classList.add("linked"),this.dispatchEvent(new CustomEvent("alchemy:link",{bubbles:!0,detail:e})))}get linkUrl(){return this.linkButtons.linkUrlField.value}get linkTitle(){return this.linkButtons.linkTitleField.value}get linkTarget(){return this.linkButtons.linkTargetField.value}get linkClass(){return this.linkButtons.linkClassField.value}get linkButtons(){return this.closest("alchemy-link-buttons")}}customElements.define("alchemy-link-button",be,{extends:"button"});class we extends HTMLButtonElement{connectedCallback(){this.addEventListener("click",this),this.classList.add("icon_button"),this.setAttribute("type","button"),this.linked=this.linked,this.innerHTML='<alchemy-icon name="link-unlink" icon-style="m"></alchemy-icon>'}handleEvent(e){this.linked&&(this.linked=!1,this.blur(),this.dispatchEvent(new CustomEvent("alchemy:unlink",{bubbles:!0}))),e.preventDefault()}set linked(e){e?(this.classList.replace("disabled","linked"),this.removeAttribute("tabindex")):(this.classList.replace("linked","disabled"),this.setAttribute("tabindex","-1"))}get linked(){return this.classList.contains("linked")}}customElements.define("alchemy-unlink-button",we,{extends:"button"});class Ee extends HTMLElement{connectedCallback(){this.addEventListener("alchemy:link",this),this.addEventListener("alchemy:unlink",this)}disconnectedCallback(){this.removeEventListener("alchemy:link",this),this.removeEventListener("alchemy:unlink",this)}handleEvent(e){switch(e.type){case"alchemy:link":this.setLink(e.detail);break;case"alchemy:unlink":this.removeLink()}e.stopPropagation()}setLink(e){this.linkUrlField.value=e.url,this.linkUrlField.dispatchEvent(new Event("change")),this.linkTitleField.value=e.title,this.linkClassField.value=e.type,this.linkTargetField.value=e.target,this.unlinkButton.linked=!0,this.setElementDirty()}removeLink(){this.linkUrlField.value="",this.linkUrlField.dispatchEvent(new Event("change")),this.linkTitleField.value="",this.linkClassField.value="",this.linkTargetField.value="",this.linkButton.classList.remove("linked"),this.unlinkButton.linked=!1,this.setElementDirty()}setElementDirty(){this.elementEditor.setDirty(this)}get linkButton(){return this.querySelector('[is="alchemy-link-button"]')}get unlinkButton(){return this.querySelector('[is="alchemy-unlink-button"]')}get ingredientEditor(){const e=this.dataset.ingredientId;return this.parentElement.closest(`[data-ingredient-id='${e}']`)}get elementEditor(){return this.closest("alchemy-element-editor")}get linkUrlField(){return this.ingredientEditor.querySelector("[data-link-value]")}get linkTitleField(){return this.ingredientEditor.querySelector("[data-link-title]")}get linkTargetField(){return this.ingredientEditor.querySelector("[data-link-target]")}get linkClassField(){return this.ingredientEditor.querySelector("[data-link-class]")}}customElements.define("alchemy-link-buttons",Ee);function ke(e){let t=0===e?0:Math.floor(Math.log(e)/Math.log(1024));return t>3&&(t=3),(e/Math.pow(1024,t)).toFixed(2)+" "+["B","kB","MB","GB"][t]}customElements.define("alchemy-node-select",class extends z{_searchQuery(e,t){return{filter:{name_or_page_name_cont:e,...JSON.parse(this.queryParams)},page:t}}_renderResult(e){return this._renderListEntry(e)}_renderListEntry(e,t){const i=e.ancestors.map(e=>B(e.name)),s='<alchemy-icon name="arrow-right-s"></alchemy-icon>';return`\n <div class="node-select--node">\n <alchemy-icon name="menu-2"></alchemy-icon>\n <div class="node-select--node-display_name">\n <span class="node-select--node-ancestors">\n ${i.length>0?i.join(s)+s:""}\n </span>\n <span class="node-select--node-name">\n ${this._hightlightTerm(e.name,t)}\n </span>\n </div>\n <div class="node-select--node-url">\n ${B(e.url||"")}\n </div>\n </div>\n `}});class _e extends HTMLElement{file=null;request=null;progressEventLoaded=0;progressEventTotal=0;#U=!0;#K=0;#J=void 0;#G="";connectedCallback(){if(this.innerHTML=`\n <sl-progress-bar value="${this.value}"></sl-progress-bar>\n <div class="description">\n <span class="file-name">${this.file?.name}</span>\n <span class="loaded-size">${this.loadedSize}</span>\n <span class="error-message">${this.errorMessage}</span>\n </div>\n <sl-tooltip content="${d("Abort upload")}">\n <button class="icon_button" aria-label="${d("Abort upload")}">\n <alchemy-icon name="close"></alchemy-icon>\n </button>\n </sl-tooltip>\n `,this.querySelector("button").addEventListener("click",()=>this.cancel()),this.file?.type.includes("image")){const e=new FileReader;e.readAsDataURL(this.file),e.addEventListener("load",()=>{const t=new Image;t.src=e.result,this.prepend(t)})}}initialize(e,t){this.file=e,this.request=t,this.progressEventTotal=e?e.size:0,this.status="in-progress",this.#Q(),this.#X()}cancel(){this.finished||(this.status="canceled",this.request?.abort(),this.dispatchCustomEvent("FileUpload.Change"))}dispatchCustomEvent(e){this.dispatchEvent(new CustomEvent(`Alchemy.${e}`,{bubbles:!0}))}#Q(){const e=Alchemy.uploader_defaults,t=e.file_size_limit*Math.pow(1024,2);let i;this.file?.size>t&&(i=d("Uploaded bytes exceed file size"));const s=this.file?.type.includes("image")?e.allowed_filetypes.alchemy_pictures:e.allowed_filetypes.alchemy_attachments,n=this.file?.name.match(/\.([^.]+)$/)?.[1].toLowerCase();s.includes("*")||s.some(e=>e.toLowerCase()===n)||(i=d("File type not allowed")),i&&(this.valid=!1,this.errorMessage=i)}#X(){this.request&&(this.request.upload.onprogress=e=>{this.progressEvent=e},this.request.onload=()=>{this.request.status<400?(this.status="successful",T(this.responseMessage)):(this.status="failed",this.errorMessage=this.responseMessage),this.dispatchCustomEvent("FileUpload.Change")},this.request.onerror=()=>{this.errorMessage=d("An error occurred during the transaction")})}get active(){return this.valid&&"canceled"!==this.status}get errorMessage(){return this.#G||""}set errorMessage(e){this.#G=e;const t=this.querySelector(".error-message");t&&(t.textContent=e),T(e,"error")}get finished(){return["canceled","successful","failed"].includes(this.status)}get loadedSize(){return`${ke(this.progressEventLoaded)} / ${ke(this.progressEventTotal)}`}get progressElement(){return this.querySelector("sl-progress-bar")}set progressEvent(e){this.progressEventLoaded=e.loaded,this.progressEventTotal=e.total,this.value=Math.round(e.loaded/e.total*100),this.querySelector(".loaded-size").textContent=this.loadedSize}get responseMessage(){try{return JSON.parse(this.request.responseText).message}catch(e){return`${this.request.status}: ${this.request.statusText}`}}get status(){return this.#J}set status(e){this.#J=e,this.className=e,this.progressElement?.toggleAttribute("indeterminate","upload-finished"===e)}get valid(){return this.#U}set valid(e){this.#U=e,this.classList.toggle("invalid",!e)}get value(){return this.#K}set value(e){this.#K=e,this.progressElement&&(this.progressElement.value=e),100===e&&(this.status="upload-finished"),this.dispatchCustomEvent("FileUpload.Change")}}customElements.define("alchemy-file-upload",_e);class Le extends HTMLElement{fileCount=0;#Y=[];#Z=d("Cancel all uploads");#ee=null;#x=!1;#te=()=>this.#ie();connectedCallback(){var e,t;this.innerHTML=(e=this.#Z,t=this.fileCount,`\n <sl-progress-bar value="0"></sl-progress-bar>\n <div class="overall-progress-value">\n <span class="value-text"></span>\n\n <sl-tooltip content="${e}">\n <button class="icon_button" aria-label="${e}">\n <alchemy-icon name="close"></alchemy-icon>\n </button>\n </sl-tooltip>\n </div>\n <div class="single-uploads" style="--progress-columns: ${t>3?3:t}"></div>\n <div class="overall-upload-value value-text"></div>\n`),this.visible=!0,this.#ee=this.querySelector("button"),this.#ee.addEventListener("click",()=>{this.finished?this.onComplete(this.status):this.cancel()}),this.#Y.forEach(e=>{this.querySelector(".single-uploads").append(e)}),this.#ie(),this.addEventListener("Alchemy.FileUpload.Change",this.#te)}disconnectedCallback(){this.removeEventListener("Alchemy.FileUpload.Change",this.#te)}initialize(e=[]){this.#Y=e,this.fileCount=e.length}cancel(){this.#se().forEach(e=>{e.cancel()}),this.#ne()}onComplete(e){}#se(){return this.#Y.filter(e=>e.active)}#ne(){this.#Z=d("Close"),this.#ee.ariaLabel=this.#Z,this.#ee.parentElement.content=this.#Z}#oe(e){return this.#se().reduce((t,i)=>i[e]+t,0)}#ie(){const e=this.status;this.className=e,this.progressElement.value=this.totalProgress,this.progressElement.toggleAttribute("indeterminate","upload-finished"===e),this.querySelector(".overall-progress-value > span").textContent=this.overallProgressValue,this.querySelector(".overall-upload-value").textContent=this.overallUploadSize,this.finished?(this.#ne(),this.onComplete(e)):this.visible=!0}get finished(){return this.#se().every(e=>e.finished)}get overallUploadSize(){this.#se().filter(e=>e.value>=100).length;return this.totalProgress,this.#se().length,`${ke(this.#oe("progressEventLoaded"))} / ${ke(this.#oe("progressEventTotal"))}`}get overallProgressValue(){const e=this.#se().filter(e=>e.value>=100).length;return`${this.totalProgress}% (${e} / ${this.#se().length})`}get progressElement(){return this.querySelector("sl-progress-bar")}get status(){const e=this.#se().map(e=>e.className);return e.includes("failed")?"failed":0===e.length?"canceled":e.every(t=>t===e[0])?e[0]:"in-progress"}get totalProgress(){const e=this.#se().reduce((e,t)=>e+t.file.size,0);let t=Math.ceil(this.#se().reduce((t,i)=>{const s=i.file.size/e;return i.value*s+t},0));return t>100&&(t=100),t}get visible(){return this.#x}set visible(e){this.classList.toggle("visible",e),this.#x=e}}customElements.define("alchemy-upload-progress",Le);class Se extends HTMLElement{#re=null;#le=!1;connectedCallback(){this.fileInput.addEventListener("change",this.#ae),this.dropzone&&this.#ce(),this.addEventListener("Alchemy.upload.successful",this)}disconnectedCallback(){this.fileInput?.removeEventListener("change",this.#ae),this.#re&&(this.#re.removeEventListener("dragleave",this.#de),this.#re.removeEventListener("drop",this.#he),this.#re.removeEventListener("dragover",this.#ue),this.#re=null)}handleEvent(e){if("Alchemy.upload.successful"===e.type)this.#pe()}#ae=e=>{this.uploadFiles(Array.from(e.target.files))};#me=e=>{this.#le!==e&&(this.#le=e,this.#re.classList.toggle("dragover"))};#de=()=>this.#me(!1);#he=async e=>{e.preventDefault(),this.#me(!1);const t=[...e.dataTransfer.items].map(e=>e.getAsFile());this.uploadFiles(t)};#ue=e=>{e.preventDefault(),this.#me(!0)};#pe(){setTimeout(()=>{const e=this.redirectUrl,t=this.closest("turbo-frame");this.uploadProgress.visible=!1,e&&(t?(t.setAttribute("src",e),t.reload()):Turbo.visit(e))},750)}#ce(){this.#re=document.querySelector(this.dropzone),this.#re&&(this.#re.addEventListener("dragleave",this.#de),this.#re.addEventListener("drop",this.#he),this.#re.addEventListener("dragover",this.#ue))}uploadFiles(e){let t=0;const i=e.map(e=>{const i=new XMLHttpRequest,s=new _e;return s.initialize(e,i),Alchemy.uploader_defaults.upload_limit-1<t?(s.valid=!1,s.errorMessage=d("Maximum number of files exceeded")):s.valid&&(t++,this.#ge(i,e)),s});this.#fe(i)}#ge(e,t){const i=this.querySelector("form"),s=new FormData(i);s.set(this.fileInput.name,t),e.open("POST",i.action),e.setRequestHeader("X-CSRF-Token",Z()),e.setRequestHeader("X-Requested-With","XMLHttpRequest"),e.setRequestHeader("Accept","application/json"),e.send(s)}#fe(e){this.uploadProgress&&(this.uploadProgress.cancel(),document.body.removeChild(this.uploadProgress)),this.uploadProgress=new Le,this.uploadProgress.initialize(e),this.uploadProgress.onComplete=e=>{this.dispatchEvent(new CustomEvent(`Alchemy.upload.${e}`,{bubbles:!0}))},document.body.append(this.uploadProgress)}get dropzone(){return this.getAttribute("dropzone")}get fileInput(){return this.querySelector("input[type='file']")}get redirectUrl(){return this.getAttribute("redirect-url")}}customElements.define("alchemy-uploader",Se);class xe extends HTMLElement{connectedCallback(){this.innerHTML=`\n <alchemy-spinner></alchemy-spinner>\n <div id="overlay_text_box">\n <span id="overlay_text">${this.getAttribute("text")??""}</span>\n </div>\n `}set show(e){this.classList.toggle("visible",e)}}customElements.define("alchemy-overlay",xe);const Ce="BUTTON";class Ae extends HTMLElement{connectedCallback(){this.pageId=this.getAttribute("page-id"),this.folded=this.hasAttribute("folded"),this.folderButton?.addEventListener("click",this)}disconnectedCallback(){this.folderButton?.removeEventListener("click",this)}async handleEvent(e){"click"===e.type&&await this.handleFolderClick(e)}async handleFolderClick(e){e.preventDefault(),e.stopPropagation();const t=e.currentTarget;t.innerHTML="";const i=new g("small");i.spin(t);try{await te(Alchemy.routes.fold_admin_page_path(this.pageId),null,"text/vnd.turbo-stream.html"),this.folded=!this.folded,this.toggleAttribute("folded",this.folded),this.toggleChildren(),this.updateFolderIcon()}catch(e){T(e.message||e,"error"),this.updateFolderIcon()}finally{i.stop()}}toggleChildren(){const e=this.querySelector(`#page_${this.pageId}_children`);e&&e.classList.toggle("hidden",this.folded)}updateFolderIcon(){if(this.folderButton){const e=this.folded?"arrow-right-s":"arrow-down-s";this.folderButton.innerHTML=`<alchemy-icon name="${e}"></alchemy-icon>`}}updateFolderButton(){const e=this.querySelector(".page_folder");if(!e)return;const t=this.hasChildren||this.folded;if(t&&"SPAN"===e.tagName){const t=this.folded?"arrow-right-s":"arrow-down-s";e.outerHTML=`<button class="page_folder icon_button">\n <alchemy-icon name="${t}"></alchemy-icon>\n </button>`,this.folderButton?.addEventListener("click",this)}else t||e.tagName!==Ce?t&&e.tagName===Ce&&this.updateFolderIcon():e.outerHTML='<span class="page_folder"></span>'}get hasChildren(){const e=this.querySelector(`#page_${this.pageId}_children`);return!!e&&e.querySelectorAll(":scope > alchemy-page-node").length>0}get folderButton(){return this.querySelector("button.page_folder")}}customElements.define("alchemy-page-node",Ae);class Te extends HTMLElement{connectedCallback(){this.publicField?.addEventListener("click",this.#ve)}disconnectedCallback(){this.publicField?.removeEventListener("click",this.#ve)}#ve=e=>{const t=e.target,i=new Date,s=new Date(i.getTime()-6e4*i.getTimezoneOffset()).toISOString();t.checked?(this.publicationDateFields.classList.remove("hidden"),this.publicOnPicker.value=s.substring(0,s.indexOf("T")+6)):(this.publicationDateFields.classList.add("hidden"),this.publicOnPicker.value=""),this.publicUntilPicker.value=""};get publicField(){return this.querySelector("#page_public")}get publicOnPicker(){return this.querySelector("input#page_public_on")}get publicUntilPicker(){return this.querySelector("input#page_public_until")}get publicationDateFields(){return this.querySelector(".page-publication-date-fields")}}customElements.define("alchemy-page-publication-fields",Te);class Oe extends z{get pageId(){return this.selection?JSON.parse(this.selection).id:void 0}_searchQuery(e,t){return{q:{name_cont:e,...JSON.parse(this.queryParams)},page:t}}_parseResponse(e){const t=e.meta;return{results:e.pages,more:t.page*t.per_page<t.total_count}}_renderResult(e){return B(e.text||e.name)}_renderListEntry(e,t){return`\n <div class="page-select--page">\n <div class="page-select--top">\n <alchemy-icon name="file-3"></alchemy-icon>\n <span class="page-select--page-name">${this._hightlightTerm(e.name,t)}</span>\n <span class="page-select--site-name">${B(e.site.name)}</span>\n </div>\n <div class="page-select--bottom">\n <span class="page-select--page-urlname">${B(e.url_path)}</span>\n <span class="page-select--language-code">${B(e.language_code)}</span>\n </div>\n </div>\n `}}customElements.define("alchemy-page-select",Oe);class Ie extends HTMLElement{connectedCallback(){this.addEventListener("change",this)}disconnectedCallback(){this.removeEventListener("change",this)}handleEvent(e){if("change"===e.type)this.onChange()}onChange(){const e=new URL(this.getAttribute("url")),t=this.querySelector("select");e.searchParams.set("language_id",t.value),Turbo.visit(e,{frame:"picture_descriptions"})}}customElements.define("alchemy-picture-description-select",Ie);class Fe extends HTMLElement{connectedCallback(){this.cropFromField=this.querySelector("[data-crop-from]"),this.cropSizeField=this.querySelector("[data-crop-size]"),this.pictureIdField=this.querySelector("[data-picture-id]"),this.targetSizeField=this.querySelector("[data-target-size]"),this.imageCropperField=this.querySelector("[data-image-cropper]"),this.image=this.querySelector("img"),this.pictureThumbnail=this.querySelector("alchemy-picture-thumbnail"),this.deleteButton=this.querySelector(".picture_tool.delete"),this.cropLink=this.querySelector(".crop_link"),this.targetSize=this.targetSizeField.dataset.targetSize,this.pictureId=this.pictureIdField.value,this.update=function(e,t){let i;return function(...s){const n=this;clearTimeout(i),i=setTimeout(()=>e.apply(n,s),t)}}(()=>{this.updateImage(),this.updateCropLink()},125),this.deleteButton?.addEventListener("click",this.removeImage),this.observer=new MutationObserver(this.mutationCallback),this.observer.observe(this.cropFromField,{attributes:!0}),this.observer.observe(this.cropSizeField,{attributes:!0}),this.observer.observe(this.pictureIdField,{attributes:!0})}disconnectedCallback(){this.observer.disconnect()}mutationCallback=e=>{for(const t of e)"pictureId"in t.target.dataset&&(this.cropFromField.value="",this.cropSizeField.value="",this.pictureId=t.target.value),this.update()};updateImage(){this.pictureId&&(this.pictureThumbnail.loading=!0,ee(Alchemy.routes.url_admin_picture_path(this.pictureId),{crop:this.imageCropperEnabled,crop_from:this.cropFrom,crop_size:this.cropSize,flatten:!0,size:"160x120"}).then(({data:e})=>{this.pictureThumbnail.src=e.url,this.pictureThumbnail.image.alt=e.alt,this.pictureThumbnail.image.title=e.title,this.setElementDirty()}).catch(e=>{console.error(e.message||e),T(e.message||e,"error")}))}removeImage=()=>{this.pictureThumbnail.innerHTML='<alchemy-icon name="image" size="xl"></alchemy-icon>',this.pictureIdField.value="",this.image=null,this.cropLink.classList.add("disabled"),this.setElementDirty()};setElementDirty(){this.closest(".element-editor").setDirty(this)}updateCropLink(){this.pictureId&&this.imageCropperEnabled&&(this.cropLink.classList.remove("disabled"),this.cropLink.href.match(/(picture_id=)\d+/)?this.cropLink.href=this.cropLink.href.replace(/(picture_id=)\d+/,"$1"+this.pictureId):this.cropLink.href=this.cropLink.href+`&picture_id=${this.pictureId}`)}get cropFrom(){return""===this.cropFromField.value?this.defaultCropFrom.join("x"):this.cropFromField.value}get cropSize(){return""===this.cropSizeField.value?this.defaultCropSize.join("x"):this.cropSizeField.value}get defaultCropSize(){if(!this.imageCropperEnabled)return[];const e=this.targetSize.split("x").map(e=>parseInt(e)),t=(i=e[0]/this.imageFileWidth,s=e[1]/this.imageFileHeight,i>=s?i:s);var i,s;return[Math.round(e[0]/t),Math.round(e[1]/t)]}get defaultCropFrom(){if(!this.imageCropperEnabled)return[];const e=this.defaultCropSize;return[Math.round((this.imageFileWidth-e[0])/2),Math.round((this.imageFileHeight-e[1])/2)]}get imageFileWidth(){return parseInt(this.pictureIdField.dataset.imageFileWidth)}get imageFileHeight(){return parseInt(this.pictureIdField.dataset.imageFileHeight)}get imageCropperEnabled(){return"true"===this.targetSizeField.dataset.imageCropper}}customElements.define("alchemy-picture-editor",Fe);class $e extends HTMLElement{constructor(){super(),this.spinner=new g("small")}handleEvent(e){switch(e.type){case"load":this.#ye();break;case"error":this.#be(e)}}connectedCallback(){this.classList.add("thumbnail_background"),this.src&&!this.image&&this.start(),this.#we()}disconnectedCallback(){this.image?.removeEventListener("load",this),this.image?.removeEventListener("error",this),this.stop()}createImage(e=this.src,t=this.name){this.image=new Image,this.image.src=e,t&&(this.image.alt=t)}start(e){this.createImage(e),this.image.addEventListener("load",this),this.image.addEventListener("error",this),this.load()}load(){this.image?.complete||(this.setAttribute("loading","loading"),this.innerHTML="",this.spinner.spin(this))}stop(){this.classList.remove("loading"),this.spinner.stop()}#ye(){this.spinner.stop(),this.removeAttribute("loading")}#be(e){const t=`Could not load ${this.image.src}`,i=this.closest(".ingredient-editor");this.spinner.stop(),this.innerHTML=`\n <sl-tooltip content="${t}" ${i?"hoist":""}>\n <alchemy-icon name="alert" class="error"></alchemy-icon>\n </sl-tooltip>\n `,console.error(t,e)}#we(){this.image?.complete?this.replaceChildren(this.image):this.image&&this.append(this.image)}set loading(e){e?this.load():this.stop()}set src(e){this.start(e),this.#we()}get name(){return this.getAttribute("name")}get src(){return this.getAttribute("src")}}customElements.define("alchemy-picture-thumbnail",$e);class qe extends HTMLElement{connectedCallback(){this.addEventListener("submit",this),document.addEventListener("alchemy:page-dirty",this)}disconnectedCallback(){this.removeEventListener("submit",this),document.removeEventListener("alchemy:page-dirty",this)}handleEvent(e){switch(e.type){case"alchemy:page-dirty":this.markDirty(e.detail);break;case"submit":this.button.loading=!0}}markDirty(e){this.button.variant="primary",this.button.disabled=!1,this.tooltip.content=e.tooltip}get button(){return this.querySelector("sl-button")}get tooltip(){return this.querySelector("sl-tooltip")}}function De(e,t){e.split(/\s+/).forEach(e=>{t(e)})}customElements.define("alchemy-publish-page-button",qe);class Me{constructor(){this._events={}}on(e,t){De(e,e=>{const i=this._events[e]||[];i.push(t),this._events[e]=i})}off(e,t){var i=arguments.length;0!==i?De(e,e=>{if(1===i)return void delete this._events[e];const s=this._events[e];void 0!==s&&(s.splice(s.indexOf(t),1),this._events[e]=s)}):this._events={}}trigger(e,...t){var i=this;De(e,e=>{const s=i._events[e];void 0!==s&&s.forEach(e=>{e.apply(i,t)})})}}const Be=e=>(e=e.filter(Boolean)).length<2?e[0]||"":1==Ne(e)?"["+e.join("")+"]":"(?:"+e.join("|")+")",Pe=e=>{if(!He(e))return e.join("");let t="",i=0;const s=()=>{i>1&&(t+="{"+i+"}")};return e.forEach((n,o)=>{n!==e[o-1]?(s(),t+=n,i=1):i++}),s(),t},ze=e=>{let t=Array.from(e);return Be(t)},He=e=>new Set(e).size!==e.length,Re=e=>(e+"").replace(/([\$\(\)\*\+\.\?\[\]\^\{\|\}\\])/gu,"\\$1"),Ne=e=>e.reduce((e,t)=>Math.max(e,je(t)),0),je=e=>Array.from(e).length,Ve=e=>{if(1===e.length)return[[e]];let t=[];const i=e.substring(1);return Ve(i).forEach(function(i){let s=i.slice(0);s[0]=e.charAt(0)+s[0],t.push(s),s=i.slice(0),s.unshift(e.charAt(0)),t.push(s)}),t},We=[[0,65535]];let Ue,Ke;const Je={},Ge={"/":"⁄∕",0:"߀",a:"ⱥɐɑ",aa:"ꜳ",ae:"æǽǣ",ao:"ꜵ",au:"ꜷ",av:"ꜹꜻ",ay:"ꜽ",b:"ƀɓƃ",c:"ꜿƈȼↄ",d:"đɗɖᴅƌꮷԁɦ",e:"ɛǝᴇɇ",f:"ꝼƒ",g:"ǥɠꞡᵹꝿɢ",h:"ħⱨⱶɥ",i:"ɨı",j:"ɉȷ",k:"ƙⱪꝁꝃꝅꞣ",l:"łƚɫⱡꝉꝇꞁɭ",m:"ɱɯϻ",n:"ꞥƞɲꞑᴎлԉ",o:"øǿɔɵꝋꝍᴑ",oe:"œ",oi:"ƣ",oo:"ꝏ",ou:"ȣ",p:"ƥᵽꝑꝓꝕρ",q:"ꝗꝙɋ",r:"ɍɽꝛꞧꞃ",s:"ßȿꞩꞅʂ",t:"ŧƭʈⱦꞇ",th:"þ",tz:"ꜩ",u:"ʉ",v:"ʋꝟʌ",vy:"ꝡ",w:"ⱳ",y:"ƴɏỿ",z:"ƶȥɀⱬꝣ",hv:"ƕ"};for(let e in Ge){let t=Ge[e]||"";for(let i=0;i<t.length;i++){let s=t.substring(i,i+1);Je[s]=e}}const Qe=new RegExp(Object.keys(Je).join("|")+"|[̀-ͯ·ʾʼ]","gu"),Xe=(e,t="NFKD")=>e.normalize(t),Ye=e=>Array.from(e).reduce((e,t)=>e+Ze(t),""),Ze=e=>(e=Xe(e).toLowerCase().replace(Qe,e=>Je[e]||""),Xe(e,"NFC"));const et=e=>{const t={},i=(e,i)=>{const s=t[e]||new Set,n=new RegExp("^"+ze(s)+"$","iu");i.match(n)||(s.add(Re(i)),t[e]=s)};for(let t of function*(e){for(const[t,i]of e)for(let e=t;e<=i;e++){let t=String.fromCharCode(e),i=Ye(t);i!=t.toLowerCase()&&(i.length>3||0!=i.length&&(yield{folded:i,composed:t,code_point:e}))}}(e))i(t.folded,t.folded),i(t.folded,t.composed);return t},tt=e=>{const t=et(e),i={};let s=[];for(let e in t){let n=t[e];n&&(i[e]=ze(n)),e.length>1&&s.push(Re(e))}s.sort((e,t)=>t.length-e.length);const n=Be(s);return Ke=new RegExp("^"+n,"u"),i},it=(e,t=1)=>(t=Math.max(t,e.length-1),Be(Ve(e).map(e=>((e,t=1)=>{let i=0;return e=e.map(e=>(Ue[e]&&(i+=e.length),Ue[e]||e)),i>=t?Pe(e):""})(e,t)))),st=(e,t=!0)=>{let i=e.length>1?1:0;return Be(e.map(e=>{let s=[];const n=t?e.length():e.length()-1;for(let t=0;t<n;t++)s.push(it(e.substrs[t]||"",i));return Pe(s)}))},nt=(e,t)=>{for(const i of t){if(i.start!=e.start||i.end!=e.end)continue;if(i.substrs.join("")!==e.substrs.join(""))continue;let t=e.parts;const s=e=>{for(const i of t){if(i.start===e.start&&i.substr===e.substr)return!1;if(1!=e.length&&1!=i.length){if(e.start<i.start&&e.end>i.start)return!0;if(i.start<e.start&&i.end>e.start)return!0}}return!1};if(!(i.parts.filter(s).length>0))return!0}return!1};class ot{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,t){let i=new ot,s=JSON.parse(JSON.stringify(this.parts)),n=s.pop();for(const e of s)i.add(e);let o=t.substr.substring(0,e-n.start),r=o.length;return i.add({start:n.start,end:n.start+r,length:r,substr:o}),i}}const rt=e=>{void 0===Ue&&(Ue=tt(We)),e=Ye(e);let t="",i=[new ot];for(let s=0;s<e.length;s++){let n=e.substring(s).match(Ke);const o=e.substring(s,s+1),r=n?n[0]:null;let l=[],a=new Set;for(const e of i){const t=e.last();if(!t||1==t.length||t.end<=s)if(r){const t=r.length;e.add({start:s,end:s+t,length:t,substr:r}),a.add("1")}else e.add({start:s,end:s+1,length:1,substr:o}),a.add("2");else if(r){let i=e.clone(s,t);const n=r.length;i.add({start:s,end:s+n,length:n,substr:r}),l.push(i)}else a.add("3")}if(l.length>0){l=l.sort((e,t)=>e.length()-t.length());for(let e of l)nt(e,i)||i.push(e)}else if(s>0&&1==a.size&&!a.has("3")){t+=st(i,!1);let e=new ot;const s=i[0];s&&e.add(s.last()),i=[e]}}return t+=st(i,!0),t},lt=(e,t)=>{if(e)return e[t]},at=(e,t)=>{if(e){for(var i,s=t.split(".");(i=s.shift())&&(e=e[i]););return e}},ct=(e,t,i)=>{var s,n;return e?(e+="",null==t.regex||-1===(n=e.search(t.regex))?0:(s=t.string.length/e.length,0===n&&(s+=.5),s*i)):0},dt=(e,t)=>{var i=e[t];if("function"==typeof i)return i;i&&!Array.isArray(i)&&(e[t]=[i])},ht=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},ut=(e,t)=>"number"==typeof e&&"number"==typeof t?e>t?1:e<t?-1:0:(e=Ye(e+"").toLowerCase())>(t=Ye(t+"").toLowerCase())?1:t>e?-1:0;class pt{items;settings;constructor(e,t){this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,i){if(!e||!e.length)return[];const s=[],n=e.split(/\s+/);var o;return i&&(o=new RegExp("^("+Object.keys(i).map(Re).join("|")+"):(.*)$")),n.forEach(e=>{let i,n=null,r=null;o&&(i=e.match(o))&&(n=i[1],e=i[2]),e.length>0&&(r=this.settings.diacritics?rt(e)||null:Re(e),r&&t&&(r="\\b"+r)),s.push({string:e,regex:r?new RegExp(r,"iu"):null,field:n})}),s}getScoreFunction(e,t){var i=this.prepareSearch(e,t);return this._getScoreFunction(i)}_getScoreFunction(e){const t=e.tokens,i=t.length;if(!i)return function(){return 0};const s=e.options.fields,n=e.weights,o=s.length,r=e.getAttrFn;if(!o)return function(){return 1};const l=1===o?function(e,t){const i=s[0].field;return ct(r(t,i),e,n[i]||1)}:function(e,t){var i=0;if(e.field){const s=r(t,e.field);!e.regex&&s?i+=1/o:i+=ct(s,e,1)}else ht(n,(s,n)=>{i+=ct(r(t,n),e,s)});return i/o};return 1===i?function(e){return l(t[0],e)}:"and"===e.options.conjunction?function(e){var s,n=0;for(let i of t){if((s=l(i,e))<=0)return 0;n+=s}return n/i}:function(e){var s=0;return ht(t,t=>{s+=l(t,e)}),s/i}}getSortFunction(e,t){var i=this.prepareSearch(e,t);return this._getSortFunction(i)}_getSortFunction(e){var t,i=[];const s=this,n=e.options,o=!e.query&&n.sort_empty?n.sort_empty:n.sort;if("function"==typeof o)return o.bind(this);const r=function(t,i){return"$score"===t?i.score:e.getAttrFn(s.items[i.id],t)};if(o)for(let t of o)(e.query||"$score"!==t.field)&&i.push(t);if(e.query){t=!0;for(let e of i)if("$score"===e.field){t=!1;break}t&&i.unshift({field:"$score",direction:"desc"})}else i=i.filter(e=>"$score"!==e.field);return i.length?function(e,t){var s,n;for(let o of i){if(n=o.field,s=("desc"===o.direction?-1:1)*ut(r(n,e),r(n,t)))return s}return 0}:null}prepareSearch(e,t){const i={};var s=Object.assign({},t);if(dt(s,"sort"),dt(s,"sort_empty"),s.fields){dt(s,"fields");const e=[];s.fields.forEach(t=>{"string"==typeof t&&(t={field:t,weight:1}),e.push(t),i[t.field]="weight"in t?t.weight:1}),s.fields=e}return{options:s,query:e.toLowerCase().trim(),tokens:this.tokenize(e,s.respect_word_boundaries,i),total:0,items:[],weights:i,getAttrFn:s.nesting?at:lt}}search(e,t){var i,s,n=this;s=this.prepareSearch(e,t),t=s.options,e=s.query;const o=t.score||n._getScoreFunction(s);e.length?ht(n.items,(e,n)=>{i=o(e),(!1===t.filter||i>0)&&s.items.push({score:i,id:n})}):ht(n.items,(e,t)=>{s.items.push({score:1,id:t})});const r=n._getSortFunction(s);return r&&s.items.sort(r),s.total=s.items.length,"number"==typeof t.limit&&(s.items=s.items.slice(0,t.limit)),s}}const mt=e=>null==e?null:gt(e),gt=e=>"boolean"==typeof e?e?"1":"0":e+"",ft=e=>(e+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),vt=(e,t)=>{var i;return function(s,n){var o=this;i&&(o.loading=Math.max(o.loading-1,0),clearTimeout(i)),i=setTimeout(function(){i=null,o.loadedSearches[s]=!0,e.call(o,s,n)},t)}},yt=(e,t,i)=>{var s,n=e.trigger,o={};for(s of(e.trigger=function(){var i=arguments[0];if(-1===t.indexOf(i))return n.apply(e,arguments);o[i]=arguments},i.apply(e,[]),e.trigger=n,t))s in o&&n.apply(e,o[s])},bt=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},wt=(e,t,i,s)=>{e.addEventListener(t,i,s)},Et=(e,t)=>!!t&&(!!t[e]&&1===(t.altKey?1:0)+(t.ctrlKey?1:0)+(t.shiftKey?1:0)+(t.metaKey?1:0)),kt=(e,t)=>{const i=e.getAttribute("id");return i||(e.setAttribute("id",t),t)},_t=e=>e.replace(/[\\"']/g,"\\$&"),Lt=(e,t)=>{t&&e.append(t)},St=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},xt=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(Ct(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},Ct=e=>"string"==typeof e&&e.indexOf("<")>-1,At=(e,t)=>{var i=document.createEvent("HTMLEvents");i.initEvent(t,!0,!1),e.dispatchEvent(i)},Tt=(e,t)=>{Object.assign(e.style,t)},Ot=(e,...t)=>{var i=Ft(t);(e=$t(e)).map(e=>{i.map(t=>{e.classList.add(t)})})},It=(e,...t)=>{var i=Ft(t);(e=$t(e)).map(e=>{i.map(t=>{e.classList.remove(t)})})},Ft=e=>{var t=[];return St(e,e=>{"string"==typeof e&&(e=e.trim().split(/[\t\n\f\r\s]/)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},$t=e=>(Array.isArray(e)||(e=[e]),e),qt=(e,t,i)=>{if(!i||i.contains(e))for(;e&&e.matches;){if(e.matches(t))return e;e=e.parentNode}},Dt=(e,t=0)=>t>0?e[e.length-1]:e[0],Mt=(e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var i=0;e=e.previousElementSibling;)e.matches(t)&&i++;return i},Bt=(e,t)=>{St(t,(t,i)=>{null==t?e.removeAttribute(i):e.setAttribute(i,""+t)})},Pt=(e,t)=>{e.parentNode&&e.parentNode.replaceChild(t,e)},zt=(e,t)=>{if(null===t)return;if("string"==typeof t){if(!t.length)return;t=new RegExp(t,"i")}const i=e=>3===e.nodeType?(e=>{var i=e.data.match(t);if(i&&e.data.length>0){var s=document.createElement("span");s.className="highlight";var n=e.splitText(i.index);n.splitText(i[0].length);var o=n.cloneNode(!0);return s.appendChild(o),Pt(n,s),1}return 0})(e):((e=>{1!==e.nodeType||!e.childNodes||/(script|style)/i.test(e.tagName)||"highlight"===e.className&&"SPAN"===e.tagName||Array.from(e.childNodes).forEach(e=>{i(e)})})(e),0);i(e)},Ht="undefined"!=typeof navigator&&/Mac/.test(navigator.userAgent)?"metaKey":"ctrlKey";var Rt={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,clearAfterSelect:!1,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,controlInput:'<input type="text" autocomplete="off" size="1" />',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(e){return e.length>0},render:{}};function Nt(e,t){var i=Object.assign({},Rt,t),s=i.dataAttr,n=i.labelField,o=i.valueField,r=i.disabledField,l=i.optgroupField,a=i.optgroupLabelField,c=i.optgroupValueField,d=e.tagName.toLowerCase(),h=e.getAttribute("placeholder")||e.getAttribute("data-placeholder");if(!h&&!i.allowEmptyOption){let t=e.querySelector('option[value=""]');t&&(h=t.textContent)}var u={placeholder:h,options:[],optgroups:[],items:[],maxItems:null};return"select"===d?(()=>{var t,d=u.options,h={},p=1;let m=0;var g=e=>{var t=Object.assign({},e.dataset),i=s&&t[s];return"string"==typeof i&&i.length&&(t=Object.assign(t,JSON.parse(i))),t},f=(e,t)=>{var s=mt(e.value);if(null!=s&&(s||i.allowEmptyOption)){if(h.hasOwnProperty(s)){if(t){var a=h[s][l];a?Array.isArray(a)?a.push(t):h[s][l]=[a,t]:h[s][l]=t}}else{var c=g(e);c[n]=c[n]||e.textContent,c[o]=c[o]||s,c[r]=c[r]||e.disabled,c[l]=c[l]||t,c.$option=e,c.$order=c.$order||++m,h[s]=c,d.push(c)}e.selected&&u.items.push(s)}};u.maxItems=e.hasAttribute("multiple")?null:1,St(e.children,e=>{var i,s,n;"optgroup"===(t=e.tagName.toLowerCase())?((n=g(i=e))[a]=n[a]||i.getAttribute("label")||"",n[c]=n[c]||p++,n[r]=n[r]||i.disabled,n.$order=n.$order||++m,u.optgroups.push(n),s=n[c],St(i.children,e=>{f(e,s)})):"option"===t&&f(e)})})():(()=>{var t,r;const l=e.getAttribute(s);if(l)u.options=JSON.parse(l),St(u.options,e=>{u.items.push(e[o])});else{var a=null!==(r=null===(t=null==e?void 0:e.value)||void 0===t?void 0:t.trim())&&void 0!==r?r:"";if(!i.allowEmptyOption&&!a.length)return;const s=a.split(i.delimiter);St(s,e=>{const t={};t[n]=e,t[o]=e,u.options.push(t)}),u.items=s}})(),Object.assign({},Rt,u,t)}var jt=0;class Vt extends(function(e){return e.plugins={},class extends e{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(t,i){e.plugins[t]={name:t,fn:i}}initializePlugins(e){var t,i;const s=this,n=[];if(Array.isArray(e))e.forEach(e=>{"string"==typeof e?n.push(e):(s.plugins.settings[e.name]=e.options,n.push(e.name))});else if(e)for(t in e)e.hasOwnProperty(t)&&(s.plugins.settings[t]=e[t],n.push(t));for(;i=n.shift();)s.require(i)}loadPlugin(t){var i=this,s=i.plugins,n=e.plugins[t];if(!e.plugins.hasOwnProperty(t))throw new Error('Unable to find "'+t+'" plugin');s.requested[t]=!0,s.loaded[t]=n.fn.apply(i,[i.plugins.settings[t]||{}]),s.names.push(t)}require(e){var t=this,i=t.plugins;if(!t.plugins.loaded.hasOwnProperty(e)){if(i.requested[e])throw new Error('Plugin has circular dependency ("'+e+'")');t.loadPlugin(e)}return i.loaded[e]}}}(Me)){constructor(e,t){var i;super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.isDropdownContentStale=!0,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,jt++;var s=xt(e);if(s.tomselect)throw new Error("Tom Select already initialized on this element");s.tomselect=this,i=(window.getComputedStyle&&window.getComputedStyle(s,null)).getPropertyValue("direction");const n=Nt(s,t);this.settings=n,this.input=s,this.tabIndex=s.tabIndex||0,this.is_select_tag="select"===s.tagName.toLowerCase(),this.rtl=/rtl/i.test(i),this.inputId=kt(s,"tomselect-"+jt),this.isRequired=s.required,this.sifter=new pt(this.options,{diacritics:n.diacritics}),n.mode=n.mode||(1===n.maxItems?"single":"multi"),"boolean"!=typeof n.hideSelected&&(n.hideSelected="multi"===n.mode),"boolean"!=typeof n.hidePlaceholder&&(n.hidePlaceholder="multi"!==n.mode);var o=n.createFilter;"function"!=typeof o&&("string"==typeof o&&(o=new RegExp(o)),o instanceof RegExp?n.createFilter=e=>o.test(e):n.createFilter=e=>this.settings.duplicates||!this.options[e]),this.initializePlugins(n.plugins),this.setupCallbacks(),this.setupTemplates();const r=xt("<div>"),l=xt("<div>"),a=this._render("dropdown"),c=xt('<div role="listbox" tabindex="-1">'),d=this.input.getAttribute("class")||"",h=n.mode;var u;if(Ot(r,n.wrapperClass,d,h),Ot(l,n.controlClass),Lt(r,l),Ot(a,n.dropdownClass,h),n.copyClassesToDropdown&&Ot(a,d),Ot(c,n.dropdownContentClass),Lt(a,c),xt(n.dropdownParent||r).appendChild(a),Ct(n.controlInput)){u=xt(n.controlInput);St(["autocorrect","autocapitalize","autocomplete","spellcheck","aria-label"],e=>{s.getAttribute(e)&&Bt(u,{[e]:s.getAttribute(e)})}),u.tabIndex=-1,l.appendChild(u),this.focus_node=u}else n.controlInput?(u=xt(n.controlInput),this.focus_node=u):(u=xt("<input/>"),this.focus_node=l);this.wrapper=r,this.dropdown=a,this.dropdown_content=c,this.control=l,this.control_input=u,this.setup()}setup(){const e=this,t=e.settings,i=e.control_input,s=e.dropdown,n=e.dropdown_content,o=e.wrapper,r=e.control,l=e.input,a=e.focus_node,c={passive:!0},d=e.inputId+"-ts-dropdown";Bt(n,{id:d}),Bt(a,{role:"combobox","aria-haspopup":"listbox","aria-expanded":"false","aria-controls":d});const h=kt(a,e.inputId+"-ts-control"),u="label[for='"+(e=>e.replace(/['"\\]/g,"\\$&"))(e.inputId)+"']",p=document.querySelector(u),m=e.focus.bind(e);if(p){wt(p,"click",m),Bt(p,{for:h});const t=kt(p,e.inputId+"-ts-label");Bt(a,{"aria-labelledby":t}),Bt(n,{"aria-labelledby":t})}if(o.style.width=l.style.width,o.style.minWidth=l.style.minWidth,o.style.maxWidth=l.style.maxWidth,e.plugins.names.length){const t="plugin-"+e.plugins.names.join(" plugin-");Ot([o,s],t)}(null===t.maxItems||t.maxItems>1)&&e.is_select_tag&&Bt(l,{multiple:"multiple"}),t.placeholder&&Bt(i,{placeholder:t.placeholder}),!t.splitOn&&t.delimiter&&(t.splitOn=new RegExp("\\s*"+Re(t.delimiter)+"+\\s*")),t.load&&t.loadThrottle&&(t.load=vt(t.load,t.loadThrottle)),wt(s,"mousemove",()=>{e.ignoreHover=!1}),wt(s,"mouseenter",t=>{var i=qt(t.target,"[data-selectable]",s);i&&e.onOptionHover(t,i)},{capture:!0}),wt(s,"click",t=>{const i=qt(t.target,"[data-selectable]");i&&(e.onOptionSelect(t,i),bt(t,!0))}),wt(r,"click",t=>{var s=qt(t.target,"[data-ts-item]",r);s&&e.onItemSelect(t,s)?bt(t,!0):""==i.value&&(e.onClick(),bt(t,!0))}),wt(a,"keydown",t=>e.onKeyDown(t)),wt(i,"keypress",t=>e.onKeyPress(t)),wt(i,"input",t=>e.onInput(t)),wt(a,"blur",t=>e.onBlur(t)),wt(a,"focus",t=>e.onFocus(t)),wt(i,"paste",t=>e.onPaste(t));const g=t=>{const n=t.composedPath()[0];if(!o.contains(n)&&!s.contains(n))return e.isFocused&&e.blur(),void e.inputState();n==i&&e.isOpen?t.stopPropagation():bt(t,!0)},f=()=>{e.isOpen&&e.positionDropdown()},v=()=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())};wt(l,"invalid",v),wt(document,"mousedown",g),wt(window,"scroll",f,c),wt(window,"resize",f,c),this._destroy=()=>{l.removeEventListener("invalid",v),document.removeEventListener("mousedown",g),window.removeEventListener("scroll",f),window.removeEventListener("resize",f),p&&p.removeEventListener("click",m)},this.revertSettings={innerHTML:l.innerHTML,tabIndex:l.tabIndex},l.tabIndex=-1,l.insertAdjacentElement("afterend",e.wrapper),e.sync(!1),t.items=[],delete t.optgroups,delete t.options,e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,e.on("change",this.onChange),Ot(l,"tomselected","ts-hidden-accessible"),e.trigger("initialize"),!0===t.preload&&e.preload()}setupOptions(e=[],t=[]){this.addOptions(e),St(t,e=>{this.registerOptionGroup(e)})}setupTemplates(){var e=this,t=e.settings.labelField,i=e.settings.optgroupLabelField,s={optgroup:e=>{let t=document.createElement("div");return t.className="optgroup",t.appendChild(e.options),t},optgroup_header:(e,t)=>'<div class="optgroup-header">'+t(e[i])+"</div>",option:(e,i)=>"<div>"+i(e[t])+"</div>",item:(e,i)=>"<div>"+i(e[t])+"</div>",option_create:(e,t)=>'<div class="create">Add <strong>'+t(e.input)+"</strong>&hellip;</div>",no_results:()=>'<div class="no-results">No results found</div>',loading:()=>'<div class="spinner"></div>',not_loading:()=>{},dropdown:()=>"<div></div>"};e.settings.render=Object.assign({},s,e.settings.render)}setupCallbacks(){var e,t,i={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",item_select:"onItemSelect",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(e in i)(t=this.settings[i[e]])&&this.on(e,t)}sync(e=!0){const t=this,i=e?Nt(t.input,{delimiter:t.settings.delimiter,allowEmptyOption:t.settings.allowEmptyOption}):t.settings;t.setupOptions(i.options,i.optgroups),t.setValue(i.items||[],!0),t.input.disabled?t.disable():t.input.readOnly?t.setReadOnly(!0):t.enable(),t.lastQuery=null}onClick(){var e=this;if(e.activeItems.length>0)return e.clearActiveItems(),void e.focus();e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){At(this.input,"input"),At(this.input,"change")}onPaste(e){var t=this;t.isInputHidden||t.isLocked?bt(e):t.settings.splitOn&&setTimeout(()=>{var e=t.inputValue();if(e.match(t.settings.splitOn)){var i=e.trim().split(t.settings.splitOn);St(i,e=>{mt(e)&&(this.options[e]?t.addItem(e):t.createItem(e))})}},0)}onKeyPress(e){var t=this;if(!t.isLocked){var i=String.fromCharCode(e.keyCode||e.which);return t.settings.create&&"multi"===t.settings.mode&&i===t.settings.delimiter?(t.createItem(),void bt(e)):void 0}bt(e)}onKeyDown(e){var t=this;if(t.ignoreHover=!0,t.isLocked)9!==e.keyCode&&bt(e);else{switch(e.keyCode){case 65:if(Et(Ht,e)&&""==t.control_input.value)return bt(e),void t.selectAll();break;case 27:return t.isOpen&&(bt(e,!0),t.close()),void t.clearActiveItems();case 40:if(!t.isOpen&&t.hasOptions)t.open();else if(t.activeOption){let e=t.getAdjacent(t.activeOption,1);e&&t.setActiveOption(e)}return void bt(e);case 38:if(t.activeOption){let e=t.getAdjacent(t.activeOption,-1);e&&t.setActiveOption(e)}return void bt(e);case 13:return void(t.canSelect(t.activeOption)?(t.onOptionSelect(e,t.activeOption),bt(e)):(t.settings.create&&t.createItem()||document.activeElement==t.control_input&&t.isOpen)&&bt(e));case 37:return void t.advanceSelection(-1,e);case 39:return void t.advanceSelection(1,e);case 9:return void(t.settings.selectOnTab&&(t.canSelect(t.activeOption)?(t.onOptionSelect(e,t.activeOption),bt(e)):t.settings.create&&t.createItem()&&bt(e)));case 8:case 46:return void t.deleteSelection(e)}t.isInputHidden&&!Et(Ht,e)&&bt(e)}}onInput(e){if(this.isLocked)return;const t=this.inputValue();this.lastValue!==t&&(this.lastValue=t,""!=t?(this.refreshTimeout&&window.clearTimeout(this.refreshTimeout),this.refreshTimeout=((e,t)=>t>0?window.setTimeout(e,t):(e.call(null),null))(()=>{this.refreshTimeout=null,this._onInput()},this.settings.refreshThrottle)):this._onInput())}_onInput(){const e=this.lastValue;this.settings.shouldLoad.call(this,e)&&this.load(e),this.refreshOptions(),this.trigger("type",e)}onOptionHover(e,t){this.ignoreHover||this.setActiveOption(t,!1)}onFocus(e){var t=this,i=t.isFocused;if(t.isDisabled||t.isReadOnly)return t.blur(),void bt(e);t.ignoreFocus||(t.isFocused=!0,"focus"===t.settings.preload&&t.preload(),i||t.trigger("focus"),t.activeItems.length||(t.inputState(),t.refreshOptions(!!t.settings.openOnFocus)),t.refreshState())}onBlur(e){if(!1!==document.hasFocus()){var t=this;if(t.isFocused){t.isFocused=!1,t.ignoreFocus=!1;var i=()=>{t.close(),t.setActiveItem(),t.setCaret(t.items.length),t.trigger("blur")};t.settings.create&&t.settings.createOnBlur?t.createItem(null,i):i()}}}onOptionSelect(e,t){var i,s=this;t.parentElement&&t.parentElement.matches("[data-disabled]")||(t.classList.contains("create")?s.createItem(null,()=>{s.settings.closeAfterSelect?s.close():s.settings.clearAfterSelect&&s.setTextboxValue()}):void 0!==(i=t.dataset.value)&&(s.isDropdownContentStale=s.settings.hideSelected,s.addItem(i),s.settings.closeAfterSelect?s.close():s.settings.clearAfterSelect&&s.setTextboxValue(),!s.settings.hideSelected&&e.type&&/click/.test(e.type)&&s.setActiveOption(t)))}canSelect(e){return!!(this.isOpen&&e&&this.dropdown_content.contains(e))}onItemSelect(e,t){var i=this;return!i.isLocked&&"multi"===i.settings.mode&&(bt(e),i.setActiveItem(t,e),!0)}canLoad(e){return!!this.settings.load&&!this.loadedSearches.hasOwnProperty(e)}load(e){const t=this;if(!t.canLoad(e))return;Ot(t.wrapper,t.settings.loadingClass),t.loading++;const i=t.loadCallback.bind(t);t.settings.load.call(t,e,i)}loadCallback(e,t){const i=this;i.loading=Math.max(i.loading-1,0),i.isDropdownContentStale=!0,i.clearActiveOption(),i.setupOptions(e,t),i.refreshOptions(i.isFocused&&!i.isInputHidden),i.loading||It(i.wrapper,i.settings.loadingClass),i.trigger("load",e,t)}preload(){var e=this.wrapper.classList;e.contains("preloaded")||(e.add("preloaded"),this.load(""))}setTextboxValue(e=""){var t=this.control_input;t.value!==e&&(t.value=e,At(t,"update"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute("multiple")?this.items:this.items.join(this.settings.delimiter)}setValue(e,t){yt(this,t?[]:["change"],()=>{this.clear(t),this.addItems(e,t)})}setMaxItems(e){0===e&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,t){var i,s,n,o,r,l,a=this;if("single"!==a.settings.mode){if(!e)return a.clearActiveItems(),void(a.isFocused&&a.inputState());if("click"===(i=t&&t.type.toLowerCase())&&Et("shiftKey",t)&&a.activeItems.length){for(l=a.getLastActive(),(n=Array.prototype.indexOf.call(a.control.children,l))>(o=Array.prototype.indexOf.call(a.control.children,e))&&(r=n,n=o,o=r),s=n;s<=o;s++)e=a.control.children[s],-1===a.activeItems.indexOf(e)&&a.setActiveItemClass(e);bt(t)}else"click"===i&&Et(Ht,t)||"keydown"===i&&Et("shiftKey",t)?e.classList.contains("active")?a.removeActiveItem(e):a.setActiveItemClass(e):(a.clearActiveItems(),a.setActiveItemClass(e));a.inputState(),a.isFocused||a.focus()}}setActiveItemClass(e){const t=this,i=t.control.querySelector(".last-active");i&&It(i,"last-active"),Ot(e,"active last-active"),t.trigger("item_select",e),-1==t.activeItems.indexOf(e)&&t.activeItems.push(e)}removeActiveItem(e){var t=this.activeItems.indexOf(e);this.activeItems.splice(t,1),It(e,"active")}clearActiveItems(){It(this.activeItems,"active"),this.activeItems=[]}setActiveOption(e,t=!0){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,Bt(this.focus_node,{"aria-activedescendant":e.getAttribute("id")}),Bt(e,{"aria-selected":"true"}),Ot(e,"active"),t&&this.scrollToOption(e)))}scrollToOption(e,t){if(!e)return;const i=this.dropdown_content,s=i.clientHeight,n=i.scrollTop||0,o=e.offsetHeight,r=e.getBoundingClientRect().top-i.getBoundingClientRect().top+n;r+o>s+n?this.scroll(r-s+o,t):r<n&&this.scroll(r,t)}scroll(e,t){const i=this.dropdown_content;t&&(i.style.scrollBehavior=t),i.scrollTop=e,i.style.scrollBehavior=""}clearActiveOption(){this.activeOption&&(It(this.activeOption,"active"),Bt(this.activeOption,{"aria-selected":null})),this.activeOption=null,Bt(this.focus_node,{"aria-activedescendant":null})}selectAll(){const e=this;if("single"===e.settings.mode)return;const t=e.controlChildren();t.length&&(e.inputState(),e.close(),e.activeItems=t,St(t,t=>{e.setActiveItemClass(t)}))}inputState(){var e=this;e.control.contains(e.control_input)&&(Bt(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&Bt(e.control_input,{placeholder:""}),e.isInputHidden=!1),e.wrapper.classList.toggle("input-hidden",e.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var e=this;if(e.isDisabled||e.isReadOnly)return;e.ignoreFocus=!0;const t=this.control_input.offsetWidth?this.control_input:this.focus_node;t.focus(),setTimeout(()=>{e.ignoreFocus=!1;t.getRootNode().activeElement===t&&this.onFocus()},0)}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,t=e.sortField;return"string"==typeof e.sortField&&(t=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:t,nesting:e.nesting}}search(e){var t,i,s=this,n=this.getSearchOptions();if(s.settings.score&&"function"!=typeof(i=s.settings.score.call(s,e)))throw new Error('Tom Select "score" setting must be a function that returns a function');return s.isDropdownContentStale||e!==s.lastQuery?(s.lastQuery=e,/(.)\1{15,}/.test(e)&&(e=""),t=s.sifter.search(e,Object.assign(n,{score:i})),s.currentResults=t):t=Object.assign({},s.currentResults),s.settings.hideSelected&&(t.items=t.items.filter(e=>{let t=mt(e.id);return!(null!==t&&-1!==s.items.indexOf(t))})),t}refreshOptions(e=!0){var t,i,s,n,o,r,l,a,c,d;const h={},u=[];var p=this,m=p.inputValue();const g=m===p.lastQuery||""==m&&null==p.lastQuery;var f=p.search(m),v=null,y=p.settings.shouldOpen||!1,b=p.dropdown_content;g&&(v=p.activeOption)&&(c=v.closest("[data-group]")),n=f.items.length,"number"==typeof p.settings.maxOptions&&(n=Math.min(n,p.settings.maxOptions)),n>0&&(y=!0);const w=(e,t)=>{let i=h[e];if(void 0!==i){let e=u[i];if(void 0!==e)return[i,e.fragment]}let s=document.createDocumentFragment();return i=u.length,u.push({fragment:s,order:t,optgroup:e}),[i,s]};for(t=0;t<n;t++){let e=f.items[t];if(!e)continue;let n=e.id,l=p.options[n];if(void 0===l)continue;let a=gt(n),d=p.getOption(a,!0);for(p.settings.hideSelected||d.classList.toggle("selected",p.items.includes(a)),o=l[p.settings.optgroupField]||"",i=0,s=(r=Array.isArray(o)?o:[o])&&r.length;i<s;i++){o=r[i];let e=l.$order,t=p.optgroups[o];var E;if(void 0===t&&"function"==typeof p.settings.optionGroupRegister)(E=p.settings.optionGroupRegister.apply(p,[o]))&&p.registerOptionGroup(E);t=p.optgroups[o],void 0===t?o="":e=t.$order;const[s,a]=w(o,e);i>0&&(d=d.cloneNode(!0),Bt(d,{id:l.$id+"-clone-"+i,"aria-selected":null}),d.classList.add("ts-cloned"),It(d,"active"),p.activeOption&&p.activeOption.dataset.value==n&&c&&c.dataset.group===o.toString()&&(v=d)),a.appendChild(d),""!=o&&(h[o]=s)}}var k;p.settings.lockOptgroupOrder&&u.sort((e,t)=>e.order-t.order),l=document.createDocumentFragment(),St(u,e=>{let t=e.fragment,i=e.optgroup;if(!t||!t.children.length)return;let s=p.optgroups[i];if(void 0!==s){let e=document.createDocumentFragment(),i=p.render("optgroup_header",s);Lt(e,i),Lt(e,t);let n=p.render("optgroup",{group:s,options:e});Lt(l,n)}else Lt(l,t)}),b.innerHTML="",Lt(b,l),p.isDropdownContentStale=!1,p.settings.highlight&&(k=b.querySelectorAll("span.highlight"),Array.prototype.forEach.call(k,function(e){var t=e.parentNode;t.replaceChild(e.firstChild,e),t.normalize()}),f.query.length&&f.tokens.length&&St(f.tokens,e=>{zt(b,e.regex)}));var _=e=>{let t=p.render(e,{input:m});return t&&(y=!0,b.insertBefore(t,b.firstChild)),t};if(p.loading?_("loading"):p.settings.shouldLoad.call(p,m)?0===f.items.length&&_("no_results"):_("not_loading"),(a=p.canCreate(m))&&(d=_("option_create")),p.hasOptions=f.items.length>0||a,y){if(f.items.length>0){if(v||"single"!==p.settings.mode||null==p.items[0]||(v=p.getOption(p.items[0])),!b.contains(v)){let e=0;d&&!p.settings.addPrecedence&&(e=1),v=p.selectable()[e]}}else d&&(v=d);e&&!p.isOpen&&(p.open(),p.scrollToOption(v,"auto")),p.setActiveOption(v)}else p.clearActiveOption(),e&&p.isOpen&&p.close(!1)}selectable(){return this.dropdown_content.querySelectorAll("[data-selectable]")}addOption(e,t=!1){const i=this;if(Array.isArray(e))return i.addOptions(e,t),!1;const s=mt(e[i.settings.valueField]);return null===s||i.options.hasOwnProperty(s)?(i.updateOption(e[i.settings.valueField],e),!1):(e.$order=e.$order||++i.order,e.$id=i.inputId+"-opt-"+e.$order,i.options[s]=e,i.isDropdownContentStale=!0,t&&(i.userOptions[s]=t,i.trigger("option_add",s,e)),s)}addOptions(e,t=!1){St(e,e=>{this.addOption(e,t)})}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var t=mt(e[this.settings.optgroupValueField]);return null!==t&&(e.$order=e.$order||++this.order,this.optgroups[t]=e,t)}addOptionGroup(e,t){var i;t[this.settings.optgroupValueField]=e,(i=this.registerOptionGroup(t))&&this.trigger("optgroup_add",i,t)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger("optgroup_remove",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger("optgroup_clear")}updateOption(e,t){const i=this;var s,n;const o=mt(e),r=mt(t[i.settings.valueField]);if(null===o)return;const l=i.options[o];if(null==l)return;if("string"!=typeof r)throw new Error("Value must be set in option data");const a=i.getOption(o),c=i.getItem(o);if(t.$order=t.$order||l.$order,delete i.options[o],i.uncacheValue(r),i.options[r]=t,a){if(i.dropdown_content.contains(a)){const e=i._render("option",t);Pt(a,e),i.activeOption===a&&i.setActiveOption(e)}a.remove()}c&&(-1!==(n=i.items.indexOf(o))&&i.items.splice(n,1,r),s=i._render("item",t),c.classList.contains("active")&&Ot(s,"active"),Pt(c,s)),i.isDropdownContentStale=!0}removeOption(e,t){const i=this;e=gt(e),i.uncacheValue(e),delete i.userOptions[e],delete i.options[e],i.isDropdownContentStale=!0,i.trigger("option_remove",e),i.removeItem(e,t)}clearOptions(e){const t=(e||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();const i={};St(this.options,(e,s)=>{t(e,s)&&(i[s]=e)}),this.options=this.sifter.items=i,this.isDropdownContentStale=!0,this.trigger("option_clear")}clearFilter(e,t){return this.items.indexOf(t)>=0}getOption(e,t=!1){const i=mt(e);if(null===i)return null;const s=this.options[i];if(null!=s){if(s.$div)return s.$div;if(t)return this._render("option",s)}return null}getAdjacent(e,t,i="option"){var s;if(!e)return null;s="item"==i?this.controlChildren():this.dropdown_content.querySelectorAll("[data-selectable]");for(let i=0;i<s.length;i++)if(s[i]==e)return t>0?s[i+1]:s[i-1];return null}getItem(e){if("object"==typeof e)return e;var t=mt(e);return null!==t?this.control.querySelector(`[data-value="${_t(t)}"]`):null}addItems(e,t){var i=this,s=Array.isArray(e)?e:[e];const n=(s=s.filter(e=>-1===i.items.indexOf(e)))[s.length-1];s.forEach(e=>{i.isPending=e!==n,i.addItem(e,t)})}addItem(e,t){yt(this,t?[]:["change","dropdown_close"],()=>{var i,s;const n=this,o=n.settings.mode,r=mt(e);if((!r||-1===n.items.indexOf(r)||("single"===o&&n.close(),"single"!==o&&n.settings.duplicates))&&null!==r&&n.options.hasOwnProperty(r)&&("single"===o&&n.clear(t),"multi"!==o||!n.isFull())){if(i=n._render("item",n.options[r]),n.control.contains(i)&&(i=i.cloneNode(!0)),s=n.isFull(),n.items.splice(n.caretPos,0,r),n.insertAtCaret(i),n.isSetup){if(!n.isPending&&n.settings.hideSelected){let e=n.getOption(r),t=n.getAdjacent(e,1);t&&n.setActiveOption(t)}n.settings.clearAfterSelect&&n.setTextboxValue(),n.isPending||n.settings.closeAfterSelect||n.refreshOptions(n.isFocused&&"single"!==o),0!=n.settings.closeAfterSelect&&n.isFull()?n.close():n.isPending||n.positionDropdown(),n.trigger("item_add",r,i),n.isPending||n.updateOriginalInput({silent:t})}(!n.isPending||!s&&n.isFull())&&(n.inputState(),n.refreshState())}})}removeItem(e=null,t){const i=this;if(!(e=i.getItem(e)))return;var s,n;const o=e.dataset.value;s=Mt(e),e.remove(),e.classList.contains("active")&&(n=i.activeItems.indexOf(e),i.activeItems.splice(n,1),It(e,"active")),i.items.splice(s,1),i.isDropdownContentStale=!0,!i.settings.persist&&i.userOptions.hasOwnProperty(o)&&i.removeOption(o,t),s<i.caretPos&&i.setCaret(i.caretPos-1),i.updateOriginalInput({silent:t}),i.refreshState(),i.positionDropdown(),i.trigger("item_remove",o,e)}createItem(e=null,t=()=>{}){3===arguments.length&&(t=arguments[2]),"function"!=typeof t&&(t=()=>{});var i,s=this,n=s.caretPos;if(e=e||s.inputValue(),!s.canCreate(e)){return mt(e)&&this.options[e]&&s.addItem(e),t(),!1}s.lock();var o=!1,r=e=>{if(s.unlock(),!e||"object"!=typeof e)return t();var i=mt(e[s.settings.valueField]);if("string"!=typeof i)return t();s.setTextboxValue(),s.addOption(e,!0),s.setCaret(n),s.addItem(i),t(e),o=!0};return i="function"==typeof s.settings.create?s.settings.create.call(this,e,r):{[s.settings.labelField]:e,[s.settings.valueField]:e},o||r(i),!0}refreshItems(){var e=this;e.isDropdownContentStale=!0,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){const e=this;e.refreshValidityState();const t=e.isFull(),i=e.isLocked;e.wrapper.classList.toggle("rtl",e.rtl);const s=e.wrapper.classList;var n;s.toggle("focus",e.isFocused),s.toggle("disabled",e.isDisabled),s.toggle("readonly",e.isReadOnly),s.toggle("required",e.isRequired),s.toggle("invalid",!e.isValid),s.toggle("locked",i),s.toggle("full",t),s.toggle("input-active",e.isFocused&&!e.isInputHidden),s.toggle("dropdown-active",e.isOpen),s.toggle("has-options",(n=e.options,0===Object.keys(n).length)),s.toggle("has-items",e.items.length>0)}refreshValidityState(){var e=this;e.input.validity&&(e.isValid=e.input.validity.valid,e.isInvalid=!e.isValid)}isFull(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){const t=this;var i,s;const n=t.input.querySelector('option[value=""]');if(t.is_select_tag){const o=[],r=t.input.querySelectorAll("option:checked").length;function l(e,i,s){return e||(e=xt('<option value="'+ft(i)+'">'+ft(s)+"</option>")),e!=n&&t.input.append(e),o.push(e),(e!=n||r>0)&&(e.selected=!0),e}t.input.querySelectorAll("option:checked").forEach(e=>{e.selected=!1}),0==t.items.length&&"single"==t.settings.mode?l(n,"",""):t.items.forEach(e=>{if(i=t.options[e],s=i[t.settings.labelField]||"",o.includes(i.$option)){l(t.input.querySelector(`option[value="${_t(e)}"]:not(:checked)`),e,s)}else i.$option=l(i.$option,e,s)})}else t.input.value=t.getValue();t.isSetup&&(e.silent||t.trigger("change",t.getValue()))}open(){var e=this;e.isLocked||e.isOpen||"multi"===e.settings.mode&&e.isFull()||(e.isOpen=!0,Bt(e.focus_node,{"aria-expanded":"true"}),e.refreshState(),Tt(e.dropdown,{visibility:"hidden",display:"block"}),e.positionDropdown(),Tt(e.dropdown,{visibility:"visible",display:"block"}),e.focus(),e.trigger("dropdown_open",e.dropdown))}close(e=!0){var t=this,i=t.isOpen;e&&(t.setTextboxValue(),"single"===t.settings.mode&&t.items.length&&t.inputState()),t.isOpen=!1,Bt(t.focus_node,{"aria-expanded":"false"}),Tt(t.dropdown,{display:"none"}),t.settings.hideSelected&&t.clearActiveOption(),t.refreshState(),i&&t.trigger("dropdown_close",t.dropdown)}positionDropdown(){if("body"===this.settings.dropdownParent){var e=this.control,t=e.getBoundingClientRect(),i=e.offsetHeight+t.top+window.scrollY,s=t.left+window.scrollX;Tt(this.dropdown,{width:t.width+"px",top:i+"px",left:s+"px"})}}clear(e){var t=this;if(t.items.length){var i=t.controlChildren();St(i,e=>{t.removeItem(e,!0)}),t.inputState(),e||t.updateOriginalInput(),t.trigger("clear")}}insertAtCaret(e){const t=this,i=t.caretPos,s=t.control;s.insertBefore(e,s.children[i]||null),t.setCaret(i+1)}deleteSelection(e){var t,i,s,n,o,r=this;t=e&&8===e.keyCode?-1:1,i={start:(o=r.control_input).selectionStart||0,length:(o.selectionEnd||0)-(o.selectionStart||0)};const l=[];if(r.activeItems.length)n=Dt(r.activeItems,t),s=Mt(n),t>0&&s++,St(r.activeItems,e=>l.push(e));else if((r.isFocused||"single"===r.settings.mode)&&r.items.length){const e=r.controlChildren();let s;t<0&&0===i.start&&0===i.length?s=e[r.caretPos-1]:t>0&&i.start===r.inputValue().length&&(s=e[r.caretPos]),void 0!==s&&l.push(s)}if(!r.shouldDelete(l,e))return!1;for(bt(e,!0),void 0!==s&&r.setCaret(s);l.length;)r.removeItem(l.pop());return r.inputState(),r.positionDropdown(),r.refreshOptions(!1),!0}shouldDelete(e,t){const i=e.map(e=>e.dataset.value);return!(!i.length||"function"==typeof this.settings.onDelete&&!1===this.settings.onDelete.call(this,i,t))}advanceSelection(e,t){var i,s,n=this;n.rtl&&(e*=-1),n.inputValue().length||(Et(Ht,t)||Et("shiftKey",t)?(s=(i=n.getLastActive(e))?i.classList.contains("active")?n.getAdjacent(i,e,"item"):i:e>0?n.control_input.nextElementSibling:n.control_input.previousElementSibling)&&(s.classList.contains("active")&&n.removeActiveItem(i),n.setActiveItemClass(s)):n.moveCaret(e))}moveCaret(e){}getLastActive(e){let t=this.control.querySelector(".last-active");if(t)return t;var i=this.control.querySelectorAll(".active");return i?Dt(i,e):void 0}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll("[data-ts-item]"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(e=this.isReadOnly||this.isDisabled){this.isLocked=e,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(e){this.focus_node.tabIndex=e?-1:this.tabIndex,this.isDisabled=e,this.input.disabled=e,this.control_input.disabled=e,this.setLocked()}setReadOnly(e){this.isReadOnly=e,this.input.readOnly=e,this.control_input.readOnly=e,this.setLocked()}destroy(){var e=this,t=e.revertSettings;e.trigger("destroy"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=t.innerHTML,e.input.tabIndex=t.tabIndex,It(e.input,"tomselected","ts-hidden-accessible"),e._destroy(),delete e.input.tomselect}render(e,t){var i,s;const n=this;if("function"!=typeof this.settings.render[e])return null;if(!(s=n.settings.render[e].call(this,t,ft)))return null;if(s=xt(s),"option"===e||"option_create"===e?t[n.settings.disabledField]?Bt(s,{"aria-disabled":"true"}):Bt(s,{"data-selectable":""}):"optgroup"===e&&(i=t.group[n.settings.optgroupValueField],Bt(s,{"data-group":i}),t.group[n.settings.disabledField]&&Bt(s,{"data-disabled":""})),"option"===e||"item"===e){const i=gt(t[n.settings.valueField]);Bt(s,{"data-value":i}),"item"===e?(Ot(s,n.settings.itemClass),Bt(s,{"data-ts-item":""})):(Ot(s,n.settings.optionClass),Bt(s,{role:"option",id:t.$id}),t.$div=s,n.options[i]=t)}return s}_render(e,t){const i=this.render(e,t);if(null==i)throw"HTMLElement expected";return i}clearCache(){St(this.options,e=>{e.$div&&(e.$div.remove(),delete e.$div)})}uncacheValue(e){const t=this.getOption(e);t&&t.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,t,i){var s=this,n=s[t];s[t]=function(){var t,o;return"after"===e&&(t=n.apply(s,arguments)),o=i.apply(s,arguments),"instead"===e?o:("before"===e&&(t=n.apply(s,arguments)),t)}}}const Wt=e=>"boolean"==typeof e?e?"1":"0":e+"",Ut=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},Kt=e=>"string"==typeof e&&e.indexOf("<")>-1;const Jt=e=>"string"==typeof e&&e.indexOf("<")>-1;const Gt=(e,t,i,s)=>{e.addEventListener(t,i,s)},Qt=e=>"string"==typeof e&&e.indexOf("<")>-1,Xt=(e,t)=>{((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)})(t,(t,i)=>{null==t?e.removeAttribute(i):e.setAttribute(i,""+t)})};const Yt=e=>"string"==typeof e&&e.indexOf("<")>-1;const Zt=e=>{var t=[];return((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)})(e,e=>{"string"==typeof e&&(e=e.trim().split(/[\t\n\f\r\s]/)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},ei=e=>(Array.isArray(e)||(e=[e]),e);const ti=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(ii(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},ii=e=>"string"==typeof e&&e.indexOf("<")>-1,si=e=>{var t=[];return((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)})(e,e=>{"string"==typeof e&&(e=e.trim().split(/[\t\n\f\r\s]/)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},ni=e=>(Array.isArray(e)||(e=[e]),e);const oi=(e,t,i,s)=>{e.addEventListener(t,i,s)};const ri=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},li=(e,t,i,s)=>{e.addEventListener(t,i,s)},ai=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(ci(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},ci=e=>"string"==typeof e&&e.indexOf("<")>-1;const di=e=>{var t=[];return((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)})(e,e=>{"string"==typeof e&&(e=e.trim().split(/[\t\n\f\r\s]/)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},hi=e=>(Array.isArray(e)||(e=[e]),e);Vt.define("change_listener",function(){((e,t,i,s)=>{e.addEventListener(t,i,s)})(this.input,"change",()=>{this.sync()})}),Vt.define("checkbox_options",function(e){var t=this,i=t.onOptionSelect;t.settings.hideSelected=!1;const s=Object.assign({className:"tomselect-checkbox",checkedClassNames:void 0,uncheckedClassNames:void 0},e);var n=function(e,t){t?(e.checked=!0,s.uncheckedClassNames&&e.classList.remove(...s.uncheckedClassNames),s.checkedClassNames&&e.classList.add(...s.checkedClassNames)):(e.checked=!1,s.checkedClassNames&&e.classList.remove(...s.checkedClassNames),s.uncheckedClassNames&&e.classList.add(...s.uncheckedClassNames))},o=function(e){setTimeout(()=>{var t=e.querySelector("input."+s.className);t instanceof HTMLInputElement&&n(t,e.classList.contains("selected"))},1)};t.hook("after","setupTemplates",()=>{var e=t.settings.render.option;t.settings.render.option=(i,o)=>{var r=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(Kt(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)})(e.call(t,i,o)),l=document.createElement("input");s.className&&l.classList.add(s.className),l.addEventListener("click",function(e){Ut(e)}),l.type="checkbox";const a=null==(c=i[t.settings.valueField])?null:Wt(c);var c;return n(l,!!(a&&t.items.indexOf(a)>-1)),r.prepend(l),r}}),t.on("item_remove",e=>{var i=t.getOption(e);i&&(i.classList.remove("selected"),o(i))}),t.on("item_add",e=>{var i=t.getOption(e);i&&o(i)}),t.hook("instead","onOptionSelect",(e,s)=>{if(s.classList.contains("selected"))return s.classList.remove("selected"),t.removeItem(s.dataset.value),t.refreshOptions(),void Ut(e,!0);i.call(t,e,s),o(s)})}),Vt.define("clear_button",function(e){const t=this,i=Object.assign({className:"clear-button",title:"Clear All",role:"button",tabindex:0,html:e=>`<div class="${e.className}" title="${e.title}" role="${e.role}" tabindex="${e.tabindex}">&times;</div>`},e);t.on("initialize",()=>{var e=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(Jt(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)})(i.html(i));e.addEventListener("click",e=>{t.isLocked||(t.clear(),"single"===t.settings.mode&&t.settings.allowEmptyOption&&t.addItem(""),t.refreshOptions(!1),e.preventDefault(),e.stopPropagation())}),t.control.appendChild(e)})}),Vt.define("drag_drop",function(){var e=this;if("multi"!==e.settings.mode)return;var t=e.lock,i=e.unlock;let s,n=!0;e.hook("after","setupTemplates",()=>{var t=e.settings.render.item;e.settings.render.item=(i,o)=>{const r=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(Qt(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)})(t.call(e,i,o));Xt(r,{draggable:"true"});const l=e=>{e.preventDefault(),r.classList.add("ts-drag-over"),a(r,s)},a=(e,t)=>{var i,s,n;void 0!==t&&(((e,t)=>{do{var i;if(e==(t=null==(i=t)?void 0:i.previousElementSibling))return!0}while(t&&t.previousElementSibling);return!1})(t,r)?(s=t,null==(n=(i=e).parentNode)||n.insertBefore(s,i.nextSibling)):((e,t)=>{var i;null==(i=e.parentNode)||i.insertBefore(t,e)})(e,t))};return Gt(r,"mousedown",e=>{n||((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(e),e.stopPropagation()}),Gt(r,"dragstart",e=>{s=r,setTimeout(()=>{r.classList.add("ts-dragging")},0)}),Gt(r,"dragenter",l),Gt(r,"dragover",l),Gt(r,"dragleave",()=>{r.classList.remove("ts-drag-over")}),Gt(r,"dragend",()=>{var t;document.querySelectorAll(".ts-drag-over").forEach(e=>e.classList.remove("ts-drag-over")),null==(t=s)||t.classList.remove("ts-dragging"),s=void 0;var i=[];e.control.querySelectorAll("[data-value]").forEach(e=>{if(e.dataset.value){let t=e.dataset.value;t&&i.push(t)}}),e.setValue(i)}),r}}),e.hook("instead","lock",()=>(n=!1,t.call(e))),e.hook("instead","unlock",()=>(n=!0,i.call(e)))}),Vt.define("dropdown_header",function(e){const t=this,i=Object.assign({title:"Untitled",headerClass:"dropdown-header",titleRowClass:"dropdown-header-title",labelClass:"dropdown-header-label",closeClass:"dropdown-header-close",html:e=>'<div class="'+e.headerClass+'"><div class="'+e.titleRowClass+'"><span class="'+e.labelClass+'">'+e.title+'</span><a class="'+e.closeClass+'">&times;</a></div></div>'},e);t.on("initialize",()=>{var e=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(Yt(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)})(i.html(i)),s=e.querySelector("."+i.closeClass);s&&s.addEventListener("click",e=>{((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(e,!0),t.close()}),t.dropdown.insertBefore(e,t.dropdown.firstChild)})}),Vt.define("caret_position",function(){var e=this;e.hook("instead","setCaret",t=>{"single"!==e.settings.mode&&e.control.contains(e.control_input)?(t=Math.max(0,Math.min(e.items.length,t)))==e.caretPos||e.isPending||e.controlChildren().forEach((i,s)=>{s<t?e.control_input.insertAdjacentElement("beforebegin",i):e.control.appendChild(i)}):t=e.items.length,e.caretPos=t}),e.hook("instead","moveCaret",t=>{if(!e.isFocused)return;const i=e.getLastActive(t);if(i){const s=((e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var i=0;e=e.previousElementSibling;)e.matches(t)&&i++;return i})(i);e.setCaret(t>0?s+1:s),e.setActiveItem(),((e,...t)=>{var i=Zt(t);(e=ei(e)).map(e=>{i.map(t=>{e.classList.remove(t)})})})(i,"last-active")}else e.setCaret(e.caretPos+t)})}),Vt.define("dropdown_input",function(){const e=this;e.settings.shouldOpen=!0,e.hook("before","setup",()=>{var t;e.focus_node=e.control,((e,...t)=>{var i=si(t);(e=ni(e)).map(e=>{i.map(t=>{e.classList.add(t)})})})(e.control_input,"dropdown-input");const i=ti('<div class="dropdown-input-wrap">');i.append(e.control_input),e.dropdown.insertBefore(i,e.dropdown.firstChild);const s=ti('<input class="items-placeholder" tabindex="-1" />');s.placeholder=e.settings.placeholder||"",e.control.append(s);const n=null==(t=e.input)?void 0:t.getAttribute("aria-label");n&&s.setAttribute("aria-label",n)}),e.on("initialize",()=>{e.control_input.addEventListener("keydown",t=>{switch(t.keyCode){case 27:return e.isOpen&&(((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(t,!0),e.close()),void e.clearActiveItems();case 9:e.focus_node.tabIndex=-1}return e.onKeyDown.call(e,t)}),e.on("blur",()=>{e.focus_node.tabIndex=e.isDisabled?-1:e.tabIndex}),e.on("dropdown_open",()=>{e.control_input.focus()});const t=e.onBlur;e.hook("instead","onBlur",i=>{if(!i||i.relatedTarget!=e.control_input)return t.call(e)}),((e,t,i,s)=>{e.addEventListener(t,i,s)})(e.control_input,"blur",()=>e.onBlur()),e.hook("before","close",()=>{e.isOpen&&e.focus_node.focus({preventScroll:!0})})})}),Vt.define("input_autogrow",function(){var e=this;e.on("initialize",()=>{var t=document.createElement("span"),i=e.control_input;t.style.cssText="position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ",e.wrapper.appendChild(t);for(const e of["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"])t.style[e]=i.style[e];var s=()=>{t.textContent=i.value,i.style.width=t.clientWidth+"px"};s(),e.on("update item_add item_remove",s),oi(i,"input",s),oi(i,"keyup",s),oi(i,"blur",s),oi(i,"update",s)})}),Vt.define("no_backspace_delete",function(){var e=this,t=e.deleteSelection;this.hook("instead","deleteSelection",i=>!!e.activeItems.length&&t.call(e,i))}),Vt.define("no_active_items",function(){this.hook("instead","setActiveItem",()=>{}),this.hook("instead","selectAll",()=>{})}),Vt.define("optgroup_columns",function(){var e=this,t=e.onKeyDown;e.hook("instead","onKeyDown",i=>{var s,n,o,r;if(!e.isOpen||37!==i.keyCode&&39!==i.keyCode)return t.call(e,i);e.ignoreHover=!0,r=((e,t)=>{for(;e&&e.matches;){if(e.matches(t))return e;e=e.parentNode}})(e.activeOption,"[data-group]"),s=((e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var i=0;e=e.previousElementSibling;)e.matches(t)&&i++;return i})(e.activeOption,"[data-selectable]"),r&&(r=37===i.keyCode?r.previousSibling:r.nextSibling)&&(n=(o=r.querySelectorAll("[data-selectable]"))[Math.min(o.length-1,s)])&&e.setActiveOption(n)})}),Vt.define("remove_button",function(e){const t=Object.assign({label:"&times;",title:"Remove",className:"remove",append:!0},e);var i=this;if(t.append){var s='<a href="javascript:void(0)" class="'+t.className+'" tabindex="-1" title="'+((t.title+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")+'">')+t.label+"</a>";i.hook("after","setupTemplates",()=>{var e=i.settings.render.item;i.settings.render.item=(t,n)=>{var o=ai(e.call(i,t,n)),r=ai(s);return o.appendChild(r),li(r,"mousedown",e=>{ri(e,!0)}),li(r,"click",e=>{i.isLocked||(ri(e,!0),i.isLocked||i.shouldDelete([o],e)&&(i.removeItem(o),i.refreshOptions(!1),i.inputState()))}),o}})}}),Vt.define("restore_on_backspace",function(e){const t=this,i=Object.assign({text:e=>e[t.settings.labelField]},e);t.on("item_remove",function(e){if(t.isFocused&&""===t.control_input.value.trim()){var s=t.options[e];s&&t.setTextboxValue(i.text.call(t,s))}})}),Vt.define("virtual_scroll",function(){const e=this,t=e.canLoad,i=e.clearActiveOption,s=e.loadCallback;var n,o,r,l={},a=!1,c=[],d=!1;if(e.settings.shouldLoadMore||(e.settings.shouldLoadMore=()=>{if(n.clientHeight/(n.scrollHeight-n.scrollTop)>.9)return!0;if(e.activeOption){var t=e.selectable();if(Array.from(t).indexOf(e.activeOption)>=t.length-2)return!0}return!1}),!e.settings.firstUrl)throw"virtual_scroll plugin requires a firstUrl() method";e.settings.sortField=[{field:"$order"},{field:"$score"}];const h=t=>!("number"==typeof e.settings.maxOptions&&n.children.length>=e.settings.maxOptions)&&!(!(t in l)||!l[t]),u=(t,i)=>e.items.indexOf(i)>=0||c.indexOf(i)>=0;e.setNextUrl=(e,t)=>{l[e]=t},e.getUrl=t=>{if(t in l){const e=l[t];return l[t]=!1,e}return e.clearPagination(),e.settings.firstUrl.call(e,t)},e.clearPagination=()=>{l={}},e.hook("instead","clearActiveOption",()=>{if(!a)return i.call(e)}),e.hook("instead","canLoad",i=>i in l?h(i):t.call(e,i)),e.hook("instead","loadCallback",(t,i)=>{if(a){if(o){const i=t[0];void 0!==i&&(o.dataset.value=i[e.settings.valueField])}}else e.clearOptions(u);s.call(e,t,i),a||d||(d=!0,""===e.lastValue&&(c=Object.keys(e.options),r=l[""])),a=!1}),e.hook("before","refreshOptions",()=>{e.activeOption&&"option"!==e.activeOption.getAttribute("role")&&e.setActiveOption(e.activeOption.previousElementSibling)}),e.hook("after","refreshOptions",()=>{const t=e.lastValue;var i;h(t)?(i=e.render("loading_more",{query:t}))&&(i.setAttribute("data-selectable",""),o=i):t in l&&!n.querySelector(".no-results")&&(i=e.render("no_more_results",{query:t})),i&&(((e,...t)=>{var i=di(t);(e=hi(e)).map(e=>{i.map(t=>{e.classList.add(t)})})})(i,e.settings.optionClass),n.append(i))});const p=()=>{d&&(e.clearOptions(u),r&&(l[""]=r))};e.on("type",t=>{""===t&&(p(),e.refreshOptions(!1))}),e.on("dropdown_close",p),e.on("initialize",()=>{c=Object.keys(e.options),n=e.dropdown_content,e.settings.render=Object.assign({},{loading_more:()=>'<div class="loading-more-results">Loading more results ... </div>',no_more_results:()=>'<div class="no-more-results">No more results</div>'},e.settings.render),n.addEventListener("scroll",()=>{e.settings.shouldLoadMore.call(e)&&h(e.lastValue)&&(a||(a=!0,e.load.call(e,e.lastValue)))})})});const ui=Math.min,pi=Math.max,mi=Math.round,gi=Math.floor,fi=e=>({x:e,y:e}),vi={left:"right",right:"left",bottom:"top",top:"bottom"};function yi(e,t){return"function"==typeof e?e(t):e}function bi(e){return e.split("-")[0]}function wi(e){return e.split("-")[1]}function Ei(e){return"y"===e?"height":"width"}function ki(e){const t=e[0];return"t"===t||"b"===t?"y":"x"}function _i(e){return"x"===ki(e)?"y":"x"}function Li(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const Si=["left","right"],xi=["right","left"],Ci=["top","bottom"],Ai=["bottom","top"];function Ti(e,t,i,s){const n=wi(e);let o=function(e,t,i){switch(e){case"top":case"bottom":return i?t?xi:Si:t?Si:xi;case"left":case"right":return t?Ci:Ai;default:return[]}}(bi(e),"start"===i,s);return n&&(o=o.map(e=>e+"-"+n),t&&(o=o.concat(o.map(Li)))),o}function Oi(e){const t=bi(e);return vi[t]+e.slice(t.length)}function Ii(e){const{x:t,y:i,width:s,height:n}=e;return{width:s,height:n,top:i,left:t,right:t+s,bottom:i+n,x:t,y:i}}function Fi(e,t,i){let{reference:s,floating:n}=e;const o=ki(t),r=_i(t),l=Ei(r),a=bi(t),c="y"===o,d=s.x+s.width/2-n.width/2,h=s.y+s.height/2-n.height/2,u=s[l]/2-n[l]/2;let p;switch(a){case"top":p={x:d,y:s.y-n.height};break;case"bottom":p={x:d,y:s.y+s.height};break;case"right":p={x:s.x+s.width,y:h};break;case"left":p={x:s.x-n.width,y:h};break;default:p={x:s.x,y:s.y}}switch(wi(t)){case"start":p[r]-=u*(i&&c?-1:1);break;case"end":p[r]+=u*(i&&c?-1:1)}return p}async function $i(e,t){var i;void 0===t&&(t={});const{x:s,y:n,platform:o,rects:r,elements:l,strategy:a}=e,{boundary:c="clippingAncestors",rootBoundary:d="viewport",elementContext:h="floating",altBoundary:u=!1,padding:p=0}=yi(t,e),m=function(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}(p),g=l[u?"floating"===h?"reference":"floating":h],f=Ii(await o.getClippingRect({element:null==(i=await(null==o.isElement?void 0:o.isElement(g)))||i?g:g.contextElement||await(null==o.getDocumentElement?void 0:o.getDocumentElement(l.floating)),boundary:c,rootBoundary:d,strategy:a})),v="floating"===h?{x:s,y:n,width:r.floating.width,height:r.floating.height}:r.reference,y=await(null==o.getOffsetParent?void 0:o.getOffsetParent(l.floating)),b=await(null==o.isElement?void 0:o.isElement(y))&&await(null==o.getScale?void 0:o.getScale(y))||{x:1,y:1},w=Ii(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:v,offsetParent:y,strategy:a}):v);return{top:(f.top-w.top+m.top)/b.y,bottom:(w.bottom-f.bottom+m.bottom)/b.y,left:(f.left-w.left+m.left)/b.x,right:(w.right-f.right+m.right)/b.x}}const qi=new Set(["left","top"]);function Di(){return"undefined"!=typeof window}function Mi(e){return zi(e)?(e.nodeName||"").toLowerCase():"#document"}function Bi(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Pi(e){var t;return null==(t=(zi(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function zi(e){return!!Di()&&(e instanceof Node||e instanceof Bi(e).Node)}function Hi(e){return!!Di()&&(e instanceof Element||e instanceof Bi(e).Element)}function Ri(e){return!!Di()&&(e instanceof HTMLElement||e instanceof Bi(e).HTMLElement)}function Ni(e){return!(!Di()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof Bi(e).ShadowRoot)}function ji(e){const{overflow:t,overflowX:i,overflowY:s,display:n}=Zi(e);return/auto|scroll|overlay|hidden|clip/.test(t+s+i)&&"inline"!==n&&"contents"!==n}function Vi(e){return/^(table|td|th)$/.test(Mi(e))}function Wi(e){try{if(e.matches(":popover-open"))return!0}catch(e){}try{return e.matches(":modal")}catch(e){return!1}}const Ui=/transform|translate|scale|rotate|perspective|filter/,Ki=/paint|layout|strict|content/,Ji=e=>!!e&&"none"!==e;let Gi;function Qi(e){const t=Hi(e)?Zi(e):e;return Ji(t.transform)||Ji(t.translate)||Ji(t.scale)||Ji(t.rotate)||Ji(t.perspective)||!Xi()&&(Ji(t.backdropFilter)||Ji(t.filter))||Ui.test(t.willChange||"")||Ki.test(t.contain||"")}function Xi(){return null==Gi&&(Gi="undefined"!=typeof CSS&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Gi}function Yi(e){return/^(html|body|#document)$/.test(Mi(e))}function Zi(e){return Bi(e).getComputedStyle(e)}function es(e){return Hi(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ts(e){if("html"===Mi(e))return e;const t=e.assignedSlot||e.parentNode||Ni(e)&&e.host||Pi(e);return Ni(t)?t.host:t}function is(e){const t=ts(e);return Yi(t)?e.ownerDocument?e.ownerDocument.body:e.body:Ri(t)&&ji(t)?t:is(t)}function ss(e,t,i){var s;void 0===t&&(t=[]),void 0===i&&(i=!0);const n=is(e),o=n===(null==(s=e.ownerDocument)?void 0:s.body),r=Bi(n);if(o){const e=ns(r);return t.concat(r,r.visualViewport||[],ji(n)?n:[],e&&i?ss(e):[])}return t.concat(n,ss(n,[],i))}function ns(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function os(e){const t=Zi(e);let i=parseFloat(t.width)||0,s=parseFloat(t.height)||0;const n=Ri(e),o=n?e.offsetWidth:i,r=n?e.offsetHeight:s,l=mi(i)!==o||mi(s)!==r;return l&&(i=o,s=r),{width:i,height:s,$:l}}function rs(e){return Hi(e)?e:e.contextElement}function ls(e){const t=rs(e);if(!Ri(t))return fi(1);const i=t.getBoundingClientRect(),{width:s,height:n,$:o}=os(t);let r=(o?mi(i.width):i.width)/s,l=(o?mi(i.height):i.height)/n;return r&&Number.isFinite(r)||(r=1),l&&Number.isFinite(l)||(l=1),{x:r,y:l}}const as=fi(0);function cs(e){const t=Bi(e);return Xi()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:as}function ds(e,t,i,s){void 0===t&&(t=!1),void 0===i&&(i=!1);const n=e.getBoundingClientRect(),o=rs(e);let r=fi(1);t&&(s?Hi(s)&&(r=ls(s)):r=ls(e));const l=function(e,t,i){return void 0===t&&(t=!1),!(!i||t&&i!==Bi(e))&&t}(o,i,s)?cs(o):fi(0);let a=(n.left+l.x)/r.x,c=(n.top+l.y)/r.y,d=n.width/r.x,h=n.height/r.y;if(o){const e=Bi(o),t=s&&Hi(s)?Bi(s):s;let i=e,n=ns(i);for(;n&&s&&t!==i;){const e=ls(n),t=n.getBoundingClientRect(),s=Zi(n),o=t.left+(n.clientLeft+parseFloat(s.paddingLeft))*e.x,r=t.top+(n.clientTop+parseFloat(s.paddingTop))*e.y;a*=e.x,c*=e.y,d*=e.x,h*=e.y,a+=o,c+=r,i=Bi(n),n=ns(i)}}return Ii({width:d,height:h,x:a,y:c})}function hs(e,t){const i=es(e).scrollLeft;return t?t.left+i:ds(Pi(e)).left+i}function us(e,t){const i=e.getBoundingClientRect();return{x:i.left+t.scrollLeft-hs(e,i),y:i.top+t.scrollTop}}function ps(e,t,i){let s;if("viewport"===t)s=function(e,t){const i=Bi(e),s=Pi(e),n=i.visualViewport;let o=s.clientWidth,r=s.clientHeight,l=0,a=0;if(n){o=n.width,r=n.height;const e=Xi();(!e||e&&"fixed"===t)&&(l=n.offsetLeft,a=n.offsetTop)}const c=hs(s);if(c<=0){const e=s.ownerDocument,t=e.body,i=getComputedStyle(t),n="CSS1Compat"===e.compatMode&&parseFloat(i.marginLeft)+parseFloat(i.marginRight)||0,r=Math.abs(s.clientWidth-t.clientWidth-n);r<=25&&(o-=r)}else c<=25&&(o+=c);return{width:o,height:r,x:l,y:a}}(e,i);else if("document"===t)s=function(e){const t=Pi(e),i=es(e),s=e.ownerDocument.body,n=pi(t.scrollWidth,t.clientWidth,s.scrollWidth,s.clientWidth),o=pi(t.scrollHeight,t.clientHeight,s.scrollHeight,s.clientHeight);let r=-i.scrollLeft+hs(e);const l=-i.scrollTop;return"rtl"===Zi(s).direction&&(r+=pi(t.clientWidth,s.clientWidth)-n),{width:n,height:o,x:r,y:l}}(Pi(e));else if(Hi(t))s=function(e,t){const i=ds(e,!0,"fixed"===t),s=i.top+e.clientTop,n=i.left+e.clientLeft,o=Ri(e)?ls(e):fi(1);return{width:e.clientWidth*o.x,height:e.clientHeight*o.y,x:n*o.x,y:s*o.y}}(t,i);else{const i=cs(e);s={x:t.x-i.x,y:t.y-i.y,width:t.width,height:t.height}}return Ii(s)}function ms(e,t){const i=ts(e);return!(i===t||!Hi(i)||Yi(i))&&("fixed"===Zi(i).position||ms(i,t))}function gs(e,t,i){const s=Ri(t),n=Pi(t),o="fixed"===i,r=ds(e,!0,o,t);let l={scrollLeft:0,scrollTop:0};const a=fi(0);function c(){a.x=hs(n)}if(s||!s&&!o)if(("body"!==Mi(t)||ji(n))&&(l=es(t)),s){const e=ds(t,!0,o,t);a.x=e.x+t.clientLeft,a.y=e.y+t.clientTop}else n&&c();o&&!s&&n&&c();const d=!n||s||o?fi(0):us(n,l);return{x:r.left+l.scrollLeft-a.x-d.x,y:r.top+l.scrollTop-a.y-d.y,width:r.width,height:r.height}}function fs(e){return"static"===Zi(e).position}function vs(e,t){if(!Ri(e)||"fixed"===Zi(e).position)return null;if(t)return t(e);let i=e.offsetParent;return Pi(e)===i&&(i=i.ownerDocument.body),i}function ys(e,t){const i=Bi(e);if(Wi(e))return i;if(!Ri(e)){let t=ts(e);for(;t&&!Yi(t);){if(Hi(t)&&!fs(t))return t;t=ts(t)}return i}let s=vs(e,t);for(;s&&Vi(s)&&fs(s);)s=vs(s,t);return s&&Yi(s)&&fs(s)&&!Qi(s)?i:s||function(e){let t=ts(e);for(;Ri(t)&&!Yi(t);){if(Qi(t))return t;if(Wi(t))return null;t=ts(t)}return null}(e)||i}const bs={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:i,offsetParent:s,strategy:n}=e;const o="fixed"===n,r=Pi(s),l=!!t&&Wi(t.floating);if(s===r||l&&o)return i;let a={scrollLeft:0,scrollTop:0},c=fi(1);const d=fi(0),h=Ri(s);if((h||!h&&!o)&&(("body"!==Mi(s)||ji(r))&&(a=es(s)),h)){const e=ds(s);c=ls(s),d.x=e.x+s.clientLeft,d.y=e.y+s.clientTop}const u=!r||h||o?fi(0):us(r,a);return{width:i.width*c.x,height:i.height*c.y,x:i.x*c.x-a.scrollLeft*c.x+d.x+u.x,y:i.y*c.y-a.scrollTop*c.y+d.y+u.y}},getDocumentElement:Pi,getClippingRect:function(e){let{element:t,boundary:i,rootBoundary:s,strategy:n}=e;const o=[..."clippingAncestors"===i?Wi(t)?[]:function(e,t){const i=t.get(e);if(i)return i;let s=ss(e,[],!1).filter(e=>Hi(e)&&"body"!==Mi(e)),n=null;const o="fixed"===Zi(e).position;let r=o?ts(e):e;for(;Hi(r)&&!Yi(r);){const t=Zi(r),i=Qi(r);i||"fixed"!==t.position||(n=null),(o?!i&&!n:!i&&"static"===t.position&&n&&("absolute"===n.position||"fixed"===n.position)||ji(r)&&!i&&ms(e,r))?s=s.filter(e=>e!==r):n=t,r=ts(r)}return t.set(e,s),s}(t,this._c):[].concat(i),s],r=ps(t,o[0],n);let l=r.top,a=r.right,c=r.bottom,d=r.left;for(let e=1;e<o.length;e++){const i=ps(t,o[e],n);l=pi(i.top,l),a=ui(i.right,a),c=ui(i.bottom,c),d=pi(i.left,d)}return{width:a-d,height:c-l,x:d,y:l}},getOffsetParent:ys,getElementRects:async function(e){const t=this.getOffsetParent||ys,i=this.getDimensions,s=await i(e.floating);return{reference:gs(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:s.width,height:s.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:i}=os(e);return{width:t,height:i}},getScale:ls,isElement:Hi,isRTL:function(e){return"rtl"===Zi(e).direction}};function ws(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Es(e,t,i,s){void 0===s&&(s={});const{ancestorScroll:n=!0,ancestorResize:o=!0,elementResize:r="function"==typeof ResizeObserver,layoutShift:l="function"==typeof IntersectionObserver,animationFrame:a=!1}=s,c=rs(e),d=n||o?[...c?ss(c):[],...t?ss(t):[]]:[];d.forEach(e=>{n&&e.addEventListener("scroll",i,{passive:!0}),o&&e.addEventListener("resize",i)});const h=c&&l?function(e,t){let i,s=null;const n=Pi(e);function o(){var e;clearTimeout(i),null==(e=s)||e.disconnect(),s=null}return function r(l,a){void 0===l&&(l=!1),void 0===a&&(a=1),o();const c=e.getBoundingClientRect(),{left:d,top:h,width:u,height:p}=c;if(l||t(),!u||!p)return;const m={rootMargin:-gi(h)+"px "+-gi(n.clientWidth-(d+u))+"px "+-gi(n.clientHeight-(h+p))+"px "+-gi(d)+"px",threshold:pi(0,ui(1,a))||1};let g=!0;function f(t){const s=t[0].intersectionRatio;if(s!==a){if(!g)return r();s?r(!1,s):i=setTimeout(()=>{r(!1,1e-7)},1e3)}1!==s||ws(c,e.getBoundingClientRect())||r(),g=!1}try{s=new IntersectionObserver(f,{...m,root:n.ownerDocument})}catch(e){s=new IntersectionObserver(f,m)}s.observe(e)}(!0),o}(c,i):null;let u,p=-1,m=null;r&&(m=new ResizeObserver(e=>{let[s]=e;s&&s.target===c&&m&&t&&(m.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var e;null==(e=m)||e.observe(t)})),i()}),c&&!a&&m.observe(c),t&&m.observe(t));let g=a?ds(e):null;return a&&function t(){const s=ds(e);g&&!ws(g,s)&&i();g=s,u=requestAnimationFrame(t)}(),i(),()=>{var e;d.forEach(e=>{n&&e.removeEventListener("scroll",i),o&&e.removeEventListener("resize",i)}),null==h||h(),null==(e=m)||e.disconnect(),m=null,a&&cancelAnimationFrame(u)}}const ks=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var i,s;const{x:n,y:o,placement:r,middlewareData:l}=t,a=await async function(e,t){const{placement:i,platform:s,elements:n}=e,o=await(null==s.isRTL?void 0:s.isRTL(n.floating)),r=bi(i),l=wi(i),a="y"===ki(i),c=qi.has(r)?-1:1,d=o&&a?-1:1,h=yi(t,e);let{mainAxis:u,crossAxis:p,alignmentAxis:m}="number"==typeof h?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return l&&"number"==typeof m&&(p="end"===l?-1*m:m),a?{x:p*d,y:u*c}:{x:u*c,y:p*d}}(t,e);return r===(null==(i=l.offset)?void 0:i.placement)&&null!=(s=l.arrow)&&s.alignmentOffset?{}:{x:n+a.x,y:o+a.y,data:{...a,placement:r}}}}},_s=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var i,s;const{placement:n,middlewareData:o,rects:r,initialPlacement:l,platform:a,elements:c}=t,{mainAxis:d=!0,crossAxis:h=!0,fallbackPlacements:u,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:g=!0,...f}=yi(e,t);if(null!=(i=o.arrow)&&i.alignmentOffset)return{};const v=bi(n),y=ki(l),b=bi(l)===l,w=await(null==a.isRTL?void 0:a.isRTL(c.floating)),E=u||(b||!g?[Oi(l)]:function(e){const t=Oi(e);return[Li(e),t,Li(t)]}(l)),k="none"!==m;!u&&k&&E.push(...Ti(l,g,m,w));const _=[l,...E],L=await a.detectOverflow(t,f),S=[];let x=(null==(s=o.flip)?void 0:s.overflows)||[];if(d&&S.push(L[v]),h){const e=function(e,t,i){void 0===i&&(i=!1);const s=wi(e),n=_i(e),o=Ei(n);let r="x"===n?s===(i?"end":"start")?"right":"left":"start"===s?"bottom":"top";return t.reference[o]>t.floating[o]&&(r=Oi(r)),[r,Oi(r)]}(n,r,w);S.push(L[e[0]],L[e[1]])}if(x=[...x,{placement:n,overflows:S}],!S.every(e=>e<=0)){var C,A;const e=((null==(C=o.flip)?void 0:C.index)||0)+1,t=_[e];if(t){if(!("alignment"===h&&y!==ki(t))||x.every(e=>ki(e.placement)!==y||e.overflows[0]>0))return{data:{index:e,overflows:x},reset:{placement:t}}}let i=null==(A=x.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:A.placement;if(!i)switch(p){case"bestFit":{var T;const e=null==(T=x.filter(e=>{if(k){const t=ki(e.placement);return t===y||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:T[0];e&&(i=e);break}case"initialPlacement":i=l}if(n!==i)return{reset:{placement:i}}}return{}}}},Ls=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){var i,s;const{placement:n,rects:o,platform:r,elements:l}=t,{apply:a=()=>{},...c}=yi(e,t),d=await r.detectOverflow(t,c),h=bi(n),u=wi(n),p="y"===ki(n),{width:m,height:g}=o.floating;let f,v;"top"===h||"bottom"===h?(f=h,v=u===(await(null==r.isRTL?void 0:r.isRTL(l.floating))?"start":"end")?"left":"right"):(v=h,f="end"===u?"top":"bottom");const y=g-d.top-d.bottom,b=m-d.left-d.right,w=ui(g-d[f],y),E=ui(m-d[v],b),k=!t.middlewareData.shift;let _=w,L=E;if(null!=(i=t.middlewareData.shift)&&i.enabled.x&&(L=b),null!=(s=t.middlewareData.shift)&&s.enabled.y&&(_=y),k&&!u){const e=pi(d.left,0),t=pi(d.right,0),i=pi(d.top,0),s=pi(d.bottom,0);p?L=m-2*(0!==e||0!==t?e+t:pi(d.left,d.right)):_=g-2*(0!==i||0!==s?i+s:pi(d.top,d.bottom))}await a({...t,availableWidth:L,availableHeight:_});const S=await r.getDimensions(l.floating);return m!==S.width||g!==S.height?{reset:{rects:!0}}:{}}}},Ss=(e,t,i)=>{const s=new Map,n={platform:bs,...i},o={...n.platform,_c:s};return(async(e,t,i)=>{const{placement:s="bottom",strategy:n="absolute",middleware:o=[],platform:r}=i,l=r.detectOverflow?r:{...r,detectOverflow:$i},a=await(null==r.isRTL?void 0:r.isRTL(t));let c=await r.getElementRects({reference:e,floating:t,strategy:n}),{x:d,y:h}=Fi(c,s,a),u=s,p=0;const m={};for(let i=0;i<o.length;i++){const g=o[i];if(!g)continue;const{name:f,fn:v}=g,{x:y,y:b,data:w,reset:E}=await v({x:d,y:h,initialPlacement:s,placement:u,strategy:n,middlewareData:m,rects:c,platform:l,elements:{reference:e,floating:t}});d=null!=y?y:d,h=null!=b?b:h,m[f]={...m[f],...w},E&&p<50&&(p++,"object"==typeof E&&(E.placement&&(u=E.placement),E.rects&&(c=!0===E.rects?await r.getElementRects({reference:e,floating:t,strategy:n}):E.rects),({x:d,y:h}=Fi(c,u,a))),i=-1)}return{x:d,y:h,placement:u,strategy:n,middlewareData:m}})(e,t,{...n,platform:o})};class xs extends HTMLSelectElement{#Ee=null;connectedCallback(){this.classList.add("alchemy_selectbox"),this.#ke()}disconnectedCallback(){this.#_e()}enable(){this.removeAttribute("disabled"),this.#Ee?.enable()}disable(){this.setAttribute("disabled","disabled"),this.#Ee?.disable()}setOptions(e,t=void 0){const i=this.value;this.#_e(),this.innerHTML="",t&&this.add(new Option(t,"")),e.forEach(e=>{this.add(new Option(e.text,e.id,!1,e.id===i))}),this.#ke()}get allowClear(){return this.dataset.hasOwnProperty("allowClear")||this.multiple}get placeholder(){return this.getAttribute("placeholder")}#ke(){const e={},t=!!this.placeholder,i=!!this.querySelector("option[selected]"),s=document.createElement("div");s.className="ts-dropdown-mask";let n=()=>{};this.multiple&&(e.remove_button={title:d("Remove")}),this.allowClear&&(e.clear_button={html:()=>`<button type="button" class="clear-button" aria-label="${d("Clear selection")}">\n <alchemy-icon name="close" size="1x"></alchemy-icon>\n </button>`});const o={plugins:e,closeAfterSelect:!this.multiple,onInitialize:function(){this.input.autofocus&&this.focus(),t&&!i&&this.clear()},onType(e){this.control_input.classList.toggle("has-value",e.length>0)},refreshThrottle:0,onDropdownOpen:async function(){const e={minWidth:`${this.control.offsetWidth}px`};this.control.closest(".alchemy-dialog-body, .alchemy-popover")&&(e.zIndex="101"),Object.assign(this.dropdown.style,e),document.body.append(s),document.body.append(this.dropdown);n=Es(this.control,this.dropdown,async()=>{const{x:e,y:t}=await Ss(this.control,this.dropdown,{middleware:[_s(),ks(2),Ls({apply({availableHeight:e,elements:t}){Object.assign(t.floating.querySelector(".ts-dropdown-content").style,{maxHeight:`${Math.max(120,e-16)}px`})}})]});Object.assign(this.dropdown.style,{left:`${e}px`,top:`${t}px`})})},onDropdownClose:function(){this.control_input.classList.remove("has-value"),this.dropdown.remove(),s.remove(),n()},allowEmptyOption:!0,openOnFocus:!1,sortField:"$order",maxOptions:null,render:{option_create:(e,t)=>`<div class="create">\n ${d("Add")}<strong>${t(e.input)}</strong>&hellip;\n </div>`,no_results:()=>`<div class="no-results">${d("No results found")}</div>`}};this.#Ee=new Vt(this,o),this.#Ee.control.addEventListener("click",this.#Ee.open.bind(this.#Ee))}#_e(){this.#Ee?.close(!1),this.#Ee?.destroy(),this.#Ee=null}}customElements.define("alchemy-select",xs,{extends:"select"});class Cs extends HTMLElement{connectedCallback(){this.searchInput=document.querySelector(".search_input_field"),this.clearButton=document.querySelector("#search_field_clear"),this.resultCounter=document.querySelector("#page_filter_result"),this.setupSearch(),requestAnimationFrame(()=>{this.setupSortables()}),this.observer=new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE&&(e.classList?.contains("children")&&this.setupSortable(e),e.querySelectorAll(".children").forEach(e=>this.setupSortable(e)))})})}),this.observer.observe(this,{childList:!0,subtree:!0})}disconnectedCallback(){this.teardownSearch(),this.observer?.disconnect()}setupSearch(){this.searchInput?.addEventListener("input",this),this.clearButton?.addEventListener("click",this)}teardownSearch(){this.searchInput?.removeEventListener("input",this),this.clearButton?.removeEventListener("click",this)}handleEvent(e){"input"===e.type&&e.target===this.searchInput?this.handleSearch(e):"click"===e.type&&e.target===this.clearButton&&this.handleClearSearch(e)}handleSearch(e){const t=e.target.value.toLowerCase().trim();""!==t?this.filterPages(t):this.clearFilter()}filterPages(e){const t=this.querySelectorAll(".sitemap_page");let i=0,s=null;t.forEach(t=>{(t.getAttribute("name")||"").toLowerCase().includes(e)?(t.classList.add("highlight"),t.classList.remove("no-match"),i++,s||(s=t)):(t.classList.remove("highlight"),t.classList.add("no-match"))}),1===i?(this.resultCounter.textContent=`1 ${d("page_found")}`,this.resultCounter.style.display="block"):i>1?(this.resultCounter.textContent=`${i} ${d("pages_found")}`,this.resultCounter.style.display="block"):this.resultCounter.style.display="none",s&&s.scrollIntoView({behavior:"smooth",block:"center"})}clearFilter(){this.querySelectorAll(".sitemap_page").forEach(e=>{e.classList.remove("highlight","no-match")}),this.resultCounter.style.display="none"}handleClearSearch(e){e.preventDefault(),this.searchInput.value="",this.clearFilter()}setupSortable(e){new s(e,{group:"pages",animation:150,fallbackOnBody:!0,swapThreshold:.65,handle:".page-icon.handle",draggable:"alchemy-page-node",onEnd:e=>this.handleSort(e)})}setupSortables(){this.querySelectorAll(".children").forEach(e=>this.setupSortable(e))}async handleSort(e){if(e.from===e.to&&e.oldIndex===e.newIndex)return;const t=e.item,i=t.pageId,s=Alchemy.routes.move_admin_page_path(i),n={target_parent_id:e.to.dataset.parentId,new_position:e.newIndex};L(!0);try{const o=await te(s,n),r=await o.data,l=t.querySelector(`#page_${i}`);if(l){const e=l.querySelector(".sitemap_url");e&&r.url_path&&(e.textContent=r.url_path)}this.updateFolderIcons(e.from,e.to),T(d("Successfully moved page"))}catch(e){T(e.message||e,"error"),window.location.reload()}finally{L(!1)}}updateFolderIcons(e,t){const i=e.closest("alchemy-page-node");if(i?.updateFolderButton(),e!==t){const e=t.closest("alchemy-page-node");e?.updateFolderButton()}}}customElements.define("alchemy-sitemap",Cs);const As={draggable:".element-editor",handle:".element-handle.draggable",ghostClass:"dragged",animation:150,swapThreshold:.65,easing:"cubic-bezier(1, 0, 0, 1)"};function Ts(e){const t=e.item.dataset.elementName;document.querySelectorAll(`[data-droppable-elements~="${t}"]`).forEach(e=>e.classList.add("droppable-elements"))}function Os(e){const t=e.item,i=e.to.parentElement.closest(".element-editor"),s={element_id:t.dataset.elementId,position:e.newIndex+1};i&&(s.parent_element_id=i.dataset.elementId),e.target===e.to&&ie(Alchemy.routes.order_admin_elements_path,s).then(e=>{const i=e.data;T(i.message),i.pageHasUnpublishedChanges&&oe(i),q(),t.updateTitle(i.preview_text)})}function Is(){document.querySelectorAll("[data-droppable-elements]").forEach(e=>e.classList.remove("droppable-elements"))}class Fs extends HTMLElement{connectedCallback(){const e={name:this.dataset.elementName,put:(e,t,i)=>e.el.dataset.droppableElements.split(" ").includes(i.dataset.elementName)};new s(this,{...As,onStart:Ts,onSort:Os,onEnd:Is,group:e})}}customElements.define("alchemy-sortable-elements",Fs);class $s extends HTMLElement{connectedCallback(){this.className=`spinner spinner--${this.size}`,this.innerHTML=`\n <svg width="100%" viewBox="0 0 28 28" style="--spinner-color: ${this.color}">\n <path\n class="hex1"\n d="M5.938,18.07l-5.878-5.9l2.154-8.058l8.024-2.161l5.87,5.9l-2.144,8.058L5.938,18.07z"\n />\n <path\n class="hex2"\n d="M19.686,20.785l-4.731-4.754l1.725-6.487l6.468-1.742l4.733,4.754l-1.734,6.487L19.686,20.785z"\n />\n <path\n class="hex3"\n d="M11.708,26.294l-3.47-3.485l1.276-4.758l4.74-1.276l3.468,3.485l-1.265,4.758L11.708,26.294z"\n />\n </svg>\n `}get size(){return this.getAttribute("size")||"medium"}get color(){return this.getAttribute("color")||"currentColor"}}customElements.define("alchemy-spinner",$s);class qs extends HTMLElement{#d=null;async connectedCallback(){await h(),this.isConnected&&(this.classList.add("autocomplete_tag_list"),this.#d=$(this.input).select2(this.select2Config))}disconnectedCallback(){this.#d?.select2("destroy"),this.#d=null}get input(){return this.getElementsByTagName("input")[0]}get select2Config(){return{tags:!0,tokenSeparators:[","],openOnEnter:!1,minimumInputLength:1,createSearchChoice:this.#Le,ajax:{url:this.getAttribute("url"),dataType:"json",data:e=>({term:e}),results:e=>({results:e})},initSelection:this.#Se}}#Le(e,t){if(0===$(t).filter(function(){return 0===this.text.localeCompare(e)}).length)return{id:e,text:e}}#Se(e,t){const i=[];$(e.val().split(",")).each(function(){i.push({id:this.trim(),text:this})}),t(i)}}customElements.define("alchemy-tags-autocomplete",qs);const Ds="alchemy-dark",Ms="alchemy";class Bs extends HTMLElement{#xe=null;connectedCallback(){this.className="tinymce_container",this.querySelector(":scope > alchemy-spinner")||this.insertAdjacentHTML("beforeend",'<alchemy-spinner size="small"></alchemy-spinner>'),this.style.minHeight=`${this.minHeight}px`,this.editor.style.display="none";const e={root:document.getElementById("element_area"),rootMargin:"0px",threshold:[.05]};this.tinymceIntersectionObserver=new IntersectionObserver((e,t)=>{e.forEach(e=>{e.intersectionRatio>0&&(this._initTinymceEditor(),t.unobserve(e.target))})},e),this.tinymceIntersectionObserver.observe(this),this._setupThemeChangeListener()}disconnectedCallback(){this.tinymceIntersectionObserver?.disconnect(),this._removeThemeChangeListener(),tinymce.get(this.editorId)?.remove(this.editorId)}_initTinymceEditor(){tinymce.init(this.configuration).then(e=>{e.forEach(e=>this._setupEditor(e))})}_setupEditor(e){e.show();const t=this.getElementsByTagName("alchemy-spinner")[0];t&&t.remove(),this.elementEditor&&(e.on("dirty",e=>{this.elementEditor.setDirty(e.target.editorContainer)}),e.on("click",()=>this.elementEditor.onClickElement(!1)))}_setupThemeChangeListener(){this.darkModeMediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.themeChangeHandler=e=>this._handleThemeChange(e),this.darkModeMediaQuery.addEventListener("change",this.themeChangeHandler)}_removeThemeChangeListener(){this.darkModeMediaQuery&&this.themeChangeHandler&&this.darkModeMediaQuery.removeEventListener("change",this.themeChangeHandler)}_handleThemeChange(e){const t=tinymce.get(this.editorId);if(t){const i=e.matches?Ds:Ms,s=e.matches?Ds:Ms;t.remove(),tinymce.init({content_css:s,...this.configuration,skin:i}).then(e=>{e.forEach(e=>this._setupEditor(e))})}}get configuration(){const e={};this.getAttributeNames().forEach(t=>{if(!["class","id","is","name","style"].includes(t)){const i=this.getAttribute(t),s=t.replaceAll("-","_");if(i===t||""===i)e[s]=!0;else try{e[s]=JSON.parse(i)}catch(t){e[s]=i}}});const t={content_css:this.preferredTheme,...Alchemy.TinymceDefaults,...e,language:c(),selector:`#${this.editorId}`,skin:this.preferredTheme};return t.height=t.min_height,t}get preferredTheme(){return window.matchMedia("(prefers-color-scheme: dark)").matches?Ds:Ms}get editorId(){return this.editor.id}get editor(){return this.getElementsByTagName("textarea")[0]}get elementEditor(){return document.getElementById(this.editorId).closest("alchemy-element-editor")}get minHeight(){return this.#xe||this.configuration.min_height}set minHeight(e){this.#xe=e}}customElements.define("alchemy-tinymce",Bs);class Ps extends HTMLElement{async connectedCallback(){const e=new g("small");e.spin(this);try{const e=await fetch(this.url,{credentials:"include"}),t=await e.json();e.ok?this.showStatus(t):this.showError(e)}catch(e){this.showError(e)}finally{e.stop()}}get url(){return this.getAttribute("url")}showStatus(e){"true"==e.status?this.querySelector(".update_available").classList.remove("hidden"):this.querySelector(".up_to_date").classList.remove("hidden")}showError(e){this.querySelector(".error").classList.remove("hidden"),console.error("[alchemy] Error fetching update status",e)}}var zs;customElements.define("alchemy-update-check",Ps),zs=Handlebars.template,(Handlebars.templates=Handlebars.templates||{})["node_folder.hbs"]=zs({0:function(e,t,i,s,n){return"right"},1:function(e,t,i,s,n){return"down"},compiler:[8,">= 4.3.0"],main:function(e,t,i,s,n){var o,r=e.lambda,l=e.escapeExpression,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<a class="node_folder" data-record-id="'+l(r(null!=(o=null!=t?a(t,"node"):t)?a(o,"id"):o,t))+'" data-record-type="'+l(r(null!=(o=null!=t?a(t,"node"):t)?a(o,"type"):o,t))+'">\n <alchemy-icon name="arrow-'+(null!=(o=a(i,"if").call(null!=t?t:e.nullContext||{},null!=(o=null!=t?a(t,"node"):t)?a(o,"folded"):o,{name:"if",hash:{},fn:e.program(0,n,0),inverse:e.program(1,n,0),data:n,loc:{start:{line:2,column:28},end:{line:2,column:72}}}))?o:"")+'-s"></alchemy-icon>\n</a>\n'},useData:!0}),n("tooltip.show",{keyframes:[{transform:"translateY(10px)",opacity:"0"},{transform:"translateY(0)",opacity:"1"}],options:{duration:100}}),n("tooltip.hide",{keyframes:[{transform:"translateY(0)",opacity:"1"},{transform:"translateY(10px)",opacity:"0"}],options:{duration:100}}),n("dialog.show",{keyframes:[{transform:"scale(0.98)",opacity:"0"},{transform:"scale(1)",opacity:"1"}],options:{duration:150}}),n("dialog.hide",{keyframes:[{transform:"scale(1)",opacity:"1"},{transform:"scale(0.98)",opacity:"0"}],options:{duration:150}});const Hs=document.querySelector('link[rel="preload"][as="image"]').getAttribute("href"),Rs={"x-lg":"close",caret:"arrow-down-s"},Ns={resolver:e=>`${Hs}#ri-${Rs[e]||e}-line`,mutator:e=>{e.setAttribute("fill","currentColor"),e.setAttribute("viewBox","0 0 24 24")},spriteSheet:!0};function js(e,t,i,s){document.querySelectorAll(t).forEach(t=>{t.addEventListener(e,e=>{const n=Array.from(t.querySelectorAll(i));let o=e.target;for(;o!==t;){if(n.includes(o))return void s.call(o,e);o=o.parentElement}})})}o("default",Ns),o("system",Ns);class Vs{#Ce=!1;#Ae=null;#Te=null;#Oe=null;constructor(e,t){this.image=e,this.defaultBox=t.default_box,this.aspectRatio=t.ratio,this.#Te=document.getElementById(t.crop_from_form_field_id),this.#Oe=document.getElementById(t.crop_size_form_field_id),this.elementId=t.element_id,this.elementEditor=document.querySelector(`[data-element-id='${this.elementId}']`),this.dialog=Alchemy.currentDialog(),this.dialog&&(this.dialog.options.closed=()=>this.destroy(),this.bind()),this.init()}get cropperOptions(){return{aspectRatio:this.aspectRatio,viewMode:1,zoomable:!1,checkCrossOrigin:!1,checkOrientation:!1,data:this.box}}get cropFrom(){if(this.#Te?.value)return this.#Te.value.split("x").map(e=>parseInt(e))}get cropSize(){if(this.#Oe?.value)return this.#Oe.value.split("x").map(e=>parseInt(e))}get box(){return this.cropFrom&&this.cropSize?{x:this.cropFrom[0],y:this.cropFrom[1],width:this.cropSize[0],height:this.cropSize[1]}:this.defaultBoxSize}get defaultBoxSize(){return{x:this.defaultBox[0],y:this.defaultBox[1],width:this.defaultBox[2],height:this.defaultBox[3]}}init(){this.#Ce||(this.#Ae=new r(this.image,this.cropperOptions),this.#Ce=!0)}update(e){this.#Te.value=`${e.x}x${e.y}`,this.#Te.dispatchEvent(new Event("change")),this.#Oe.value=`${e.width}x${e.height}`,this.#Oe.dispatchEvent(new Event("change"))}reset(){const e=this.#Ae;e.setData(this.defaultBoxSize);const t=e.getCanvasData(),i=t.width/t.naturalWidth;e.setCropBoxData({left:t.left+this.defaultBoxSize.x*i,top:t.top+this.defaultBoxSize.y*i}),this.update(this.defaultBoxSize)}destroy(){return this.#Ae&&this.#Ae.destroy(),this.#Ce=!1,!0}bind(){this.dialog.dialog_body.find('button[type="submit"]').on("click",()=>{const e=this.#Ae.getData(!0);return this.update(e),this.elementEditor.setDirty(),this.dialog.close(),!1}),this.dialog.dialog_body.find('button[type="reset"]').on("click",()=>(this.reset(),!1))}}class Ws extends y{constructor(e,t={}){super(e,t)}init(){$(".zoomed-picture-background").on("click",e=>{if(e.stopPropagation(),"IMG"!==e.target.nodeName)return this.close(),!1}),$(".picture-overlay-handle").on("click",e=>(this.dialog.toggleClass("hide-form"),!1)),this.$previous=$(".previous-picture"),this.$next=$(".next-picture"),this.#Ie(),super.init()}previous(){null!=this.$previous[0]&&this.$previous[0].click()}next(){null!=this.$next[0]&&this.$next[0].click()}build(){this.dialog_container=$('<div class="alchemy-image-overlay-container" />'),this.dialog=$('<div class="alchemy-image-overlay-dialog" />'),this.dialog_body=$('<div class="alchemy-image-overlay-body" />'),this.close_button=$('<a class="alchemy-image-overlay-close">\n <alchemy-icon name="close" size="xl"></alchemy-icon>\n </a>'),this.dialog.append(this.close_button),this.dialog.append(this.dialog_body),this.dialog_container.append(this.dialog),this.overlay=$('<div class="alchemy-image-overlay" />'),this.$body.append(this.overlay),this.$body.append(this.dialog_container)}#Ie(){this.$document.keydown(e=>{if("INPUT"===e.target.nodeName||"TEXTAREA"===e.target.nodeName)return!0;switch(e.which){case 37:return this.previous(),!1;case 39:return this.next(),!1;default:return!0}})}}function Us(){return document.querySelectorAll("#picture_archive input:checked")}function Ks(){const e=document.querySelector("#select_all_pictures"),t=document.querySelector(".selected_item_tools");js("click",".toolbar_buttons","a#select_all_pictures",i=>{i.preventDefault(),e.classList.toggle("active");const s=e.classList.contains("active");!function(e){document.querySelectorAll(".picture_tool.select input[type='checkbox']").forEach(t=>{t.checked=e,t.closest(".picture_thumbnail").classList.toggle("active",e)})}(s),t.classList.toggle("hidden",!s)}),js("change",".picture_tool.select","input",e=>{t.classList.toggle("hidden",0===Us().length);const i=e.target.parentElement.classList,s=e.target.checked;i.toggle("visible",s)}),js("click",".selected_item_tools","a#edit_multiple_pictures",e=>{e.preventDefault();E(function(e){const t=new URL(e);return Us().forEach(e=>t.searchParams.append(e.name,e.value)),t.toString()}(e.target.href),{title:e.target.title,size:"400x295"})})}function Js(){document.querySelectorAll("li.menu-item").forEach(e=>{const t=e.querySelector(".nodes_tree-left_images"),i=e.querySelector(".children"),s={folded:"true"===e.dataset.folded,id:e.dataset.id,type:e.dataset.type};i.children.length>0||s.folded?t.innerHTML=Handlebars.templates["node_folder.hbs"]({node:s}):t.innerHTML="&nbsp;"})}function Gs(e){te(Alchemy.routes[e.item.dataset.type].move_api_path(e.item.dataset.id),{target_parent_id:e.to.dataset.recordId,new_position:e.newIndex}).then(()=>{T(Alchemy.t("Successfully moved menu item")),Js()}).catch(e=>{T(e.message||e,"error")})}function Qs(){js("click",".nodes_tree",".node_folder",function(){const e=this.dataset.recordId,t=this.closest("li.menu-item"),i=Alchemy.routes[this.dataset.recordType].toggle_folded_api_path(e),s=t.querySelector(".children");te(i).then(()=>{s.classList.toggle("folded"),t.dataset.folded="true"==t.dataset.folded?"false":"true",Js()}).catch(e=>{T(e.message||e)})}),Js(),document.querySelectorAll(".nodes_tree ul.children").forEach(e=>{new s(e,{group:"nodes",animation:150,fallbackOnBody:!0,swapThreshold:.65,handle:".node_name",invertSwap:!0,onEnd:Gs})})}void 0===window.Alchemy&&(window.Alchemy={}),Object.assign(Alchemy,{closeCurrentDialog:w,currentDialog:b,...x,t:d,FixedElements:A,growl:T,LinkDialog:class extends y{#Fe;constructor(e){const t=new URL(Alchemy.routes.link_admin_pages_path,window.location),i={url:e.url,selected_tab:e.type,link_title:e.title,link_target:e.target};Object.keys(i).forEach(e=>{i[e]&&t.searchParams.set(e,i[e])}),super(t.href,{size:"600x320",title:d("Link")})}replace(e){super.replace(e),this.#a()}open(){return super.open(),new Promise(e=>this.#Fe=e)}#a(){const e=document.querySelector('[data-link-form-type="internal"]'),t=document.querySelector('[data-link-form-type="file"] alchemy-attachment-select');e.addEventListener("Alchemy.RemoteSelect.Change",e=>{this.#$e(e.detail.added)}),t.addEventListener("Alchemy.RemoteSelect.Change",e=>{const t=e.detail.added;document.getElementById("file_link").value=t?t.url:""}),document.querySelectorAll("[data-link-form-type]").forEach(e=>{e.addEventListener("submit",e=>{e.preventDefault(),this.#qe(e.target.dataset.linkFormType)})})}#$e(e=null){const t=document.getElementById("internal_link"),i=document.querySelector('[data-link-form-type="internal"] alchemy-dom-id-api-select');t.value=e?e.url_path:"",i.page=e?e.id:void 0}#qe(e){const t=document.getElementById("element_anchor");let i=document.getElementById(`${e}_link`).value;if("internal"===e&&""!==t.value)i=i.replace(I,"")+t.value;else if("external"===e&&!i.match(Alchemy.link_url_regexp))return void this.#De();this.#Fe({url:i.trim(),title:document.getElementById(`${e}_link_title`).value,target:document.getElementById(`${e}_link_target`)?.value,type:e}),this.close()}#De(){const e=document.getElementById("errors");e.querySelector("ul").innerHTML=`<li>${Alchemy.t("url_validation_failed")}</li>`,e.style.display="block"}},pleaseWaitOverlay:L,Spinner:g,reloadPreview:q}),t.start(),e.config.forms.confirm=_,document.addEventListener("turbo:load",function(){document.documentElement.classList.remove("no-js"),p(),document.removeEventListener("keypress",O),document.addEventListener("keypress",O),document.querySelectorAll(".please_wait").forEach(e=>{e.addEventListener("click",L)}),document.querySelectorAll("a.button").forEach(e=>{e.setAttribute("tabindex",0)}),key.filter=function(e){let t=(e.target||e.srcElement).tagName;return key.isPressed("esc")||!("INPUT"===t||"SELECT"===t||"TEXTAREA"===t)}});export{H as AttachmentSelect,de as ElementSelect,Vs as ImageCropper,Ws as ImageOverlay,Qs as NodeTree,Oe as PageSelect,z as RemoteSelect,qs as TagsAutocomplete,Bs as Tinymce,js as on,Ks as pictureSelector};
1
+ import"@ungap/custom-elements";import{Turbo as e}from"@hotwired/turbo-rails";import"keymaster";import t from"tom-select";import{autoUpdate as s,computePosition as i,offset as n,flip as l,shift as o,size as r}from"@floating-ui/dom";import"clipboard";import a from"flatpickr";import c from"cropperjs";import d from"sortablejs";import"tinymce";import{setDefaultAnimation as h,registerIconLibrary as u}from"shoelace";const m=/\./;function p(e){const t=g(),s=window.Alchemy?.translations;return s?m.test(e)?function(e,t){const s=t.split(m),i=e[s[0]];return i&&i[s[1]]||t}(s,e):s[e]||e:(console.warn(`Translations for locale ${t} not found!`),e)}function g(){return document.documentElement.lang?document.documentElement.lang:"en"}function y(e,t=void 0){let s=p(e);return t?s.replace(/%\{.+\}/,t):s}const v=[];function b(e=document){e===document&&v.forEach(e=>key.unbind(e));const t=e.querySelectorAll(".search_input_field"),s=e.querySelectorAll(".search_field_clear, .js_filter_field_clear");key("alt+f",function(){return key.setScope("search"),t.forEach(e=>e.focus({focusVisible:!0})),!1}),v.push("alt+f"),key("esc","search",function(){s.forEach(e=>e.click()),t.forEach(e=>e.blur())}),v.push("esc"),e.querySelectorAll("[data-alchemy-hotkey]").forEach(function(e){const t=e.dataset.alchemyHotkey;key(t,()=>e.click()),v.push(t)})}function f(e){const t=document.createElement("template");return t.innerHTML=e,t.content.children[0]}let E=class{constructor(e,t="currentColor"){this.size=e,this.color=t,this.spinner=void 0}get el(){return this.spinner}spin(e){return void 0===e&&(e=document.body),this.spinner=f(`<alchemy-spinner size="${this.size}" color="${this.color}"></alchemy-spinner>`),e.append(this.spinner),this}stop(){this.spinner&&(this.spinner.remove(),this.spinner=void 0)}};function w(e,t,s={}){e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:s}))}function k(e,t,s,i){document.querySelectorAll(t).forEach(t=>{t.addEventListener(e,e=>{const n=Array.from(t.querySelectorAll(s));let l=e.target;for(;l!==t;){if(n.includes(l))return void i.call(l,e);l=l.parentElement}})})}const L=[],_={header_height:36,size:"400x300",padding:!0,title:"",modal:!0,overflow:"visible",ready:()=>{},closed:()=>{}};class S{#e=null;#t=!1;constructor(e,t={}){this.url=e,this.options={..._,...t};const s=this.options.size.split("x");this.width=parseInt(s[0],10),this.height=parseInt(s[1],10),this.build(),this.resize()}open(){w(this.dialog,"Alchemy.DialogOpen"),this.bind_close_events(),this.options.modal?(this.dialog_container.showModal(),this.#s()):this.dialog_container.show(),window.requestAnimationFrame(()=>{this.dialog_container.classList.add("open")}),document.body.classList.add("prevent-scrolling"),L.push(this),this.load()}close(){return this.#t||(this.#t=!0,w(this.dialog,"DialogClose.Alchemy"),this.dialog_container.classList.remove("open"),this.dialog_container.addEventListener("transitionend",()=>{this.#i(),this.dialog_container.close(),this.dialog_container.remove(),L.pop(),0===L.length&&document.body.classList.remove("prevent-scrolling"),null!=this.options.closed&&this.options.closed()},{once:!0})),!0}#s(){const e=document.getElementById("flash_notices");e&&(this.#e=e.parentElement,this.dialog_container.append(e),this.#n(e))}#i(){const e=document.getElementById("flash_notices");e&&this.#e&&this.#e.append(e)}#n(e){e.querySelectorAll('alchemy-message[dismissable]:not([type="error"])').forEach(e=>e.remove())}load(){this.show_spinner(),fetch(this.url,{headers:{"Turbo-Frame":"alchemy_dialog_frame"}}).then(async t=>{const s=await t.text();t.headers.get("content-type")?.includes("text/vnd.turbo-stream.html")?e.renderStreamMessage(s):t.ok?this.replace(s):this.show_error({status:t.status,statusText:t.statusText,responseText:s})}).catch(()=>{this.show_error({status:0})})}reload(){this.dialog_body.innerHTML="",this.load()}replace(e){this.remove_spinner(),this.dialog_body.style.display="none",this.dialog_body.innerHTML=e,this.init(),w(this.dialog,"DialogReady.Alchemy",{body:this.dialog_body}),null!=this.options.ready&&this.options.ready(this.dialog_body),this.dialog_body.style.display=""}show_spinner(){this.spinner=new E("medium"),this.spinner.spin(this.dialog_body)}remove_spinner(){this.spinner.stop()}init(){b(this.dialog_body),window.requestAnimationFrame(()=>this.#l())}#l(e=0){const t=this.dialog_body.querySelector("[autofocus]")??this.dialog_body.querySelector("form [type='submit']");t?.focus(),document.activeElement===this.close_button&&e<20&&window.requestAnimationFrame(()=>this.#l(e+1))}show_error(e,t){if(422===e.status)return this.dialog_body.innerHTML=e.responseText,void this.init();const{error_body:s,error_header:i,error_type:n}=this.error_messages(e,t);this.dialog_body.innerHTML=`<alchemy-message type="${n}">\n <h1>${i}</h1>\n <p>${s}</p>\n </alchemy-message>`}error_messages(e,t){let s,i,n="warning";switch(e.status){case 0:i="The server does not respond.",s="Please check server and try again.";break;case 403:i="You are not authorized!",s="Please close this window.";break;default:n="error",t?(i=t,console.error(e.responseText)):i=`${e.statusText} (${e.status})`,s="Please check log and try again."}return{error_header:i,error_body:s,error_type:n}}bind_close_events(){this.close_button.addEventListener("click",e=>{e.preventDefault(),this.close()}),this.dialog_container.addEventListener("close",e=>{e.preventDefault(),this.close()}),this.dialog_container.classList.add("closable"),this.dialog_container.addEventListener("pointerdown",e=>{e.target===this.dialog_container&&this.close()}),this.dialog_container.addEventListener("cancel",e=>{e.target===this.dialog_container&&(e.preventDefault(),this.close())})}build(){this.dialog_container=f('<dialog class="alchemy-dialog-container"></dialog>'),this.dialog=f('<div class="alchemy-dialog"></div>'),this.dialog_body=f('<div class="alchemy-dialog-body"></div>'),this.dialog_header=f('<div class="alchemy-dialog-header"></div>'),this.dialog_title=f('<div class="alchemy-dialog-title"></div>'),this.close_button=f('<button class="alchemy-dialog-close"><alchemy-icon name="close"></alchemy-icon></button>'),this.dialog_title.textContent=this.options.title,this.dialog_header.append(this.dialog_title),this.dialog_header.append(this.close_button),this.dialog.append(this.dialog_header),this.dialog.append(this.dialog_body),this.dialog_container.append(this.dialog),this.options.modal&&this.dialog.classList.add("modal"),this.options.padding&&this.dialog_body.classList.add("padded"),document.body.append(this.dialog_container)}resize(){const{width:e,height:t}=this.getSize();this.dialog.style.width=`${e}px`,this.dialog.style.minHeight=`${t}px`,this.dialog.style.overflow=this.options.overflow,"hidden"===this.options.overflow?(this.dialog_body.style.height=`${t}px`,this.dialog_body.style.overflow="auto"):(this.dialog_body.style.minHeight=`${t}px`,this.dialog_body.style.overflow="visible")}getSize(){const e=this.options.padding?16:0,t=window.innerWidth,s=window.innerHeight;let i=this.width,n=this.height;return i>=t&&(i=t-e),n>=s&&(n=s-e-_.header_height),{width:i,height:n}}}function C(){const{length:e}=L;if(0!==e)return L[e-1]}function x(e){const t=C();if(null!=t)return t.options.closed=e,t.close()}function A(e,t){if(!e)throw"No url given! Please provide an url.";new S(e,t).open()}function T(e){const t=document.getElementById("fixed-elements"),s=`fixed-element-${e}`;t.querySelector(`sl-tab[panel="${s}"]`).remove(),t.querySelector(`sl-tab-panel[name="${s}"]`).remove(),t.show("main-content-elements")}var I=Object.freeze({__proto__:null,createTab:function(e,t){const s=document.getElementById("fixed-elements"),i=`fixed-element-${e}`,n=`<sl-tab slot="nav" panel="${i}">${t}</sl-tab>`,l=`<sl-tab-panel name="${i}" style="--padding: 0" />`;s.innerHTML+=n+l,window.requestAnimationFrame(function(){s.show(i)})},removeTab:T});function F(e,t="notice"){!function(e,t){const s=document.getElementById("flash_notices"),i=f(`\n <alchemy-message type="${t}" dismissable>\n ${e}\n </alchemy-message>\n `);s.append(i)}(e,t)}function q(e=!0){document.querySelector("alchemy-overlay").show=!!e}function $(e){return!(!e.target.matches("input, textarea")&&"?"===String.fromCharCode(e.which))||(A("/admin/help",{title:Alchemy.t("help"),size:"500x400"}),!1)}function M(e){const t=document.getElementById(e);if(t)return JSON.parse(t.textContent)}const B=function e({collection:t={},member:s={}}={}){const i={...t};return Object.entries(s).forEach(([t,s])=>{i[t]="string"==typeof s?e=>s.replace(/1/,e):e({member:s})}),i}(M("alchemy_routes")),D=/#[\w.~-]+$/;class H extends HTMLIFrameElement{#o;#r;#a;handleEvent(e){"load"===e.type&&(this.#c(),this.#d(),this.#o?.call(this,e))}#h=e=>{"Alchemy.previewReady"===e.data.message&&(this.#c(),this.#d())};connectedCallback(){let e=this.url;this.addEventListener("load",this),this.#u(),window.addEventListener("message",this.#h),window.localStorage.getItem("alchemy-preview-url")&&(e=window.localStorage.getItem("alchemy-preview-url"),this.previewUrlSelect.value=e),this.refresh(e)}disconnectedCallback(){this.removeEventListener("load",this),key.unbind("alt+r"),window.removeEventListener("message",this.#h)}postMessage(e){this.contentWindow.postMessage(e,"*")}resize(e){this.style.width=`${e}px`}refresh(e){return this.#m(),this.src=e||this.url,this.#c(),this.#a=setTimeout(()=>{this.#d(),F(y("Preview failed to load"),"warning")},this.loadTimeout),new Promise(e=>{this.#o=e})}set isDragged(e){this.style.transitionProperty=e?"none":null,this.style.pointerEvents=e?"none":null}#u(){this.reloadButton?.addEventListener("click",e=>{e.preventDefault(),this.refresh()}),key("alt+r",()=>this.refresh()),this.sizeSelect.addEventListener("change",e=>{const t=e.target.value;""===t?this.style.width=null:this.resize(t)}),this.previewUrlSelect?.addEventListener("change",e=>{const t=e.target.value;window.localStorage.setItem("alchemy-preview-url",t),this.refresh(t)})}#m(){this.reloadButton.innerHTML.includes("alchemy-spinner")||(this.#r=this.reloadButton.innerHTML),this.reloadButton.innerHTML='<alchemy-spinner size="small"></alchemy-spinner>'}#d(){this.reloadButton.innerHTML=this.#r}#c(){this.#a&&(clearTimeout(this.#a),this.#a=null)}get url(){return this.getAttribute("url")}get loadTimeout(){const e=parseInt(this.getAttribute("load-timeout"),10);return 1e3*(Number.isNaN(e)?5:e)}get sizeSelect(){return document.querySelector("select#preview_size")}get previewUrlSelect(){return document.querySelector("select#preview_url")}get reloadButton(){return document.querySelector("#reload_preview_button")}}function z(){document.getElementById("alchemy_preview_window").refresh()}customElements.define("alchemy-preview-window",H,{extends:"iframe"});class P{constructor(e,t={}){this.message=e,this.options={...{size:"300x100",title:y("Please confirm"),ok_label:y("Yes"),cancel_label:y("No"),on_ok(){}},...t},this.#p(),this.#g()}open(){requestAnimationFrame(()=>{this.dialog.show()})}#p(){const e=this.options.size.split("x")[0];this.dialog=f(`\n <sl-dialog label="${this.options.title}" style="--width: ${e}px">\n ${this.message}\n <button slot="footer" type="reset" class="secondary mx-1 my-0" autofocus>\n ${this.options.cancel_label}\n </button>\n <button slot="footer" type="submit" class="mx-1 my-0">\n ${this.options.ok_label}\n </button>\n </sl-dialog>\n `);(C()?.dialog_container??document.body).append(this.dialog)}#g(){this.cancelButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_cancel(),this.dialog.hide()}),this.okButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_ok(),this.dialog.hide()}),this.dialog.addEventListener("sl-request-close",e=>{"overlay"===e.detail.source&&(this.options.on_cancel(),e.preventDefault())}),this.dialog.addEventListener("sl-after-hide",()=>{this.dialog.remove()})}get cancelButton(){return this.dialog.querySelector("button[type=reset]")}get okButton(){return this.dialog.querySelector("button[type=submit]")}}function O(e,t={}){return new Promise(s=>{new P(e,{...t,on_ok(){s(!0)},on_cancel(){s(!1)}}).open()})}class N{static updateIcon(e,t=!1){const s=document.querySelector(`[data-ingredient-id="${e}"]`);if(s){s.querySelector(".edit-ingredient-anchor-link alchemy-icon").setAttribute("icon-style",t?"fill":"line")}}}e.StreamActions.dialog_visit=function(){const t=this.getAttribute("url");x(()=>e.visit(t))||e.visit(t)},e.StreamActions.assign_picture=function(){const[e]=this.targetElements;e&&(e.value=this.getAttribute("picture-id"),e.setAttribute("data-image-file-width",this.getAttribute("image-file-width")),e.setAttribute("data-image-file-height",this.getAttribute("image-file-height")),x(()=>{e.closest("alchemy-element-editor")?.setDirty()}))},e.StreamActions.assign_attachment=function(){const[e]=this.targetElements;if(!e)return;const t=e.parentElement;e.value=this.getAttribute("attachment-id"),t.querySelector(":scope > .file_name").textContent=this.getAttribute("attachment-name"),t.querySelector(":scope > .file_icon").replaceChildren(this.templateContent),t.querySelector(":scope > .remove_file_link").classList.remove("hidden"),x(()=>{e.closest("alchemy-element-editor")?.setDirty(e)})},e.StreamActions.close_current_dialog=function(){x()},e.StreamActions.reload_preview=function(){z()},e.StreamActions.remove_fixed_element=function(){T(this.getAttribute("element-id"))},e.StreamActions.update_anchor_icon=function(){N.updateIcon(this.getAttribute("ingredient-id"),"true"===this.getAttribute("active"))},e.StreamActions.hide_please_wait_overlay=function(){q(!1)};class U extends HTMLElement{static get observedAttributes(){return["name","size","icon-style"]}constructor(){super(),this.spriteUrl=document.querySelector('link[rel="preload"][as="image"]')?.getAttribute("href")??""}connectedCallback(){this.render()}attributeChangedCallback(){this.render()}render(){const e=this.size?` icon--${this.size}`:"";this.innerHTML=`<svg class="icon${e}"><use href="${this.spriteUrl}#ri-${this.iconName}${this.style}" /></svg>`}set name(e){this.setAttribute("name",e)}get iconName(){return this.getAttribute("name")}get size(){return this.getAttribute("size")}get style(){const e=this.getAttribute("icon-style");switch(e){case"none":return"";case null:return"-line";default:return`-${e}`}}}customElements.get("alchemy-icon")||customElements.define("alchemy-icon",U);const R=e=>(e+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");function W(e,t){e?e.focus():t()}function j(e){e?.close(!1),e?.destroy()}function V(){const e=document.createElement("div");e.className="ts-dropdown-mask";let t=()=>{};return{async onDropdownOpen(){const a={minWidth:`${this.control.offsetWidth}px`};this.control.closest(".alchemy-dialog-body, .alchemy-popover")&&(a.zIndex="101"),Object.assign(this.dropdown.style,a);const c=this.control.closest("dialog")||document.body;c.append(e),c.append(this.dropdown);t=s(this.control,this.dropdown,async()=>{const{x:e,y:t}=await i(this.control,this.dropdown,{placement:"bottom-start",middleware:[n(2),l(),o({padding:16}),r({padding:16,apply({availableWidth:e,availableHeight:t,elements:s}){Object.assign(s.floating.style,{maxWidth:`max(${s.reference.offsetWidth}px, min(${e}px, var(--select-dropdown-max-width, 480px)))`}),Object.assign(s.floating.querySelector(".ts-dropdown-content").style,{maxHeight:`${Math.max(120,t-16)}px`})}})]});Object.assign(this.dropdown.style,{left:`${e}px`,top:`${t}px`})})},onDropdownClose(){this.control_input.classList.remove("has-value"),this.control_input.blur(),this.dropdown.remove(),e.remove(),t()}}}function J(){return{title:y("Remove"),html(e){const t=document.createElement("button");return t.type="button",t.className=e.className,t.title=e.title,t.setAttribute("aria-label",e.title),t.tabIndex=-1,t.innerHTML='<alchemy-icon name="close" size="sm"></alchemy-icon>',t}}}const X={option_create:(e,t)=>`<div class="create">\n ${y("Add")} <strong>${t(e.input)}</strong>&hellip;\n </div>`,loading(){if(!(Object.keys(this.options).length>0))return`<div class="loading-results">${y("Please wait, loading")}&hellip;</div>`},no_results:()=>`<div class="no-results">${y("No results found")}</div>`,loading_more:()=>`<div class="loading-more">${y("Loading more results")}&hellip;</div>`,no_more_results:()=>`<div class="no-more-results">${y("No more results")}</div>`};function K(e,t){const s=R(e);return t?s.replace(new RegExp(String(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"),e=>`<em>${e}</em>`):s}function Q(e,t){return Object.keys(e).map(s=>{const i=e[s],n=t?`${t}[${s}]`:s;return null==i?"":Array.isArray(i)?i.map(e=>`${encodeURIComponent(`${n}[]`)}=${encodeURIComponent(e)}`).join("&"):"object"==typeof i?Q(i,n):`${encodeURIComponent(n)}=${encodeURIComponent(i)}`}).filter(e=>""!==e).join("&")}class Y extends HTMLElement{#y=null;#v=null;#b=new Map;connectedCallback(){const e=this.input;if(e.classList.add("alchemy_selectbox"),e instanceof HTMLInputElement){const s=e.value;e.value="",this.#y=new t(e,this.tomSelectConfig),e.value=s}else this.#y=new t(e,this.tomSelectConfig);this.#y.control.append(document.createElement("sl-spinner")),this.#y.control.addEventListener("click",this.#y.open.bind(this.#y))}disconnectedCallback(){j(this.#y),this.#y=null}focus(){W(this.#y,()=>super.focus())}onChange(e){this.multiple?(e.added&&this.#b.set(String(e.added.id),e.added),e.removed&&this.#b.delete(String(e.removed.id)),this.setAttribute("selection",JSON.stringify([...this.#b.values()]))):e.added&&this.setAttribute("selection",JSON.stringify(e.added)),this.dispatchCustomEvent("RemoteSelect.Change",{removed:e.removed,added:e.added})}onOpen(){}dispatchCustomEvent(e,t={}){this.dispatchEvent(new CustomEvent(`Alchemy.${e}`,{bubbles:!0,detail:t}))}get allowClear(){return this.hasAttribute("allow-clear")}get multiple(){return this.hasAttribute("multiple")}get selection(){return this.getAttribute("selection")}get placeholder(){return this.getAttribute("placeholder")??""}get queryParams(){return this.getAttribute("query-params")??"{}"}get url(){return this.getAttribute("url")??""}get input(){return this.querySelector("input, select")}get tomSelectConfig(){const e=this,t=this.ajaxConfig,s={virtual_scroll:{}};this.multiple&&(s.remove_button={}),this.allowClear&&(s.clear_button={html:()=>`<button type="button" class="clear-button" aria-label="${y("Clear selection")}">\n <alchemy-icon name="close" size="1x"></alchemy-icon>\n </button>`});const{onDropdownOpen:i,onDropdownClose:n}=V();return{plugins:s,valueField:"id",maxItems:this.multiple?null:1,closeAfterSelect:!this.multiple,maxOptions:null,searchField:[],loadThrottle:t.quietMillis,refreshThrottle:0,placeholder:this.placeholder,openOnFocus:!1,shouldLoad:()=>!0,firstUrl:e=>this.#f(e,1),load:(e,t)=>this.#E(e,t),onInitialize(){if(e.selection)if(e.multiple){const t=JSON.parse(e.selection);e.#b=new Map(t.map(e=>[String(e.id),e])),t.forEach(e=>{this.addOption({...e,$preselection:!0}),this.addItem(e.id,!0)})}else{const t=JSON.parse(e.selection);e.#v=t,this.addOption({...t,$preselection:!0}),this.addItem(t.id,!0)}},onChange(t){e.#w(t,this)},onType(e){this.control_input.classList.toggle("has-value",e.length>0)},onDropdownOpen(){i.call(this),this.loading||this.load(this.lastValue??""),e.onOpen()},onDropdownClose:n,render:{option(t,s){return t.$preselection?`<div>${e._renderResult(t)}</div>`:e._renderListEntry(t,this.lastValue)},item:(t,s)=>`<div>${e._renderResult(t)}</div>`,...X}}}get ajaxConfig(){return{url:this.url,datatype:"json",quietMillis:300,data:(e,t)=>this._searchQuery(e,t),results:e=>this._parseResponse(e)}}#f(e,t){const s=Q(this.ajaxConfig.data(e,t)),i=this.url.includes("?")?"&":"?";return s?`${this.url}${i}${s}`:this.url}async#E(e,t){const s=this.ajaxConfig,i=this.#y.getUrl(e),n=Number(new URL(i,window.location.origin).searchParams.get("page"));try{const l=await fetch(i,{headers:{Accept:"application/json",...s.params?.headers??{}}});if(!l.ok)throw new Error(`${l.status} ${l.statusText}`);const{results:o,more:r}=s.results(await l.json());r&&this.#y.setNextUrl(e,this.#f(e,n+1)),t(o)}catch(e){F(e.message||e,"error"),console.error(`[alchemy] Loading ${i} failed`,e),t()}}#w(e,t){if(this.multiple)return void this.#k(e,t);const s=this.#v;if(""===e||null==e){if(!s)return;this.#v=null,this.onChange({added:null,removed:s})}else if(!s||String(s.id)!==String(e)){const i=this.#L(t.options[e]);this.#v=i,this.onChange({added:i,removed:s})}}#k(e,t){const s=(e??[]).map(String),i=new Set(this.#b.keys()),n=new Set(s);i.forEach(e=>{n.has(e)||this.onChange({added:null,removed:this.#b.get(e)})}),s.forEach(e=>{i.has(e)||this.onChange({added:this.#L(t.options[e]),removed:null})})}#L(e){return e?Object.fromEntries(Object.entries(e).filter(([e])=>!e.startsWith("$"))):null}_searchQuery(e,t){return{q:{name_i_cont:e,...JSON.parse(this.queryParams)},page:t}}_parseResponse(e){const t=e.meta;return{results:e.data,more:t.page*t.per_page<t.total_count}}_renderListEntry(e,t){return this.#_(this._entry(e,t))}_renderResult(e){return this.#S(this._selectedEntry(e))}_entry(){throw new Error("You need to define an _entry function on your sub class!")}_selectedEntry(){throw new Error("You need to define a _selectedEntry function on your sub class!")}#_(e){return`\n <div class="remote-select--entry">\n ${this.#C(e)}\n ${this.#x("remote-select--primary",e.primary,{raw:!0})}\n ${this.#x("remote-select--aside",e.aside)}\n ${this.#x("remote-select--secondary",e.secondary)}\n ${this.#x("remote-select--secondary-aside",e.secondaryAside)}\n </div>\n `}#S(e){return`\n <div class="remote-select--selection">\n ${this.#C(e)}\n ${this.#x("remote-select--selection-name",e.primary,{raw:!0})}\n ${this.#x("remote-select--selection-aside",e.secondary)}\n </div>\n `}#C(e){return e.icon?`<alchemy-icon class="remote-select--icon" name="${R(e.icon)}"></alchemy-icon>`:e.media?`<img class="remote-select--media" src="${R(e.media)}" alt="">`:""}#x(e,t,{raw:s=!1}={}){if(null==t||""===t)return"";if("object"==typeof t){if(null!=t.badge&&""!==t.badge)return`<span class="${e} remote-select--badge">${R(t.badge)}</span>`;if(null==t.text||""===t.text)return"";const i=s?t.text:R(t.text);return"head"===t.truncate?`<span class="${e} remote-select--truncate-head"><bdi>${i}</bdi></span>`:`<span class="${e}">${i}</span>`}return`<span class="${e}">${s?t:R(t)}</span>`}_hightlightTerm(e,t){return K(e,t)}}class G extends Y{_entry(e,t){return{icon:e.icon_css_class,primary:this._hightlightTerm(e.name,t)}}_selectedEntry(e){return{icon:e.icon_css_class,primary:e.name}}}customElements.define("alchemy-attachment-select",G);class Z extends HTMLElement{connectedCallback(){this.addEventListener("change",this.#w)}disconnectedCallback(){this.removeEventListener("change",this.#w)}#w=e=>{const t=new Event("submit",{bubbles:!0,cancelable:!0});return e.target.form.dispatchEvent(t),!1}}customElements.define("alchemy-auto-submit",Z);class ee extends HTMLButtonElement{connectedCallback(){this.form?(this.form.addEventListener("submit",this),this.form.addEventListener("turbo:submit-end",this)):console.warn("No form for button found!",this)}handleEvent(e){switch(e.type){case"submit":"disabled"===this.getAttribute("disabled")?(e.preventDefault(),e.stopPropagation()):this.disable();break;case"turbo:submit-end":this.enable()}}disable(){const e=new E("small"),t=this.getBoundingClientRect();this.dataset.initialButtonText=this.innerHTML,this.setAttribute("disabled","disabled"),this.setAttribute("tabindex","-1"),this.classList.add("disabled"),this.style.width=`${t.width}px`,this.style.height=`${t.height}px`,this.innerHTML="&nbsp;",e.spin(this)}enable(){this.classList.remove("disabled"),this.removeAttribute("disabled"),this.removeAttribute("tabindex"),this.style.width=null,this.style.height=null,this.innerHTML=this.dataset.initialButtonText}}customElements.define("alchemy-button",ee,{extends:"button"});class te extends HTMLElement{connectedCallback(){this.translation=y("allowed_chars",this.maxChars),this.formField=this.getFormField(),this.formField&&(this.createDisplayElement(),this.countCharacters(),this.formField.addEventListener("keyup",this))}disconnectedCallback(){this.formField?.removeEventListener("keyup",this)}handleEvent(e){"keyup"===e.type&&this.countCharacters()}getFormField(){const e=this.querySelectorAll("input, textarea");return e.length>0?e[0]:void 0}createDisplayElement(){this.display=this.querySelector(":scope > .alchemy-char-counter"),this.display||(this.display=document.createElement("small"),this.display.className="alchemy-char-counter",this.formField.after(this.display))}countCharacters(){const e=this.formField.value.length;this.display.textContent=`${e} ${this.translation}`,this.display.classList.toggle("too-long",e>this.maxChars)}get maxChars(){return this.getAttribute("max-chars")??60}}customElements.define("alchemy-char-counter",te);class se extends HTMLButtonElement{connectedCallback(){this.addEventListener("click",this)}disconnectedCallback(){this.removeEventListener("click",this)}handleEvent(){this.form?.querySelectorAll('input[type="datetime-local"]').forEach(e=>{e.value=""})}}customElements.define("alchemy-clear-schedule-button",se,{extends:"button"});class ie extends HTMLElement{connectedCallback(){this.innerHTML='<alchemy-icon name="clipboard"></alchemy-icon>',this.clipboard=new ClipboardJS(this,{text:()=>this.getAttribute("content")}),this.clipboard.on("success",()=>{F(this.getAttribute("success-text"))})}disconnectedCallback(){this.clipboard.destroy()}}customElements.define("alchemy-clipboard-button",ie);class ne extends HTMLSelectElement{#y=null;connectedCallback(){this.classList.add("alchemy_selectbox"),this.#A()}disconnectedCallback(){this.#T()}enable(){this.removeAttribute("disabled"),this.#y?.enable()}disable(){this.setAttribute("disabled","disabled"),this.#y?.disable()}focus(){W(this.#y,()=>super.focus())}setOptions(e,t=void 0){const s=this.value;this.#T(),this.innerHTML="",t&&this.add(new Option(t,"")),e.forEach(e=>{this.add(new Option(e.text,e.id,!1,e.id===s))}),this.#A()}get allowClear(){return this.dataset.hasOwnProperty("allowClear")||this.multiple}get placeholder(){return this.getAttribute("placeholder")}get renderers(){return{}}#A(){const e={},s=!!this.placeholder,i=!!this.querySelector("option[selected]"),{onDropdownOpen:n,onDropdownClose:l}=V();this.multiple&&(e.remove_button=J()),this.allowClear&&(e.clear_button={html:()=>`<button type="button" class="clear-button" aria-label="${y("Clear selection")}">\n <alchemy-icon name="close" size="1x"></alchemy-icon>\n </button>`});const o={plugins:e,closeAfterSelect:!this.multiple,onInitialize:function(){this.input.autofocus&&this.focus(),s&&!i&&this.clear()},onType(e){this.control_input.classList.toggle("has-value",e.length>0)},refreshThrottle:0,onDropdownOpen:n,onDropdownClose:l,allowEmptyOption:!0,openOnFocus:!1,sortField:"$order",maxOptions:null,render:{...X,...this.renderers}};this.#y=new t(this,o),this.#y.control.addEventListener("click",this.#y.open.bind(this.#y))}#T(){j(this.#y),this.#y=null}}customElements.define("alchemy-select",ne,{extends:"select"});const le=(e,t)=>{const s=e.swatch||e.value;return`\n <div class="select-color-option">\n ${"custom_color"===e.value?'<alchemy-icon name="palette"></alchemy-icon>':`<span class="color-indicator" style="--color: ${t(s)}"></span>`}\n <span>${t(e.text)}</span>\n </div>`};customElements.define("alchemy-color-select",class extends ne{connectedCallback(){super.connectedCallback(),this.addEventListener("change",this.#w)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("change",this.#w)}get renderers(){return{item:le,option:le}}#w=()=>{const e=this.parentElement?.querySelector("input[type='color']");e&&(e.disabled="custom_color"!==this.value)}},{extends:"select"});class oe extends HTMLElement{connectedCallback(){this.colorInput?.addEventListener("input",this),this.textInput?.addEventListener("input",this),this.colorInput&&(this.colorInput.disabled=!1)}handleEvent(e){switch(e.target){case this.colorInput:this.textInput.value=this.colorInput.value;break;case this.textInput:this.colorInput.value=this.textInput.value}}disconnectedCallback(){this.colorInput?.removeEventListener("input",this),this.textInput?.removeEventListener("input",this)}get colorInput(){return this.querySelector("input[type='color']")}get textInput(){return this.querySelector("input[type='text']")}}customElements.define("alchemy-color-input",oe);class re extends HTMLElement{connectedCallback(){this.control?.addEventListener("change",this),this.toggle()}disconnectedCallback(){this.control?.removeEventListener("change",this)}handleEvent(e){"change"===e.type&&this.toggle()}toggle(){const e=!!this.control?.checked&&!this.control.disabled;this.hidden=!e,this.fields.forEach(t=>{"function"==typeof t.disable?e?t.enable():t.disable():t.disabled=!e})}get control(){return document.getElementById(this.getAttribute("control"))}get fields(){return this.querySelectorAll("input, select, textarea")}}customElements.define("alchemy-conditional-field",re);const ae=g();class ce extends HTMLElement{async connectedCallback(){"en"!==ae&&await import(`flatpickr/${ae}.js`),this.isConnected&&(this.flatpickr=a(this.inputField,this.flatpickrOptions))}disconnectedCallback(){this.flatpickr?.destroy()}get flatpickrOptions(){const e=/time/.test(this.inputType),t={locale:ae.slice(0,2),altInput:!0,altFormat:y(`formats.${this.inputType}`),altInputClass:"flatpickr-input",enableTime:e,noCalendar:"time"===this.inputType,time_24hr:y("formats.time_24hr"),onValueUpdate(e,t,s){s.element.closest("alchemy-element-editor")?.setDirty(this.inputField)}};return e&&(t.dateFormat="Z"),t}get inputField(){return this.querySelector("input")}get inputType(){return this.getAttribute("input-type")||"date"}}customElements.define("alchemy-datepicker",ce);class de extends HTMLAnchorElement{connectedCallback(){this.addEventListener("click",this)}disconnectedCallback(){this.removeEventListener("click",this)}handleEvent(e){this.disabled||this.openDialog(),e.preventDefault()}openDialog(){this.dialog=new S(this.getAttribute("href"),this.dialogOptions),this.dialog.open()}get dialogOptions(){return this.dataset.dialogOptions?JSON.parse(this.dataset.dialogOptions):{}}get disabled(){return this.classList.contains("disabled")}}customElements.define("alchemy-dialog-link",de,{extends:"a"});let he=!1;class ue extends HTMLElement{connectedCallback(){this.addEventListener("submit",this.#I,!0)}disconnectedCallback(){this.removeEventListener("submit",this.#I,!0)}#I=e=>{if(he||!me())return;e.preventDefault(),e.stopPropagation();const t=e.target;pe().then(e=>{e&&(q(),t.requestSubmit())})}}function me(){return document.querySelectorAll("alchemy-element-editor.dirty").length>0}async function pe(){const e=await O(y("page_dirty_notice"),{title:y("warning"),ok_label:y("ok"),cancel_label:y("cancel")});return e&&(he=!0,window.onbeforeunload=void 0),e}document.addEventListener("turbo:before-visit",t=>{!he&&me()&&(t.preventDefault(),pe().then(s=>{s&&e.visit(t.detail.url)}))}),document.addEventListener("turbo:load",()=>{he=!1}),customElements.define("alchemy-dirty-guard",ue);const ge="application/json";function ye(e){return"get"===e.toLowerCase()}function ve(e,t,s){const i=function(e){return{"Content-Type":"application/json; charset=utf-8",Accept:e,"X-Requested-With":"XMLHttpRequest","X-CSRF-Token":be()}}(s),n={method:e,headers:i};return t&&!ye(e)&&(n.body=JSON.stringify(t)),n}function be(){return document.querySelector('meta[name="csrf-token"]').attributes.content.textContent}function fe(e,t){return ke("GET",e,t)}function Ee(e,t,s){return ke("PATCH",e,t,s)}function we(e,t,s=ge){return ke("POST",e,t,s)}async function ke(e,t,s,i=ge){const n=await fetch(function(e,t,s){const i=new URL(window.location.origin+e);return t&&ye(s)&&new URLSearchParams(t).forEach((e,t)=>{i.searchParams.set(t,e)}),i.toString()}(t,s,e),ve(e,s,i)),l=n.headers.get("content-type"),o=l?.includes(ge),r=l?.includes("text/vnd.turbo-stream.html");let a=null;if(o?a=await n.json():r&&(a=await n.text(),"undefined"!=typeof Turbo&&Turbo.renderStreamMessage(a)),n.ok)return{data:a,status:n.status};if(401===n.status&&a?.redirect_url)return Turbo.visit(a.redirect_url),new Promise(()=>{});throw a||new Error("An error occurred during the transaction")}class Le extends HTMLElement{dataItem(e){return{id:`#${e}`,text:`#${e}`}}get selectElement(){return this.querySelector('select[is="alchemy-select"]')}}customElements.define("alchemy-dom-id-api-select",class extends Le{#F=void 0;connectedCallback(){this.page=this.getAttribute("page")}async#q(){try{const e=(await fe(B.api_ingredients_path,{page_id:this.#F})).data.ingredients.filter(e=>e.data?.dom_id).map(e=>this.dataItem(e.data.dom_id)),t=e.length>0?y("None"):y("No anchors found");this.selectElement.setOptions(e,t),this.selectElement.enable()}catch(e){F(e.message||e,"error"),console.error(e)}}#$(){requestAnimationFrame(()=>{this.selectElement.disable(),this.selectElement.setOptions([],y("Select a page first"))})}set page(e){this.#F=e,e?this.#q():this.#$()}}),customElements.define("alchemy-dom-id-preview-select",class extends Le{connectedCallback(){requestAnimationFrame(()=>{const e=document.getElementById("alchemy_preview_window"),t=e.contentDocument?.querySelectorAll("[id]")||[];if(t.length>0){const e=Array.from(t).map(e=>this.dataItem(e.id));this.selectElement.setOptions(e,y("None"))}})}});class _e extends HTMLElement{#M;connectedCallback(){this.#M=this.scheduleButton.getAttribute("variant"),this.publishButton.addEventListener("click",this),this.dropdown.addEventListener("sl-show",this),this.dropdown.addEventListener("sl-hide",this)}disconnectedCallback(){this.publishButton.removeEventListener("click",this),this.dropdown.removeEventListener("sl-show",this),this.dropdown.removeEventListener("sl-hide",this)}handleEvent(e){switch(e.type){case"click":this.publishButton.loading=!0;break;case"sl-show":this.scheduleButton.setAttribute("variant","primary");break;case"sl-hide":this.scheduleButton.setAttribute("variant",this.#M)}}get publishButton(){return this.querySelector("sl-button[type='submit']")}get dropdown(){return this.querySelector("sl-dropdown")}get scheduleButton(){return this.querySelector("sl-button[slot='trigger']")}}function Se(e){document.dispatchEvent(new CustomEvent("alchemy:page-dirty",{detail:{tooltip:e.publishButtonTooltip}}))}customElements.define("alchemy-publish-element-button",_e);class Ce extends HTMLElement{connectedCallback(){this.button?.addEventListener("click",this)}disconnectedCallback(){this.button?.removeEventListener("click",this)}async handleEvent(){if(await O(this.message))try{const e=await ke("DELETE",this.url);this.#B(e.data)}catch(e){F(e.message||e,"error"),console.error(e)}}#B(e){const t=this.closest("alchemy-element-editor");t.addEventListener("transitionend",()=>{t.fixed&&T(t.elementId),t.remove()}),t.classList.add("dismiss"),F(e.message),e.pageHasUnpublishedChanges&&Se(e),z()}get url(){return this.getAttribute("href")}get message(){return this.getAttribute("message")}get button(){return this.querySelector("button")}}customElements.define("alchemy-delete-element-button",Ce);class xe extends HTMLElement{#D=null;#H=null;#z=null;connectedCallback(){this.classList.contains("ui-sortable-placeholder")||(this.addEventListener("click",this),this.addEventListener("alchemy:element-update-title",this),this.#D=this.form,this.#D&&(this.#D.addEventListener("change",this.onChange),this.#D.addEventListener("turbo:submit-start",this),this.#D.addEventListener("turbo:submit-end",this)),this.#H=this.header,this.#H?.addEventListener("dblclick",this.#P),this.#z=this.toggleButton,this.#z?.addEventListener("click",this.#O),this.hasAttribute("created")&&(this.focusElement(),this.previewWindow?.refresh().then(()=>{this.focusElementPreview()}),this.removeAttribute("created")))}disconnectedCallback(){this.removeEventListener("click",this),this.removeEventListener("alchemy:element-update-title",this),this.#D&&(this.#D.removeEventListener("change",this.onChange),this.#D.removeEventListener("turbo:submit-start",this),this.#D.removeEventListener("turbo:submit-end",this),this.#D=null),this.#H?.removeEventListener("dblclick",this.#P),this.#H=null,this.#z?.removeEventListener("click",this.#O),this.#z=null}handleEvent(e){switch(e.type){case"click":e.target.closest("alchemy-element-editor")===this&&this.onClickElement();break;case"turbo:submit-start":this.setClean();break;case"turbo:submit-end":this.onSaveElement(e.detail.success);break;case"alchemy:element-update-title":this.hasEditors||e.target!=this.firstChild||this.setTitle(e.detail.title)}}onChange=e=>{const t=e.target;if(!t.classList.contains("nested-elements"))return this.setDirty(t),e.stopPropagation(),!1};async focusElement(){document.querySelector("#fixed-elements")&&await this.selectTabForElement(),await this.expand(),this.selectElement(!0)}focusElementPreview(){this.previewWindow?.postMessage({message:"Alchemy.focusElement",element_id:this.elementId})}onClickElement(){this.selectElement(),this.focusElementPreview()}onSaveElement(e){e?this.previewWindow?.refresh().then(()=>{this.focusElementPreview()}):this.elementErrors.classList.remove("hidden")}scrollToElement(){setTimeout(()=>{this.scrollIntoView({behavior:"smooth"})},50)}selectElement(e=!1){document.querySelectorAll("alchemy-element-editor.selected").forEach(e=>{e.classList.remove("selected")}),window.requestAnimationFrame(()=>{this.classList.add("selected")}),e&&this.scrollToElement()}selectTabForElement(){return new Promise((e,t)=>{const s=document.querySelector("#fixed-elements"),i=this.closest("sl-tab-panel");s&&i?(s.show(i.getAttribute("name")),e()):t(new Error("No tabs present"))})}setClean(){this.dirty=!1,window.onbeforeunload=null,this.elementErrors.classList.add("hidden"),this.hasEditors&&this.body.querySelectorAll(".ingredient-editor").forEach(e=>{e.classList.remove("dirty","validation_failed"),e.querySelectorAll("small.error").forEach(e=>e.remove())})}setDirty(e){this.hasEditors&&(this.dirty=!0,window.onbeforeunload||(window.onbeforeunload=e=>e.preventDefault()),e?.closest(".ingredient-editor")?.classList.add("dirty"))}setTitle(e){const t=this.querySelector(".element-header .preview_text_quote");t&&(t.textContent=e)}async toggle(){this.collapsed?await this.expand():await this.collapse()}collapse(){if(this.collapsed||this.compact||this.fixed)return Promise.resolve("Element is already collapsed.");const e=new Alchemy.Spinner("small");return e.spin(this.toggleButton),this.toggleIcon?.classList?.add("hidden"),we(B.collapse_admin_element_path(this.elementId)).then(e=>{const t=e.data;if(this.collapsed=!0,this.toggleButton?.setAttribute("title",t.title),t.nestedElementIds.length){const e=t.nestedElementIds.map(e=>`#element_${e}`).join(", ");this.querySelectorAll(e).forEach(e=>{e.collapsed=!0,e.toggleButton?.setAttribute("title",t.title)})}}).catch(e=>{F(e.message,"error"),console.error(e)}).finally(()=>{this.toggleIcon?.classList?.remove("hidden"),e.stop()})}expand(){if(this.expanded&&!this.compact)return Promise.resolve("Element is already expanded.");if(this.compact&&this.parentElementEditor)return this.parentElementEditor.expand();{const e=new Alchemy.Spinner("small");return e.spin(this.toggleButton),this.toggleIcon?.classList.add("hidden"),new Promise((t,s)=>{we(B.expand_admin_element_path(this.elementId)).then(e=>{const s=e.data;if(s.parentElementIds.length){const e=s.parentElementIds.map(e=>`#element_${e}`).join(", ");document.querySelectorAll(e).forEach(e=>{e.collapsed=!1,e.toggleButton?.setAttribute("title",s.title)})}this.collapsed=!1,this.toggleButton?.setAttribute("title",s.title),t()}).catch(e=>{F(e.message,"error"),console.error(e),s(e)}).finally(()=>{this.toggleIcon?.classList?.remove("hidden"),e.stop()})})}}updateTitle(e){this.setTitle(e),this.dispatchEvent(new CustomEvent("alchemy:element-update-title",{bubbles:!0,detail:{title:e}}))}set published(e){e?this.classList.remove("element-hidden"):this.classList.add("element-hidden")}get published(){return!this.classList.contains("hidden")}get compact(){return null!==this.getAttribute("compact")}get fixed(){return null!==this.getAttribute("fixed")}set collapsed(e){this.classList.toggle("folded",e),this.classList.toggle("expanded",!e),this.toggleIcon&&(this.toggleIcon.name=e?"arrow-left-s":"arrow-down-s")}get collapsed(){return this.classList.contains("folded")}get expanded(){return!this.collapsed}set dirty(e){this.classList.toggle("dirty",e)}get dirty(){return this.classList.contains("dirty")}get header(){return this.querySelector(".element-header")}get body(){return this.querySelector(this.bodySelector)}get bodySelector(){return`#${this.id} > .element-body`}get footer(){return this.querySelector(`#${this.id} > .element-footer`)}get toggleButton(){return this.querySelector(".element-toggle")}get toggleIcon(){return this.toggleButton?.querySelector("alchemy-icon")}get elementErrors(){return this.body.querySelector(".element_errors")}get elementId(){return this.dataset.elementId}get elementName(){return this.dataset.elementName}get hasEditors(){return!!this.body?.querySelector(".element-ingredient-editors")}get hasChildren(){return!!this.querySelector(".nested-elements")}get firstChild(){return this.querySelector("alchemy-element-editor")}get form(){return this.querySelector(`#${this.id} > form.element-body`)}get parentElementEditor(){return this.parentElement?.closest("alchemy-element-editor")}get previewWindow(){return document.getElementById("alchemy_preview_window")}#P=()=>{this.toggle()};#O=e=>{e.target.closest("alchemy-element-editor")===this&&this.toggle()}}customElements.define("alchemy-element-editor",xe);const Ae=(e,t)=>`\n <div class="element-select-name">\n ${e}<span>${t}</span>\n </div>\n`;class Te extends ne{get renderers(){return{item:(e,t)=>Ae(e.icon,t(e.text)),option:(e,t)=>{const s=e.hint?`<div class="element-select-description">${t(e.hint)}</div>`:"";return`\n <div class="element-select-item">\n ${Ae(e.icon,t(e.text))}\n ${s}\n </div>\n `}}}}customElements.define("alchemy-element-select",Te,{extends:"select"});class Ie extends HTMLElement{#N=!0;#U=null;connectedCallback(){this.toggleButton?.addEventListener("click",this.#O),this.collapseButton?.addEventListener("click",this.#R),window.addEventListener("message",this.#W),document.body.addEventListener("click",this.#j),window.location.hash&&this.focusElementEditor(window.location.hash),this.resize()}disconnectedCallback(){this.toggleButton?.removeEventListener("click",this.#O),this.collapseButton?.removeEventListener("click",this.#R),window.removeEventListener("message",this.#W),document.body.removeEventListener("click",this.#j)}#O=e=>{e.preventDefault(),this.toggle()};#R=()=>{this.collapseAllElements()};#W=e=>{const t=e.data;if("Alchemy.focusElementEditor"==t?.message){const e=document.getElementById(`element_${t.element_id}`);this.show(),e?.focusElement()}};#j=e=>{e.target.closest("alchemy-element-editor")||(this.querySelectorAll("alchemy-element-editor").forEach(e=>{e.classList.remove("selected")}),this.previewWindow?.postMessage({message:"Alchemy.blurElements"}))};collapseAllElements(){this.querySelectorAll("alchemy-element-editor:not([compact]):not([fixed])").forEach(e=>e.collapse())}toggle(){this.#N?this.hide():this.show()}show(){document.body.classList.add("elements-window-visible"),this.#N=!0,this.toggleButton.closest("sl-tooltip").content=Alchemy.t("Hide elements"),this.toggleButton.querySelector("alchemy-icon").setAttribute("name","menu-unfold"),this.resize()}hide(){document.body.classList.remove("elements-window-visible"),document.body.style.removeProperty("--elements-window-width"),this.#N=!1,this.toggleButton.closest("sl-tooltip").content=Alchemy.t("Show elements"),this.toggleButton.querySelector("alchemy-icon").setAttribute("name","menu-fold")}resize(e){void 0===e&&(e=this.widthFromCookie),e&&(document.body.style.setProperty("--elements-window-width",`${e}px`),document.cookie=`alchemy-elements-window-width=${e}; SameSite=Lax; Path=/;`)}focusElementEditor(e){const t=document.querySelector(e);t instanceof xe&&t.focusElement()&&t.focusElementPreview()}get collapseButton(){return this.querySelector("#collapse-all-elements-button")}get toggleButton(){return document.querySelector("#element_window_button")}get previewWindow(){return document.getElementById("alchemy_preview_window")}get turboFrame(){return this.#U||(this.#U=this.closest("turbo-frame")),this.#U}get widthFromCookie(){return document.cookie.split("; ").find(e=>e.startsWith("alchemy-elements-window-width="))?.split("=")[1]}set isDragged(e){this.turboFrame.style.transitionProperty=e?"none":null,this.turboFrame.style.pointerEvents=e?"none":null}}customElements.define("alchemy-elements-window",Ie);class Fe extends HTMLElement{#V=!1;#J=null;#X=null;#K=400;#Q=1e3;connectedCallback(){this.addEventListener("mousedown",this),window.addEventListener("mousemove",this),window.addEventListener("mouseup",this)}disconnectedCallback(){this.removeEventListener("mousedown",this),window.removeEventListener("mousemove",this),window.removeEventListener("mouseup",this)}handleEvent(e){switch(e.type){case"mousedown":e.stopPropagation(),this.onMouseDown();break;case"mouseup":this.onMouseUp();break;case"mousemove":this.#V&&this.onDrag(e.pageX)}}onMouseDown(){this.#V=!0;const e=getComputedStyle(this.elementsWindow);this.#K=parseFloat(e.minWidth)||400,this.#Q="none"===e.maxWidth?1e3:parseFloat(e.maxWidth),this.elementsWindow.isDragged=!0,this.previewWindow.isDragged=!0,this.classList.add("is-dragged")}onMouseUp(){this.#V=!1,this.elementsWindow.isDragged=!1,this.previewWindow.isDragged=!1,this.classList.remove("is-dragged")}onDrag(e){const t=window.innerWidth-e,s=Math.min(Math.max(t,this.#K),this.#Q);this.elementsWindow.resize(s)}get elementsWindow(){return this.#J||(this.#J=document.querySelector("alchemy-elements-window")),this.#J}get previewWindow(){return this.#X||(this.#X=document.getElementById("alchemy_preview_window")),this.#X}}customElements.define("alchemy-elements-window-handle",Fe);class qe extends HTMLElement{connectedCallback(){this.deleteLink=this.querySelector(".remove_file_link"),this.fileIcon=this.querySelector(".file_icon"),this.fileName=this.querySelector(".file_name"),this.formFieldId=this.deleteLink?.dataset.formFieldId,this.formField=this.querySelector(`#${this.formFieldId}`),this.deleteLink?.addEventListener("click",this)}disconnectedCallback(){this.deleteLink?.removeEventListener("click",this)}handleEvent(e){"click"===e.type&&this.removeFile(),e.stopPropagation()}removeFile(){this.formField.value="",this.fileIcon.innerHTML="",this.fileName.innerHTML="",this.deleteLink?.classList.add("hidden"),this.closest("alchemy-element-editor").setDirty(this.formField)}}customElements.define("alchemy-file-editor",qe);class $e extends HTMLElement{#Y;#G=null;#Z=null;connectedCallback(){this.hotkey&&key(this.hotkey,this.#ee),this.#G=this.filterField,this.#G.addEventListener("keyup",this.#te),this.#G.addEventListener("focus",this.#se),this.#Z=this.clearButton,this.#Z.addEventListener("click",this.#ie),key("esc","list_filter",this.#ne)}disconnectedCallback(){clearTimeout(this.#Y),this.#G?.removeEventListener("keyup",this.#te),this.#G?.removeEventListener("focus",this.#se),this.#G=null,this.#Z?.removeEventListener("click",this.#ie),this.#Z=null,this.hotkey&&key.unbind(this.hotkey),key.unbind("esc","list_filter")}filter(e){""===e&&(this.clearButton.style.visibility="hidden");const t=[],s=new Set,i=e.toLowerCase();this.items.forEach(e=>{const n=e.getAttribute(this.nameAttribute)?.toLowerCase();if(-1!==n.indexOf(i)){t.push(e),s.add(e);let i=e.parentElement?.closest(this.itemsSelector);for(;i;)s.add(i),i=i.parentElement?.closest(this.itemsSelector)}}),this.items.forEach(e=>{e.classList.toggle("hidden",!s.has(e))}),1===t.length&&t[0].scrollIntoView({behavior:"smooth",block:"nearest"})}clear(){this.filterField.value="",this.clearButton.style.visibility="hidden",this.items.forEach(e=>e.classList.remove("hidden"))}get nameAttribute(){return this.getAttribute("name-attribute")||"name"}get clearButton(){return this.querySelector('button[type="button"]')}get filterField(){return this.querySelector('input[type="text"]')}get items(){return document.querySelectorAll(this.itemsSelector)}get itemsSelector(){return this.getAttribute("items-selector")}get debounceTime(){return parseInt(this.getAttribute("debounce-time"))||150}get hotkey(){return this.getAttribute("hotkey")}#ee=()=>(this.filterField.focus(),!1);#te=()=>{clearTimeout(this.#Y),this.#Y=setTimeout(()=>{const e=this.filterField.value;this.clearButton.style.visibility=e?"visible":"hidden",this.filter(e)},this.debounceTime)};#se=()=>key.setScope("list_filter");#ie=e=>{e.preventDefault(),this.clear()};#ne=()=>{this.clear(),this.filterField.blur()}}customElements.define("alchemy-list-filter",$e);class Me extends HTMLElement{#le=null;#oe=null;connectedCallback(){this.addEventListener("mouseenter",this.#re),this.addEventListener("mouseleave",this.#ae)}disconnectedCallback(){this.removeEventListener("mouseenter",this.#re),this.removeEventListener("mouseleave",this.#ae),this.#ae()}#re=()=>{const e=this.#ce();e&&(this.#le=e,this.#oe=s(this,e,()=>{i(this,e,{strategy:"fixed",placement:"right-start",middleware:[l({fallbackPlacements:["right-end"],padding:8})]}).then(({x:t,y:s})=>{Object.assign(e.style,{position:"fixed",left:`${Math.round(t)}px`,top:`${Math.round(s)}px`})})}))};#ae=()=>{this.#oe?.(),this.#oe=null,this.#le&&(this.#le.style.position="",this.#le.style.left="",this.#le.style.top="",this.#le=null)};#ce(){const e=this.querySelector(".sub_navigation")||this.querySelector("label");return e&&"static"!==getComputedStyle(e).position?e:null}}customElements.define("alchemy-main-navi-entry",Me);class Be extends HTMLElement{connectedCallback(){this.addEventListener("click",this)}disconnectedCallback(){this.removeEventListener("click",this)}handleEvent(e){e.target.closest("alchemy-node-folder")===this.folder&&this.toggleFolded(e)}async toggleFolded(e){e.preventDefault();try{await Ee(B.node.toggle_folded_api_path(this.nodeId)),this.folded=!this.folded}catch(e){F(e.message||e,"error")}}updateFolder(){this.folder.hidden=!(this.hasChildren||this.folded)}get folded(){return this.hasAttribute("folded")}set folded(e){this.toggleAttribute("folded",e),this.folder.toggleAttribute("folded",e),this.childrenList.classList.toggle("folded",e)}get hasChildren(){return this.childrenList.querySelectorAll(":scope > alchemy-menu-node").length>0}get nodeId(){return this.getAttribute("node-id")}get folder(){return this.querySelector(":scope > li > .sitemap_node alchemy-node-folder")}get childrenList(){return this.querySelector(":scope > li > ul.children")}}customElements.define("alchemy-menu-node",Be);class De extends HTMLElement{#de=null;handleEvent(e){"click"===e.type&&this.dismiss()}connectedCallback(){if(!this.querySelector(":scope > alchemy-icon")){const e=this.dismissable&&"error"===this.type?'<alchemy-icon name="close"></alchemy-icon>':"";this.insertAdjacentHTML("afterbegin",`<alchemy-icon name="${this.iconName}"></alchemy-icon>${e}`)}(this.dismissable||"error"===this.type)&&this.addEventListener("click",this),this.dismissable&&"error"!==this.type&&(this.#de=setTimeout(()=>{this.dismiss()},this.dismissDelay))}disconnectedCallback(){null!==this.#de&&(clearTimeout(this.#de),this.#de=null)}dismiss(){this.addEventListener("transitionend",()=>this.remove()),this.classList.add("dismissed")}get dismissable(){return this.hasAttribute("dismissable")}get icon(){return this.getAttribute("icon")}get type(){return this.getAttribute("type")||"notice"}get dismissDelay(){return parseInt(this.noticesWrapper?.dataset.autoDismissDelay||5e3)}get iconName(){switch(this.icon||this.type){case"warning":case"warn":case"alert":return"alert";case"notice":return"check";case"info":case"hint":return"information";case"error":return"bug";default:return this.type}}get noticesWrapper(){return this.closest("#flash_notices")}}customElements.define("alchemy-message",De);class He extends HTMLElement{connectedCallback(){F(this.message,this.getAttribute("type")||"notice"),this.remove()}get message(){return this.getAttribute("message")||this.innerHTML}}customElements.define("alchemy-growl",He);class ze extends HTMLElement{#he=null;#ue=null;#me=null;connectedCallback(){this.image=this.querySelector("img"),this.form=this.querySelector("form"),this.#ue=document.getElementById(this.getAttribute("crop-from-field-id")),this.#me=document.getElementById(this.getAttribute("crop-size-field-id")),this.elementEditor=document.querySelector(`[data-element-id='${this.getAttribute("element-id")}']`),this.form.addEventListener("submit",this.#pe),this.form.addEventListener("reset",this.#ge),this.#he=new c(this.image,this.cropperOptions)}disconnectedCallback(){this.#he?.destroy()}get cropperOptions(){return{aspectRatio:this.aspectRatio,viewMode:1,zoomable:!1,checkCrossOrigin:!1,checkOrientation:!1,data:this.box}}get aspectRatio(){const e=this.getAttribute("ratio");return e?parseFloat(e):NaN}get cropFrom(){if(this.#ue?.value)return this.#ue.value.split("x").map(e=>parseInt(e))}get cropSize(){if(this.#me?.value)return this.#me.value.split("x").map(e=>parseInt(e))}get box(){return this.cropFrom&&this.cropSize?{x:this.cropFrom[0],y:this.cropFrom[1],width:this.cropSize[0],height:this.cropSize[1]}:this.defaultBox}get defaultBox(){const e=JSON.parse(this.getAttribute("default-box"));return{x:e[0],y:e[1],width:e[2],height:e[3]}}update(e){this.#ue.value=`${e.x}x${e.y}`,this.#ue.dispatchEvent(new Event("change")),this.#me.value=`${e.width}x${e.height}`,this.#me.dispatchEvent(new Event("change"))}reset(){const e=this.#he;e.setData(this.defaultBox);const t=e.getCanvasData(),s=t.width/t.naturalWidth;e.setCropBoxData({left:t.left+this.defaultBox.x*s,top:t.top+this.defaultBox.y*s}),this.update(this.defaultBox)}#pe=e=>{e.preventDefault(),this.update(this.#he.getData(!0)),this.elementEditor?.setDirty(),C()?.close()};#ge=e=>{e.preventDefault(),this.reset()}}customElements.define("alchemy-image-cropper",ze);class Pe extends S{#ye=e=>{if(e.target.closest(".picture-overlay-handle"))return e.preventDefault(),void this.dialog.classList.toggle("hide-form");if(e.target.closest(".zoomed-picture-background")){if(e.stopPropagation(),"IMG"===e.target.nodeName)return;this.close()}};#ve=e=>{if("INPUT"!==e.target.nodeName&&"TEXTAREA"!==e.target.nodeName)switch(e.key){case"ArrowLeft":this.previous(),e.preventDefault();break;case"ArrowRight":this.next(),e.preventDefault()}};resize(){}init(){this.dialog_body.removeEventListener("click",this.#ye),this.dialog_body.addEventListener("click",this.#ye),this.#be(),super.init()}previous(){this.dialog_body.querySelector(".previous-picture")?.click()}next(){this.dialog_body.querySelector(".next-picture")?.click()}close(){return document.removeEventListener("keydown",this.#ve),super.close()}build(){this.dialog_container=f('<dialog class="alchemy-image-overlay-container"></dialog>'),this.dialog=f('<div class="alchemy-image-overlay-dialog"></div>'),this.dialog_body=f('<div class="alchemy-image-overlay-body"></div>'),this.close_button=f('<a class="alchemy-image-overlay-close">\n <alchemy-icon name="close" size="xl"></alchemy-icon>\n </a>'),this.dialog.append(this.close_button),this.dialog.append(this.dialog_body),this.dialog_container.append(this.dialog),document.body.append(this.dialog_container)}#be(){document.removeEventListener("keydown",this.#ve),document.addEventListener("keydown",this.#ve)}}customElements.define("alchemy-image-overlay-link",class extends de{openDialog(){this.dialog=new Pe(this.href,{padding:!1}),this.dialog.open()}},{extends:"a"});class Oe extends HTMLDetailsElement{#fe="Alchemy.expanded_ingredient_groups";connectedCallback(){this.addEventListener("toggle",this),this.isInLocalStorage&&(this.open=!0)}disconnectedCallback(){this.removeEventListener("toggle",this)}handleEvent(){let e=this.localStorageItem;this.open?(this.toggleIcon.name="arrow-down-s",this.isInLocalStorage||e.push(this.id)):(this.toggleIcon.name="arrow-right-s",e=e.filter(e=>e!==this.id)),localStorage.setItem(this.#fe,JSON.stringify(e))}get isInLocalStorage(){return this.localStorageItem.includes(this.id)}get localStorageItem(){const e=localStorage.getItem(this.#fe);if(!e)return[];try{return JSON.parse(e)}catch(e){return console.error(e),[]}}get toggleIcon(){return this.querySelector("alchemy-icon")}}customElements.define("alchemy-ingredient-group",Oe,{extends:"details"});class Ne extends HTMLButtonElement{connectedCallback(){this.addEventListener("click",this),this.classList.add("icon_button"),this.setAttribute("type","button"),this.innerHTML='<alchemy-icon name="link" icon-style="m"></alchemy-icon>'}handleEvent(e){new Alchemy.LinkDialog({url:this.linkUrl,title:this.linkTitle,target:this.linkTarget,type:this.linkClass}).open().then(e=>this.setLink(e)),e.preventDefault()}setLink(e){""===e.url?(this.classList.remove("linked"),this.dispatchEvent(new CustomEvent("alchemy:unlink",{bubbles:!0}))):(this.classList.add("linked"),this.dispatchEvent(new CustomEvent("alchemy:link",{bubbles:!0,detail:e})))}get linkUrl(){return this.linkButtons.linkUrlField.value}get linkTitle(){return this.linkButtons.linkTitleField.value}get linkTarget(){return this.linkButtons.linkTargetField.value}get linkClass(){return this.linkButtons.linkClassField.value}get linkButtons(){return this.closest("alchemy-link-buttons")}}customElements.define("alchemy-link-button",Ne,{extends:"button"});class Ue extends HTMLButtonElement{connectedCallback(){this.addEventListener("click",this),this.classList.add("icon_button"),this.setAttribute("type","button"),this.linked=this.linked,this.innerHTML='<alchemy-icon name="link-unlink" icon-style="m"></alchemy-icon>'}handleEvent(e){this.linked&&(this.linked=!1,this.blur(),this.dispatchEvent(new CustomEvent("alchemy:unlink",{bubbles:!0}))),e.preventDefault()}set linked(e){e?(this.classList.replace("disabled","linked"),this.removeAttribute("tabindex")):(this.classList.replace("linked","disabled"),this.setAttribute("tabindex","-1"))}get linked(){return this.classList.contains("linked")}}customElements.define("alchemy-unlink-button",Ue,{extends:"button"});class Re extends HTMLElement{connectedCallback(){this.addEventListener("alchemy:link",this),this.addEventListener("alchemy:unlink",this)}disconnectedCallback(){this.removeEventListener("alchemy:link",this),this.removeEventListener("alchemy:unlink",this)}handleEvent(e){switch(e.type){case"alchemy:link":this.setLink(e.detail);break;case"alchemy:unlink":this.removeLink()}e.stopPropagation()}setLink(e){this.linkUrlField.value=e.url,this.linkUrlField.dispatchEvent(new Event("change")),this.linkTitleField.value=e.title,this.linkClassField.value=e.type,this.linkTargetField.value=e.target,this.unlinkButton.linked=!0,this.setElementDirty()}removeLink(){this.linkUrlField.value="",this.linkUrlField.dispatchEvent(new Event("change")),this.linkTitleField.value="",this.linkClassField.value="",this.linkTargetField.value="",this.linkButton.classList.remove("linked"),this.unlinkButton.linked=!1,this.setElementDirty()}setElementDirty(){this.elementEditor.setDirty(this)}get linkButton(){return this.querySelector('[is="alchemy-link-button"]')}get unlinkButton(){return this.querySelector('[is="alchemy-unlink-button"]')}get ingredientEditor(){const e=this.dataset.ingredientId;return this.parentElement.closest(`[data-ingredient-id='${e}']`)}get elementEditor(){return this.closest("alchemy-element-editor")}get linkUrlField(){return this.ingredientEditor.querySelector("[data-link-value]")}get linkTitleField(){return this.ingredientEditor.querySelector("[data-link-title]")}get linkTargetField(){return this.ingredientEditor.querySelector("[data-link-target]")}get linkClassField(){return this.ingredientEditor.querySelector("[data-link-class]")}}customElements.define("alchemy-link-buttons",Re);class We extends HTMLElement{connectedCallback(){this.track=this.querySelector(".news-reader--track"),this.slides=Array.from(this.querySelectorAll(".news-reader--item")),!this.track||this.slides.length<2||(this.currentIndex=0,this.createDots(),this.setActive(0),this.startRotation(),this.addEventListener("mouseenter",this),this.addEventListener("mouseleave",this),this.track.addEventListener("scroll",this,{passive:!0}))}disconnectedCallback(){this.stopRotation()}handleEvent(e){switch(e.type){case"mouseenter":this.stopRotation();break;case"mouseleave":this.startRotation();break;case"scroll":this.syncActiveToScroll()}}createDots(){this.dotList=document.createElement("div"),this.dotList.className="news-reader--dots",this.dots=this.slides.map((e,t)=>{const s=document.createElement("button");return s.type="button",s.className="news-reader--dot",s.setAttribute("aria-label",`${t+1}`),s.addEventListener("click",()=>{this.goTo(t),this.startRotation()}),this.dotList.append(s),s}),this.append(this.dotList)}goTo(e){this.currentIndex=e,this.slides[e].scrollIntoView({behavior:"smooth",inline:"start",block:"nearest"}),this.setActive(e)}next(){this.goTo((this.currentIndex+1)%this.slides.length)}syncActiveToScroll(){const e=this.track.clientWidth;if(!e)return;const t=Math.round(this.track.scrollLeft/e);t!==this.currentIndex&&this.slides[t]&&(this.currentIndex=t,this.setActive(t))}setActive(e){this.dots.forEach((t,s)=>{t.classList.toggle("is-active",s===e)})}startRotation(){this.stopRotation(),this.timer=window.setInterval(()=>this.next(),this.interval)}stopRotation(){this.timer&&window.clearInterval(this.timer),this.timer=null}get interval(){return parseInt(this.getAttribute("interval"),10)||8e3}}customElements.define("alchemy-news-reader",We);class je extends HTMLElement{static get observedAttributes(){return["folded"]}connectedCallback(){this.innerHTML=`\n <button class="node_folder icon_button">\n <alchemy-icon name="${this.iconName}"></alchemy-icon>\n </button>\n `}attributeChangedCallback(){this.icon?.setAttribute("name",this.iconName)}get icon(){return this.querySelector("alchemy-icon")}get iconName(){return this.folded?"arrow-right-s":"arrow-down-s"}get folded(){return this.hasAttribute("folded")}}customElements.define("alchemy-node-folder",je);class Ve extends HTMLElement{connectedCallback(){this.addEventListener("Alchemy.RemoteSelect.Change",this.#Ee)}disconnectedCallback(){this.removeEventListener("Alchemy.RemoteSelect.Change",this.#Ee)}#Ee=e=>{const t=e.detail.added;t?(this.nameField.setAttribute("placeholder",t.name),this.urlField.value=t.url_path,this.urlField.setAttribute("disabled","disabled")):(this.nameField.removeAttribute("placeholder"),this.urlField.value="",this.urlField.removeAttribute("disabled"))};get nameField(){return this.querySelector("#node_name")}get urlField(){return this.querySelector("#node_url")}}customElements.define("alchemy-node-form",Ve);customElements.define("alchemy-node-select",class extends Y{_searchQuery(e,t){return{filter:{name_or_page_name_i_cont:e,...JSON.parse(this.queryParams)},page:t}}_entry(e,t){return{icon:"menu-2",primary:this.#we(e)+this._hightlightTerm(e.name,t),secondary:{text:e.url,truncate:"head"}}}_selectedEntry(e){return{icon:"menu-2",primary:this.#we(e)+R(e.name)}}#we(e){const t=e.ancestors.map(e=>e.name);if(0===t.length)return"";const s='<alchemy-icon name="arrow-right-s" class="node-select--separator"></alchemy-icon>';return`<span class="node-select--ancestors">${t.map(R).join(s)}</span>${s}`}});class Je extends HTMLElement{connectedCallback(){this.querySelectorAll("ul.children").forEach(e=>{new d(e,{group:"nodes",animation:150,fallbackOnBody:!0,swapThreshold:.65,handle:".node_name",invertSwap:!0,draggable:"alchemy-menu-node",onEnd:e=>this.handleSort(e)})})}async handleSort(e){if(e.from===e.to&&e.oldIndex===e.newIndex)return;const t=B.node.move_api_path(e.item.nodeId),s={target_parent_id:e.to.dataset.recordId,new_position:e.newIndex};try{await Ee(t,s),this.updateFolders(e.from,e.to),F(y("Successfully moved menu item"))}catch(e){F(e.message||e,"error")}}updateFolders(e,t){e.closest("alchemy-menu-node")?.updateFolder(),e!==t&&t.closest("alchemy-menu-node")?.updateFolder()}}function Xe(e){let t=0===e?0:Math.floor(Math.log(e)/Math.log(1024));return t>3&&(t=3),(e/Math.pow(1024,t)).toFixed(2)+" "+["B","kB","MB","GB"][t]}customElements.define("alchemy-node-tree",Je);class Ke extends HTMLElement{file=null;request=null;progressEventLoaded=0;progressEventTotal=0;#ke=!0;#Le=0;#_e=void 0;#Se="";connectedCallback(){if(this.innerHTML=`\n <sl-progress-bar value="${this.value}"></sl-progress-bar>\n <div class="description">\n <span class="file-name">${this.file?.name}</span>\n <span class="loaded-size">${this.loadedSize}</span>\n <span class="error-message">${this.errorMessage}</span>\n </div>\n <sl-tooltip content="${y("Abort upload")}">\n <button class="icon_button" aria-label="${y("Abort upload")}">\n <alchemy-icon name="close"></alchemy-icon>\n </button>\n </sl-tooltip>\n `,this.querySelector("button").addEventListener("click",()=>this.cancel()),this.file?.type.includes("image")){const e=new FileReader;e.readAsDataURL(this.file),e.addEventListener("load",()=>{const t=new Image;t.src=e.result,this.prepend(t)})}}initialize(e,t){this.file=e,this.request=t,this.progressEventTotal=e?e.size:0,this.status="in-progress",this.#Ce(),this.#xe()}cancel(){this.finished||(this.status="canceled",this.request?.abort(),this.dispatchCustomEvent("FileUpload.Change"))}dispatchCustomEvent(e){this.dispatchEvent(new CustomEvent(`Alchemy.${e}`,{bubbles:!0}))}#Ce(){const e=M("alchemy_uploader_defaults"),t=e.file_size_limit*Math.pow(1024,2);let s;this.file?.size>t&&(s=y("Uploaded bytes exceed file size"));const i=this.file?.type.includes("image")?e.allowed_filetypes.alchemy_pictures:e.allowed_filetypes.alchemy_attachments,n=this.file?.name.match(/\.([^.]+)$/)?.[1].toLowerCase();i.includes("*")||i.some(e=>e.toLowerCase()===n)||(s=y("File type not allowed")),s&&(this.valid=!1,this.errorMessage=s)}#xe(){this.request&&(this.request.upload.onprogress=e=>{this.progressEvent=e},this.request.onload=()=>{this.request.status<400?(this.status="successful",F(this.responseMessage)):(this.status="failed",this.errorMessage=this.responseMessage),this.dispatchCustomEvent("FileUpload.Change")},this.request.onerror=()=>{this.errorMessage=y("An error occurred during the transaction")})}get active(){return this.valid&&"canceled"!==this.status}get errorMessage(){return this.#Se||""}set errorMessage(e){this.#Se=e;const t=this.querySelector(".error-message");t&&(t.textContent=e),F(e,"error")}get finished(){return["canceled","successful","failed"].includes(this.status)}get loadedSize(){return`${Xe(this.progressEventLoaded)} / ${Xe(this.progressEventTotal)}`}get progressElement(){return this.querySelector("sl-progress-bar")}set progressEvent(e){this.progressEventLoaded=e.loaded,this.progressEventTotal=e.total,this.value=Math.round(e.loaded/e.total*100),this.querySelector(".loaded-size").textContent=this.loadedSize}get responseMessage(){try{return JSON.parse(this.request.responseText).message}catch(e){return`${this.request.status}: ${this.request.statusText}`}}get status(){return this.#_e}set status(e){this.#_e=e,this.className=e,this.progressElement?.toggleAttribute("indeterminate","upload-finished"===e)}get valid(){return this.#ke}set valid(e){this.#ke=e,this.classList.toggle("invalid",!e)}get value(){return this.#Le}set value(e){this.#Le=e,this.progressElement&&(this.progressElement.value=e),100===e&&(this.status="upload-finished"),this.dispatchCustomEvent("FileUpload.Change")}}customElements.define("alchemy-file-upload",Ke);class Qe extends HTMLElement{fileCount=0;#Ae=[];#Te=y("Cancel all uploads");#Ie=null;#N=!1;#Fe=()=>this.#qe();connectedCallback(){var e,t;this.innerHTML=(e=this.#Te,t=this.fileCount,`\n <sl-progress-bar value="0"></sl-progress-bar>\n <div class="overall-progress-value">\n <span class="value-text"></span>\n\n <sl-tooltip content="${e}">\n <button class="icon_button" aria-label="${e}">\n <alchemy-icon name="close"></alchemy-icon>\n </button>\n </sl-tooltip>\n </div>\n <div class="single-uploads" style="--progress-columns: ${t>3?3:t}"></div>\n <div class="overall-upload-value value-text"></div>\n`),this.visible=!0,this.#Ie=this.querySelector("button"),this.#Ie.addEventListener("click",()=>{this.finished?this.onComplete(this.status):this.cancel()}),this.#Ae.forEach(e=>{this.querySelector(".single-uploads").append(e)}),this.#qe(),this.addEventListener("Alchemy.FileUpload.Change",this.#Fe)}disconnectedCallback(){this.removeEventListener("Alchemy.FileUpload.Change",this.#Fe)}initialize(e=[]){this.#Ae=e,this.fileCount=e.length}cancel(){this.#$e().forEach(e=>{e.cancel()}),this.#Me()}onComplete(e){}#$e(){return this.#Ae.filter(e=>e.active)}#Me(){this.#Te=y("Close"),this.#Ie.ariaLabel=this.#Te,this.#Ie.parentElement.content=this.#Te}#Be(e){return this.#$e().reduce((t,s)=>s[e]+t,0)}#qe(){const e=this.status;this.className=e,this.progressElement.value=this.totalProgress,this.progressElement.toggleAttribute("indeterminate","upload-finished"===e),this.querySelector(".overall-progress-value > span").textContent=this.overallProgressValue,this.querySelector(".overall-upload-value").textContent=this.overallUploadSize,this.finished?(this.#Me(),this.onComplete(e)):this.visible=!0}get finished(){return this.#$e().every(e=>e.finished)}get overallUploadSize(){this.#$e().filter(e=>e.value>=100).length;return this.totalProgress,this.#$e().length,`${Xe(this.#Be("progressEventLoaded"))} / ${Xe(this.#Be("progressEventTotal"))}`}get overallProgressValue(){const e=this.#$e().filter(e=>e.value>=100).length;return`${this.totalProgress}% (${e} / ${this.#$e().length})`}get progressElement(){return this.querySelector("sl-progress-bar")}get status(){const e=this.#$e().map(e=>e.className);return e.includes("failed")?"failed":0===e.length?"canceled":e.every(t=>t===e[0])?e[0]:"in-progress"}get totalProgress(){const e=this.#$e().reduce((e,t)=>e+t.file.size,0);let t=Math.ceil(this.#$e().reduce((t,s)=>{const i=s.file.size/e;return s.value*i+t},0));return t>100&&(t=100),t}get visible(){return this.#N}set visible(e){this.classList.toggle("visible",e),this.#N=e}}customElements.define("alchemy-upload-progress",Qe);class Ye extends HTMLElement{#De=null;#He=!1;connectedCallback(){this.fileInput.addEventListener("change",this.#ze),this.dropzone&&this.#Pe(),this.addEventListener("Alchemy.upload.successful",this)}disconnectedCallback(){this.fileInput?.removeEventListener("change",this.#ze),this.#De&&(this.#De.removeEventListener("dragleave",this.#Oe),this.#De.removeEventListener("drop",this.#Ne),this.#De.removeEventListener("dragover",this.#Ue),this.#De=null)}handleEvent(e){if("Alchemy.upload.successful"===e.type)this.#Re()}#ze=e=>{this.uploadFiles(Array.from(e.target.files))};#We=e=>{this.#He!==e&&(this.#He=e,this.#De.classList.toggle("dragover"))};#Oe=()=>this.#We(!1);#Ne=async e=>{e.preventDefault(),this.#We(!1);const t=[...e.dataTransfer.items].map(e=>e.getAsFile());this.uploadFiles(t)};#Ue=e=>{e.preventDefault(),this.#We(!0)};#Re(){setTimeout(()=>{const e=this.redirectUrl,t=this.closest("turbo-frame");this.uploadProgress.visible=!1,e&&(t?(t.setAttribute("src",e),t.reload()):Turbo.visit(e))},750)}#Pe(){this.#De=document.querySelector(this.dropzone),this.#De&&(this.#De.addEventListener("dragleave",this.#Oe),this.#De.addEventListener("drop",this.#Ne),this.#De.addEventListener("dragover",this.#Ue))}uploadFiles(e){let t=0;const s=M("alchemy_uploader_defaults"),i=e.map(e=>{const i=new XMLHttpRequest,n=new Ke;return n.initialize(e,i),s.upload_limit-1<t?(n.valid=!1,n.errorMessage=y("Maximum number of files exceeded")):n.valid&&(t++,this.#je(i,e)),n});this.#Ve(i)}#je(e,t){const s=this.querySelector("form"),i=new FormData(s);i.set(this.fileInput.name,t),e.open("POST",s.action),e.setRequestHeader("X-CSRF-Token",be()),e.setRequestHeader("X-Requested-With","XMLHttpRequest"),e.setRequestHeader("Accept","application/json"),e.send(i)}#Ve(e){this.uploadProgress&&(this.uploadProgress.cancel(),this.uploadProgress.remove()),this.uploadProgress=new Qe,this.uploadProgress.initialize(e),this.uploadProgress.setAttribute("layout",this.layout),this.uploadProgress.onComplete=e=>{this.dispatchEvent(new CustomEvent(`Alchemy.upload.${e}`,{bubbles:!0}))},this.#Je.append(this.uploadProgress)}get#Je(){return this.#De??document.body}get dropzone(){return this.getAttribute("dropzone")}get layout(){return this.getAttribute("layout")||"row"}get fileInput(){return this.querySelector("input[type='file']")}get redirectUrl(){return this.getAttribute("redirect-url")}}customElements.define("alchemy-uploader",Ye);class Ge extends HTMLElement{connectedCallback(){this.innerHTML=`\n <alchemy-spinner></alchemy-spinner>\n <div id="overlay_text_box">\n <span id="overlay_text">${this.getAttribute("text")??""}</span>\n </div>\n `}set show(e){this.classList.toggle("visible",e)}}customElements.define("alchemy-overlay",Ge);const Ze="BUTTON";class et extends HTMLElement{connectedCallback(){this.pageId=this.getAttribute("page-id"),this.folded=this.hasAttribute("folded"),this.folderButton?.addEventListener("click",this)}disconnectedCallback(){this.folderButton?.removeEventListener("click",this)}async handleEvent(e){"click"===e.type&&await this.handleFolderClick(e)}async handleFolderClick(e){e.preventDefault(),e.stopPropagation();const t=e.currentTarget;t.innerHTML="";const s=new E("small");s.spin(t);try{await Ee(B.fold_admin_page_path(this.pageId),null,"text/vnd.turbo-stream.html"),this.folded=!this.folded,this.toggleAttribute("folded",this.folded),this.toggleChildren(),this.updateFolderIcon()}catch(e){F(e.message||e,"error"),this.updateFolderIcon()}finally{s.stop()}}toggleChildren(){const e=this.querySelector(`#page_${this.pageId}_children`);e&&e.classList.toggle("hidden",this.folded)}updateFolderIcon(){if(this.folderButton){const e=this.folded?"arrow-right-s":"arrow-down-s";this.folderButton.innerHTML=`<alchemy-icon name="${e}"></alchemy-icon>`}}updateFolderButton(){const e=this.querySelector(".page_folder");if(!e)return;const t=this.hasChildren||this.folded;if(t&&"SPAN"===e.tagName){const t=this.folded?"arrow-right-s":"arrow-down-s";e.outerHTML=`<button class="page_folder icon_button">\n <alchemy-icon name="${t}"></alchemy-icon>\n </button>`,this.folderButton?.addEventListener("click",this)}else t||e.tagName!==Ze?t&&e.tagName===Ze&&this.updateFolderIcon():e.outerHTML='<span class="page_folder"></span>'}get hasChildren(){const e=this.querySelector(`#page_${this.pageId}_children`);return!!e&&e.querySelectorAll(":scope > alchemy-page-node").length>0}get folderButton(){return this.querySelector("button.page_folder")}}customElements.define("alchemy-page-node",et);class tt extends HTMLElement{connectedCallback(){this.publicField?.addEventListener("click",this.#Xe)}disconnectedCallback(){this.publicField?.removeEventListener("click",this.#Xe)}#Xe=e=>{const t=e.target,s=new Date,i=new Date(s.getTime()-6e4*s.getTimezoneOffset()).toISOString();t.checked?(this.publicationDateFields.classList.remove("hidden"),this.publicOnPicker.value=i.substring(0,i.indexOf("T")+6)):(this.publicationDateFields.classList.add("hidden"),this.publicOnPicker.value=""),this.publicUntilPicker.value=""};get publicField(){return this.querySelector("#page_public")}get publicOnPicker(){return this.querySelector("input#page_public_on")}get publicUntilPicker(){return this.querySelector("input#page_public_until")}get publicationDateFields(){return this.querySelector(".page-publication-date-fields")}}customElements.define("alchemy-page-publication-fields",tt);class st extends Y{get pageId(){return this.selection?JSON.parse(this.selection).id:void 0}_searchQuery(e,t){return{q:{name_i_cont:e,...JSON.parse(this.queryParams)},page:t}}_parseResponse(e){const t=e.meta;return{results:e.pages,more:t.page*t.per_page<t.total_count}}_entry(e,t){return{icon:"file-3",primary:this._hightlightTerm(e.name,t),aside:e.site?.name,secondary:{text:e.url_path,truncate:"head"},secondaryAside:{badge:e.language_code}}}_selectedEntry(e){return{icon:"file-3",primary:e.text||e.name,secondary:{text:e.url_path,truncate:"head"}}}}customElements.define("alchemy-page-select",st);class it extends HTMLElement{#Ke;connectedCallback(){this.addEventListener("change",this.#Qe),this.addEventListener("click",this.#Ye),this.#Ke=document.querySelector("#select_all_pictures"),this.#Ke?.addEventListener("click",this.#Ge)}disconnectedCallback(){this.removeEventListener("change",this.#Qe),this.removeEventListener("click",this.#Ye),this.#Ke?.removeEventListener("click",this.#Ge)}#Ge=e=>{e.preventDefault(),this.#Ke.classList.toggle("active");const t=this.#Ke.classList.contains("active");this.#Ze(t),this.selectedItemTools.classList.toggle("hidden",!t)};#Qe=e=>{const t=e.target.closest(".picture_tool.select input");t&&(this.selectedItemTools.classList.toggle("hidden",0===this.checkedInputs.length),t.parentElement.classList.toggle("visible",t.checked))};#Ye=e=>{const t=e.target.closest("a#edit_multiple_pictures");t&&(e.preventDefault(),A(this.#et(t.href),{title:t.title,size:"500x242"}))};#Ze(e){this.querySelectorAll(".picture_tool.select input[type='checkbox']").forEach(t=>{t.checked=e,t.closest(".picture_thumbnail").classList.toggle("active",e)})}#et(e){const t=new URL(e);return this.checkedInputs.forEach(e=>t.searchParams.append(e.name,e.value)),t.toString()}get checkedInputs(){return this.querySelectorAll("input:checked")}get selectedItemTools(){return this.querySelector(".selected_item_tools")}}customElements.define("alchemy-picture-archive",it);class nt extends HTMLElement{connectedCallback(){this.addEventListener("change",this)}disconnectedCallback(){this.removeEventListener("change",this)}handleEvent(e){if("change"===e.type)this.onChange()}onChange(){const e=new URL(this.getAttribute("url")),t=this.querySelector("select");e.searchParams.set("language_id",t.value),Turbo.visit(e,{frame:"picture_descriptions"})}}customElements.define("alchemy-picture-description-select",nt);class lt extends HTMLElement{connectedCallback(){this.cropFromField=this.querySelector("[data-crop-from]"),this.cropSizeField=this.querySelector("[data-crop-size]"),this.pictureIdField=this.querySelector("[data-picture-id]"),this.targetSizeField=this.querySelector("[data-target-size]"),this.imageCropperField=this.querySelector("[data-image-cropper]"),this.image=this.querySelector("img"),this.pictureThumbnail=this.querySelector("alchemy-picture-thumbnail"),this.deleteButton=this.querySelector(".picture_tool.delete"),this.cropLink=this.querySelector(".crop_link"),this.targetSize=this.targetSizeField.dataset.targetSize,this.pictureId=this.pictureIdField.value,this.update=function(e,t){let s;return function(...i){const n=this;clearTimeout(s),s=setTimeout(()=>e.apply(n,i),t)}}(()=>{this.updateImage(),this.updateCropLink()},125),this.deleteButton?.addEventListener("click",this.removeImage),this.observer=new MutationObserver(this.mutationCallback),this.observer.observe(this.cropFromField,{attributes:!0}),this.observer.observe(this.cropSizeField,{attributes:!0}),this.observer.observe(this.pictureIdField,{attributes:!0})}disconnectedCallback(){this.observer.disconnect()}mutationCallback=e=>{for(const t of e)"pictureId"in t.target.dataset&&(this.cropFromField.value="",this.cropSizeField.value="",this.pictureId=t.target.value),this.update()};updateImage(){this.pictureId&&(this.pictureThumbnail.loading=!0,fe(B.url_admin_picture_path(this.pictureId),{crop:this.imageCropperEnabled,crop_from:this.cropFrom,crop_size:this.cropSize,flatten:!0,size:"160x120"}).then(({data:e})=>{this.pictureThumbnail.src=e.url,this.pictureThumbnail.image.alt=e.alt,this.pictureThumbnail.image.title=e.title,this.setElementDirty()}).catch(e=>{console.error(e.message||e),F(e.message||e,"error")}))}removeImage=()=>{this.pictureThumbnail.innerHTML='<alchemy-icon name="image" size="xl"></alchemy-icon>',this.pictureIdField.value="",this.image=null,this.cropLink.classList.add("disabled"),this.setElementDirty()};setElementDirty(){this.closest(".element-editor").setDirty(this)}updateCropLink(){this.pictureId&&this.imageCropperEnabled&&(this.cropLink.classList.remove("disabled"),this.cropLink.href.match(/(picture_id=)\d+/)?this.cropLink.href=this.cropLink.href.replace(/(picture_id=)\d+/,"$1"+this.pictureId):this.cropLink.href=this.cropLink.href+`&picture_id=${this.pictureId}`)}get cropFrom(){return""===this.cropFromField.value?this.defaultCropFrom.join("x"):this.cropFromField.value}get cropSize(){return""===this.cropSizeField.value?this.defaultCropSize.join("x"):this.cropSizeField.value}get defaultCropSize(){if(!this.imageCropperEnabled)return[];const e=this.targetSize.split("x").map(e=>parseInt(e)),t=(s=e[0]/this.imageFileWidth,i=e[1]/this.imageFileHeight,s>=i?s:i);var s,i;return[Math.round(e[0]/t),Math.round(e[1]/t)]}get defaultCropFrom(){if(!this.imageCropperEnabled)return[];const e=this.defaultCropSize;return[Math.round((this.imageFileWidth-e[0])/2),Math.round((this.imageFileHeight-e[1])/2)]}get imageFileWidth(){return parseInt(this.pictureIdField.dataset.imageFileWidth)}get imageFileHeight(){return parseInt(this.pictureIdField.dataset.imageFileHeight)}get imageCropperEnabled(){return"true"===this.targetSizeField.dataset.imageCropper}}customElements.define("alchemy-picture-editor",lt);class ot extends HTMLElement{constructor(){super(),this.spinner=new E("small")}handleEvent(e){switch(e.type){case"load":this.#tt();break;case"error":this.#st(e)}}connectedCallback(){this.classList.add("thumbnail_background"),this.src&&!this.image&&this.start(),this.#it()}disconnectedCallback(){this.image?.removeEventListener("load",this),this.image?.removeEventListener("error",this),this.stop()}createImage(e=this.src,t=this.name){this.image=new Image,this.image.src=e,t&&(this.image.alt=t)}start(e){this.createImage(e),this.image.addEventListener("load",this),this.image.addEventListener("error",this),this.load()}load(){this.image?.complete||(this.setAttribute("loading","loading"),this.innerHTML="",this.spinner.spin(this))}stop(){this.classList.remove("loading"),this.spinner.stop()}#tt(){this.spinner.stop(),this.removeAttribute("loading")}#st(e){const t=`Could not load ${this.image.src}`,s=this.closest(".ingredient-editor");this.spinner.stop(),this.innerHTML=`\n <sl-tooltip content="${t}" ${s?"hoist":""}>\n <alchemy-icon name="alert" class="error"></alchemy-icon>\n </sl-tooltip>\n `,console.error(t,e)}#it(){this.image?.complete?this.replaceChildren(this.image):this.image&&this.append(this.image)}set loading(e){e?this.load():this.stop()}set src(e){this.start(e),this.#it()}get name(){return this.getAttribute("name")}get src(){return this.getAttribute("src")}}customElements.define("alchemy-picture-thumbnail",ot);class rt extends HTMLElement{connectedCallback(){this.addEventListener("submit",this),document.addEventListener("alchemy:page-dirty",this)}disconnectedCallback(){this.removeEventListener("submit",this),document.removeEventListener("alchemy:page-dirty",this)}handleEvent(e){switch(e.type){case"alchemy:page-dirty":this.markDirty(e.detail);break;case"submit":this.button.loading=!0}}markDirty(e){this.button.variant="primary",this.button.disabled=!1,this.tooltip.content=e.tooltip}get button(){return this.querySelector("sl-button")}get tooltip(){return this.querySelector("sl-tooltip")}}customElements.define("alchemy-publish-page-button",rt);class at extends HTMLElement{connectedCallback(){this.searchInput=document.querySelector(".search_input_field"),this.clearButton=document.querySelector("#search_field_clear"),this.resultCounter=document.querySelector("#page_filter_result"),this.setupSearch(),requestAnimationFrame(()=>{this.setupSortables()}),this.observer=new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE&&(e.classList?.contains("children")&&this.setupSortable(e),e.querySelectorAll(".children").forEach(e=>this.setupSortable(e)))})})}),this.observer.observe(this,{childList:!0,subtree:!0})}disconnectedCallback(){this.teardownSearch(),this.observer?.disconnect()}setupSearch(){this.searchInput?.addEventListener("input",this),this.clearButton?.addEventListener("click",this)}teardownSearch(){this.searchInput?.removeEventListener("input",this),this.clearButton?.removeEventListener("click",this)}handleEvent(e){"input"===e.type&&e.target===this.searchInput?this.handleSearch(e):"click"===e.type&&e.target===this.clearButton&&this.handleClearSearch(e)}handleSearch(e){const t=e.target.value.toLowerCase().trim();""!==t?this.filterPages(t):this.clearFilter()}filterPages(e){const t=this.querySelectorAll(".sitemap_page");let s=0,i=null;t.forEach(t=>{(t.getAttribute("name")||"").toLowerCase().includes(e)?(t.classList.add("highlight"),t.classList.remove("no-match"),s++,i||(i=t)):(t.classList.remove("highlight"),t.classList.add("no-match"))}),1===s?(this.resultCounter.textContent=`1 ${y("page_found")}`,this.resultCounter.style.display="block"):s>1?(this.resultCounter.textContent=`${s} ${y("pages_found")}`,this.resultCounter.style.display="block"):this.resultCounter.style.display="none",i&&i.scrollIntoView({behavior:"smooth",block:"center"})}clearFilter(){this.querySelectorAll(".sitemap_page").forEach(e=>{e.classList.remove("highlight","no-match")}),this.resultCounter.style.display="none"}handleClearSearch(e){e.preventDefault(),this.searchInput.value="",this.clearFilter()}setupSortable(e){new d(e,{group:"pages",animation:150,fallbackOnBody:!0,swapThreshold:.65,handle:".page-icon.handle",draggable:"alchemy-page-node",onEnd:e=>this.handleSort(e)})}setupSortables(){this.querySelectorAll(".children").forEach(e=>this.setupSortable(e))}async handleSort(e){if(e.from===e.to&&e.oldIndex===e.newIndex)return;const t=e.item,s=t.pageId,i=B.move_admin_page_path(s),n={target_parent_id:e.to.dataset.parentId,new_position:e.newIndex};q(!0);try{const l=await Ee(i,n),o=await l.data,r=t.querySelector(`#page_${s}`);if(r){const e=r.querySelector(".sitemap_url");e&&o.url_path&&(e.textContent=o.url_path)}this.updateFolderIcons(e.from,e.to),F(y("Successfully moved page"))}catch(e){F(e.message||e,"error"),window.location.reload()}finally{q(!1)}}updateFolderIcons(e,t){const s=e.closest("alchemy-page-node");if(s?.updateFolderButton(),e!==t){const e=t.closest("alchemy-page-node");e?.updateFolderButton()}}}customElements.define("alchemy-sitemap",at);const ct={draggable:".element-editor",handle:".element-handle.draggable",ghostClass:"dragged",animation:150,swapThreshold:.65,easing:"cubic-bezier(1, 0, 0, 1)"};function dt(e){const t=e.item.dataset.elementName;document.querySelectorAll(`[data-droppable-elements~="${t}"]`).forEach(e=>e.classList.add("droppable-elements"))}function ht(e){const t=e.item,s=e.to.parentElement.closest(".element-editor"),i={element_id:t.dataset.elementId,position:e.newIndex+1};s&&(i.parent_element_id=s.dataset.elementId),e.target===e.to&&we(B.order_admin_elements_path,i).then(e=>{const s=e.data;F(s.message),s.pageHasUnpublishedChanges&&Se(s),z(),t.updateTitle(s.preview_text)})}function ut(){document.querySelectorAll("[data-droppable-elements]").forEach(e=>e.classList.remove("droppable-elements"))}class mt extends HTMLElement{connectedCallback(){const e={name:this.dataset.elementName,put:(e,t,s)=>e.el.dataset.droppableElements.split(" ").includes(s.dataset.elementName)};new d(this,{...ct,onStart:dt,onSort:ht,onEnd:ut,group:e})}}customElements.define("alchemy-sortable-elements",mt);class pt extends HTMLElement{connectedCallback(){this.className=`spinner spinner--${this.size}`,this.innerHTML=`\n <svg width="100%" viewBox="0 0 28 28" style="--spinner-color: ${this.color}">\n <path\n class="hex1"\n d="M5.938,18.07l-5.878-5.9l2.154-8.058l8.024-2.161l5.87,5.9l-2.144,8.058L5.938,18.07z"\n />\n <path\n class="hex2"\n d="M19.686,20.785l-4.731-4.754l1.725-6.487l6.468-1.742l4.733,4.754l-1.734,6.487L19.686,20.785z"\n />\n <path\n class="hex3"\n d="M11.708,26.294l-3.47-3.485l1.276-4.758l4.74-1.276l3.468,3.485l-1.265,4.758L11.708,26.294z"\n />\n </svg>\n `}get size(){return this.getAttribute("size")||"medium"}get color(){return this.getAttribute("color")||"currentColor"}}customElements.define("alchemy-spinner",pt);class gt extends HTMLElement{#y=null;connectedCallback(){this.classList.add("autocomplete_tag_list"),this.input.classList.add("alchemy_selectbox"),this.#y=new t(this.input,this.settings)}disconnectedCallback(){j(this.#y),this.#y=null}focus(){W(this.#y,()=>super.focus())}get input(){return this.getElementsByTagName("input")[0]}get settings(){return{plugins:{remove_button:J()},valueField:"id",delimiter:",",create:!0,createFilter(e){return!this.loading&&(this.settings.duplicates||!this.options[e])},persist:!1,clearAfterSelect:!0,maxOptions:null,openOnFocus:!1,placeholder:this.getAttribute("placeholder"),load:(e,t)=>{fe(this.getAttribute("url"),{term:e}).then(e=>t(e.data)).catch(e=>{F(e.message||e,"error"),t()})},...V(),render:{...X}}}}customElements.define("alchemy-tags-autocomplete",gt);const yt="alchemy-dark",vt="alchemy";class bt extends HTMLElement{#nt=null;connectedCallback(){this.className="tinymce_container",this.querySelector(":scope > alchemy-spinner")||this.insertAdjacentHTML("beforeend",'<alchemy-spinner size="small"></alchemy-spinner>'),this.style.minHeight=`${this.minHeight}px`,this.editor.style.display="none";const e={root:document.getElementById("element_area"),rootMargin:"0px",threshold:[.05]};this.tinymceIntersectionObserver=new IntersectionObserver((e,t)=>{e.forEach(e=>{e.intersectionRatio>0&&(this._initTinymceEditor(),t.unobserve(e.target))})},e),this.tinymceIntersectionObserver.observe(this),this._setupThemeChangeListener()}disconnectedCallback(){this.tinymceIntersectionObserver?.disconnect(),this._removeThemeChangeListener(),tinymce.get(this.editorId)?.remove(this.editorId)}_initTinymceEditor(){tinymce.init(this.configuration).then(e=>{e.forEach(e=>this._setupEditor(e))})}_setupEditor(e){e.show();const t=this.getElementsByTagName("alchemy-spinner")[0];t&&t.remove(),this.elementEditor&&(e.on("dirty",e=>{this.elementEditor.setDirty(e.target.editorContainer)}),e.on("click",()=>this.elementEditor.onClickElement(!1)))}_setupThemeChangeListener(){this.darkModeMediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.themeChangeHandler=e=>this._handleThemeChange(e),this.darkModeMediaQuery.addEventListener("change",this.themeChangeHandler)}_removeThemeChangeListener(){this.darkModeMediaQuery&&this.themeChangeHandler&&this.darkModeMediaQuery.removeEventListener("change",this.themeChangeHandler)}_handleThemeChange(e){const t=tinymce.get(this.editorId);if(t){const s=e.matches?yt:vt,i=e.matches?yt:vt;t.remove(),tinymce.init({content_css:i,...this.configuration,skin:s}).then(e=>{e.forEach(e=>this._setupEditor(e))})}}get configuration(){const e={};this.getAttributeNames().forEach(t=>{if(!["class","id","is","name","style"].includes(t)){const s=this.getAttribute(t),i=t.replaceAll("-","_");if(s===t||""===s)e[i]=!0;else try{e[i]=JSON.parse(s)}catch(t){e[i]=s}}});const t={content_css:this.preferredTheme,...M("alchemy_tinymce_defaults"),...e,language:g(),selector:`#${this.editorId}`,skin:this.preferredTheme};return t.height=t.min_height,t}get preferredTheme(){return window.matchMedia("(prefers-color-scheme: dark)").matches?yt:vt}get editorId(){return this.editor.id}get editor(){return this.getElementsByTagName("textarea")[0]}get elementEditor(){return document.getElementById(this.editorId).closest("alchemy-element-editor")}get minHeight(){return this.#nt||this.configuration.min_height}set minHeight(e){this.#nt=e}}customElements.define("alchemy-tinymce",bt);class ft extends HTMLElement{async connectedCallback(){const e=new E("small");e.spin(this);try{const e=await fetch(this.url,{credentials:"include"}),t=await e.json();e.ok?this.showStatus(t):this.showError(e)}catch(e){this.showError(e)}finally{e.stop()}}get url(){return this.getAttribute("url")}showStatus(e){"true"==e.status?this.querySelector(".update_available").classList.remove("hidden"):this.querySelector(".up_to_date").classList.remove("hidden")}showError(e){this.querySelector(".error").classList.remove("hidden"),console.error("[alchemy] Error fetching update status",e)}}customElements.define("alchemy-update-check",ft),h("tooltip.show",{keyframes:[{transform:"translateY(10px)",opacity:"0"},{transform:"translateY(0)",opacity:"1"}],options:{duration:100}}),h("tooltip.hide",{keyframes:[{transform:"translateY(0)",opacity:"1"},{transform:"translateY(10px)",opacity:"0"}],options:{duration:100}}),h("dialog.show",{keyframes:[{transform:"scale(0.98)",opacity:"0"},{transform:"scale(1)",opacity:"1"}],options:{duration:150}}),h("dialog.hide",{keyframes:[{transform:"scale(1)",opacity:"1"},{transform:"scale(0.98)",opacity:"0"}],options:{duration:150}});const Et=document.querySelector('link[rel="preload"][as="image"]').getAttribute("href"),wt={"x-lg":"close",caret:"arrow-down-s"},kt={resolver:e=>`${Et}#ri-${wt[e]||e}-line`,mutator:e=>{e.setAttribute("fill","currentColor"),e.setAttribute("viewBox","0 0 24 24")},spriteSheet:!0};u("default",kt),u("system",kt),void 0===window.Alchemy&&(window.Alchemy={}),Object.assign(Alchemy,{closeCurrentDialog:x,currentDialog:C,t:y,FixedElements:I,growl:F,LinkDialog:class extends S{#lt;constructor(e){const t=new URL(B.link_admin_pages_path,window.location),s={url:e.url,selected_tab:e.type,link_title:e.title,link_target:e.target};Object.keys(s).forEach(e=>{s[e]&&t.searchParams.set(e,s[e])}),super(t.href,{size:"600x320",title:y("Link")})}replace(e){super.replace(e),this.#u()}open(){return super.open(),new Promise(e=>this.#lt=e)}#u(){const e=document.querySelector('[data-link-form-type="internal"]'),t=document.querySelector('[data-link-form-type="file"] alchemy-attachment-select');e.addEventListener("Alchemy.RemoteSelect.Change",e=>{this.#ot(e.detail.added)}),t.addEventListener("Alchemy.RemoteSelect.Change",e=>{const t=e.detail.added;document.getElementById("file_link").value=t?t.url:""}),document.querySelectorAll("[data-link-form-type]").forEach(e=>{e.addEventListener("submit",e=>{e.preventDefault(),this.#rt(e.target.dataset.linkFormType)})})}#ot(e=null){const t=document.getElementById("internal_link"),s=document.querySelector('[data-link-form-type="internal"] alchemy-dom-id-api-select');t.value=e?e.url_path:"",s.page=e?e.id:void 0}#rt(e){const t=document.getElementById("element_anchor");let s=document.getElementById(`${e}_link`).value;if("internal"===e&&""!==t.value)s=s.replace(D,"")+t.value;else if("external"===e&&!function(e){const t=document.getElementById("external_link")?.dataset.linkUrlRegexp;if(!t)return!0;const s=t.lastIndexOf("/");return new RegExp(t.slice(1,s),t.slice(s+1)).test(e)}(s))return void this.#at();this.#lt({url:s.trim(),title:document.getElementById(`${e}_link_title`).value,target:document.getElementById(`${e}_link_target`)?.value,type:e}),this.close()}#at(){const e=document.getElementById("errors");e.querySelector("ul").innerHTML=`<li>${Alchemy.t("url_validation_failed")}</li>`,e.style.display="block"}},pleaseWaitOverlay:q,Spinner:E,reloadPreview:z}),e.config.forms.confirm=O,document.addEventListener("turbo:load",function(){document.documentElement.classList.remove("no-js"),b(),document.removeEventListener("keypress",$),document.addEventListener("keypress",$),document.querySelectorAll(".please_wait").forEach(e=>{e.addEventListener("click",q)}),document.querySelectorAll("a.button").forEach(e=>{e.setAttribute("tabindex",0)}),key.filter=function(e){let t=(e.target||e.srcElement).tagName;return key.isPressed("esc")||!("INPUT"===t||"SELECT"===t||"TEXTAREA"===t)}});export{G as AttachmentSelect,Te as ElementSelect,st as PageSelect,Y as RemoteSelect,gt as TagsAutocomplete,bt as Tinymce,k as on};
2
2
  //# sourceMappingURL=alchemy_admin.min.js.map