alchemy_cms 8.0.0.a → 8.0.0.b

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.

Potentially problematic release.


This version of alchemy_cms might be problematic. Click here for more details.

Files changed (182) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/app/assets/builds/alchemy/admin/page-select.css +1 -1
  4. data/app/assets/builds/alchemy/admin.css +1 -1
  5. data/app/assets/builds/alchemy/dark-theme.css +1 -0
  6. data/app/assets/builds/alchemy/light-theme.css +1 -0
  7. data/app/assets/builds/alchemy/theme.css +1 -0
  8. data/app/assets/builds/alchemy/welcome.css +1 -1
  9. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -1
  10. data/app/assets/builds/tinymce/skins/content/alchemy-dark/content.min.css +1 -0
  11. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css +1 -1
  12. data/app/assets/builds/tinymce/skins/ui/alchemy-dark/content.min.css +1 -0
  13. data/app/assets/builds/tinymce/skins/ui/alchemy-dark/skin.min.css +1 -0
  14. data/app/assets/images/alchemy/element_icons/default.svg +1 -0
  15. data/app/assets/images/alchemy/icons-sprite.svg +1 -1
  16. data/app/components/alchemy/admin/element_select.rb +39 -0
  17. data/app/components/alchemy/ingredients/datetime_view.rb +4 -2
  18. data/app/controllers/alchemy/admin/attachments_controller.rb +2 -0
  19. data/app/controllers/alchemy/admin/elements_controller.rb +2 -0
  20. data/app/controllers/alchemy/admin/pages_controller.rb +2 -0
  21. data/app/controllers/alchemy/admin/pictures_controller.rb +19 -33
  22. data/app/controllers/alchemy/pages_controller.rb +19 -2
  23. data/app/controllers/concerns/alchemy/admin/resource_filter.rb +1 -0
  24. data/app/helpers/alchemy/admin/attachments_helper.rb +5 -5
  25. data/app/helpers/alchemy/pages_helper.rb +1 -1
  26. data/app/javascript/alchemy_admin/components/auto_submit.js +20 -0
  27. data/app/javascript/alchemy_admin/components/datepicker.js +8 -5
  28. data/app/javascript/alchemy_admin/components/element_editor/delete_element_button.js +3 -2
  29. data/app/javascript/alchemy_admin/components/element_editor.js +25 -15
  30. data/app/javascript/alchemy_admin/components/element_select.js +43 -0
  31. data/app/javascript/alchemy_admin/components/index.js +5 -0
  32. data/app/javascript/alchemy_admin/components/link_buttons.js +6 -2
  33. data/app/javascript/alchemy_admin/components/remote_select.js +5 -1
  34. data/app/javascript/alchemy_admin/components/tinymce.js +93 -16
  35. data/app/javascript/alchemy_admin/dialog.js +1 -1
  36. data/app/javascript/alchemy_admin/file_editors.js +1 -1
  37. data/app/javascript/alchemy_admin/image_loader.js +4 -2
  38. data/app/javascript/alchemy_admin/picture_editors.js +7 -4
  39. data/app/javascript/alchemy_admin/picture_selector.js +4 -4
  40. data/app/jobs/alchemy/delete_picture_job.rb +12 -0
  41. data/app/models/alchemy/attachment.rb +2 -9
  42. data/app/models/alchemy/element.rb +1 -0
  43. data/app/models/alchemy/element_definition.rb +30 -0
  44. data/app/models/alchemy/ingredient.rb +1 -1
  45. data/app/models/alchemy/language.rb +2 -7
  46. data/app/models/alchemy/page/page_naming.rb +4 -11
  47. data/app/models/alchemy/page/page_natures.rb +16 -11
  48. data/app/models/alchemy/page.rb +1 -6
  49. data/app/models/alchemy/page_definition.rb +1 -1
  50. data/app/models/alchemy/picture.rb +6 -17
  51. data/app/models/alchemy/site/layout.rb +1 -0
  52. data/app/models/alchemy/site.rb +1 -6
  53. data/app/models/alchemy/storage_adapter/dragonfly/picture_url.rb +7 -2
  54. data/app/models/alchemy/storage_adapter/dragonfly.rb +24 -2
  55. data/app/models/concerns/alchemy/relatable_resource.rb +28 -0
  56. data/app/stylesheets/alchemy/_custom-properties.scss +162 -0
  57. data/app/stylesheets/alchemy/_mixins.scss +12 -24
  58. data/app/stylesheets/alchemy/_themes.scss +540 -0
  59. data/app/stylesheets/alchemy/admin/archive.scss +28 -8
  60. data/app/stylesheets/alchemy/admin/attachments.scss +10 -33
  61. data/app/stylesheets/alchemy/admin/base.scss +4 -1
  62. data/app/stylesheets/alchemy/admin/buttons.scss +7 -32
  63. data/app/stylesheets/alchemy/admin/dialogs.scss +17 -7
  64. data/app/stylesheets/alchemy/admin/element-select.scss +11 -0
  65. data/app/stylesheets/alchemy/admin/elements.scss +94 -33
  66. data/app/stylesheets/alchemy/admin/filters.scss +8 -9
  67. data/app/stylesheets/alchemy/admin/flatpickr.scss +12 -27
  68. data/app/stylesheets/alchemy/admin/form_fields.scss +0 -15
  69. data/app/stylesheets/alchemy/admin/forms.scss +3 -8
  70. data/app/stylesheets/alchemy/admin/frame.scss +5 -7
  71. data/app/stylesheets/alchemy/admin/icons.scss +0 -9
  72. data/app/stylesheets/alchemy/admin/image_library.scss +13 -55
  73. data/app/stylesheets/alchemy/admin/navigation.scss +1 -11
  74. data/app/stylesheets/alchemy/admin/node-select.scss +1 -10
  75. data/app/stylesheets/alchemy/admin/notices.scss +5 -4
  76. data/app/stylesheets/alchemy/admin/page-select.scss +16 -0
  77. data/app/stylesheets/alchemy/admin/pagination.scss +1 -8
  78. data/app/stylesheets/alchemy/admin/preview_window.scss +12 -1
  79. data/app/stylesheets/alchemy/admin/resource_info.scss +106 -3
  80. data/app/stylesheets/alchemy/admin/search.scss +1 -1
  81. data/app/stylesheets/alchemy/admin/selects.scss +58 -31
  82. data/app/stylesheets/alchemy/admin/shoelace.scss +32 -62
  83. data/app/stylesheets/alchemy/admin/sitemap.scss +1 -1
  84. data/app/stylesheets/alchemy/admin/tables.scss +3 -3
  85. data/app/stylesheets/alchemy/admin/tags.scss +18 -35
  86. data/app/stylesheets/alchemy/admin/toolbar.scss +0 -6
  87. data/app/stylesheets/alchemy/admin/typography.scss +2 -5
  88. data/app/stylesheets/alchemy/admin.scss +1 -1
  89. data/app/stylesheets/alchemy/dark-theme.scss +5 -0
  90. data/app/stylesheets/alchemy/light-theme.scss +6 -0
  91. data/app/stylesheets/alchemy/theme.scss +13 -0
  92. data/app/stylesheets/tinymce/skins/content/alchemy/content.scss +8 -8
  93. data/app/stylesheets/tinymce/skins/content/alchemy-dark/content.scss +70 -0
  94. data/app/stylesheets/tinymce/skins/ui/alchemy/skin.scss +28 -43
  95. data/app/stylesheets/tinymce/skins/ui/alchemy-dark/content.scss +1 -0
  96. data/app/stylesheets/tinymce/skins/ui/alchemy-dark/skin.scss +3784 -0
  97. data/app/views/alchemy/admin/attachments/_files_list.html.erb +20 -10
  98. data/app/views/alchemy/admin/attachments/assign.js.erb +4 -3
  99. data/app/views/alchemy/admin/attachments/show.html.erb +55 -43
  100. data/app/views/alchemy/admin/crop.html.erb +1 -1
  101. data/app/views/alchemy/admin/elements/_form.html.erb +9 -9
  102. data/app/views/alchemy/admin/elements/_header.html.erb +4 -1
  103. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +1 -1
  104. data/app/views/alchemy/admin/pages/info.html.erb +1 -1
  105. data/app/views/alchemy/admin/partials/_search_form.html.erb +1 -0
  106. data/app/views/alchemy/admin/pictures/_archive.html.erb +12 -22
  107. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -6
  108. data/app/views/alchemy/admin/pictures/_form.html.erb +1 -1
  109. data/app/views/alchemy/admin/pictures/_infos.html.erb +21 -52
  110. data/app/views/alchemy/admin/pictures/_library_sidebar.html.erb +7 -0
  111. data/app/views/alchemy/admin/pictures/_picture.html.erb +14 -20
  112. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +20 -16
  113. data/app/views/alchemy/admin/pictures/_sorting_select.html.erb +13 -0
  114. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +1 -1
  115. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +1 -6
  116. data/app/views/alchemy/admin/pictures/index.html.erb +3 -12
  117. data/app/views/alchemy/admin/pictures/show.html.erb +10 -5
  118. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +5 -15
  119. data/app/views/alchemy/admin/resources/_resource_usage_info.html.erb +36 -0
  120. data/app/views/alchemy/admin/styleguide/index.html.erb +118 -66
  121. data/app/views/alchemy/base/error_notice.html.erb +1 -1
  122. data/app/views/alchemy/ingredients/_page_editor.html.erb +0 -1
  123. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +0 -1
  124. data/app/views/alchemy/ingredients/_select_editor.html.erb +1 -2
  125. data/app/views/layouts/alchemy/admin.html.erb +22 -17
  126. data/config/locales/alchemy.en.yml +26 -8
  127. data/db/migrate/20250905140323_add_created_at_index_to_pictures_and_attachments.rb +14 -0
  128. data/lib/alchemy/configurations/format_matchers.rb +1 -1
  129. data/lib/alchemy/configurations/main.rb +7 -0
  130. data/lib/alchemy/configurations/page_cache.rb +19 -0
  131. data/lib/alchemy/engine.rb +16 -7
  132. data/lib/alchemy/install/tasks.rb +0 -12
  133. data/lib/alchemy/name_conversions.rb +6 -0
  134. data/lib/alchemy/tasks/tidy.rb +18 -0
  135. data/lib/alchemy/test_support/factories/picture_factory.rb +1 -0
  136. data/lib/alchemy/test_support/relatable_resource_examples.rb +58 -0
  137. data/lib/alchemy/tinymce.rb +0 -1
  138. data/lib/alchemy/version.rb +1 -1
  139. data/lib/alchemy.rb +2 -11
  140. data/lib/generators/alchemy/install/install_generator.rb +21 -10
  141. data/lib/generators/alchemy/install/templates/alchemy.rb.tt +10 -6
  142. data/lib/tasks/alchemy/tidy.rake +6 -0
  143. data/lib/tasks/alchemy/usage.rake +2 -0
  144. data/vendor/assets/stylesheets/tinymce/skins/content/dark/content.min.css +1 -0
  145. data/vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css +1 -0
  146. data/vendor/assets/stylesheets/tinymce/skins/ui/oxide/skin.min.css +1 -0
  147. data/vendor/assets/stylesheets/tinymce/skins/ui/oxide-dark/content.min.css +1 -0
  148. data/vendor/assets/stylesheets/tinymce/skins/ui/oxide-dark/skin.min.css +1 -0
  149. data/vendor/javascript/clipboard.min.js +1 -1
  150. data/vendor/javascript/cropperjs.min.js +1 -1
  151. data/vendor/javascript/handlebars.min.js +3 -3
  152. data/vendor/javascript/jquery.min.js +1 -1
  153. data/vendor/javascript/select2.min.js +3 -3
  154. data/vendor/javascript/shoelace.min.js +92 -76
  155. data/vendor/javascript/sortable.min.js +2 -2
  156. data/vendor/javascript/tinymce.min.js +1 -1
  157. data/vendor/javascript/ungap-custom-elements.min.js +2 -2
  158. metadata +46 -32
  159. data/CHANGELOG.md +0 -2100
  160. data/CODE_OF_CONDUCT.md +0 -13
  161. data/CONTRIBUTING.md +0 -73
  162. data/Gemfile +0 -78
  163. data/Rakefile +0 -102
  164. data/SECURITY.md +0 -13
  165. data/alchemy_cms.gemspec +0 -97
  166. data/app/assets/builds/alchemy/custom-properties.css +0 -1
  167. data/app/helpers/alchemy/admin/elements_helper.rb +0 -25
  168. data/app/stylesheets/alchemy/custom-properties.css +0 -244
  169. data/bin/importmap +0 -4
  170. data/bin/rails +0 -9
  171. data/bin/rspec +0 -3
  172. data/bin/setup +0 -30
  173. data/bin/start +0 -17
  174. data/bun.lockb +0 -0
  175. data/bundles/remixicon.mjs +0 -153
  176. data/bundles/shoelace.js +0 -12
  177. data/bundles/tinymce.js +0 -22
  178. data/eslint.config.js +0 -18
  179. data/lib/alchemy/upgrader/.keep +0 -0
  180. data/lib/alchemy/upgrader/tasks/.keep +0 -0
  181. data/rollup.config.mjs +0 -108
  182. data/vitest.config.js +0 -21
