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
@@ -1,3 +1,3 @@
1
1
  /*! (c) Andrea Giammarchi @webreflection ISC */
2
- !function(){var e=function(e,t){var n=function(e){for(var t=0,n=e.length;t<n;t++)r(e[t]);},r=function(e){var t=e.target,n=e.attributeName,r=e.oldValue;t.attributeChangedCallback(n,r,t.getAttribute(n));};return function(o,a){var l=o.constructor.observedAttributes;return l&&e(a).then((function(){new t(n).observe(o,{attributes:!0,attributeOldValue:!0,attributeFilter:l});for(var e=0,a=l.length;e<a;e++)o.hasAttribute(l[e])&&r({target:o,attributeName:l[e],oldValue:null});})),o}};function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function n(e,n){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return "Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n){r&&(e=r);var o=0,a=function(){};return {s:a,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,i=!0,c=!1;return {s:function(){r=r.call(e);},n:function(){var e=r.next();return i=e.done,e},e:function(e){c=!0,l=e;},f:function(){try{i||null==r.return||r.return();}finally{if(c)throw l}}}}
3
- /*! (c) Andrea Giammarchi - ISC */var r=!0,o=!1,a="querySelectorAll",l="querySelectorAll",i=self,c=i.document,u=i.Element,s=i.MutationObserver,f=i.Set,d=i.WeakMap,h=function(e){return l in e},v=[].filter,p=function(e){var t=new d,i=function(n,r){var o;if(r)for(var a,l=function(e){return e.matches||e.webkitMatchesSelector||e.msMatchesSelector}(n),i=0,c=y.length;i<c;i++)l.call(n,a=y[i])&&(t.has(n)||t.set(n,new f),(o=t.get(n)).has(a)||(o.add(a),e.handle(n,r,a)));else t.has(n)&&(o=t.get(n),t.delete(n),o.forEach((function(t){e.handle(n,r,t);})));},p=function(e){for(var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=0,r=e.length;n<r;n++)i(e[n],t);},y=e.query,g=e.root||c,m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:MutationObserver,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:["*"],c=function t(o,l,i,c,u,s){var f,d=n(o);try{for(d.s();!(f=d.n()).done;){var h=f.value;(s||a in h)&&(u?i.has(h)||(i.add(h),c.delete(h),e(h,u)):c.has(h)||(c.add(h),i.delete(h),e(h,u)),s||t(h[a](l),l,i,c,u,r));}}catch(e){d.e(e);}finally{d.f();}},u=new l((function(e){if(i.length){var t,a=i.join(","),l=new Set,u=new Set,s=n(e);try{for(s.s();!(t=s.n()).done;){var f=t.value,d=f.addedNodes,h=f.removedNodes;c(h,a,l,u,o,o),c(d,a,l,u,r,o);}}catch(e){s.e(e);}finally{s.f();}}})),s=u.observe;return (u.observe=function(e){return s.call(u,e,{subtree:r,childList:r})})(t),u}(i,g,s,y),w=u.prototype.attachShadow;return w&&(u.prototype.attachShadow=function(e){var t=w.call(this,e);return m.observe(t),t}),y.length&&p(g[l](y)),{drop:function(e){for(var n=0,r=e.length;n<r;n++)t.delete(e[n]);},flush:function(){for(var e=m.takeRecords(),t=0,n=e.length;t<n;t++)p(v.call(e[t].removedNodes,h),!1),p(v.call(e[t].addedNodes,h),!0);},observer:m,parse:p}},y=self,g=y.document,m=y.Map,w=y.MutationObserver,b=y.Object,E=y.Set,S=y.WeakMap,A=y.Element,M=y.HTMLElement,O=y.Node,N=y.Error,C=y.TypeError,T=y.Reflect,q=b.defineProperty,D=b.keys,I=b.getOwnPropertyNames,P=b.setPrototypeOf,k=!self.customElements,L=function(e){for(var t=D(e),n=[],r=new E,o=t.length,a=0;a<o;a++){n[a]=e[t[a]];try{delete e[t[a]];}catch(e){r.add(a);}}return function(){for(var a=0;a<o;a++)r.has(a)||(e[t[a]]=n[a]);}};if(k){var x=function(){var e=this.constructor;if(!$.has(e))throw new C("Illegal constructor");var t=$.get(e);if(W)return F(W,t);var n=H.call(g,t);return F(P(n,e.prototype),t)},H=g.createElement,$=new m,_=new m,j=new m,R=new m,V=[],U=p({query:V,handle:function(e,t,n){var r=j.get(n);if(t&&!r.isPrototypeOf(e)){var o=L(e);W=P(e,r);try{new r.constructor;}finally{W=null,o();}}var a="".concat(t?"":"dis","connectedCallback");a in r&&e[a]();}}).parse,W=null,B=function(e){if(!_.has(e)){var t,n=new Promise((function(e){t=e;}));_.set(e,{$:n,_:t});}return _.get(e).$},F=e(B,w);self.customElements={define:function(e,t){if(R.has(e))throw new N('the name "'.concat(e,'" has already been used with this registry'));$.set(t,e),j.set(e,t.prototype),R.set(e,t),V.push(e),B(e).then((function(){U(g.querySelectorAll(e));})),_.get(e)._(t);},get:function(e){return R.get(e)},whenDefined:B},q(x.prototype=M.prototype,"constructor",{value:x}),self.HTMLElement=x,g.createElement=function(e,t){var n=t&&t.is,r=n?R.get(n):R.get(e);return r?new r:H.call(g,e)},"isConnected"in O.prototype||q(O.prototype,"isConnected",{configurable:!0,get:function(){return !(this.ownerDocument.compareDocumentPosition(this)&this.DOCUMENT_POSITION_DISCONNECTED)}});}else if(k=!self.customElements.get("extends-br"))try{var z=function e(){return self.Reflect.construct(HTMLBRElement,[],e)};z.prototype=HTMLLIElement.prototype;var G="extends-br";self.customElements.define("extends-br",z,{extends:"br"}),k=g.createElement("br",{is:G}).outerHTML.indexOf(G)<0;var J=self.customElements,K=J.get,Q=J.whenDefined;self.customElements.whenDefined=function(e){var t=this;return Q.call(this,e).then((function(n){return n||K.call(t,e)}))};}catch(e){}if(k){var X=function(e){var t=ae.get(e);ve(t.querySelectorAll(this),e.isConnected);},Y=self.customElements,Z=g.createElement,ee=Y.define,te=Y.get,ne=Y.upgrade,re=T||{construct:function(e){return e.call(this)}},oe=re.construct,ae=new S,le=new E,ie=new m,ce=new m,ue=new m,se=new m,fe=[],de=[],he=function(e){return se.get(e)||te.call(Y,e)},ve=p({query:de,handle:function(e,t,n){var r=ue.get(n);if(t&&!r.isPrototypeOf(e)){var o=L(e);we=P(e,r);try{new r.constructor;}finally{we=null,o();}}var a="".concat(t?"":"dis","connectedCallback");a in r&&e[a]();}}).parse,pe=p({query:fe,handle:function(e,t){ae.has(e)&&(t?le.add(e):le.delete(e),de.length&&X.call(de,e));}}).parse,ye=A.prototype.attachShadow;ye&&(A.prototype.attachShadow=function(e){var t=ye.call(this,e);return ae.set(this,t),t});var ge=function(e){if(!ce.has(e)){var t,n=new Promise((function(e){t=e;}));ce.set(e,{$:n,_:t});}return ce.get(e).$},me=e(ge,w),we=null;I(self).filter((function(e){return /^HTML.*Element$/.test(e)})).forEach((function(e){var t=self[e];function n(){var e=this.constructor;if(!ie.has(e))throw new C("Illegal constructor");var n=ie.get(e),r=n.is,o=n.tag;if(r){if(we)return me(we,r);var a=Z.call(g,o);return a.setAttribute("is",r),me(P(a,e.prototype),r)}return oe.call(this,t,[],e)}q(n.prototype=t.prototype,"constructor",{value:n}),q(self,e,{value:n});})),g.createElement=function(e,t){var n=t&&t.is;if(n){var r=se.get(n);if(r&&ie.get(r).tag===e)return new r}var o=Z.call(g,e);return n&&o.setAttribute("is",n),o},Y.get=he,Y.whenDefined=ge,Y.upgrade=function(e){var t=e.getAttribute("is");if(t){var n=se.get(t);if(n)return void me(P(e,n.prototype),t)}ne.call(Y,e);},Y.define=function(e,t,n){if(he(e))throw new N("'".concat(e,"' has already been defined as a custom element"));var r,o=n&&n.extends;ie.set(t,o?{is:e,tag:o}:{is:"",tag:e}),o?(r="".concat(o,'[is="').concat(e,'"]'),ue.set(r,t.prototype),se.set(e,t),de.push(r)):(ee.apply(Y,arguments),fe.push(r=e)),ge(e).then((function(){o?(ve(g.querySelectorAll(r)),le.forEach(X,[r])):pe(g.querySelectorAll(r));})),ce.get(e)._(t);};}}();
2
+ !function(){var e=function(e,t){var n=function(e){for(var t=0,n=e.length;t<n;t++)r(e[t]);},r=function(e){var t=e.target,n=e.attributeName,r=e.oldValue;t.attributeChangedCallback(n,r,t.getAttribute(n));};return function(o,a){var l=o.constructor.observedAttributes;return l&&e(a).then((function(){new t(n).observe(o,{attributes:true,attributeOldValue:true,attributeFilter:l});for(var e=0,a=l.length;e<a;e++)o.hasAttribute(l[e])&&r({target:o,attributeName:l[e],oldValue:null});})),o}};function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function n(e,n){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return "Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n){r&&(e=r);var o=0,a=function(){};return {s:a,n:function(){return o>=e.length?{done:true}:{done:false,value:e[o++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,i=true,c=false;return {s:function(){r=r.call(e);},n:function(){var e=r.next();return i=e.done,e},e:function(e){c=true,l=e;},f:function(){try{i||null==r.return||r.return();}finally{if(c)throw l}}}}
3
+ /*! (c) Andrea Giammarchi - ISC */var r=true,o=false,a="querySelectorAll",l="querySelectorAll",i=self,c=i.document,u=i.Element,s=i.MutationObserver,f=i.Set,d=i.WeakMap,h=function(e){return l in e},v=[].filter,p=function(e){var t=new d,i=function(n,r){var o;if(r)for(var a,l=function(e){return e.matches||e.webkitMatchesSelector||e.msMatchesSelector}(n),i=0,c=y.length;i<c;i++)l.call(n,a=y[i])&&(t.has(n)||t.set(n,new f),(o=t.get(n)).has(a)||(o.add(a),e.handle(n,r,a)));else t.has(n)&&(o=t.get(n),t.delete(n),o.forEach((function(t){e.handle(n,r,t);})));},p=function(e){for(var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=0,r=e.length;n<r;n++)i(e[n],t);},y=e.query,g=e.root||c,m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:MutationObserver,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:["*"],c=function t(o,l,i,c,u,s){var f,d=n(o);try{for(d.s();!(f=d.n()).done;){var h=f.value;(s||a in h)&&(u?i.has(h)||(i.add(h),c.delete(h),e(h,u)):c.has(h)||(c.add(h),i.delete(h),e(h,u)),s||t(h[a](l),l,i,c,u,r));}}catch(e){d.e(e);}finally{d.f();}},u=new l((function(e){if(i.length){var t,a=i.join(","),l=new Set,u=new Set,s=n(e);try{for(s.s();!(t=s.n()).done;){var f=t.value,d=f.addedNodes,h=f.removedNodes;c(h,a,l,u,o,o),c(d,a,l,u,r,o);}}catch(e){s.e(e);}finally{s.f();}}})),s=u.observe;return (u.observe=function(e){return s.call(u,e,{subtree:r,childList:r})})(t),u}(i,g,s,y),w=u.prototype.attachShadow;return w&&(u.prototype.attachShadow=function(e){var t=w.call(this,e);return m.observe(t),t}),y.length&&p(g[l](y)),{drop:function(e){for(var n=0,r=e.length;n<r;n++)t.delete(e[n]);},flush:function(){for(var e=m.takeRecords(),t=0,n=e.length;t<n;t++)p(v.call(e[t].removedNodes,h),false),p(v.call(e[t].addedNodes,h),true);},observer:m,parse:p}},y=self,g=y.document,m=y.Map,w=y.MutationObserver,b=y.Object,E=y.Set,S=y.WeakMap,A=y.Element,M=y.HTMLElement,O=y.Node,N=y.Error,C=y.TypeError,T=y.Reflect,q=b.defineProperty,D=b.keys,I=b.getOwnPropertyNames,P=b.setPrototypeOf,k=!self.customElements,L=function(e){for(var t=D(e),n=[],r=new E,o=t.length,a=0;a<o;a++){n[a]=e[t[a]];try{delete e[t[a]];}catch(e){r.add(a);}}return function(){for(var a=0;a<o;a++)r.has(a)||(e[t[a]]=n[a]);}};if(k){var x=function(){var e=this.constructor;if(!$.has(e))throw new C("Illegal constructor");var t=$.get(e);if(W)return F(W,t);var n=H.call(g,t);return F(P(n,e.prototype),t)},H=g.createElement,$=new m,_=new m,j=new m,R=new m,V=[],U=p({query:V,handle:function(e,t,n){var r=j.get(n);if(t&&!r.isPrototypeOf(e)){var o=L(e);W=P(e,r);try{new r.constructor;}finally{W=null,o();}}var a="".concat(t?"":"dis","connectedCallback");a in r&&e[a]();}}).parse,W=null,B=function(e){if(!_.has(e)){var t,n=new Promise((function(e){t=e;}));_.set(e,{$:n,_:t});}return _.get(e).$},F=e(B,w);self.customElements={define:function(e,t){if(R.has(e))throw new N('the name "'.concat(e,'" has already been used with this registry'));$.set(t,e),j.set(e,t.prototype),R.set(e,t),V.push(e),B(e).then((function(){U(g.querySelectorAll(e));})),_.get(e)._(t);},get:function(e){return R.get(e)},whenDefined:B},q(x.prototype=M.prototype,"constructor",{value:x}),self.HTMLElement=x,g.createElement=function(e,t){var n=t&&t.is,r=n?R.get(n):R.get(e);return r?new r:H.call(g,e)},"isConnected"in O.prototype||q(O.prototype,"isConnected",{configurable:true,get:function(){return !(this.ownerDocument.compareDocumentPosition(this)&this.DOCUMENT_POSITION_DISCONNECTED)}});}else if(k=!self.customElements.get("extends-br"))try{var z=function e(){return self.Reflect.construct(HTMLBRElement,[],e)};z.prototype=HTMLLIElement.prototype;var G="extends-br";self.customElements.define("extends-br",z,{extends:"br"}),k=g.createElement("br",{is:G}).outerHTML.indexOf(G)<0;var J=self.customElements,K=J.get,Q=J.whenDefined;self.customElements.whenDefined=function(e){var t=this;return Q.call(this,e).then((function(n){return n||K.call(t,e)}))};}catch(e){}if(k){var X=function(e){var t=ae.get(e);ve(t.querySelectorAll(this),e.isConnected);},Y=self.customElements,Z=g.createElement,ee=Y.define,te=Y.get,ne=Y.upgrade,re=T||{construct:function(e){return e.call(this)}},oe=re.construct,ae=new S,le=new E,ie=new m,ce=new m,ue=new m,se=new m,fe=[],de=[],he=function(e){return se.get(e)||te.call(Y,e)},ve=p({query:de,handle:function(e,t,n){var r=ue.get(n);if(t&&!r.isPrototypeOf(e)){var o=L(e);we=P(e,r);try{new r.constructor;}finally{we=null,o();}}var a="".concat(t?"":"dis","connectedCallback");a in r&&e[a]();}}).parse,pe=p({query:fe,handle:function(e,t){ae.has(e)&&(t?le.add(e):le.delete(e),de.length&&X.call(de,e));}}).parse,ye=A.prototype.attachShadow;ye&&(A.prototype.attachShadow=function(e){var t=ye.call(this,e);return ae.set(this,t),t});var ge=function(e){if(!ce.has(e)){var t,n=new Promise((function(e){t=e;}));ce.set(e,{$:n,_:t});}return ce.get(e).$},me=e(ge,w),we=null;I(self).filter((function(e){return /^HTML.*Element$/.test(e)})).forEach((function(e){var t=self[e];function n(){var e=this.constructor;if(!ie.has(e))throw new C("Illegal constructor");var n=ie.get(e),r=n.is,o=n.tag;if(r){if(we)return me(we,r);var a=Z.call(g,o);return a.setAttribute("is",r),me(P(a,e.prototype),r)}return oe.call(this,t,[],e)}q(n.prototype=t.prototype,"constructor",{value:n}),q(self,e,{value:n});})),g.createElement=function(e,t){var n=t&&t.is;if(n){var r=se.get(n);if(r&&ie.get(r).tag===e)return new r}var o=Z.call(g,e);return n&&o.setAttribute("is",n),o},Y.get=he,Y.whenDefined=ge,Y.upgrade=function(e){var t=e.getAttribute("is");if(t){var n=se.get(t);if(n)return void me(P(e,n.prototype),t)}ne.call(Y,e);},Y.define=function(e,t,n){if(he(e))throw new N("'".concat(e,"' has already been defined as a custom element"));var r,o=n&&n.extends;ie.set(t,o?{is:e,tag:o}:{is:"",tag:e}),o?(r="".concat(o,'[is="').concat(e,'"]'),ue.set(r,t.prototype),se.set(e,t),de.push(r)):(ee.apply(Y,arguments),fe.push(r=e)),ge(e).then((function(){o?(ve(g.querySelectorAll(r)),le.forEach(X,[r])):pe(g.querySelectorAll(r));})),ce.get(e)._(t);};}}();
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.0.a
4
+ version: 8.0.0.b
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -436,16 +436,22 @@ dependencies:
436
436
  name: view_component
