alchemy_cms 7.2.9 → 7.3.0

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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +97 -29
  3. data/Gemfile +3 -11
  4. data/Rakefile +1 -0
  5. data/alchemy_cms.gemspec +7 -7
  6. data/app/assets/builds/alchemy/admin/print.css +1 -0
  7. data/app/assets/builds/alchemy/admin/print.css.map +1 -0
  8. data/app/assets/builds/alchemy/admin.css +1 -0
  9. data/app/assets/builds/alchemy/admin.css.map +1 -0
  10. data/app/assets/builds/alchemy/welcome.css +1 -0
  11. data/app/assets/builds/alchemy/welcome.css.map +1 -0
  12. data/app/assets/builds/tinymce/skins/content/alchemy/content.css +1 -0
  13. data/app/assets/builds/tinymce/skins/content/alchemy/content.css.map +1 -0
  14. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -0
  15. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css.map +1 -0
  16. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.css +1 -0
  17. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.css.map +1 -0
  18. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css +1 -0
  19. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css.map +1 -0
  20. data/app/assets/config/alchemy_manifest.js +1 -5
  21. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +4 -0
  22. data/app/assets/stylesheets/alchemy/{_custom-properties.scss → _custom-properties.css} +28 -25
  23. data/app/assets/stylesheets/alchemy/_deprecated_variables.scss +41 -0
  24. data/app/assets/stylesheets/alchemy/_deprecation.scss +17 -0
  25. data/app/assets/stylesheets/alchemy/_extends.scss +1 -1
  26. data/app/assets/stylesheets/alchemy/_mixins.scss +20 -23
  27. data/app/assets/stylesheets/alchemy/_variables.scss +98 -94
  28. data/app/assets/stylesheets/alchemy/{archive.scss → admin/archive.scss} +23 -23
  29. data/app/assets/stylesheets/alchemy/{attachment-select.scss → admin/attachment-select.scss} +2 -2
  30. data/app/assets/stylesheets/alchemy/{attachments.scss → admin/attachments.scss} +4 -4
  31. data/app/assets/stylesheets/alchemy/{base.scss → admin/base.scss} +9 -9
  32. data/app/assets/stylesheets/alchemy/{buttons.scss → admin/buttons.scss} +3 -3
  33. data/app/assets/stylesheets/alchemy/{clipboard.scss → admin/clipboard.scss} +9 -6
  34. data/app/assets/stylesheets/alchemy/{dashboard.scss → admin/dashboard.scss} +8 -8
  35. data/app/assets/stylesheets/alchemy/{dialogs.scss → admin/dialogs.scss} +20 -20
  36. data/app/assets/stylesheets/alchemy/{elements.scss → admin/elements.scss} +129 -89
  37. data/app/assets/stylesheets/alchemy/{errors.scss → admin/errors.scss} +22 -6
  38. data/app/assets/stylesheets/alchemy/{flash.scss → admin/flash.scss} +3 -3
  39. data/app/assets/stylesheets/alchemy/{flatpickr.scss → admin/flatpickr.scss} +55 -35
  40. data/app/assets/stylesheets/alchemy/{form_fields.scss → admin/form_fields.scss} +8 -6
  41. data/app/assets/stylesheets/alchemy/{forms.scss → admin/forms.scss} +20 -16
  42. data/app/assets/stylesheets/alchemy/{frame.scss → admin/frame.scss} +9 -9
  43. data/app/assets/stylesheets/alchemy/{image_library.scss → admin/image_library.scss} +34 -33
  44. data/app/assets/stylesheets/alchemy/admin/labels.scss +3 -0
  45. data/app/assets/stylesheets/alchemy/{list_filter.scss → admin/list_filter.scss} +4 -4
  46. data/app/assets/stylesheets/alchemy/{lists.scss → admin/lists.scss} +9 -7
  47. data/app/assets/stylesheets/alchemy/{navigation.scss → admin/navigation.scss} +17 -17
  48. data/app/assets/stylesheets/alchemy/{node-select.scss → admin/node-select.scss} +5 -5
  49. data/app/assets/stylesheets/alchemy/{nodes.scss → admin/nodes.scss} +11 -11
  50. data/app/assets/stylesheets/alchemy/{notices.scss → admin/notices.scss} +11 -7
  51. data/app/assets/stylesheets/alchemy/{page-select.scss → admin/page-select.scss} +10 -10
  52. data/app/assets/stylesheets/alchemy/{pagination.scss → admin/pagination.scss} +10 -10
  53. data/app/assets/stylesheets/alchemy/{print.scss → admin/print.scss} +2 -6
  54. data/app/assets/stylesheets/alchemy/{resource_info.scss → admin/resource_info.scss} +6 -7
  55. data/app/assets/stylesheets/alchemy/{search.scss → admin/search.scss} +6 -6
  56. data/app/assets/stylesheets/alchemy/{selects.scss → admin/selects.scss} +46 -39
  57. data/app/assets/stylesheets/alchemy/{shoelace.scss → admin/shoelace.scss} +10 -10
  58. data/app/assets/stylesheets/alchemy/{sitemap.scss → admin/sitemap.scss} +18 -19
  59. data/app/assets/stylesheets/alchemy/{tables.scss → admin/tables.scss} +26 -22
  60. data/app/assets/stylesheets/alchemy/admin/tags.scss +158 -0
  61. data/app/assets/stylesheets/alchemy/{toolbar.scss → admin/toolbar.scss} +10 -10
  62. data/app/assets/stylesheets/alchemy/{typography.scss → admin/typography.scss} +3 -3
  63. data/app/assets/stylesheets/alchemy/{upload.scss → admin/upload.scss} +1 -1
  64. data/app/assets/stylesheets/alchemy/admin.scss +40 -45
  65. data/app/assets/stylesheets/alchemy/welcome.scss +57 -0
  66. data/app/assets/stylesheets/tinymce/skins/content/alchemy/{content.min.scss → content.scss} +5 -4
  67. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/{skin.min.scss → skin.scss} +40 -40
  68. data/app/components/alchemy/admin/link_dialog/internal_tab.rb +1 -2
  69. data/app/components/alchemy/admin/resource/action.rb +46 -0
  70. data/app/components/alchemy/admin/resource/cell.rb +34 -0
  71. data/app/components/alchemy/admin/resource/header.rb +46 -0
  72. data/app/components/alchemy/admin/resource/table.rb +153 -0
  73. data/app/components/alchemy/ingredients/datetime_view.rb +2 -2
  74. data/app/components/alchemy/ingredients/link_view.rb +1 -7
  75. data/app/components/alchemy/ingredients/picture_view.rb +2 -5
  76. data/app/components/alchemy/ingredients/text_view.rb +1 -4
  77. data/app/controllers/alchemy/admin/base_controller.rb +4 -27
  78. data/app/controllers/alchemy/admin/elements_controller.rb +7 -3
  79. data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
  80. data/app/controllers/alchemy/admin/legacy_page_urls_controller.rb +1 -1
  81. data/app/controllers/alchemy/admin/pages_controller.rb +6 -2
  82. data/app/controllers/alchemy/admin/pictures_controller.rb +2 -2
  83. data/app/controllers/alchemy/admin/resources_controller.rb +3 -3
  84. data/app/controllers/alchemy/base_controller.rb +2 -0
  85. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +2 -11
  86. data/app/decorators/alchemy/ingredient_editor.rb +17 -0
  87. data/app/helpers/alchemy/admin/pages_helper.rb +6 -10
  88. data/app/helpers/alchemy/base_helper.rb +2 -2
  89. data/app/helpers/alchemy/elements_block_helper.rb +13 -1
  90. data/app/helpers/alchemy/pages_helper.rb +2 -2
  91. data/app/javascript/alchemy_admin/components/element_editor.js +23 -31
  92. data/app/javascript/alchemy_admin/components/preview_window.js +2 -3
  93. data/app/javascript/alchemy_admin/picture_selector.js +38 -10
  94. data/app/models/alchemy/attachment.rb +0 -8
  95. data/app/models/alchemy/element/dom_id.rb +1 -0
  96. data/app/models/alchemy/element/element_ingredients.rb +0 -73
  97. data/app/models/alchemy/element/presenters.rb +4 -1
  98. data/app/models/alchemy/element.rb +6 -0
  99. data/app/models/alchemy/elements_repository.rb +2 -2
  100. data/app/models/alchemy/ingredient_validator.rb +10 -0
  101. data/app/models/alchemy/page/page_scopes.rb +1 -1
  102. data/app/models/alchemy/picture.rb +0 -10
  103. data/app/models/concerns/alchemy/picture_thumbnails.rb +5 -4
  104. data/app/views/alchemy/admin/attachments/_files_list.html.erb +74 -16
  105. data/app/views/alchemy/admin/clipboard/index.html.erb +38 -33
  106. data/app/views/alchemy/admin/dashboard/_dashboard.html.erb +3 -0
  107. data/app/views/alchemy/admin/dashboard/_left_column.html.erb +4 -0
  108. data/app/views/alchemy/admin/dashboard/_right_column.html.erb +9 -0
  109. data/app/views/alchemy/admin/dashboard/_top.html.erb +12 -0
  110. data/app/views/alchemy/admin/dashboard/index.html.erb +1 -25
  111. data/app/views/alchemy/admin/elements/_element.html.erb +1 -2
  112. data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
  113. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +10 -3
  114. data/app/views/alchemy/admin/ingredients/update.turbo_stream.erb +7 -0
  115. data/app/views/alchemy/admin/languages/_table.html.erb +16 -42
  116. data/app/views/alchemy/admin/nodes/_form.html.erb +1 -1
  117. data/app/views/alchemy/admin/pages/_table.html.erb +92 -27
  118. data/app/views/alchemy/admin/pages/edit.html.erb +6 -8
  119. data/app/views/alchemy/admin/pages/index.html.erb +0 -4
  120. data/app/views/alchemy/admin/pictures/_form.html.erb +14 -12
  121. data/app/views/alchemy/admin/pictures/index.html.erb +1 -11
  122. data/app/views/alchemy/admin/pictures/update.turbo_stream.erb +6 -0
  123. data/app/views/alchemy/admin/resources/_resource_table.html.erb +3 -0
  124. data/app/views/alchemy/admin/resources/_table.html.erb +2 -0
  125. data/app/views/alchemy/admin/resources/index.html.erb +1 -1
  126. data/app/views/alchemy/admin/sites/index.html.erb +1 -1
  127. data/app/views/alchemy/admin/styleguide/index.html.erb +0 -4
  128. data/app/views/alchemy/admin/tags/index.html.erb +15 -14
  129. data/app/views/alchemy/base/403.html.erb +6 -0
  130. data/app/views/alchemy/base/500.html.erb +14 -12
  131. data/app/views/alchemy/ingredients/_datetime_editor.html.erb +13 -11
  132. data/app/views/alchemy/ingredients/_headline_editor.html.erb +29 -22
  133. data/app/views/alchemy/ingredients/_link_editor.html.erb +17 -11
  134. data/app/views/alchemy/ingredients/_page_editor.html.erb +1 -0
  135. data/app/views/alchemy/ingredients/_picture_editor.html.erb +3 -4
  136. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +5 -1
  137. data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -1
  138. data/app/views/alchemy/ingredients/_text_editor.html.erb +20 -14
  139. data/app/views/alchemy/ingredients/shared/_picture_css_class.html.erb +6 -0
  140. data/app/views/layouts/alchemy/admin.html.erb +4 -2
  141. data/bin/setup +2 -0
  142. data/bin/start +1 -1
  143. data/bun.lockb +0 -0
  144. data/config/alchemy/config.yml +9 -0
  145. data/config/locales/alchemy.en.yml +8 -29
  146. data/config/routes.rb +22 -22
  147. data/lib/alchemy/config.rb +3 -3
  148. data/lib/alchemy/install/tasks.rb +5 -2
  149. data/lib/alchemy/resource.rb +4 -14
  150. data/lib/alchemy/resources_helper.rb +3 -1
  151. data/lib/alchemy/test_support/capybara_helpers.rb +8 -5
  152. data/lib/alchemy/test_support/shared_uploader_examples.rb +0 -1
  153. data/lib/alchemy/upgrader/seven_point_three.rb +52 -0
  154. data/lib/alchemy/version.rb +1 -1
  155. data/lib/alchemy_cms.rb +1 -1
  156. data/lib/generators/alchemy/install/files/article.css +25 -0
  157. data/lib/generators/alchemy/install/files/custom.css +4 -0
  158. data/lib/generators/alchemy/install/install_generator.rb +6 -6
  159. data/lib/tasks/alchemy/upgrade.rake +29 -1
  160. data/vendor/assets/stylesheets/alchemy_admin/select2.css +1 -0
  161. data/vendor/assets/stylesheets/jquery.Jcrop.min.css +2 -0
  162. data/vendor/javascript/shoelace.min.js +62 -63
  163. data/vendor/javascript/tinymce.min.js +1 -1
  164. metadata +135 -107
  165. data/app/assets/images/alchemy/lupe.cur +0 -0
  166. data/app/assets/stylesheets/alchemy/labels.scss +0 -3
  167. data/app/assets/stylesheets/alchemy/tags.scss +0 -155
  168. data/app/assets/stylesheets/alchemy/welcome.sass +0 -49
  169. data/app/components/concerns/alchemy/ingredients/link_target.rb +0 -18
  170. data/app/views/alchemy/admin/attachments/_attachment.html.erb +0 -81
  171. data/app/views/alchemy/admin/languages/_language.html.erb +0 -50
  172. data/app/views/alchemy/admin/pages/_table_row.html.erb +0 -111
  173. data/app/views/alchemy/admin/pages/list/_table.html.erb +0 -31
  174. data/app/views/alchemy/admin/pictures/update.js.erb +0 -6
  175. data/app/views/alchemy/admin/tags/_tag.html.erb +0 -32
  176. data/app/views/alchemy/base/update.js.erb +0 -5
  177. data/lib/generators/alchemy/install/files/all.css +0 -11
  178. data/lib/generators/alchemy/install/files/article.scss +0 -30
  179. data/package.json +0 -52
  180. data/vendor/assets/stylesheets/alchemy_admin/select2.scss +0 -741
  181. data/vendor/assets/stylesheets/jquery.Jcrop.min.scss +0 -2
  182. /data/app/assets/stylesheets/alchemy/{fonts.scss → _fonts.scss} +0 -0
  183. /data/app/assets/stylesheets/alchemy/{hints.scss → admin/hints.scss} +0 -0
  184. /data/app/assets/stylesheets/alchemy/{icons.scss → admin/icons.scss} +0 -0
  185. /data/app/assets/stylesheets/alchemy/{images.scss → admin/images.scss} +0 -0
  186. /data/app/assets/stylesheets/alchemy/{preview_window.scss → admin/preview_window.scss} +0 -0
  187. /data/app/assets/stylesheets/alchemy/{spinner.scss → admin/spinner.scss} +0 -0
  188. /data/app/views/alchemy/admin/dashboard/{_locked_pages.html.erb → widgets/_locked_pages.html.erb} +0 -0
  189. /data/app/views/alchemy/admin/dashboard/{_recent_pages.html.erb → widgets/_recent_pages.html.erb} +0 -0
  190. /data/app/views/alchemy/admin/dashboard/{_sites.html.erb → widgets/_sites.html.erb} +0 -0
  191. /data/app/views/alchemy/admin/dashboard/{_users.html.erb → widgets/_users.html.erb} +0 -0