@@ -88,6 +88,7 @@ form {
88
88
  hr {
89
89
  border: 0 none;
90
90
  border-bottom: 1px solid;
91
+ border-color: var(--border-color);
91
92
  opacity: 0.5;
92
93
  }
93
94
 
@@ -96,8 +97,10 @@ hr {
96
97
  max-width: 500px;
97
98
  margin: 2em auto;
98
99
  padding: var(--spacing-4);
99
- background: var(--color-grey_light);
100
+ background: var(--panel-background-color);
100
101
  border-radius: var(--border-radius_medium);
102
+ border: var(--border-default);
103
+ border-color: var(--panel-border-color);
101
104
  }
102
105
 
103
106
  .float_right {
@@ -1,27 +1,6 @@
1
1
  @use "sass:color";
2
2
  @use "../mixins";
3
3
 
4
- :root {
5
- --button-border-radius: var(--border-radius_medium);
6
- --button-border-style: var(--border-style);
7
- --button-border-width: var(--border-width_small);
8
- --button-border: var(--button-border-width) var(--button-border-style)
9
- var(--button-border-color);
10
- --button-font-size: var(--font-size_medium);
11
- --button-font-weight: var(--font-weight_bold);
12
- --button-height: 30px;
13
- --button-line-height: var(--form-field-line-height);
14
- --button-margin: var(--form-field-margin);
15
- --button-padding: var(--spacing-1) var(--spacing-5);
16
- --button-small-padding: 0.4em 0.8em;
17
- --icon-button-height: 30px;
18
- --icon-button-width: 30px;
19
- --icon-button-medium-height: 26px;
20
- --icon-button-medium-width: 26px;
21
- --icon-button-small-height: 15px;
22
- --icon-button-small-width: 15px;
23
- }
24
-
25
4
  button,
26
5
  input[type="submit"],
27
6
  a.button,
@@ -34,20 +13,19 @@ input.button {
34
13
  color: var(--button-secondary-text-color);
35
14
  border-color: var(--button-secondary-border-color);
36
15
 
37
- &:focus {
16
+ &:focus:not([disabled]):not(.disabled) {
38
17
  @include mixins.default-focus-style(
39
18
  $border-color: var(--button-focus-border-color),
40
19
  $box-shadow: var(--button-focus-box-shadow)
41
20
  );
42
21
  }
43
22
 
44
- &:hover {
45
- background-color: var(--button-hover-bg-color);
46
- border-color: var(--button-hover-border-color);
23
+ &:hover:not([disabled]):not(.disabled) {
24
+ background-color: var(--button-secondary-hover-bg-color);
25
+ border-color: var(--button-secondary-hover-border-color);
47
26
  }
48
27
 
49
- &:active,
50
- &:active:focus {
28
+ &:active:not([disabled]):not(.disabled) {
51
29
  border-color: var(--button-hover-border-color);
52
30
  box-shadow: none;
53
31
  }
@@ -69,10 +47,6 @@ input.button {
69
47
  fill: currentColor;
70
48
  }
71
49
  }
72
-
73
- &[disabled] {
74
- cursor: not-allowed;
75
- }
76
50
  }
77
51
 
78
52
  .icon_button {
@@ -86,6 +60,7 @@ input.button {
86
60
  padding: 0;
87
61
  text-shadow: none;
88
62
  border-radius: var(--border-radius_medium);
63
+ color: var(--icon-color);
89
64
 
90
65
  &.small {
91
66
  width: var(--icon-button-small-width);
@@ -99,7 +74,7 @@ input.button {
99
74
  &:active,
100
75
  &:hover:not([disabled]):not(.disabled):not(.linked) {
101
76
  text-decoration: none;
102
- background-color: var(--border-color);
77
+ background-color: var(--icon-button-hover-bg-color);
103
78
  cursor: pointer;
104
79
  }
105
80
 
@@ -1,12 +1,5 @@
1
1
  @use "../mixins";
2
2
 
3
- :root {
4
- --dialog-header-height: 36px;
5
- --dialog-header-font-size: var(--font-size_medium);
6
- --dialog-header-padding: 0 var(--spacing-2);
7
- --dialog-transition-duration: 150ms;
8
- }
9
-
10
3
  .alchemy-image-overlay-container,
11
4
  .alchemy-dialog-container {
12
5
  position: fixed;
@@ -163,6 +156,23 @@
163
156
  }
164
157
  }
165
158
 
159
+ .alchemy-dialog-close {
160
+ display: inline-flex;
161
+ width: var(--spacing-6);
162
+ height: var(--spacing-6);
163
+ justify-content: center;
164
+ align-items: center;
165
+ background-color: transparent;
166
+ border-color: transparent;
167
+ border-radius: var(--border-radius_medium);
168
+ color: var(--color-white);
169
+ padding: 0;
170
+
171
+ &:hover {
172
+ background-color: var(--color-blue_medium);
173
+ }
174
+ }
175
+
166
176
  .alchemy-dialog-body {
167
177
  position: relative;
168
178
  color: var(--text-color);
@@ -0,0 +1,11 @@
1
+ .element-select-item {
2
+ display: flex;
3
+ align-items: center;
4
+
5
+ > svg {
6
+ width: auto;
7
+ height: var(--spacing-4);
8
+ fill: currentColor;
9
+ padding-right: var(--spacing-2);
10
+ }
11
+ }
@@ -3,11 +3,6 @@
3
3
  @use "../mixins";
4
4
  @use "../variables" as vars;
5
5
 
6
- :root {
7
- --elements-window-width: 0px;
8
- --elements-window-min-width: 400px;
9
- }
10
-
11
6
  #alchemy_elements_window {
12
7
  --width: var(--elements-window-width, 100vw);
13
8
  position: absolute;
@@ -22,7 +17,10 @@
22
17
  );
23
18
  height: calc(100vh - var(--top-menu-height));
24
19
  border-left: var(--border-default);
25
- background-color: var(--color-grey_very_light);
20
+ background-color: var(
21
+ --elements-window-background-color,
22
+ var(--dialog-background-color)
23
+ );
26
24
  transition: var(--transition-duration) ease-in-out;
27
25
  transform: translate3d(100%, 0, 0);
28
26
 
@@ -62,7 +60,10 @@ alchemy-elements-window-handle {
62
60
 
63
61
  &:hover,
64
62
  &.is-dragged {
65
- background: var(--color-blue_dark);
63
+ background: var(
64
+ --elements-window-handle-dragged-background-color,
65
+ var(--color-blue_dark)
66
+ );
66
67
  cursor: ew-resize;
67
68
  }
68
69
  }
@@ -89,6 +90,7 @@ alchemy-elements-window-handle {
89
90
 
90
91
  alchemy-tinymce {
91
92
  display: block;
93
+ border-radius: var(--border-radius_medium);
92
94
  }
93
95
 
94
96
  #main-content-elements {
@@ -136,12 +138,15 @@ alchemy-tinymce {
136
138
  }
137
139
 
138
140
  .element-handle {
141
+ position: relative;
139
142
  display: inline-flex;
143
+ width: var(--spacing-4);
144
+ height: var(--spacing-4);
140
145
  cursor: move;
141
146
  padding-right: var(--spacing-1);
142
147
  }
143
148
 
144
- .element-toggle {
149
+ button.element-toggle {
145
150
  width: 20px;
146
151
  height: 20px;
147
152
  display: flex;
@@ -156,9 +161,8 @@ alchemy-tinymce {
156
161
  margin: 0 0 0 auto;
157
162
 
158
163
  &:hover {
159
- &:not(:focus):not(:active) {
164
+ &:not(:focus) {
160
165
  background-color: var(--border-color);
161
- border-color: transparent;
162
166
  cursor: pointer;
163
167
  }
164
168
  }
@@ -170,9 +174,12 @@ alchemy-tinymce {
170
174
 
171
175
  .element-editor {
172
176
  position: relative;
173
- border: 1px solid var(--border-color);
177
+ border: 1px solid var(--element-editor-border-color, var(--border-color));
174
178
  border-radius: var(--border-radius_medium);
175
- background-color: var(--color-grey_very_light);
179
+ background-color: var(
180
+ --element-editor-background-color,
181
+ --dialog-background-color
182
+ );
176
183
  margin: var(--spacing-2) 0;
177
184
  transition: box-shadow var(--transition-duration);
178
185
  scroll-margin: var(--spacing-2);
@@ -232,10 +239,10 @@ alchemy-tinymce {
232
239
  }
233
240
 
234
241
  &.dirty {
235
- border-color: #d0c83d;
242
+ border-color: var(--element-dirty-border-color);
236
243
 
237
244
  > .element-header {
238
- background-color: #fff8df;
245
+ background-color: var(--element-dirty-header-color);
239
246
  }
240
247
  }
241
248
 
@@ -261,7 +268,8 @@ alchemy-tinymce {
261
268
  &.selected:not(.is-fixed),
262
269
  &:hover:not(.is-fixed) {
263
270
  &:not(.element-hidden) {
264
- box-shadow: 0 2px 8px rgba(#9b9b9b, 0.75);
271
+ box-shadow: 0 2px 8px
272
+ var(--element-editor-hover-box-shadow-color, hsla(0, 0%, 60%, 0.75));
265
273
  }
266
274
  }
267
275
 
@@ -288,16 +296,24 @@ alchemy-tinymce {
288
296
  &.expanded {
289
297
  &.not-fixed {
290
298
  .nestable-elements {
291
- box-shadow: inset 0 4px 8px -2px hsl(0deg, 0%, 79%);
292
- background-color: var(--color-grey_light);
299
+ box-shadow: inset 0 4px 8px -2px
300
+ var(--nestable-elements-box-shadow-color, hsl(0deg, 0%, 79%));
301
+ background-color: var(
302
+ --nestable-elements-background-color,
303
+ var(--color-grey_light)
304
+ );
293
305
  padding: var(--spacing-1);
294
306
  }
295
307
  }
296
308
  }
297
309
 
298
310
  &.dragged {
299
- border: 1px solid var(--color-grey_dark);
300
- background-color: var(--color-grey_light);
311
+ border: 1px solid
312
+ var(--element-editor-dragged-border-color, var(--color-grey_dark));
313
+ background-color: var(
314
+ --element-editor-dragged-background-color,
315
+ var(--color-grey_light)
316
+ );
301
317
  opacity: 0.5;
302
318
  box-shadow: none !important;
303
319
 
@@ -323,7 +339,6 @@ alchemy-tinymce {
323
339
  opacity: 0;
324
340
  z-index: 1;
325
341
  box-shadow: 0 1px 1px var(--border-color);
326
- background-color: var(--color-grey_very_light);
327
342
  transition: all var(--transition-duration);
328
343
 
329
344
  sl-switch::part(label) {
@@ -440,7 +455,7 @@ alchemy-tinymce {
440
455
  width: 100%;
441
456
  margin: 0 0 var(--spacing-4) 0;
442
457
  border: 0 none;
443
- border-top: 1px solid var(--color-grey_light);
458
+ border-top: 1px solid var(--border-color);
444
459
  opacity: 1;
445
460
  }
446
461
  }
@@ -466,6 +481,34 @@ alchemy-tinymce {
466
481
  fill: currentColor;
467
482
  transition: fill var(--transition-duration);
468
483
  }
484
+
485
+ > .element-handle {
486
+ alchemy-icon,
487
+ .icon {
488
+ position: absolute;
489
+ width: var(--spacing-4);
490
+ height: var(--spacing-4);
491
+ transition: opacity var(--transition-duration);
492
+ }
493
+
494
+ alchemy-icon {
495
+ opacity: 0;
496
+ }
497
+
498
+ .icon {
499
+ opacity: 1;
500
+ }
501
+ }
502
+
503
+ &:hover {
504
+ > .element-handle alchemy-icon {
505
+ opacity: 1;
506
+ }
507
+
508
+ > .element-handle .icon.element {
509
+ opacity: 0;
510
+ }
511
+ }
469
512
  }
470
513
 
471
514
  .element-hidden-icon {
@@ -479,8 +522,9 @@ alchemy-tinymce {
479
522
  padding: var(--spacing-1);
480
523
  gap: var(--spacing-1);
481
524
  height: 37px;
482
- border-top: 1px solid var(--color-grey_light);
483
- border-bottom: 1px solid var(--color-grey_light);
525
+ border-top: 1px solid var(--element-toolbar-border-color);
526
+ border-bottom: 1px solid var(--element-toolbar-border-color);
527
+ background-color: var(--element-toolbar-background-color);
484
528
 
485
529
  .is-fixed & {
486
530
  border-top-width: 0;
@@ -506,7 +550,7 @@ alchemy-publish-element-button {
506
550
  }
507
551
 
508
552
  .element-footer {
509
- border-top: 1px solid var(--color-grey_light);
553
+ border-top: 1px solid var(--element-toolbar-border-color);
510
554
  padding: var(--spacing-2);
511
555
  text-align: right;
512
556
 
@@ -519,7 +563,7 @@ alchemy-publish-element-button {
519
563
  width: 100%;
520
564
  padding: var(--spacing-1) 0;
521
565
  position: relative;
522
- border-bottom: 1px solid var(--color-grey_light);
566
+ border-bottom: 1px solid var(--element-toolbar-border-color);
523
567
 
524
568
  &:last-child {
525
569
  border-bottom: none;
@@ -559,8 +603,8 @@ alchemy-publish-element-button {
559
603
 
560
604
  .icon_button {
561
605
  &:not(.linked) {
562
- background-color: var(--color-grey_light);
563
- border-color: var(--border-color);
606
+ background-color: var(--form-field-addon-background-color);
607
+ border-color: var(--form-field-border-color);
564
608
  border-width: var(--form-field-border-width);
565
609
  border-style: var(--form-field-border-style);
566
610
  box-shadow: none;
@@ -619,7 +663,7 @@ alchemy-publish-element-button {
619
663
  z-index: 0;
620
664
  width: 100%;
621
665
  padding: var(--spacing-1);
622
- background-color: #fff;
666
+ background-color: var(--picture-thumbnail-toolbar-bg-color, #fff);
623
667
  border-bottom-left-radius: var(--border-radius_medium);
624
668
  border-bottom-right-radius: var(--border-radius_medium);
625
669
 
@@ -680,7 +724,7 @@ alchemy-publish-element-button {
680
724
 
681
725
  alchemy-icon {
682
726
  --icon-size: 3em;
683
- color: var(--color-grey_dark);
727
+ color: var(--icon-color);
684
728
 
685
729
  &.error {
686
730
  --icon-size: var(--icon-size-md);
@@ -793,8 +837,10 @@ alchemy-publish-element-button {
793
837
  gap: var(--spacing-1);
794
838
  margin: 6px 0 var(--spacing-1);
795
839
  padding: 0 var(--spacing-1) 0 var(--spacing-2);
796
- border: var(--border-default);
797
- background-color: var(--color-white);
840
+ border-style: var(--border-style);
841
+ border-width: var(--border-width_small);
842
+ border-color: var(--form-field-border-color);
843
+ background-color: var(--form-field-background-color);
798
844
  border-radius: var(--border-radius_medium);
799
845
  height: var(--form-field-height);
800
846
 
@@ -826,7 +872,6 @@ alchemy-publish-element-button {
826
872
  display: flex;
827
873
  gap: var(--spacing-1);
828
874
  align-items: center;
829
- background-color: white;
830
875
  border-radius: 0 var(--border-radius_medium) var(--border-radius_medium) 0;
831
876
 
832
877
  a {
@@ -909,6 +954,18 @@ select.long {
909
954
  }
910
955
  }
911
956
 
957
+ &.dirty {
958
+ input,
959
+ select,
960
+ textarea,
961
+ .file,
962
+ .picture_thumbnail,
963
+ .select2-container,
964
+ .tinymce_container {
965
+ outline: 1px solid var(--element-dirty-border-color);
966
+ }
967
+ }
968
+
912
969
  &.display_inline {
913
970
  display: inline-block;
914
971
  vertical-align: middle;
@@ -959,6 +1016,7 @@ select.long {
959
1016
  font-size: var(--font-size_small);
960
1017
  line-height: 15px;
961
1018
  text-indent: 1px;
1019
+ color: var(--form-field-label-color);
962
1020
 
963
1021
  span.warning.icon {
964
1022
  position: relative;
@@ -1099,7 +1157,10 @@ textarea.has_tinymce {
1099
1157
 
1100
1158
  .droppable-elements {
1101
1159
  min-height: 36px;
1102
- background-color: var(--color-yellow_light);
1160
+ background-color: var(
1161
+ --droppable-elements-background-color,
1162
+ var(--color-yellow_light)
1163
+ );
1103
1164
  }
1104
1165
 
1105
1166
  label.ingredient-date--label,
@@ -1,5 +1,6 @@
1
- div#filter_bar {
2
- padding-top: var(--spacing-3);
1
+ div#filter_bar,
2
+ div#sorting_select {
3
+ margin-top: var(--spacing-2);
3
4
  }
4
5
 
5
6
  .filter-input {
@@ -8,7 +9,7 @@ div#filter_bar {
8
9
  label:not(:has(input[type="checkbox"])) {
9
10
  display: block;
10
11
  font-weight: bold;
11
- font-size: 1.125rem;
12
+ font-size: var(--font-size_medium);
12
13
  margin-bottom: var(--spacing-2);
13
14
  }
14
15
 
@@ -19,7 +20,7 @@ div#filter_bar {
19
20
  cursor: pointer;
20
21
  }
21
22
 
22
- &:has(select) {
23
+ &:has(select):not(:last-child) {
23
24
  margin-bottom: var(--spacing-4);
24
25
  }
25
26
  }
@@ -32,16 +33,14 @@ div#filter_bar {
32
33
  }
33
34
 
34
35
  .applied-filter {
35
- --background-color: var(--color-grey_light);
36
- --color: var(--text-color);
37
36
  display: inline-flex;
38
37
  justify-content: space-between;
39
38
  gap: var(--spacing-1);
40
39
  padding: var(--spacing-1) var(--spacing-1) var(--spacing-1) var(--spacing-2);
41
40
  border-radius: var(--border-radius_medium);
42
41
  border: 1px solid var(--border-color);
43
- background-color: var(--background-color);
44
- color: var(--color);
42
+ background-color: var(--tag-active-background-color);
43
+ color: var(--tag-active-text-color);
45
44
  white-space: nowrap;
46
45
  font-weight: normal;
47
46
 
@@ -53,6 +52,6 @@ div#filter_bar {
53
52
  display: inline-flex;
54
53
  justify-content: center;
55
54
  width: var(--spacing-4);
56
- color: var(--icon-color);
55
+ color: var(--tag-active-text-color);
57
56
  }
58
57
  }
@@ -1,9 +1,5 @@
1
- :root {
2
- --datepicker-font-size: var(--font-size_medium);
3
- }
4
-
5
1
  .flatpickr-calendar {
6
- background: transparent;
2
+ background: var(--datepicker-bg-color);
7
3
  opacity: 0;
8
4
  display: none;
9
5
  text-align: center;
@@ -12,7 +8,7 @@
12
8
  -webkit-animation: none;
13
9
  animation: none;
14
10
  direction: ltr;
15
- border: 0;
11
+ border: 1px solid var(--datepicker-border-color);
16
12
  font-size: var(--datepicker-font-size);
17
13
  line-height: 24px;
18
14
  border-radius: 5px;
@@ -22,7 +18,6 @@
22
18
  box-sizing: border-box;
23
19
  -ms-touch-action: manipulation;
24
20
  touch-action: manipulation;
25
- background: var(--datepicker-bg-color);
26
21
  box-shadow: var(--datepicker-box-shadow);
27
22
  }
28
23
  .flatpickr-calendar.open,
@@ -122,7 +117,7 @@
122
117
  bottom: 100%;
123
118
  }
124
119
  .flatpickr-calendar.arrowTop:before {
125
- border-bottom-color: var(--border-color);
120
+ border-bottom-color: var(--datepicker-border-color);
126
121
  }
127
122
  .flatpickr-calendar.arrowTop:after {
128
123
  border-bottom-color: var(--datepicker-bg-color);
@@ -132,7 +127,7 @@
132
127
  top: 100%;
133
128
  }
134
129
  .flatpickr-calendar.arrowBottom:before {
135
- border-top-color: var(--border-color);
130
+ border-top-color: var(--datepicker-border-color);
136
131
  }
137
132
  .flatpickr-calendar.arrowBottom:after {
138
133
  border-top-color: var(--datepicker-bg-color);
@@ -277,7 +272,7 @@
277
272
  .numInputWrapper span.arrowUp:after {
278
273
  border-left: 4px solid transparent;
279
274
  border-right: 4px solid transparent;
280
- border-bottom: 4px solid var(--border-color);
275
+ border-bottom: 4px solid var(--icon-color);
281
276
  top: 26%;
282
277
  }
283
278
  .numInputWrapper span.arrowDown {
@@ -286,7 +281,7 @@
286
281
  .numInputWrapper span.arrowDown:after {
287
282
  border-left: 4px solid transparent;
288
283
  border-right: 4px solid transparent;
289
- border-top: 4px solid var(--border-color);
284
+ border-top: 4px solid var(--icon-color);
290
285
  top: 40%;
291
286
  }
292
287
  .numInputWrapper span svg {
@@ -334,12 +329,6 @@
334
329
  width: 7ch\0;
335
330
  display: inline-block;
336
331
  }
337
- .flatpickr-current-month .numInputWrapper span.arrowUp:after {
338
- border-bottom-color: var(--border-color);
339
- }
340
- .flatpickr-current-month .numInputWrapper span.arrowDown:after {
341
- border-top-color: var(--border-color);
342
- }
343
332
  .flatpickr-current-month input.cur-year {
344
333
  background: transparent;
345
334
  -webkit-box-sizing: border-box;
@@ -437,7 +426,7 @@ span.flatpickr-weekday {
437
426
  cursor: default;
438
427
  font-size: 90%;
439
428
  background: transparent;
440
- color: rgba(0, 0, 0, 0.54);
429
+ color: var(--datepicker-weekday-text-color);
441
430
  line-height: 1;
442
431
  margin: 0;
443
432
  text-align: center;
@@ -608,7 +597,7 @@ span.flatpickr-weekday {
608
597
  .flatpickr-day.notAllowed,
609
598
  .flatpickr-day.notAllowed.prevMonthDay,
610
599
  .flatpickr-day.notAllowed.nextMonthDay {
611
- color: rgba(57, 57, 57, 0.3);
600
+ color: var(--text-color-muted);
612
601
  background: transparent;
613
602
  border-color: transparent;
614
603
  cursor: default;
@@ -701,12 +690,6 @@ span.flatpickr-weekday {
701
690
  height: 40px;
702
691
  float: left;
703
692
  }
704
- .flatpickr-time .numInputWrapper span.arrowUp:after {
705
- border-bottom-color: #393939;
706
- }
707
- .flatpickr-time .numInputWrapper span.arrowDown:after {
708
- border-top-color: #393939;
709
- }
710
693
  .flatpickr-time.hasSeconds .numInputWrapper {
711
694
  width: 26%;
712
695
  }
@@ -718,7 +701,7 @@ span.flatpickr-weekday {
718
701
  -webkit-box-shadow: none;
719
702
  box-shadow: none;
720
703
  border: 0;
721
- border-radius: 0;
704
+ border-radius: var(--border-radius_medium);
722
705
  text-align: center;
723
706
  margin: 0;
724
707
  padding: 0;
@@ -732,6 +715,7 @@ span.flatpickr-weekday {
732
715
  -webkit-appearance: textfield;
733
716
  -moz-appearance: textfield;
734
717
  appearance: textfield;
718
+ top: -1px;
735
719
  }
736
720
  .flatpickr-time input.flatpickr-hour {
737
721
  font-weight: bold;
@@ -771,7 +755,8 @@ span.flatpickr-weekday {
771
755
  .flatpickr-time .flatpickr-am-pm:hover,
772
756
  .flatpickr-time input:focus,
773
757
  .flatpickr-time .flatpickr-am-pm:focus {
774
- background: var(--color-grey_very_light);
758
+ background: var(--form-field-background-color);
759
+ box-shadow: inset 0 0 1px 2px var(--focus-color) !important;
775
760
  }
776
761
  .flatpickr-input[readonly] {
777
762
  cursor: pointer;
@@ -1,17 +1,6 @@
1
1
  @use "../extends";
2
2
  @use "../mixins";
3
3
 
4
- :root {
5
- --form-field-margin: var(--spacing-1) 0;
6
- --form-field-height: 31px;
7
- --form-field-addon-width: 30px;
8
- --form-field-border-width: var(--border-width_small);
9
- --form-field-border-style: var(--border-style);
10
- --form-field-padding: var(--spacing-1) var(--spacing-2);
11
- --form-field-font-size: var(--font-size_medium);
12
- --form-field-line-height: 1.25;
13
- }
14
-
15
4
  textarea,
16
5
  input[type="url"],
17
6
  input[type="number"],
@@ -22,10 +11,6 @@ input[type="search"],
22
11
  .thin_border,
23
12
  .input_field {
24
13
  @extend %default-input-style;
25
-
26
- &.dirty {
27
- background-color: #fff8df;
28
- }
29
14
  }
30
15
 
31
16
  input[type="checkbox"] {
@@ -1,11 +1,6 @@
1
1
  @use "../extends";
2
2
  @use "../mixins";
3
3
 
4
- :root {
5
- --form-left-column-width: 35%;
6
- --form-right-column-width: 65%;
7
- }
8
-
9
4
  form {
10
5
  #main_content > &.alchemy {
11
6
  max-width: 600px;
@@ -102,7 +97,8 @@ form {
102
97
  &.language_locale small.error {
103
98
  @include mixins.form-hint(
104
99
  $background-color: var(--notice-error-background-color),
105
- $border-color: var(--notice-error-border-color)
100
+ $border-color: var(--notice-error-border-color),
101
+ $color: var(--notice-error-text-color)
106
102
  );
107
103
  text-align: left;
108
104
  }
@@ -238,8 +234,7 @@ form {
238
234
  margin-left: var(--form-left-column-width);
239
235
 
240
236
  a[href] {
241
- color: var(--color-grey_very_dark);
242
- text-decoration: underline;
237
+ color: var(--hint-text-link-color);
243
238
  }
244
239
  }
245
240