437
437
  requirement: !ruby/object:Gem::Requirement
438
438
  requirements:
439
- - - "~>"
439
+ - - ">="
440
440
  - !ruby/object:Gem::Version
441
- version: '3.0'
441
+ version: '3'
442
+ - - "<"
443
+ - !ruby/object:Gem::Version
444
+ version: '5'
442
445
  type: :runtime
443
446
  prerelease: false
444
447
  version_requirements: !ruby/object:Gem::Requirement
445
448
  requirements:
446
- - - "~>"
449
+ - - ">="
447
450
  - !ruby/object:Gem::Version
448
- version: '3.0'
451
+ version: '3'
452
+ - - "<"
453
+ - !ruby/object:Gem::Version
454
+ version: '5'
449
455
  - !ruby/object:Gem::Dependency
450
456
  name: capybara
451
457
  requirement: !ruby/object:Gem::Requirement
@@ -508,14 +514,14 @@ dependencies:
508
514
  requirements:
509
515
  - - "~>"
510
516
  - !ruby/object:Gem::Version
511
- version: '6.0'
517
+ version: '7.0'
512
518
  type: :development
513
519
  prerelease: false
514
520
  version_requirements: !ruby/object:Gem::Requirement
515
521
  requirements:
516
522
  - - "~>"
