alchemy_cms 7.2.6 → 7.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +97 -9
  3. data/Gemfile +4 -3
  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} +128 -88
  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/resource/action.rb +46 -0
  69. data/app/components/alchemy/admin/resource/cell.rb +34 -0
  70. data/app/components/alchemy/admin/resource/header.rb +46 -0
  71. data/app/components/alchemy/admin/resource/table.rb +153 -0
  72. data/app/components/alchemy/ingredients/datetime_view.rb +2 -2
  73. data/app/controllers/alchemy/admin/base_controller.rb +2 -1
  74. data/app/controllers/alchemy/admin/elements_controller.rb +7 -3
  75. data/app/controllers/alchemy/admin/legacy_page_urls_controller.rb +1 -1
  76. data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
  77. data/app/controllers/alchemy/admin/pictures_controller.rb +2 -2
  78. data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
  79. data/app/controllers/alchemy/base_controller.rb +2 -0
  80. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +2 -11
  81. data/app/decorators/alchemy/ingredient_editor.rb +17 -0
  82. data/app/helpers/alchemy/admin/pages_helper.rb +6 -10
  83. data/app/helpers/alchemy/base_helper.rb +2 -2
  84. data/app/helpers/alchemy/elements_block_helper.rb +13 -1
  85. data/app/helpers/alchemy/pages_helper.rb +2 -2
  86. data/app/javascript/alchemy_admin/components/element_editor.js +23 -31
  87. data/app/javascript/alchemy_admin/components/preview_window.js +2 -3
  88. data/app/javascript/alchemy_admin/picture_selector.js +38 -10
  89. data/app/models/alchemy/attachment.rb +0 -8
  90. data/app/models/alchemy/element/dom_id.rb +1 -0
  91. data/app/models/alchemy/element/element_ingredients.rb +0 -73
  92. data/app/models/alchemy/element/presenters.rb +4 -1
  93. data/app/models/alchemy/element.rb +6 -0
  94. data/app/models/alchemy/elements_repository.rb +2 -2
  95. data/app/models/alchemy/ingredient_validator.rb +10 -0
  96. data/app/models/alchemy/page/page_scopes.rb +1 -1
  97. data/app/models/alchemy/page.rb +3 -3
  98. data/app/models/alchemy/picture.rb +0 -10
  99. data/app/views/alchemy/admin/attachments/_files_list.html.erb +74 -16
  100. data/app/views/alchemy/admin/clipboard/index.html.erb +38 -33
  101. data/app/views/alchemy/admin/dashboard/_dashboard.html.erb +3 -0
  102. data/app/views/alchemy/admin/dashboard/_left_column.html.erb +4 -0
  103. data/app/views/alchemy/admin/dashboard/_right_column.html.erb +9 -0
  104. data/app/views/alchemy/admin/dashboard/_top.html.erb +12 -0
  105. data/app/views/alchemy/admin/dashboard/index.html.erb +1 -25
  106. data/app/views/alchemy/admin/elements/_element.html.erb +1 -2
  107. data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
  108. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +10 -3
  109. data/app/views/alchemy/admin/ingredients/update.turbo_stream.erb +7 -0
  110. data/app/views/alchemy/admin/languages/_table.html.erb +16 -42
  111. data/app/views/alchemy/admin/nodes/_form.html.erb +1 -1
  112. data/app/views/alchemy/admin/pages/_table.html.erb +92 -27
  113. data/app/views/alchemy/admin/pages/edit.html.erb +6 -8
  114. data/app/views/alchemy/admin/pages/index.html.erb +0 -4
  115. data/app/views/alchemy/admin/pictures/_form.html.erb +14 -12
  116. data/app/views/alchemy/admin/pictures/index.html.erb +1 -11
  117. data/app/views/alchemy/admin/pictures/update.turbo_stream.erb +6 -0
  118. data/app/views/alchemy/admin/resources/_resource_table.html.erb +3 -0
  119. data/app/views/alchemy/admin/resources/_table.html.erb +2 -0
  120. data/app/views/alchemy/admin/resources/index.html.erb +1 -1
  121. data/app/views/alchemy/admin/sites/index.html.erb +1 -1
  122. data/app/views/alchemy/admin/styleguide/index.html.erb +0 -4
  123. data/app/views/alchemy/admin/tags/index.html.erb +15 -14
  124. data/app/views/alchemy/base/403.html.erb +6 -0
  125. data/app/views/alchemy/base/500.html.erb +14 -12
  126. data/app/views/alchemy/ingredients/_datetime_editor.html.erb +13 -11
  127. data/app/views/alchemy/ingredients/_headline_editor.html.erb +29 -22
  128. data/app/views/alchemy/ingredients/_link_editor.html.erb +17 -11
  129. data/app/views/alchemy/ingredients/_page_editor.html.erb +1 -0
  130. data/app/views/alchemy/ingredients/_picture_editor.html.erb +3 -4
  131. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +5 -1
  132. data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -1
  133. data/app/views/alchemy/ingredients/_text_editor.html.erb +20 -14
  134. data/app/views/alchemy/ingredients/shared/_picture_css_class.html.erb +6 -0
  135. data/app/views/layouts/alchemy/admin.html.erb +4 -2
  136. data/bin/setup +2 -0
  137. data/bin/start +1 -1
  138. data/bun.lockb +0 -0
  139. data/config/alchemy/config.yml +9 -0
  140. data/config/locales/alchemy.en.yml +8 -29
  141. data/config/routes.rb +22 -22
  142. data/lib/alchemy/config.rb +3 -3
  143. data/lib/alchemy/install/tasks.rb +5 -2
  144. data/lib/alchemy/resources_helper.rb +3 -1
  145. data/lib/alchemy/test_support/capybara_helpers.rb +8 -5
  146. data/lib/alchemy/test_support/shared_uploader_examples.rb +0 -1
  147. data/lib/alchemy/upgrader/seven_point_three.rb +52 -0
  148. data/lib/alchemy/version.rb +1 -1
  149. data/lib/alchemy_cms.rb +1 -1
  150. data/lib/generators/alchemy/install/files/article.css +25 -0
  151. data/lib/generators/alchemy/install/files/custom.css +4 -0
  152. data/lib/generators/alchemy/install/install_generator.rb +6 -6
  153. data/lib/tasks/alchemy/upgrade.rake +29 -1
  154. data/vendor/assets/stylesheets/alchemy_admin/select2.css +1 -0
  155. data/vendor/assets/stylesheets/jquery.Jcrop.min.css +2 -0
  156. data/vendor/javascript/shoelace.min.js +62 -63
  157. data/vendor/javascript/tinymce.min.js +1 -1
  158. metadata +132 -105
  159. data/app/assets/images/alchemy/lupe.cur +0 -0
  160. data/app/assets/stylesheets/alchemy/labels.scss +0 -3
  161. data/app/assets/stylesheets/alchemy/tags.scss +0 -155
  162. data/app/assets/stylesheets/alchemy/welcome.sass +0 -49
  163. data/app/views/alchemy/admin/attachments/_attachment.html.erb +0 -81
  164. data/app/views/alchemy/admin/languages/_language.html.erb +0 -50
  165. data/app/views/alchemy/admin/pages/_table_row.html.erb +0 -111
  166. data/app/views/alchemy/admin/pages/list/_table.html.erb +0 -31
  167. data/app/views/alchemy/admin/pictures/update.js.erb +0 -6
  168. data/app/views/alchemy/admin/tags/_tag.html.erb +0 -32
  169. data/app/views/alchemy/base/update.js.erb +0 -5
  170. data/lib/generators/alchemy/install/files/all.css +0 -11
  171. data/lib/generators/alchemy/install/files/article.scss +0 -30
  172. data/package.json +0 -52
  173. data/vendor/assets/stylesheets/alchemy_admin/select2.scss +0 -741
  174. data/vendor/assets/stylesheets/jquery.Jcrop.min.scss +0 -2
  175. /data/app/assets/stylesheets/alchemy/{fonts.scss → _fonts.scss} +0 -0
  176. /data/app/assets/stylesheets/alchemy/{hints.scss → admin/hints.scss} +0 -0
  177. /data/app/assets/stylesheets/alchemy/{icons.scss → admin/icons.scss} +0 -0
  178. /data/app/assets/stylesheets/alchemy/{images.scss → admin/images.scss} +0 -0
  179. /data/app/assets/stylesheets/alchemy/{preview_window.scss → admin/preview_window.scss} +0 -0
  180. /data/app/assets/stylesheets/alchemy/{spinner.scss → admin/spinner.scss} +0 -0
  181. /data/app/views/alchemy/admin/dashboard/{_locked_pages.html.erb → widgets/_locked_pages.html.erb} +0 -0
  182. /data/app/views/alchemy/admin/dashboard/{_recent_pages.html.erb → widgets/_recent_pages.html.erb} +0 -0
  183. /data/app/views/alchemy/admin/dashboard/{_sites.html.erb → widgets/_sites.html.erb} +0 -0
  184. /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
 
@@ -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
  }