pages_core 3.13.0 → 3.15.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 (257) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/assets/builds/pages_core/admin-dist.js +19 -8
  4. data/app/assets/builds/pages_core/admin-dist.js.map +4 -4
  5. data/app/assets/builds/pages_core/admin.css +704 -388
  6. data/app/assets/fonts/Inter-Black.woff2 +0 -0
  7. data/app/assets/fonts/Inter-BlackItalic.woff2 +0 -0
  8. data/app/assets/fonts/Inter-Bold.woff2 +0 -0
  9. data/app/assets/fonts/Inter-BoldItalic.woff2 +0 -0
  10. data/app/assets/fonts/Inter-ExtraBold.woff2 +0 -0
  11. data/app/assets/fonts/Inter-ExtraBoldItalic.woff2 +0 -0
  12. data/app/assets/fonts/Inter-ExtraLight.woff2 +0 -0
  13. data/app/assets/fonts/Inter-ExtraLightItalic.woff2 +0 -0
  14. data/app/assets/fonts/Inter-Italic.woff2 +0 -0
  15. data/app/assets/fonts/Inter-Light.woff2 +0 -0
  16. data/app/assets/fonts/Inter-LightItalic.woff2 +0 -0
  17. data/app/assets/fonts/Inter-Medium.woff2 +0 -0
  18. data/app/assets/fonts/Inter-MediumItalic.woff2 +0 -0
  19. data/app/assets/fonts/Inter-Regular.woff2 +0 -0
  20. data/app/assets/fonts/Inter-SemiBold.woff2 +0 -0
  21. data/app/assets/fonts/Inter-SemiBoldItalic.woff2 +0 -0
  22. data/app/assets/fonts/Inter-Thin.woff2 +0 -0
  23. data/app/assets/fonts/Inter-ThinItalic.woff2 +0 -0
  24. data/app/assets/fonts/InterDisplay-Black.woff2 +0 -0
  25. data/app/assets/fonts/InterDisplay-BlackItalic.woff2 +0 -0
  26. data/app/assets/fonts/InterDisplay-Bold.woff2 +0 -0
  27. data/app/assets/fonts/InterDisplay-BoldItalic.woff2 +0 -0
  28. data/app/assets/fonts/InterDisplay-ExtraBold.woff2 +0 -0
  29. data/app/assets/fonts/InterDisplay-ExtraBoldItalic.woff2 +0 -0
  30. data/app/assets/fonts/InterDisplay-ExtraLight.woff2 +0 -0
  31. data/app/assets/fonts/InterDisplay-ExtraLightItalic.woff2 +0 -0
  32. data/app/assets/fonts/InterDisplay-Italic.woff2 +0 -0
  33. data/app/assets/fonts/InterDisplay-Light.woff2 +0 -0
  34. data/app/assets/fonts/InterDisplay-LightItalic.woff2 +0 -0
  35. data/app/assets/fonts/InterDisplay-Medium.woff2 +0 -0
  36. data/app/assets/fonts/InterDisplay-MediumItalic.woff2 +0 -0
  37. data/app/assets/fonts/InterDisplay-Regular.woff2 +0 -0
  38. data/app/assets/fonts/InterDisplay-SemiBold.woff2 +0 -0
  39. data/app/assets/fonts/InterDisplay-SemiBoldItalic.woff2 +0 -0
  40. data/app/assets/fonts/InterDisplay-Thin.woff2 +0 -0
  41. data/app/assets/fonts/InterDisplay-ThinItalic.woff2 +0 -0
  42. data/app/assets/fonts/InterVariable-Italic.woff2 +0 -0
  43. data/app/assets/fonts/InterVariable.woff2 +0 -0
  44. data/app/assets/stylesheets/pages_core/admin/components/archive.css +1 -1
  45. data/app/assets/stylesheets/pages_core/admin/components/attachments.css +22 -34
  46. data/app/assets/stylesheets/pages_core/admin/components/base.css +1 -68
  47. data/app/assets/stylesheets/pages_core/admin/components/forms.css +107 -48
  48. data/app/assets/stylesheets/pages_core/admin/components/header.css +56 -58
  49. data/app/assets/stylesheets/pages_core/admin/components/image_editor.css +35 -24
  50. data/app/assets/stylesheets/pages_core/admin/components/image_grid.css +28 -27
  51. data/app/assets/stylesheets/pages_core/admin/components/image_uploader.css +5 -5
  52. data/app/assets/stylesheets/pages_core/admin/components/layout.css +7 -1
  53. data/app/assets/stylesheets/pages_core/admin/components/list_table.css +24 -15
  54. data/app/assets/stylesheets/pages_core/admin/components/page_tree.css +63 -104
  55. data/app/assets/stylesheets/pages_core/admin/components/pagination.css +12 -13
  56. data/app/assets/stylesheets/pages_core/admin/components/search.css +1 -16
  57. data/app/assets/stylesheets/pages_core/admin/components/sidebar.css +5 -11
  58. data/app/assets/stylesheets/pages_core/admin/components/tag_editor.css +22 -36
  59. data/app/assets/stylesheets/pages_core/admin/components/toast.css +1 -2
  60. data/app/assets/stylesheets/pages_core/admin/components/toolbar.css +10 -10
  61. data/app/assets/stylesheets/pages_core/admin/components/totp.css +26 -0
  62. data/app/assets/stylesheets/pages_core/admin/controllers/pages.css +37 -51
  63. data/app/assets/stylesheets/pages_core/admin/global/fonts.css +271 -0
  64. data/app/assets/stylesheets/pages_core/admin/global/typography.css +109 -0
  65. data/app/assets/stylesheets/pages_core/admin/vars.css +1 -3
  66. data/app/assets/stylesheets/pages_core/admin.postcss.css +1 -0
  67. data/app/controllers/admin/account_recoveries_controller.rb +87 -0
  68. data/app/controllers/admin/invites_controller.rb +3 -2
  69. data/app/controllers/admin/otp_secrets_controller.rb +45 -0
  70. data/app/controllers/admin/pages_controller.rb +22 -42
  71. data/app/controllers/admin/recovery_codes_controller.rb +32 -0
  72. data/app/controllers/admin/sessions_controller.rb +65 -0
  73. data/app/controllers/admin/users_controller.rb +2 -8
  74. data/app/controllers/concerns/pages_core/authentication.rb +12 -10
  75. data/app/controllers/concerns/pages_core/error_reporting.rb +1 -1
  76. data/app/controllers/concerns/pages_core/page_parameters.rb +29 -0
  77. data/app/controllers/concerns/pages_core/policies_helper.rb +1 -1
  78. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +20 -20
  79. data/app/controllers/pages_core/admin_controller.rb +1 -3
  80. data/app/controllers/pages_core/frontend/pages_controller.rb +2 -6
  81. data/app/formatters/pages_core/html_formatter.rb +2 -4
  82. data/app/helpers/admin/menu_helper.rb +5 -4
  83. data/app/helpers/admin/pages_helper.rb +1 -21
  84. data/app/helpers/pages_core/admin/admin_helper.rb +13 -3
  85. data/app/helpers/pages_core/admin/content_tabs_helper.rb +1 -2
  86. data/app/helpers/pages_core/admin/labelled_field_helper.rb +1 -1
  87. data/app/helpers/pages_core/frontend_helper.rb +1 -1
  88. data/app/helpers/pages_core/images_helper.rb +10 -8
  89. data/app/helpers/pages_core/labelled_form_builder.rb +2 -7
  90. data/app/helpers/pages_core/page_path_helper.rb +1 -1
  91. data/app/javascript/components/Attachments/Attachment.tsx +20 -18
  92. data/app/javascript/components/Attachments/AttachmentEditor.tsx +11 -9
  93. data/app/javascript/components/{Attachments.jsx → Attachments/List.tsx} +58 -63
  94. data/app/javascript/components/Attachments/useAttachments.ts +15 -0
  95. data/app/javascript/components/Attachments.tsx +14 -0
  96. data/app/javascript/components/DateRangeSelect.tsx +105 -0
  97. data/app/javascript/components/DateTimeSelect.tsx +136 -0
  98. data/app/javascript/components/EditableImage.tsx +11 -9
  99. data/app/javascript/components/FileUploadButton.tsx +7 -7
  100. data/app/javascript/components/ImageCropper/FocalPoint.tsx +9 -12
  101. data/app/javascript/components/ImageCropper/Image.tsx +10 -8
  102. data/app/javascript/components/ImageCropper/Toolbar.tsx +11 -12
  103. data/app/javascript/components/ImageCropper/useCrop.ts +24 -53
  104. data/app/javascript/components/ImageCropper.tsx +10 -15
  105. data/app/javascript/components/ImageEditor/Form.tsx +12 -8
  106. data/app/javascript/components/ImageEditor.tsx +12 -7
  107. data/app/javascript/components/ImageGrid/DragElement.tsx +9 -12
  108. data/app/javascript/components/{ImageGrid.jsx → ImageGrid/Grid.tsx} +62 -71
  109. data/app/javascript/components/ImageGrid/GridImage.tsx +22 -23
  110. data/app/javascript/components/ImageGrid/Placeholder.tsx +2 -2
  111. data/app/javascript/components/ImageGrid/useImageGrid.ts +26 -0
  112. data/app/javascript/components/ImageGrid.tsx +15 -0
  113. data/app/javascript/components/ImageUploader.tsx +35 -22
  114. data/app/javascript/components/LabelledField.tsx +34 -0
  115. data/app/javascript/components/Modal.tsx +2 -2
  116. data/app/javascript/components/PageForm/Block.tsx +81 -0
  117. data/app/javascript/components/PageForm/Content.tsx +54 -0
  118. data/app/javascript/components/PageForm/Dates.tsx +66 -0
  119. data/app/javascript/components/PageForm/Files.tsx +28 -0
  120. data/app/javascript/components/PageForm/Form.tsx +41 -0
  121. data/app/javascript/components/PageForm/Images.tsx +28 -0
  122. data/app/javascript/components/PageForm/LocaleLinks.tsx +36 -0
  123. data/app/javascript/components/PageForm/Metadata.tsx +67 -0
  124. data/app/javascript/components/PageForm/Options.tsx +180 -0
  125. data/app/javascript/components/PageForm/PageDescription.tsx +48 -0
  126. data/app/javascript/components/PageForm/PathSegment.tsx +65 -0
  127. data/app/javascript/components/PageForm/TabPanel.tsx +21 -0
  128. data/app/javascript/components/PageForm/Tabs.tsx +33 -0
  129. data/app/javascript/components/PageForm/UnconfiguredContent.tsx +42 -0
  130. data/app/javascript/components/PageForm/pageParams.ts +95 -0
  131. data/app/javascript/components/PageForm/preview.ts +23 -0
  132. data/app/javascript/components/PageForm/usePage.ts +169 -0
  133. data/app/javascript/components/PageForm/useTabs.ts +46 -0
  134. data/app/javascript/components/PageForm.tsx +163 -0
  135. data/app/javascript/components/PageImages.tsx +7 -9
  136. data/app/javascript/components/PageTree/Draggable.tsx +40 -39
  137. data/app/javascript/components/PageTree/Node.tsx +62 -56
  138. data/app/javascript/components/PageTree/PageName.tsx +28 -0
  139. data/app/javascript/components/PageTree.tsx +65 -53
  140. data/app/javascript/components/{RichTextArea.jsx → RichTextArea.tsx} +98 -79
  141. data/app/javascript/components/RichTextToolbarButton.tsx +4 -6
  142. data/app/javascript/components/TagEditor/AddTagForm.tsx +19 -12
  143. data/app/javascript/components/TagEditor/Editor.tsx +32 -0
  144. data/app/javascript/components/TagEditor/Tag.tsx +6 -4
  145. data/app/javascript/components/TagEditor/useTags.ts +58 -0
  146. data/app/javascript/components/TagEditor.tsx +8 -58
  147. data/app/javascript/components/Toast.tsx +3 -3
  148. data/app/javascript/components/drag/draggedOrder.ts +22 -14
  149. data/app/javascript/components/drag/useDragCollection.ts +35 -30
  150. data/app/javascript/components/drag/useDragUploader.ts +32 -21
  151. data/app/javascript/components/drag/useDraggable.ts +7 -6
  152. data/app/javascript/components/drag.ts +0 -1
  153. data/app/javascript/components.ts +1 -3
  154. data/app/javascript/features/RichText.tsx +2 -3
  155. data/app/javascript/features/contentTabs.ts +79 -0
  156. data/app/javascript/index.ts +5 -14
  157. data/app/javascript/lib/Tree.ts +31 -45
  158. data/app/javascript/lib/request.ts +11 -11
  159. data/app/javascript/stores/useToastStore.ts +1 -1
  160. data/app/javascript/types/Attachments.ts +29 -0
  161. data/app/javascript/types/Crop.ts +36 -0
  162. data/app/javascript/types/Drag.ts +34 -0
  163. data/app/javascript/types/Images.ts +47 -0
  164. data/app/javascript/types/PageEditor.ts +26 -0
  165. data/app/javascript/types/Pages.ts +75 -0
  166. data/app/javascript/types/Tags.ts +9 -0
  167. data/app/javascript/types/Template.ts +24 -0
  168. data/app/javascript/types/Trees.ts +19 -0
  169. data/app/javascript/types.ts +2 -25
  170. data/app/mailers/admin_mailer.rb +2 -2
  171. data/app/models/attachment.rb +1 -1
  172. data/app/models/concerns/pages_core/authenticable_user.rb +63 -0
  173. data/app/models/concerns/pages_core/emailable.rb +16 -0
  174. data/app/models/concerns/pages_core/page_model/templateable.rb +2 -16
  175. data/app/models/invite.rb +2 -6
  176. data/app/models/otp_secret.rb +101 -0
  177. data/app/models/page.rb +0 -3
  178. data/app/models/user.rb +2 -68
  179. data/app/policies/page_policy.rb +6 -2
  180. data/app/policies/user_policy.rb +4 -0
  181. data/app/resources/admin/page_resource.rb +95 -0
  182. data/app/resources/admin/page_tree_resource.rb +27 -0
  183. data/app/resources/admin/template_configuration_resource.rb +50 -0
  184. data/app/views/admin/account_recoveries/new.html.erb +22 -0
  185. data/app/views/admin/account_recoveries/show.html.erb +37 -0
  186. data/app/views/admin/invites/show.html.erb +1 -1
  187. data/app/views/admin/news/_sidebar.html.erb +2 -4
  188. data/app/views/admin/news/index.html.erb +0 -1
  189. data/app/views/admin/otp_secrets/create.html.erb +7 -0
  190. data/app/views/admin/otp_secrets/new.html.erb +60 -0
  191. data/app/views/admin/pages/_form.html.erb +10 -30
  192. data/app/views/admin/pages/_search_bar.html.erb +1 -1
  193. data/app/views/admin/pages/edit.html.erb +1 -57
  194. data/app/views/admin/pages/index.html.erb +1 -1
  195. data/app/views/admin/pages/new.html.erb +1 -44
  196. data/app/views/admin/recovery_codes/_codes.html.erb +14 -0
  197. data/app/views/admin/recovery_codes/create.html.erb +7 -0
  198. data/app/views/admin/recovery_codes/new.html.erb +11 -0
  199. data/app/views/admin/sessions/_otp_form.html.erb +13 -0
  200. data/app/views/admin/sessions/new.html.erb +31 -0
  201. data/app/views/admin/sessions/verify_otp.html.erb +19 -0
  202. data/app/views/admin/users/_access_control.html.erb +5 -1
  203. data/app/views/admin/users/_list.html.erb +12 -7
  204. data/app/views/admin/users/edit.html.erb +31 -1
  205. data/app/views/admin/users/new.html.erb +1 -1
  206. data/app/views/admin_mailer/account_recovery.text.erb +10 -0
  207. data/app/views/layouts/admin/_header.html.erb +3 -5
  208. data/app/views/layouts/admin/_page_header.html.erb +1 -2
  209. data/app/views/layouts/admin/_toast.html.erb +12 -0
  210. data/app/views/layouts/admin.html.erb +2 -2
  211. data/config/locales/en.yml +11 -7
  212. data/config/routes.rb +13 -12
  213. data/db/migrate/20240126160700_add_2fa_fields.rb +26 -0
  214. data/db/migrate/20240129201300_remove_password_reset_tokens.rb +13 -0
  215. data/db/migrate/20240131140700_change_email_to_citext.rb +18 -0
  216. data/db/migrate/20240201160700_remove_persistent_data.rb +7 -0
  217. data/db/migrate/20240508145300_remove_categories.rb +21 -0
  218. data/lib/pages_core/configuration/base.rb +2 -2
  219. data/lib/pages_core/templates/configuration.rb +1 -1
  220. data/lib/pages_core/templates/configuration_proxy.rb +2 -2
  221. data/lib/pages_core/templates/template_configuration.rb +11 -1
  222. data/lib/pages_core/templates.rb +6 -4
  223. data/lib/pages_core/version.rb +1 -1
  224. data/lib/pages_core.rb +6 -0
  225. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/gridOverlay.ts +6 -7
  226. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/responsiveEmbeds.ts +17 -12
  227. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +0 -2
  228. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +3 -4
  229. metadata +143 -35
  230. data/app/assets/stylesheets/pages_core/admin/components/login.css +0 -33
  231. data/app/controllers/admin/categories_controller.rb +0 -56
  232. data/app/controllers/admin/password_resets_controller.rb +0 -85
  233. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +0 -75
  234. data/app/controllers/sessions_controller.rb +0 -27
  235. data/app/helpers/pages_core/admin/page_blocks_helper.rb +0 -66
  236. data/app/helpers/pages_core/admin/page_json_helper.rb +0 -23
  237. data/app/javascript/components/DateRangeSelect.jsx +0 -225
  238. data/app/javascript/components/PageDates.jsx +0 -73
  239. data/app/javascript/components/PageFiles.jsx +0 -25
  240. data/app/javascript/components/PageTree/types.ts +0 -15
  241. data/app/javascript/components/drag/types.ts +0 -28
  242. data/app/javascript/controllers/EditPageController.ts +0 -22
  243. data/app/javascript/controllers/LoginController.ts +0 -32
  244. data/app/javascript/controllers/MainController.ts +0 -74
  245. data/app/javascript/controllers/PageOptionsController.js +0 -67
  246. data/app/models/category.rb +0 -22
  247. data/app/models/page_category.rb +0 -6
  248. data/app/models/password_reset_token.rb +0 -34
  249. data/app/views/admin/pages/_edit_content.html.erb +0 -19
  250. data/app/views/admin/pages/_edit_files.html.erb +0 -4
  251. data/app/views/admin/pages/_edit_images.html.erb +0 -4
  252. data/app/views/admin/pages/_edit_metadata.html.erb +0 -35
  253. data/app/views/admin/pages/_edit_options.html.erb +0 -91
  254. data/app/views/admin/password_resets/show.html.erb +0 -21
  255. data/app/views/admin/users/login.html.erb +0 -65
  256. data/app/views/admin_mailer/password_reset.text.erb +0 -11
  257. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +0 -11