517
523
  - !ruby/object:Gem::Version
518
- version: '6.0'
524
+ version: '7.0'
519
525
  - !ruby/object:Gem::Dependency
520
526
  name: rails-controller-testing
521
527
  requirement: !ruby/object:Gem::Requirement
@@ -635,33 +641,33 @@ executables: []
635
641
  extensions: []
636
642
  extra_rdoc_files: []
637
643
  files:
638
- - CHANGELOG.md
639
- - CODE_OF_CONDUCT.md
640
- - CONTRIBUTING.md
641
- - Gemfile
642
644
  - LICENSE
643
645
  - README.md
644
- - Rakefile
645
- - SECURITY.md
646
- - alchemy_cms.gemspec
647
646
  - app/assets/builds/alchemy/admin.css
648
647
  - app/assets/builds/alchemy/admin/page-select.css
649
648
  - app/assets/builds/alchemy/admin/print.css
650
- - app/assets/builds/alchemy/custom-properties.css
649
+ - app/assets/builds/alchemy/dark-theme.css
650
+ - app/assets/builds/alchemy/light-theme.css
651
651
  - app/assets/builds/alchemy/preview.min.js
652
+ - app/assets/builds/alchemy/theme.css
652
653
  - app/assets/builds/alchemy/welcome.css