@@ -7,7 +7,7 @@
7
7
  width: calc(100vw - #{$collapsed-main-menu-width});
8
8
  height: calc(100vh - #{$top-menu-height});
9
9
  border-left: $default-border;
10
- background-color: $light-gray;
10
+ background-color: var(--color-grey_very_light);
11
11
  transition: $transition-duration ease-in-out;
12
12
  transform: translate3d(100%, 0, 0);
13
13
 
@@ -16,7 +16,7 @@
16
16
  }
17
17
 
18
18
  // Fix for Tinymce fullscreen window positioning issues (GH#1511)
19
- .tox-fullscreen & {
19
+ .mce-fullscreen & {
20
20
  width: calc(100vw - #{$collapsed-main-menu-width - $default-border-width});
21
21
  }
22
22
 
@@ -29,7 +29,7 @@
29
29
  .elements-window-toolbar {
30
30
  @extend %gradiated-toolbar;
31
31
  display: flex;
32
- padding: 2 * $default-padding;
32
+ padding: var(--spacing-2);
33
33
  border-bottom: $default-border;
34
34
 
35
35
  .right {
@@ -54,7 +54,7 @@ alchemy-tinymce {
54
54
 
55
55
  #main-content-elements {
56
56
  --scrollable-elements-offset: #{$top-menu-height + $toolbar-height};
57
- padding: 2 * $default-padding $default-padding 2px;
57
+ padding: var(--spacing-2) var(--spacing-1) 2px;
58
58
  }
59
59
 
60
60
  #fixed-elements sl-tab-panel {
@@ -84,7 +84,7 @@ alchemy-tinymce {
84
84
 
85
85
  .preview_text_quote {
86
86
  font-size: $small-font-size;
87
- margin-left: $default-margin / 2;
87
+ margin-left: var(--spacing-0);
88
88
  }
89
89
  }
90
90
 
@@ -97,7 +97,7 @@ alchemy-tinymce {
97
97
  .element-handle {
98
98
  display: inline-flex;
99
99
  cursor: move;
100
- padding-right: $default-padding;
100
+ padding-right: var(--spacing-1);
101
101
  }
102
102
 
103
103
  .element-toggle {
@@ -131,10 +131,10 @@ alchemy-tinymce {
131
131
  position: relative;
132
132
  border: 1px solid $default-border-color;
133
133
  border-radius: $default-border-radius;
134
- background-color: $light-gray;
135
- margin: 2 * $default-margin 0;
134
+ background-color: var(--color-grey_very_light);
135
+ margin: var(--spacing-2) 0;
136
136
  transition: box-shadow $transition-duration;
137
- scroll-margin: 2 * $default-margin;
137
+ scroll-margin: var(--spacing-2);
138
138
 
139
139
  &:first-child {
140
140
  margin-top: 0;
@@ -156,7 +156,7 @@ alchemy-tinymce {
156
156
  .element-hidden-icon {
157
157
  display: inline-flex;
158
158
  align-items: center;
159
- gap: $default-padding;
159
+ gap: var(--spacing-1);
160
160
  margin-left: auto;
161
161
  }
162
162
 
@@ -172,7 +172,7 @@ alchemy-tinymce {
172
172
  border-radius: 0;
173
173
 
174
174
  .nestable-elements {
175
- padding: 2 * $default-padding $default-padding / 2;
175
+ padding: var(--spacing-2) var(--spacing-0);
176
176
  }
177
177
  }
178
178
 
@@ -237,16 +237,16 @@ alchemy-tinymce {
237
237
  &.expanded {
238
238
  &.not-fixed {
239
239
  .nestable-elements {
240
- box-shadow: inset 0 4px 8px -2px darken($medium-gray, 15%);
241
- background-color: $medium-gray;
242
- padding: $default-padding;
240
+ box-shadow: inset 0 4px 8px -2px hsl(0deg, 0%, 79%);
241
+ background-color: var(--color-grey_light);
242
+ padding: var(--spacing-1);
243
243
  }
244
244
  }
245
245
  }
246
246
 
247
247
  &.dragged {
248
248
  border: 1px solid var(--color-grey_dark);
249
- background-color: var(--color-grey_medium);
249
+ background-color: var(--color-grey_light);
250
250
  opacity: 0.5;
251
251
  box-shadow: none !important;
252
252
 
@@ -272,7 +272,7 @@ alchemy-tinymce {
272
272
  opacity: 0;
273
273
  z-index: 1;
274
274
  box-shadow: 0 1px 1px $default-border-color;
275
- background-color: $light-gray;
275
+ background-color: var(--color-grey_very_light);
276
276
  transition: all $transition-duration;
277
277
 
278
278
  sl-switch::part(label) {
@@ -300,7 +300,7 @@ alchemy-tinymce {
300
300
  }
301
301
 
302
302
  .element-body {
303
- margin: 4px 8px;
303
+ margin: var(--spacing-1) var(--spacing-2);
304
304
  }
305
305
 
306
306
  .ingredient-editor,
@@ -345,19 +345,19 @@ alchemy-tinymce {
345
345
  }
346
346
 
347
347
  .element-body {
348
- margin: 2 * $default-padding;
348
+ margin: var(--spacing-2);
349
349
  }
350
350
 
351
351
  .validation_notice {
352
352
  float: left;
353
- margin-top: 8px;
354
- margin-bottom: 4px;
353
+ margin-top: var(--spacing-2);
354
+ margin-bottom: var(--spacing-1);
355
355
  font-size: $small-font-size;
356
356
  text-align: left;
357
357
  }
358
358
 
359
359
  alchemy-message {
360
- margin: 2 * $default-margin;
360
+ margin: var(--spacing-2);
361
361
  }
362
362
 
363
363
  .foot_note {
@@ -366,8 +366,8 @@ alchemy-tinymce {
366
366
 
367
367
  .autocomplete_tag_list {
368
368
  display: block;
369
- margin-top: $default-padding;
370
- padding: $default-padding 0;
369
+ margin-top: var(--spacing-1);
370
+ padding: var(--spacing-1) 0;
371
371
 
372
372
  label {
373
373
  font-size: $small-font-size;
@@ -379,7 +379,7 @@ alchemy-tinymce {
379
379
  .select2-choices {
380
380
  width: 100%;
381
381
  margin-bottom: 0;
382
- margin-top: 8px;
382
+ margin-top: var(--spacing-2);
383
383
  }
384
384
  }
385
385
  }
@@ -387,18 +387,18 @@ alchemy-tinymce {
387
387
  hr {
388
388
  height: 0;
389
389
  width: 100%;
390
- margin: 0 0 4 * $default-margin 0;
390
+ margin: 0 0 var(--spacing-4) 0;
391
391
  border: 0 none;
392
- border-top: 1px solid $medium-gray;
392
+ border-top: 1px solid var(--color-grey_light);
393
393
  opacity: 1;
394
394
  }
395
395
  }
396
396
 
397
397
  .element-header {
398
398
  display: flex;
399
- gap: $default-padding;
399
+ gap: var(--spacing-1);
400
400
  align-items: center;
401
- padding: 2 * $default-padding;
401
+ padding: var(--spacing-2);
402
402
  background-color: $element-header-bg-color;
403
403
  @extend .disable-user-select;
404
404
  cursor: pointer;
@@ -424,11 +424,11 @@ alchemy-tinymce {
424
424
  .element-toolbar {
425
425
  display: flex;
426
426
  width: 100%;
427
- padding: $default-padding;
428
- gap: $default-padding;
427
+ padding: var(--spacing-1);
428
+ gap: var(--spacing-1);
429
429
  height: $element-toolbar-height;
430
- border-top: 1px solid $medium-gray;
431
- border-bottom: 1px solid $medium-gray;
430
+ border-top: 1px solid var(--color-grey_light);
431
+ border-bottom: 1px solid var(--color-grey_light);
432
432
 
433
433
  .is-fixed & {
434
434
  border-top-width: 0;
@@ -444,7 +444,7 @@ alchemy-publish-element-button {
444
444
  display: inline-flex;
445
445
  align-items: center;
446
446
  margin-left: auto;
447
- margin-right: $default-margin;
447
+ margin-right: var(--spacing-1);
448
448
  line-height: 1;
449
449
 
450
450
  sl-switch {
@@ -454,8 +454,8 @@ alchemy-publish-element-button {
454
454
  }
455
455
 
456
456
  .element-footer {
457
- border-top: 1px solid $medium-gray;
458
- padding: 2 * $default-padding;
457
+ border-top: 1px solid var(--color-grey_light);
458
+ padding: var(--spacing-2);
459
459
  text-align: right;
460
460
 
461
461
  .button {
@@ -465,9 +465,9 @@ alchemy-publish-element-button {
465
465
 
466
466
  .ingredient-group {
467
467
  width: 100%;
468
- padding: $default-padding 0;
468
+ padding: var(--spacing-1) 0;
469
469
  position: relative;
470
- border-bottom: 1px solid $medium-gray;
470
+ border-bottom: 1px solid var(--color-grey_light);
471
471
 
472
472
  &:last-child {
473
473
  border-bottom: none;
@@ -480,7 +480,7 @@ alchemy-publish-element-button {
480
480
  justify-content: space-between;
481
481
  font-weight: bold;
482
482
  text-decoration: none;
483
- padding: $default-padding 1px;
483
+ padding: var(--spacing-1) 1px;
484
484
  }
485
485
 
486
486
  &[open] {
@@ -502,12 +502,12 @@ alchemy-publish-element-button {
502
502
  .ingredient_link_buttons {
503
503
  display: flex;
504
504
  position: absolute;
505
- bottom: 2 * $default-margin;
505
+ bottom: var(--spacing-1);
506
506
  right: 0;
507
507
 
508
508
  .icon_button {
509
509
  &:not(.linked) {
510
- background-color: $medium-gray;
510
+ background-color: var(--color-grey_light);
511
511
  border-color: $default-border-color;
512
512
  border-width: $form-field-border-width;
513
513
  border-style: $form-field-border-style;
@@ -564,7 +564,7 @@ alchemy-publish-element-button {
564
564
  bottom: 0;
565
565
  z-index: 0;
566
566
  width: 100%;
567
- padding: $default-padding;
567
+ padding: var(--spacing-1);
568
568
  background-color: #fff;
569
569
  border-bottom-left-radius: $default-border-radius;
570
570
  border-bottom-right-radius: $default-border-radius;
@@ -587,7 +587,7 @@ alchemy-publish-element-button {
587
587
  padding-left: 1px; // Compensate the box shadow
588
588
 
589
589
  + .picture {
590
- padding-left: $default-padding;
590
+ padding-left: var(--spacing-1);
591
591
  padding-right: 1px; // Compensate the box shadow
592
592
  }
593
593
 
@@ -596,7 +596,7 @@ alchemy-publish-element-button {
596
596
  --picture-height: 120px;
597
597
  display: inline-block;
598
598
  width: 160px;
599
- margin: $default-margin 0;
599
+ margin: var(--spacing-1) 0;
600
600
  padding: 0;
601
601
  padding-bottom: 34px;
602
602
  box-shadow: 0 0 1px 1px $default-border-color;
@@ -636,49 +636,69 @@ alchemy-publish-element-button {
636
636
 
637
637
  .picture_ingredient_css_class {
638
638
  position: absolute;
639
- z-index: 1;
640
- bottom: 34px;
641
- background-color: rgba(255, 254, 255, 0.7);
642
- padding: 4px 8px;
639
+ width: 100%;
640
+ display: flex;
641
+ align-items: center;
642
+ gap: var(--spacing-1);
643
+ z-index: 0;
644
+ bottom: 35px;
645
+ background-color: rgba(0, 0, 0, 0.15);
646
+ text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
647
+ color: var(--color-white);
648
+ padding: var(--spacing-1) var(--spacing-2);
643
649
  font-size: $small-font-size;
644
650
  overflow: hidden;
645
651
  max-width: 100%;
646
652
  text-overflow: ellipsis;
653
+
654
+ .icon {
655
+ fill: currentColor;
656
+ filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.25));
657
+ }
647
658
  }
648
659
  }
649
660
 
650
661
  .ingredient-editor.headline {
651
662
  &.with-level-select {
652
663
  input[type="text"] {
653
- padding-right: $form-field-addon-width + 2 * $default-padding;
664
+ padding-right: calc(#{$form-field-addon-width} + var(--spacing-2));
654
665
  }
655
666
 
656
667
  &.with-anchor {
657
668
  input[type="text"] {
658
- padding-right: 22px + $form-field-addon-width + $default-padding;
669
+ padding-right: calc(
670
+ 22px + #{$form-field-addon-width} + var(--spacing-1)
671
+ );
659
672
  }
660
673
  }
661
674
  }
662
675
 
663
676
  &.with-size-select {
664
677
  input[type="text"] {
665
- padding-right: $form-field-addon-width + 2 * $default-padding;
678
+ padding-right: calc(#{$form-field-addon-width} + var(--spacing-2));
666
679
  }
667
680
 
668
681
  &.with-anchor {
669
682
  input[type="text"] {
670
- padding-right: 22px + $form-field-addon-width + $default-padding;
683
+ padding-right: calc(
684
+ 22px + #{$form-field-addon-width} + var(--spacing-1)
685
+ );
671
686
  }
672
687
  }
673
688
 
674
689
  &.with-level-select {
675
690
  input[type="text"] {
676
- padding-right: 2 * ($form-field-addon-width + $default-padding);
691
+ padding-right: calc(
692
+ 2 * (#{$form-field-addon-width} + var(--spacing-1))
693
+ );
677
694
  }
678
695
 
679
696
  &.with-anchor {
680
697
  input[type="text"] {
681
- padding-right: 16px + 2 * ($form-field-addon-width + $default-padding);
698
+ padding-right: calc(
699
+ var(--spacing-4) + 2 *
700
+ (#{$form-field-addon-width} + var(--spacing-1))
701
+ );
682
702
  }
683
703
  }
684
704
  }
@@ -691,11 +711,11 @@ alchemy-publish-element-button {
691
711
  .file {
692
712
  display: flex;
693
713
  align-items: center;
694
- gap: $default-padding;
695
- margin: 6px 0 $default-margin;
696
- padding: 0 $default-padding 0 2 * $default-padding;
714
+ gap: var(--spacing-1);
715
+ margin: 6px 0 var(--spacing-1);
716
+ padding: 0 var(--spacing-1) 0 var(--spacing-2);
697
717
  border: $default-border;
698
- background-color: $white;
718
+ background-color: var(--color-white);
699
719
  border-radius: $default-border-radius;
700
720
  height: $form-field-height;
701
721
 
@@ -714,25 +734,25 @@ alchemy-publish-element-button {
714
734
  overflow: hidden;
715
735
  font-size: $small-font-size;
716
736
  text-overflow: ellipsis;
717
- padding: $default-padding;
737
+ padding: var(--spacing-1);
718
738
  }
719
739
 
720
740
  .remove_file_link {
721
741
  width: 24px;
722
- padding: $default-padding;
742
+ padding: var(--spacing-1);
723
743
  }
724
744
  }
725
745
 
726
746
  .file_tools {
727
747
  display: flex;
728
- gap: $default-padding;
748
+ gap: var(--spacing-1);
729
749
  align-items: center;
730
750
  background-color: white;
731
751
  border-radius: 0 $default-border-radius $default-border-radius 0;
732
752
 
733
753
  a {
734
754
  display: inline-flex;
735
- padding: $default-padding;
755
+ padding: var(--spacing-1);
736
756
  justify-content: center;
737
757
  align-items: center;
738
758
  text-decoration: none;
@@ -742,7 +762,7 @@ alchemy-publish-element-button {
742
762
 
743
763
  div.tinymce_container {
744
764
  position: relative;
745
- margin: $default-margin 0;
765
+ margin: var(--spacing-1) 0;
746
766
 
747
767
  .spinner {
748
768
  top: 70px;
@@ -762,7 +782,7 @@ select.long {
762
782
 
763
783
  .ingredient-editor {
764
784
  width: 100%;
765
- padding: $default-padding 0;
785
+ padding: var(--spacing-1) 0;
766
786
  position: relative;
767
787
 
768
788
  .thin_border,
@@ -772,12 +792,14 @@ select.long {
772
792
 
773
793
  &.linkable {
774
794
  input[type="text"] {
775
- padding-right: 2 * ($form-field-addon-width + $default-padding);
795
+ padding-right: calc(2 * (#{$form-field-addon-width} + var(--spacing-1)));
776
796
  }
777
797
 
778
798
  &.with-anchor {
779
799
  input[type="text"] {
780
- padding-right: 26px + 2 * ($form-field-addon-width + $default-padding);
800
+ padding-right: calc(
801
+ 26px + 2 * (#{$form-field-addon-width} + var(--spacing-1))
802
+ );
781
803
  }
782
804
  }
783
805
  }
@@ -809,7 +831,7 @@ select.long {
809
831
  &.display_inline {
810
832
  display: inline-block;
811
833
  vertical-align: middle;
812
- margin-right: 4px;
834
+ margin-right: var(--spacing-1);
813
835
  vertical-align: top;
814
836
 
815
837
  .thin_border,
@@ -852,7 +874,7 @@ select.long {
852
874
 
853
875
  label {
854
876
  display: flex;
855
- margin: $default-margin 0;
877
+ margin: var(--spacing-1) 0;
856
878
  font-size: $small-font-size;
857
879
  line-height: 15px;
858
880
  text-indent: 1px;
@@ -866,13 +888,13 @@ select.long {
866
888
  display: inline-block;
867
889
  vertical-align: middle;
868
890
  min-width: 90px;
869
- margin-right: 4px;
891
+ margin-right: var(--spacing-1);
870
892
  }
871
893
  }
872
894
 
873
895
  &.select {
874
896
  label {
875
- margin-bottom: 2 * $default-margin;
897
+ margin-bottom: var(--spacing-2);
876
898
  }
877
899
 
878
900
  select,
@@ -887,11 +909,24 @@ select.long {
887
909
  }
888
910
  }
889
911
  }
912
+
913
+ .input-field {
914
+ position: relative;
915
+
916
+ .input-addon {
917
+ bottom: var(--spacing-1);
918
+ }
919
+ }
920
+
921
+ .validation-hint {
922
+ display: block;
923
+ text-align: right;
924
+ }
890
925
  }
891
926
 
892
927
  div.pictures_for_element {
893
928
  overflow: auto;
894
- margin-top: 4px;
929
+ margin-top: var(--spacing-1);
895
930
  }
896
931
 
897
932
  textarea.has_tinymce {
@@ -912,11 +947,12 @@ textarea.has_tinymce {
912
947
  }
913
948
 
914
949
  .element_errors {
915
- margin-top: 8px;
916
- margin-bottom: 8px;
950
+ display: flex;
951
+ gap: var(--spacing-1);
952
+ margin-top: var(--spacing-2);
953
+ margin-bottom: var(--spacing-2);
917
954
  background-color: $error_background_color;
918
- padding: 2 * $default-padding;
919
- list-style-type: none;
955
+ padding: var(--spacing-2);
920
956
  border-radius: $default-border-radius;
921
957
  color: $error_text_color;
922
958
  border: 1px solid $error_border_color;
@@ -925,13 +961,17 @@ textarea.has_tinymce {
925
961
  margin: 0;
926
962
  line-height: 24px;
927
963
  }
964
+
965
+ .icon {
966
+ fill: currentColor;
967
+ }
928
968
  }
929
969
 
930
970
  .is-fixed {
931
971
  &.with-ingredients {
932
972
  > .element-footer {
933
973
  border-top: 0;
934
- border-bottom: 1px solid $medium-gray;
974
+ border-bottom: 1px solid var(--color-grey_light);
935
975
  }
936
976
  }
937
977
  }
@@ -941,12 +981,12 @@ textarea.has_tinymce {
941
981
  width: 100%;
942
982
 
943
983
  .not-fixed & {
944
- width: calc(100% - 8px);
945
- margin: 4px;
984
+ width: calc(100% - var(--spacing-2));
985
+ margin: var(--spacing-1);
946
986
  }
947
987
 
948
988
  &.compact {
949
- width: calc(50% - 8px);
989
+ width: calc(50% - var(--spacing-2));
950
990
  }
951
991
  }
952
992
 
@@ -968,12 +1008,12 @@ textarea.has_tinymce {
968
1008
 
969
1009
  .element-editor {
970
1010
  position: relative;
971
- margin: $default-margin;
1011
+ margin: var(--spacing-1);
972
1012
  }
973
1013
  }
974
1014
 
975
1015
  .add-nested-element {
976
- padding: $default-padding;
1016
+ padding: var(--spacing-1);
977
1017
  }
978
1018
 
979
1019
  .droppable-elements {
@@ -986,38 +1026,38 @@ label.ingredient-date--label,
986
1026
  display: inline-flex;
987
1027
  align-items: center;
988
1028
  position: absolute;
989
- bottom: 3 * $default-padding;
1029
+ bottom: var(--spacing-2);
990
1030
  margin: 0 !important;
991
1031
  }
992
1032
 
993
1033
  label.ingredient-date--label {
994
- padding: $default-padding;
1034
+ padding: var(--spacing-1);
995
1035
  right: 5px;
996
1036
  }
997
1037
 
998
1038
  .edit-ingredient-anchor-link {
999
- right: $default-padding;
1039
+ right: var(--spacing-1);
1000
1040
 
1001
1041
  a {
1002
1042
  display: inline-flex;
1003
1043
  align-items: center;
1004
- padding: $default-padding;
1044
+ padding: var(--spacing-1);
1005
1045
  }
1006
1046
 
1007
1047
  .linkable & {
1008
- right: 2 * $form-field-addon-width + $default-padding;
1048
+ right: calc(2 * #{$form-field-addon-width} + var(--spacing-1));
1009
1049
  }
1010
1050
 
1011
1051
  .with-size-select & {
1012
- right: $form-field-addon-width + $default-padding;
1052
+ right: calc(#{$form-field-addon-width} + var(--spacing-1));
1013
1053
  }
1014
1054
 
1015
1055
  .with-level-select & {
1016
- right: $form-field-addon-width + $default-padding;
1056
+ right: calc(#{$form-field-addon-width} + var(--spacing-1));
1017
1057
  }
1018
1058
 
1019
1059
  .with-level-select.with-size-select & {
1020
- right: 2 * $form-field-addon-width + $default-padding;
1060
+ right: calc(2 * #{$form-field-addon-width} + var(--spacing-1));
1021
1061
  }
1022
1062
  }
1023
1063
 
@@ -1027,6 +1067,6 @@ label.ingredient-date--label {
1027
1067
  bottom: 15px;
1028
1068
 
1029
1069
  > a {
1030
- padding: $default-padding;
1070
+ padding: var(--spacing-1);
1031
1071
  }
1032
1072
  }
@@ -1,8 +1,8 @@
1
1
  #errorExplanation {
2
2
  background: #ffdfdf;
3
- padding: 2*$default-padding;
3
+ padding: var(--spacing-2);
4
4
  text-align: left;
5
- margin-bottom: 8px;
5
+ margin-bottom: var(--spacing-2);
6
6
  border: 1px solid #d08f91;
7
7
  color: #690001;
8
8
  border-radius: $default-border-radius;
@@ -12,13 +12,14 @@
12
12
  }
13
13
 
14
14
  ul {
15
- padding: 0 0 0 16px;
15
+ padding: 0 0 0 var(--spacing-4);
16
16
  }
17
17
  }
18
18
 
19
- div#errors, div.errors {
20
- margin-bottom: 8px;
21
- padding: 8px 8px 4px 28px;
19
+ div#errors,
20
+ div.errors {
21
+ margin-bottom: var(--spacing-2);
22
+ padding: var(--spacing-2) var(--spacing-2) var(--spacing-1) var(--spacing-7);
22
23
  border-width: 1px;
23
24
  border-style: solid;
24
25
  border-radius: $default-border-radius;
@@ -48,3 +49,18 @@ body.error {
48
49
  margin: 0;
49
50
  }
50
51
  }
52
+
53
+ .turbo-frame-error {
54
+ display: block;
55
+ padding: var(--spacing-2);
56
+ background-color: var(--color-yellow_medium);
57
+ border: 1px solid var(--color-yellow_dark);
58
+ border-radius: var(--border-radius_medium);
59
+ margin: var(--spacing-2);
60
+ color: var(--color-yellow_dark);
61
+
62
+ &:before {
63
+ content: "⚠️";
64
+ padding: var(--spacing-2);
65
+ }
66
+ }
@@ -7,7 +7,7 @@ div#flash_notices {
7
7
 
8
8
  alchemy-message {
9
9
  font-weight: bold;
10
- margin: $default-margin $default-margin 2 * $default-margin;
10
+ margin: var(--spacing-1) var(--spacing-1) var(--spacing-2);
11
11
  opacity: 0.95;
12
12
  transition-property: opacity, transform;
13
13
  transition-duration: 0.4s;
@@ -20,12 +20,12 @@ div#flash_notices {
20
20
 
21
21
  &[type="error"] {
22
22
  cursor: pointer;
23
- padding-right: 32px;
23
+ padding-right: var(--spacing-8);
24
24
 
25
25
  alchemy-icon[name="close"] {
26
26
  position: absolute;
27
27
  left: initial;
28
- right: 2 * $default-padding;
28
+ right: var(--spacing-2);
29
29
  }
30
30
  }
31
31
  }