@@ -1,10 +1,13 @@
1
1
  header {
2
2
  background: var(--background-invert-color);
3
- height: 86px;
3
+ padding: 1.25rem 1rem 0rem 1rem;
4
4
  color: var(--text-invert-color);
5
+ display: flex;
6
+ flex-wrap: wrap;
7
+ gap: 1rem;
5
8
 
6
- & a,
7
- & a:visited {
9
+ a,
10
+ a:visited {
8
11
  background: none;
9
12
  border: 0;
10
13
  padding: 0;
@@ -12,44 +15,38 @@ header {
12
15
  color: var(--text-invert-color);
13
16
  }
14
17
 
15
- & .logo {
16
- position: absolute;
17
- z-index: 2;
18
- top: 11px;
19
- left: 16px;
20
- width: 21px;
21
- height: 27px;
18
+ .logo {
19
+ background: url("pages/admin/icon.svg");
20
+ background-repeat: no-repeat;
21
+ min-height: 27px;
22
+ padding-left: 38px;
22
23
  }
23
24
 
24
- & .site-name {
25
+ .site-name {
25
26
  color: var(--text-invert-color);
26
- position: absolute;
27
- top: 15px;
28
- left: 52px;
27
+ flex-grow: 1;
29
28
 
30
- & h1 {
29
+ h1 {
31
30
  margin: 0;
32
31
  padding: 0;
33
- font-family: Arial, Helvetica, sans-serif;
34
32
  display: inline;
35
- font-size: 20px;
33
+ font-size: 1.4rem;
34
+ letter-spacing: -0.04rem;
36
35
  font-weight: normal;
37
36
 
38
- & a {
39
- font-weight: bold;
37
+ a {
38
+ font-weight: 800;
40
39
  text-decoration: none;
41
40
  padding-right: 6px;
42
41
  }
43
42
  }
44
43
  }
45
44
 
46
- & .user {
47
- font-size: 13px;
48
- position: absolute;
49
- top: 20px;
50
- right: 16px;
45
+ .user {
46
+ display: flex;
47
+ align-items: center;
51
48
 
52
- & a {
49
+ a {
53
50
  border-left: 1px solid var(--text-light-color);
54
51
  padding-left: 10px;
55
52
  margin-left: 6px;
@@ -62,35 +59,32 @@ header {
62
59
  }
63
60
  }
64
61
 
65
- & .tabs {
66
- position: absolute;
67
- top: 54px;
68
- height: 29px;
69
- left: 16px;
70
- right: 8px;
62
+ .tabs {
63
+ display: flex;
64
+ overflow: scroll;
65
+ width: 100%;
66
+ gap: 8px;
71
67
 
72
- & ul {
73
- padding: 0;
74
- margin: 0 8px 0 0;
68
+ ul {
69
+ padding: 0px;
70
+ margin: 0px;
75
71
  list-style-type: none;
76
- display: block;
77
- float: left;
72
+ display: flex;
73
+ gap: 4px;
78
74
 
79
75
  &.account {
80
- float: right;
76
+ flex-grow: 1;
77
+ justify-content: flex-end;
81
78
  }
82
79
  }
83
80
 
84
- & li {
85
- display: inline;
81
+ li {
86
82
  margin: 0;
87
83
  padding: 0;
88
- font-weight: normal;
89
- font-size: 13px;
90
84
  }
91
85
 
92
- & a,
93
- & a:visited {
86
+ a,
87
+ a:visited {
94
88
  background: #333;
95
89
  color: var(--text-invert-color);
96
90
  display: block;
@@ -98,13 +92,13 @@ header {
98
92
  padding: 0 15px;
99
93
  line-height: 32px;
100
94
  height: 32px;
101
- margin: 0 2px 0 0;
95
+ margin: 0px;
102
96
  text-decoration: none;
103
97
  }
104
98
 
105
- & a:hover,
106
- & a.current,
107
- & a.current:visited {
99
+ a:hover,
100
+ a.current,
101
+ a.current:visited {
108
102
  background: linear-gradient(to bottom, #cfcfcf 0%, #fefefe 100%);
109
103
  color: var(--text-color);
110
104
  }
@@ -116,22 +110,22 @@ header {
116
110
  margin: 24px 0px -12px -18px;
117
111
  padding: 0;
118
112
 
119
- & li {
113
+ li {
120
114
  color: hsla(0, 0%, 0%, 0.25);
121
115
  display: inline;
122
116
  background: transparent;
123
117
  padding: 6px 17px;
124
- font-weight: bold;
125
118
  }
126
119
 
127
- & li.current {
120
+ li.current {
128
121
  background: var(--background-color);
129
122
  padding: 5px 16px;
130
123
  border: 1px solid #cae6f1;
131
124
  border-bottom: 1px solid var(--background-color);
125
+ font-weight: var(--bold-weight);
132
126
 
133
- & a,
134
- & a:visited {
127
+ a,
128
+ a:visited {
135
129
  text-decoration: none;
136
130
  color: #444;
137
131
  }
@@ -146,15 +140,19 @@ header {
146
140
  border-bottom: 1px solid #d4eaf4;
147
141
  color: var(--text-color);
148
142
 
149
- & em {
143
+ h3 {
144
+ font-weight: var(--bold-weight);
145
+ }
146
+
147
+ em {
150
148
  font-style: normal;
151
149
  color: #4a5357;
152
150
  }
153
151
 
154
- & .links {
152
+ .links {
155
153
  float: right;
156
154
 
157
- & a {
155
+ a {
158
156
  border-left: 1px solid #779cb3;
159
157
  padding-left: 8px;
160
158
  margin-left: 8px;
@@ -166,14 +164,14 @@ header {
166
164
  }
167
165
 
168
166
  &.current {
169
- font-weight: bold;
167
+ font-weight: var(--bold-weight);
170
168
  text-decoration: none;
171
169
  color: var(--text-color);
172
170
  }
173
171
  }
174
172
  }
175
173
 
176
- & .separator {
174
+ .separator {
177
175
  color: #779cb3;
178
176
  margin: 0 4px;
179
177
  }
@@ -182,6 +180,6 @@ header {
182
180
  main .page-description h3 {
183
181
  margin: 0;
184
182
  padding: 0;
185
- font-size: 13px;
183
+ font-size: 0.875rem;
186
184
  text-shadow: #e9f6ff 1px 1px 1px;
187
185
  }
@@ -1,30 +1,33 @@
1
1
  .editable-image {
2
2
  cursor: pointer;
3
3
  display: block;
4
- transition: transform 200ms, box-shadow 200ms, border-color 200ms ease-out;
4
+ transition:
5
+ transform 200ms,
6
+ box-shadow 200ms,
7
+ border-color 200ms ease-out;
5
8
  box-shadow: 0px 2px 5px rgba(0, 0, 0, 0);
6
9
  border: 1px solid #fff;
7
10
  position: relative;
8
11
  -webkit-perspective: 1000;
9
12
 
10
- & .alt-warning {
13
+ .alt-warning {
11
14
  position: absolute;
12
15
  bottom: 5px;
13
16
  right: 6px;
14
- font-size: 14px;
17
+ font-size: 1rem;
15
18
  color: var(--background-warning-color);
16
19
  text-shadow: 0px 0px 5px rgba(0, 0, 0, 1);
17
20
  z-index: 100;
18
21
  }
19
22
 
20
- & img {
23
+ img {
21
24
  display: block;
22
25
  }
23
26
 
24
27
  &:hover {
25
28
  border-color: rgba(20, 20, 20, 0.5);
26
29
  transform: scale(1.01) translate(0px, -1px);
27
- box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.2);
30
+ box-shadow: 0px 5px 20px rgba(0, 0, 0, 0.2);
28
31
  }
29
32
  }
30
33
 
@@ -39,19 +42,19 @@
39
42
  flex-direction: column;
40
43
  }
41
44
 
42
- & .toolbars {
43
- & .aspect-ratios {
45
+ .toolbars {
46
+ .aspect-ratios {
44
47
  border-top: 0px;
45
48
  }
46
49
  }
47
50
 
48
- & .visual {
51
+ .visual {
49
52
  flex: 1 1 auto;
50
53
  display: flex;
51
54
  flex-direction: column;
52
55
  }
53
56
 
54
- & .image-container {
57
+ .image-container {
55
58
  flex: 1 1 auto;
56
59
  width: 100%;
57
60
  height: 100%;
@@ -61,7 +64,11 @@
61
64
  linear-gradient(45deg, transparent 75%, #fff 75%),
62
65
  linear-gradient(135deg, transparent 75%, #fff 75%);
63
66
  background-size: 12px 12px;
64
- background-position: 0 0, 6px 0, 6px -6px, 0px 6px;
67
+ background-position:
68
+ 0 0,
69
+ 6px 0,
70
+ 6px -6px,
71
+ 0px 6px;
65
72
  display: flex;
66
73
  flex-direction: column;
67
74
  justify-content: center;
@@ -69,7 +76,7 @@
69
76
  border: 1px solid var(--border-color);
70
77
  border-top: 0px;
71
78
 
72
- & .image-wrapper {
79
+ .image-wrapper {
73
80
  position: absolute;
74
81
  flex-grow: 0;
75
82
 
@@ -77,18 +84,18 @@
77
84
  position: relative;
78
85
  }
79
86
 
80
- & img {
87
+ img {
81
88
  display: block;
82
89
  width: 100%;
83
90
  height: auto;
84
91
  }
85
92
 
86
- & .ReactCrop {
93
+ .ReactCrop {
87
94
  width: 100%;
88
95
  background-color: transparent;
89
96
  }
90
97
 
91
- & .ReactCrop__crop-selection {
98
+ .ReactCrop__crop-selection {
92
99
  &:before,
93
100
  &:after {
94
101
  content: "";
@@ -115,7 +122,7 @@
115
122
  }
116
123
  }
117
124
 
118
- & .ReactCrop--active .ReactCrop__crop-selection {
125
+ .ReactCrop--active .ReactCrop__crop-selection {
119
126
  &:before,
120
127
  &:after {
121
128
  opacity: 0.75;
@@ -123,17 +130,17 @@
123
130
  }
124
131
  }
125
132
 
126
- & .loading {
133
+ .loading {
127
134
  color: var(--text-light-color);
128
135
  }
129
136
  }
130
137
 
131
- & form {
138
+ form {
132
139
  width: 300px;
133
140
  display: block;
134
141
  margin-left: 20px;
135
142
 
136
- & textarea {
143
+ textarea {
137
144
  max-width: 100%;
138
145
 
139
146
  &.caption {
@@ -141,8 +148,8 @@
141
148
  }
142
149
  }
143
150
 
144
- & .embed-code {
145
- & input {
151
+ .embed-code {
152
+ input {
146
153
  width: 50%;
147
154
  margin-right: 8px;
148
155
  }
@@ -153,20 +160,20 @@
153
160
  margin-left: 0px;
154
161
  padding-bottom: 20px;
155
162
 
156
- & textarea.caption {
163
+ textarea.caption {
157
164
  height: inherit;
158
165
  }
159
166
  }
160
167
  }
161
168
 
162
- & .focal-editor {
169
+ .focal-editor {
163
170
  position: absolute;
164
171
  width: 100%;
165
172
  height: 100%;
166
173
  touch-action: none;
167
174
  overflow: hidden;
168
175
 
169
- & .focal-point {
176
+ .focal-point {
170
177
  &:after {
171
178
  content: "";
172
179
  display: block;
@@ -190,7 +197,11 @@
190
197
  touch-action: none;
191
198
  user-select: none;
192
199
  cursor: pointer;
193
- transition: border-radius 200ms, margin 200ms, width 200ms, height 200ms,
200
+ transition:
201
+ border-radius 200ms,
202
+ margin 200ms,
203
+ width 200ms,
204
+ height 200ms,
194
205
  border-color 200ms ease-out;
195
206
 
196
207
  &:hover {
@@ -1,30 +1,31 @@
1
1
  .image-grid {
2
- --image-padding: 7px;
2
+ --image-padding: 0.5rem;
3
3
  margin-bottom: 40px;
4
4
  display: flex;
5
+ gap: 1rem;
5
6
 
6
7
  @media (--mobile) {
7
8
  flex-direction: column;
8
9
  }
9
10
 
10
- & input[type="file"] {
11
+ input[type="file"] {
11
12
  display: none;
12
13
  }
13
14
 
14
- & h3 {
15
+ h3 {
15
16
  margin: 10px var(--image-padding) 10px var(--image-padding);
16
17
  border-bottom: 1px solid var(--border-color);
17
18
  padding-bottom: 5px;
18
19
  }
19
20
 
20
- & img {
21
+ img {
21
22
  display: block;
22
23
  width: 100%;
23
24
  height: auto;
24
25
  min-height: 1px; /* Hack for IE11 */
25
26
  }
26
27
 
27
- & .grid-image {
28
+ .grid-image {
28
29
  padding: var(--image-padding);
29
30
 
30
31
  &.placeholder {
@@ -36,19 +37,19 @@
36
37
  opacity: 0.5;
37
38
  overflow: hidden;
38
39
 
39
- & .temp-image {
40
+ .temp-image {
40
41
  position: relative;
41
42
  cursor: pointer;
42
43
  overflow: hidden;
43
44
  background: #000;
44
45
  }
45
46
 
46
- & img {
47
+ img {
47
48
  filter: blur(20px);
48
49
  opacity: 0.75;
49
50
  }
50
51
 
51
- & span {
52
+ span {
52
53
  position: absolute;
53
54
  top: 50%;
54
55
  left: 50%;
@@ -65,8 +66,8 @@
65
66
  }
66
67
  }
67
68
 
68
- & .file-placeholder,
69
- & .placeholder {
69
+ .file-placeholder,
70
+ .placeholder {
70
71
  position: relative;
71
72
  vertical-align: middle;
72
73
  background: var(--background-disabled-color);
@@ -74,13 +75,13 @@
74
75
  width: 100%;
75
76
  padding-bottom: 100%;
76
77
 
77
- & span {
78
+ span {
78
79
  color: var(--text-light-color);
79
80
  text-shadow: none;
80
81
  }
81
82
  }
82
83
 
83
- & .actions {
84
+ .actions {
84
85
  margin-top: 7px;
85
86
  display: flex;
86
87
  gap: 4px;
@@ -91,33 +92,33 @@
91
92
  visibility: visible;
92
93
  }
93
94
 
94
- & button {
95
+ button {
95
96
  flex: 1;
96
97
  }
97
98
  }
98
99
 
99
100
  &:hover {
100
- & .actions {
101
+ .actions {
101
102
  visibility: visible;
102
103
  }
103
104
  }
104
105
  }
105
106
 
106
- & .primary-image {
107
+ .primary-image {
107
108
  width: 33.33%;
108
109
 
109
110
  @media (--mobile) {
110
111
  width: 100%;
111
112
  }
112
113
 
113
- & .drop-target {
114
+ .drop-target {
114
115
  position: relative;
115
116
  width: 100%;
116
117
  padding-bottom: 66.67%;
117
118
  text-align: center;
118
119
  line-height: 1.6;
119
120
 
120
- & > .upload-button {
121
+ > .upload-button {
121
122
  position: absolute;
122
123
  display: flex;
123
124
  flex-direction: column;
@@ -133,15 +134,15 @@
133
134
  }
134
135
  }
135
136
 
136
- & .grid {
137
+ .grid {
137
138
  width: 100%;
138
139
 
139
- & .images {
140
+ .images {
140
141
  position: relative;
141
142
  display: flex;
142
143
  flex-wrap: wrap;
143
144
 
144
- & .grid-image {
145
+ .grid-image {
145
146
  display: flex;
146
147
  flex-direction: column;
147
148
  justify-content: flex-end;
@@ -157,10 +158,10 @@
157
158
  }
158
159
  }
159
160
 
160
- & .editable-image {
161
+ .editable-image {
161
162
  padding-bottom: 75%;
162
163
 
163
- & img {
164
+ img {
164
165
  position: absolute;
165
166
  top: 0px;
166
167
  left: 0px;
@@ -171,18 +172,18 @@
171
172
  }
172
173
  }
173
174
 
174
- & .drop-target {
175
+ .drop-target {
175
176
  margin: 10px var(--image-padding);
176
177
  padding-top: 10px;
177
178
 
178
- & button {
179
+ button {
179
180
  margin: 0px 7px;
180
181
  }
181
182
  }
182
183
  }
183
184
 
184
185
  &.with-primary-image {
185
- & .grid {
186
+ .grid {
186
187
  width: 66.67%;
187
188
 
188
189
  @media (--mobile) {
@@ -190,7 +191,7 @@
190
191
  }
191
192
  }
192
193
 
193
- & .images .grid-image {
194
+ .images .grid-image {
194
195
  width: 25%;
195
196
 
196
197
  @media (--narrow) {
@@ -203,7 +204,7 @@
203
204
  }
204
205
  }
205
206
 
206
- & .drag-image {
207
+ .drag-image {
207
208
  position: absolute;
208
209
  width: 150px;
209
210
  z-index: 100;
@@ -17,14 +17,14 @@
17
17
  border: 2px dashed var(--border-color);
18
18
  }
19
19
 
20
- & .image {
20
+ .image {
21
21
  display: flex;
22
22
  align-items: center;
23
23
  justify-content: center;
24
24
  max-width: 250px;
25
25
  max-height: 400px;
26
26
 
27
- & .editable-image img {
27
+ .editable-image img {
28
28
  width: auto;
29
29
  max-height: 400px;
30
30
  }
@@ -34,19 +34,19 @@
34
34
  }
35
35
  }
36
36
 
37
- & .ui-wrapper {
37
+ .ui-wrapper {
38
38
  flex: 1;
39
39
  display: flex;
40
40
  align-items: center;
41
41
  justify-content: center;
42
42
  }
43
43
 
44
- & .ui {
44
+ .ui {
45
45
  text-align: center;
46
46
  padding: 20px;
47
47
  }
48
48
 
49
- & .remove-image {
49
+ .remove-image {
50
50
  display: block;
51
51
  margin-top: 20px;
52
52
  }
@@ -17,6 +17,12 @@ body {
17
17
  flex-flow: column nowrap;
18
18
  height: 100vh;
19
19
 
20
+ & > div[data-react-class] {
21
+ flex-grow: 1;
22
+ display: flex;
23
+ flex-flow: column nowrap;
24
+ }
25
+
20
26
  & > *,
21
27
  & .main-wrapper {
22
28
  flex-shrink: 0;
@@ -40,7 +46,7 @@ body {
40
46
  & > aside {
41
47
  min-width: 300px;
42
48
  width: 20%;
43
- padding: 0px 16px;
49
+ padding: 1rem;
44
50
 
45
51
  @media (--mobile) {
46
52
  width: 100%;