654
+ - app/assets/builds/tinymce/skins/content/alchemy-dark/content.min.css
653
655
  - app/assets/builds/tinymce/skins/content/alchemy/content.min.css
656
+ - app/assets/builds/tinymce/skins/ui/alchemy-dark/content.min.css
657
+ - app/assets/builds/tinymce/skins/ui/alchemy-dark/skin.min.css
654
658
  - app/assets/builds/tinymce/skins/ui/alchemy/content.min.css
655
659
  - app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css
656
660
  - app/assets/config/alchemy_manifest.js
657
661
  - app/assets/images/alchemy/alchemy-logo.png
658
662
  - app/assets/images/alchemy/alchemy-logo.svg
663
+ - app/assets/images/alchemy/element_icons/default.svg
659
664
  - app/assets/images/alchemy/favicon.ico
660
665
  - app/assets/images/alchemy/icon-white.svg
661
666
  - app/assets/images/alchemy/icon.svg
662
667
  - app/assets/images/alchemy/icons-sprite.svg
663
668
  - app/assets/images/alchemy/missing-image.svg
664
669
  - app/components/alchemy/admin/attachment_select.rb
670
+ - app/components/alchemy/admin/element_select.rb
665
671
  - app/components/alchemy/admin/icon.rb
666
672
  - app/components/alchemy/admin/link_dialog/anchor_tab.rb
667
673
  - app/components/alchemy/admin/link_dialog/base_tab.rb
@@ -739,7 +745,6 @@ files:
739
745
  - app/decorators/alchemy/ingredient_editor.rb
740
746
  - app/helpers/alchemy/admin/attachments_helper.rb
741
747
  - app/helpers/alchemy/admin/base_helper.rb
742
- - app/helpers/alchemy/admin/elements_helper.rb
743
748
  - app/helpers/alchemy/admin/form_helper.rb
744
749
  - app/helpers/alchemy/admin/ingredients_helper.rb
745
750
  - app/helpers/alchemy/admin/navigation_helper.rb
@@ -756,6 +761,7 @@ files:
756
761
  - app/javascript/alchemy_admin/components/action.js
757
762
  - app/javascript/alchemy_admin/components/alchemy_html_element.js
758
763
  - app/javascript/alchemy_admin/components/attachment_select.js
764
+ - app/javascript/alchemy_admin/components/auto_submit.js
759
765
  - app/javascript/alchemy_admin/components/button.js
760
766
  - app/javascript/alchemy_admin/components/char_counter.js
761
767
  - app/javascript/alchemy_admin/components/clipboard_button.js
@@ -765,6 +771,7 @@ files:
765
771
  - app/javascript/alchemy_admin/components/element_editor.js
766
772
  - app/javascript/alchemy_admin/components/element_editor/delete_element_button.js
767
773
  - app/javascript/alchemy_admin/components/element_editor/publish_element_button.js
774
+ - app/javascript/alchemy_admin/components/element_select.js
768
775
  - app/javascript/alchemy_admin/components/elements_window.js
769
776
  - app/javascript/alchemy_admin/components/elements_window_handle.js
770
777
  - app/javascript/alchemy_admin/components/growl.js
@@ -827,6 +834,7 @@ files:
827
834
  - app/javascript/tinymce/icons/remixicons/index.js
828
835
  - app/javascript/tinymce/plugins/alchemy_link/index.js
829
836
  - app/jobs/alchemy/base_job.rb
837
+ - app/jobs/alchemy/delete_picture_job.rb
830
838
  - app/jobs/alchemy/publish_page_job.rb
831
839
  - app/mailers/alchemy/base_mailer.rb
832
840
  - app/mailers/alchemy/messages_mailer.rb
@@ -907,6 +915,7 @@ files:
907
915
  - app/models/alchemy/tag.rb
908
916
  - app/models/concerns/alchemy/dom_ids.rb
909
917
  - app/models/concerns/alchemy/picture_thumbnails.rb
918
+ - app/models/concerns/alchemy/relatable_resource.rb
910
919
  - app/models/concerns/alchemy/touch_elements.rb
911
920
  - app/serializers/alchemy/attachment_serializer.rb
912
921
  - app/serializers/alchemy/base_serializer.rb
@@ -924,10 +933,12 @@ files:
924
933
  - app/services/alchemy/dragonfly_to_image_processing.rb
925
934
  - app/services/alchemy/duplicate_element.rb
926
935
  - app/services/alchemy/tag_validations.rb
936
+ - app/stylesheets/alchemy/_custom-properties.scss
927
937
  - app/stylesheets/alchemy/_defaults.scss
928
938
  - app/stylesheets/alchemy/_extends.scss
929
939
  - app/stylesheets/alchemy/_fonts.scss
930
940
  - app/stylesheets/alchemy/_mixins.scss
941
+ - app/stylesheets/alchemy/_themes.scss
931
942
  - app/stylesheets/alchemy/_variables.scss
932
943
  - app/stylesheets/alchemy/admin.scss
933
944
  - app/stylesheets/alchemy/admin/archive.scss
@@ -938,6 +949,7 @@ files:
938
949
  - app/stylesheets/alchemy/admin/clipboard.scss
939
950
  - app/stylesheets/alchemy/admin/dashboard.scss
940
951
  - app/stylesheets/alchemy/admin/dialogs.scss
952
+ - app/stylesheets/alchemy/admin/element-select.scss
941
953
  - app/stylesheets/alchemy/admin/elements.scss
942
954
  - app/stylesheets/alchemy/admin/errors.scss
943
955
  - app/stylesheets/alchemy/admin/filters.scss
@@ -972,10 +984,15 @@ files:
972
984
  - app/stylesheets/alchemy/admin/toolbar.scss
973
985
  - app/stylesheets/alchemy/admin/typography.scss
974
986
  - app/stylesheets/alchemy/admin/upload.scss
975
- - app/stylesheets/alchemy/custom-properties.css
987
+ - app/stylesheets/alchemy/dark-theme.scss
988
+ - app/stylesheets/alchemy/light-theme.scss
989
+ - app/stylesheets/alchemy/theme.scss
976
990
  - app/stylesheets/alchemy/welcome.scss
991
+ - app/stylesheets/tinymce/skins/content/alchemy-dark/content.scss
977
992
  - app/stylesheets/tinymce/skins/content/alchemy/content.scss
978
993
  - app/stylesheets/tinymce/skins/skintool.json
994
+ - app/stylesheets/tinymce/skins/ui/alchemy-dark/content.scss
995
+ - app/stylesheets/tinymce/skins/ui/alchemy-dark/skin.scss
979
996
  - app/stylesheets/tinymce/skins/ui/alchemy/content.scss
980
997
  - app/stylesheets/tinymce/skins/ui/alchemy/fonts/tinymce-mobile.woff
981
998
  - app/stylesheets/tinymce/skins/ui/alchemy/skin.scss
@@ -1098,9 +1115,11 @@ files:
1098
1115
  - app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb
1099
1116
  - app/views/alchemy/admin/pictures/_form.html.erb
1100
1117
  - app/views/alchemy/admin/pictures/_infos.html.erb
1118
+ - app/views/alchemy/admin/pictures/_library_sidebar.html.erb
1101
1119
  - app/views/alchemy/admin/pictures/_picture.html.erb
1102
1120
  - app/views/alchemy/admin/pictures/_picture_description_field.html.erb
1103
1121
  - app/views/alchemy/admin/pictures/_picture_to_assign.html.erb
1122
+ - app/views/alchemy/admin/pictures/_sorting_select.html.erb
1104
1123
  - app/views/alchemy/admin/pictures/_tag_list.html.erb
1105
1124
  - app/views/alchemy/admin/pictures/archive_overlay.js.erb
1106
1125
  - app/views/alchemy/admin/pictures/assign.js.erb
@@ -1115,6 +1134,7 @@ files:
1115
1134
  - app/views/alchemy/admin/resources/_pagination.html.erb
1116
1135
  - app/views/alchemy/admin/resources/_per_page_select.html.erb
1117
1136
  - app/views/alchemy/admin/resources/_resource_table.html.erb
1137
+ - app/views/alchemy/admin/resources/_resource_usage_info.html.erb
1118
1138
  - app/views/alchemy/admin/resources/_table_header.html.erb
1119
1139
  - app/views/alchemy/admin/resources/_tag_list.html.erb
1120
1140
  - app/views/alchemy/admin/resources/edit.html.erb
@@ -1185,15 +1205,6 @@ files:
1185
1205
  - app/views/kaminari/alchemy/_prev_page.html.erb
1186
1206
  - app/views/layouts/alchemy/admin.html.erb
1187
1207
  - app/views/layouts/alchemy/sitemap.xml.erb
1188
- - bin/importmap
1189
- - bin/rails
1190
- - bin/rspec
1191
- - bin/setup
1192
- - bin/start
1193
- - bun.lockb
1194
- - bundles/remixicon.mjs
1195
- - bundles/shoelace.js
1196
- - bundles/tinymce.js
1197
1208
  - config/alchemy/config.yml
1198
1209
  - config/alchemy/modules.yml
1199
1210
  - config/brakeman.ignore
@@ -1212,7 +1223,7 @@ files:
1212
1223
  - db/migrate/20231113104432_create_page_mutexes.rb
1213
1224
  - db/migrate/20240314105244_create_alchemy_picture_descriptions.rb
1214
1225
  - db/migrate/20250626160259_add_unique_index_to_picture_descriptions.rb
1215
- - eslint.config.js
1226
+ - db/migrate/20250905140323_add_created_at_index_to_pictures_and_attachments.rb
1216
1227
  - lib/alchemy.rb
1217
1228
  - lib/alchemy/ability_helper.rb
1218
1229
  - lib/alchemy/admin/locale.rb
@@ -1237,6 +1248,7 @@ files:
1237
1248
  - lib/alchemy/configurations/format_matchers.rb
1238
1249
  - lib/alchemy/configurations/mailer.rb
1239
1250
  - lib/alchemy/configurations/main.rb
1251
+ - lib/alchemy/configurations/page_cache.rb
1240
1252
  - lib/alchemy/configurations/preview.rb
1241
1253
  - lib/alchemy/configurations/sitemap.rb
1242
1254
  - lib/alchemy/configurations/uploader.rb
@@ -1289,6 +1301,7 @@ files:
1289
1301
  - lib/alchemy/test_support/having_crop_action_examples.rb
1290
1302
  - lib/alchemy/test_support/having_picture_thumbnails_examples.rb
1291
1303
  - lib/alchemy/test_support/integration_helpers.rb
1304
+ - lib/alchemy/test_support/relatable_resource_examples.rb
1292
1305
  - lib/alchemy/test_support/rspec_matchers.rb
1293
1306
  - lib/alchemy/test_support/shared_contexts.rb
1294
1307
  - lib/alchemy/test_support/shared_dom_ids_examples.rb
@@ -1298,9 +1311,7 @@ files:
1298
1311
  - lib/alchemy/test_support/shared_uploader_examples.rb
1299
1312
  - lib/alchemy/tinymce.rb
1300
1313
  - lib/alchemy/upgrader.rb
1301
- - lib/alchemy/upgrader/.keep
1302
1314
  - lib/alchemy/upgrader/eight_zero.rb
1303
- - lib/alchemy/upgrader/tasks/.keep
1304
1315
  - lib/alchemy/version.rb
1305
1316
  - lib/alchemy_cms.rb
1306
1317
  - lib/generators/alchemy/base.rb
@@ -1352,8 +1363,12 @@ files:
1352
1363
  - lib/tasks/alchemy/tidy.rake
1353
1364
  - lib/tasks/alchemy/upgrade.rake
1354
1365
  - lib/tasks/alchemy/usage.rake
1355
- - rollup.config.mjs
1356
1366
  - vendor/assets/stylesheets/alchemy_admin/select2.css
1367
+ - vendor/assets/stylesheets/tinymce/skins/content/dark/content.min.css
1368
+ - vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css
1369
+ - vendor/assets/stylesheets/tinymce/skins/ui/oxide-dark/content.min.css
1370
+ - vendor/assets/stylesheets/tinymce/skins/ui/oxide-dark/skin.min.css
1371
+ - vendor/assets/stylesheets/tinymce/skins/ui/oxide/skin.min.css
1357
1372
  - vendor/javascript/clipboard.min.js
1358
1373
  - vendor/javascript/cropperjs.min.js
1359
1374
  - vendor/javascript/flatpickr.min.js
@@ -1366,7 +1381,6 @@ files:
1366
1381
  - vendor/javascript/sortable.min.js
1367
1382
  - vendor/javascript/tinymce.min.js
1368
1383
  - vendor/javascript/ungap-custom-elements.min.js
1369
- - vitest.config.js
1370
1384
  homepage: https://alchemy-cms.com
1371
1385
  licenses:
1372
1386
  - BSD-3-Clause
@@ -1410,7 +1424,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1410
1424
  version: '0'
1411
1425
  requirements:
1412
1426
  - ImageMagick (libmagick), v6.6 or greater.
1413
- rubygems_version: 3.6.7
1427
+ rubygems_version: 3.7.2
1414
1428
  specification_version: 4
1415
1429
  summary: A powerful, userfriendly and flexible CMS for Rails
1416
1430
  test_files: []