diff --git a/CHANGELOG.md b/CHANGELOG.md index 8227f23e2..bff72075b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Spina CMS Changelog +## 2.21 + +### 2.21.0 (May 22nd, 2026) +* Added support for MySQL and SQLite databases +* Added menu_id config option to MenuPresenter +* Upgraded to Tailwind v4 +* Updated to Rails 8.1.2 +* Updated ViewComponent to v4 +* Refactored configuration +* Fixed multiple Trix dialogs not opening properly +* Fixed z-index of PageLink and ResourceLink dropdowns +* Fixed SVG display in flex containers +* Fixed named deprecator warning +* Updated gem dependencies + ## 2.20 ### 2.20.0 (May 5th, 2025) diff --git a/Gemfile b/Gemfile index bb418bc1e..0cd659ba7 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,9 @@ gemspec # Assets for the dummy app (can also be sprockets, but propshaft is the new default) gem "propshaft" +# image_processing 2.0 no longer ships a backend; host apps pick vips or mini_magick +gem "ruby-vips" + group :development do gem "letter_opener" end diff --git a/Gemfile.lock b/Gemfile.lock index b09099ee0..e87c4210c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - spina (2.20.0) + spina (2.21.0) ancestry attr_json babosa @@ -23,31 +23,31 @@ PATH GEM remote: https://rubygems.org/ specs: - action_text-trix (2.1.16) + action_text-trix (2.1.19) railties - actioncable (8.1.2) - actionpack (= 8.1.2) - activesupport (= 8.1.2) + actioncable (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (8.1.2) - actionpack (= 8.1.2) - activejob (= 8.1.2) - activerecord (= 8.1.2) - activestorage (= 8.1.2) - activesupport (= 8.1.2) + actionmailbox (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) - actionmailer (8.1.2) - actionpack (= 8.1.2) - actionview (= 8.1.2) - activejob (= 8.1.2) - activesupport (= 8.1.2) + actionmailer (8.1.3) + actionpack (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (8.1.2) - actionview (= 8.1.2) - activesupport (= 8.1.2) + actionpack (8.1.3) + actionview (= 8.1.3) + activesupport (= 8.1.3) nokogiri (>= 1.8.5) rack (>= 2.2.4) rack-session (>= 1.0.1) @@ -55,36 +55,36 @@ GEM rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (8.1.2) + actiontext (8.1.3) action_text-trix (~> 2.1.15) - actionpack (= 8.1.2) - activerecord (= 8.1.2) - activestorage (= 8.1.2) - activesupport (= 8.1.2) + actionpack (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (8.1.2) - activesupport (= 8.1.2) + actionview (8.1.3) + activesupport (= 8.1.3) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (8.1.2) - activesupport (= 8.1.2) + activejob (8.1.3) + activesupport (= 8.1.3) globalid (>= 0.3.6) - activemodel (8.1.2) - activesupport (= 8.1.2) - activerecord (8.1.2) - activemodel (= 8.1.2) - activesupport (= 8.1.2) + activemodel (8.1.3) + activesupport (= 8.1.3) + activerecord (8.1.3) + activemodel (= 8.1.3) + activesupport (= 8.1.3) timeout (>= 0.4.0) - activestorage (8.1.2) - actionpack (= 8.1.2) - activejob (= 8.1.2) - activerecord (= 8.1.2) - activesupport (= 8.1.2) + activestorage (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activesupport (= 8.1.3) marcel (~> 1.0) - activesupport (8.1.2) + activesupport (8.1.3) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) @@ -97,17 +97,18 @@ GEM securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) uri (>= 0.13.1) - addressable (2.8.8) + addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) - ancestry (4.3.3) + ancestry (5.1.0) activerecord (>= 5.2.6) - ansi (1.5.0) + logger + ansi (1.6.0) attr_json (2.6.0) activerecord (>= 6.0.0, < 8.2) - babosa (2.0.0) + babosa (2.1.0) base64 (0.3.0) - bcrypt (3.1.21) - bigdecimal (4.0.1) + bcrypt (3.1.22) + bigdecimal (4.1.2) breadcrumbs_on_rails (4.1.0) railties (>= 5.0) browser (6.2.0) @@ -132,37 +133,36 @@ GEM date (3.5.1) docile (1.1.5) drb (2.2.3) - erb (6.0.1) + erb (6.0.4) erubi (1.13.1) - factory_bot (6.5.6) + factory_bot (6.6.0) activesupport (>= 6.1.0) - ffi (1.17.3-aarch64-linux-gnu) - ffi (1.17.3-aarch64-linux-musl) - ffi (1.17.3-arm-linux-gnu) - ffi (1.17.3-arm-linux-musl) - ffi (1.17.3-arm64-darwin) - ffi (1.17.3-x86-linux-gnu) - ffi (1.17.3-x86-linux-musl) - ffi (1.17.3-x86_64-darwin) - ffi (1.17.3-x86_64-linux-gnu) - ffi (1.17.3-x86_64-linux-musl) + ffi (1.17.4-aarch64-linux-gnu) + ffi (1.17.4-aarch64-linux-musl) + ffi (1.17.4-arm-linux-gnu) + ffi (1.17.4-arm-linux-musl) + ffi (1.17.4-arm64-darwin) + ffi (1.17.4-x86-linux-gnu) + ffi (1.17.4-x86-linux-musl) + ffi (1.17.4-x86_64-darwin) + ffi (1.17.4-x86_64-linux-gnu) + ffi (1.17.4-x86_64-linux-musl) globalid (1.3.0) activesupport (>= 6.1) i18n (1.14.8) concurrent-ruby (~> 1.0) - image_processing (1.14.0) - mini_magick (>= 4.9.5, < 6) - ruby-vips (>= 2.0.17, < 3) + image_processing (2.0.0) importmap-rails (2.2.3) actionpack (>= 6.0.0) activesupport (>= 6.0.0) railties (>= 6.0.0) io-console (0.8.2) - irb (1.16.0) + irb (1.18.0) pp (>= 0.6.0) + prism (>= 1.3.0) rdoc (>= 4.0.0) reline (>= 0.4.2) - json (2.18.0) + json (2.19.5) jsonapi-serializer (2.2.0) activesupport (>= 4.2) kaminari (1.2.2) @@ -184,7 +184,7 @@ GEM letter_opener (1.10.0) launchy (>= 2.2, < 4) logger (1.7.0) - loofah (2.25.0) + loofah (2.25.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.9.0) @@ -193,28 +193,27 @@ GEM net-imap net-pop net-smtp - marcel (1.1.0) + marcel (1.2.1) matrix (0.4.3) method_source (1.1.0) - mini_magick (5.3.1) - logger mini_mime (1.1.5) mini_portile2 (2.8.9) - minitest (6.0.1) + minitest (6.0.6) + drb (~> 2.0) prism (~> 1.5) - minitest-reporters (1.7.1) + minitest-reporters (1.8.0) ansi builder - minitest (>= 5.0) + minitest (>= 5.0, < 7) ruby-progressbar mobility (1.3.2) i18n (>= 0.6.10, < 2) request_store (~> 1.0) - mocha (3.0.1) + mocha (3.1.0) ruby2_keywords (>= 0.0.5) mysql2 (0.5.7) bigdecimal - net-imap (0.6.2) + net-imap (0.6.4) date net-protocol net-pop (0.1.2) @@ -224,24 +223,24 @@ GEM net-smtp (0.5.1) net-protocol nio4r (2.7.5) - nokogiri (1.19.0) + nokogiri (1.19.3) mini_portile2 (~> 2.8.2) racc (~> 1.4) - nokogiri (1.19.0-aarch64-linux-gnu) + nokogiri (1.19.3-aarch64-linux-gnu) racc (~> 1.4) - nokogiri (1.19.0-aarch64-linux-musl) + nokogiri (1.19.3-aarch64-linux-musl) racc (~> 1.4) - nokogiri (1.19.0-arm-linux-gnu) + nokogiri (1.19.3-arm-linux-gnu) racc (~> 1.4) - nokogiri (1.19.0-arm-linux-musl) + nokogiri (1.19.3-arm-linux-musl) racc (~> 1.4) - nokogiri (1.19.0-arm64-darwin) + nokogiri (1.19.3-arm64-darwin) racc (~> 1.4) - nokogiri (1.19.0-x86_64-darwin) + nokogiri (1.19.3-x86_64-darwin) racc (~> 1.4) - nokogiri (1.19.0-x86_64-linux-gnu) + nokogiri (1.19.3-x86_64-linux-gnu) racc (~> 1.4) - nokogiri (1.19.0-x86_64-linux-musl) + nokogiri (1.19.3-x86_64-linux-musl) racc (~> 1.4) pg (1.6.3) pg (1.6.3-aarch64-linux) @@ -253,8 +252,8 @@ GEM pp (0.6.3) prettyprint prettyprint (0.2.0) - prism (1.7.0) - propshaft (1.3.1) + prism (1.9.0) + propshaft (1.3.2) actionpack (>= 7.0.0) activesupport (>= 7.0.0) rack @@ -267,33 +266,33 @@ GEM psych (5.3.1) date stringio - public_suffix (7.0.2) - puma (7.1.0) + public_suffix (7.0.5) + puma (8.0.1) nio4r (~> 2.0) racc (1.8.1) - rack (3.2.4) + rack (3.2.6) rack-rewrite (1.5.1) - rack-session (2.1.1) + rack-session (2.1.2) base64 (>= 0.1.0) rack (>= 3.0.0) rack-test (2.2.0) rack (>= 1.3) rackup (2.3.1) rack (>= 3) - rails (8.1.2) - actioncable (= 8.1.2) - actionmailbox (= 8.1.2) - actionmailer (= 8.1.2) - actionpack (= 8.1.2) - actiontext (= 8.1.2) - actionview (= 8.1.2) - activejob (= 8.1.2) - activemodel (= 8.1.2) - activerecord (= 8.1.2) - activestorage (= 8.1.2) - activesupport (= 8.1.2) + rails (8.1.3) + actioncable (= 8.1.3) + actionmailbox (= 8.1.3) + actionmailer (= 8.1.3) + actionpack (= 8.1.3) + actiontext (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activemodel (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) bundler (>= 1.15.0) - railties (= 8.1.2) + railties (= 8.1.3) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -302,24 +301,24 @@ GEM activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.6.2) - loofah (~> 2.21) + rails-html-sanitizer (1.7.0) + loofah (~> 2.25) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - railties (8.1.2) - actionpack (= 8.1.2) - activesupport (= 8.1.2) + railties (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) tsort (>= 0.2) zeitwerk (~> 2.6) - rake (13.3.1) - rdoc (7.0.3) + rake (13.4.2) + rdoc (7.2.0) erb psych (>= 4.0.0) tsort - regexp_parser (2.11.3) + regexp_parser (2.12.0) reline (0.6.3) io-console (~> 0.5) request_store (1.7.0) @@ -341,37 +340,37 @@ GEM json (>= 1.8, < 3) simplecov-html (~> 0.10.0) simplecov-html (0.10.2) - sqlite3 (2.9.0-aarch64-linux-gnu) - sqlite3 (2.9.0-aarch64-linux-musl) - sqlite3 (2.9.0-arm-linux-gnu) - sqlite3 (2.9.0-arm-linux-musl) - sqlite3 (2.9.0-arm64-darwin) - sqlite3 (2.9.0-x86-linux-gnu) - sqlite3 (2.9.0-x86-linux-musl) - sqlite3 (2.9.0-x86_64-darwin) - sqlite3 (2.9.0-x86_64-linux-gnu) - sqlite3 (2.9.0-x86_64-linux-musl) + sqlite3 (2.9.4-aarch64-linux-gnu) + sqlite3 (2.9.4-aarch64-linux-musl) + sqlite3 (2.9.4-arm-linux-gnu) + sqlite3 (2.9.4-arm-linux-musl) + sqlite3 (2.9.4-arm64-darwin) + sqlite3 (2.9.4-x86-linux-gnu) + sqlite3 (2.9.4-x86-linux-musl) + sqlite3 (2.9.4-x86_64-darwin) + sqlite3 (2.9.4-x86_64-linux-gnu) + sqlite3 (2.9.4-x86_64-linux-musl) stimulus-rails (1.3.4) railties (>= 6.0.0) stringio (3.2.0) - tailwindcss-ruby (4.1.18) - tailwindcss-ruby (4.1.18-aarch64-linux-gnu) - tailwindcss-ruby (4.1.18-aarch64-linux-musl) - tailwindcss-ruby (4.1.18-arm64-darwin) - tailwindcss-ruby (4.1.18-x86_64-darwin) - tailwindcss-ruby (4.1.18-x86_64-linux-gnu) - tailwindcss-ruby (4.1.18-x86_64-linux-musl) + tailwindcss-ruby (4.3.0) + tailwindcss-ruby (4.3.0-aarch64-linux-gnu) + tailwindcss-ruby (4.3.0-aarch64-linux-musl) + tailwindcss-ruby (4.3.0-arm64-darwin) + tailwindcss-ruby (4.3.0-x86_64-darwin) + tailwindcss-ruby (4.3.0-x86_64-linux-gnu) + tailwindcss-ruby (4.3.0-x86_64-linux-musl) thor (1.5.0) - timeout (0.6.0) + timeout (0.6.1) tsort (0.2.0) - turbo-rails (2.0.20) + turbo-rails (2.0.23) actionpack (>= 7.1.0) railties (>= 7.1.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uri (1.1.1) useragent (0.16.11) - view_component (4.2.0) + view_component (4.11.0) actionview (>= 7.1.0) activesupport (>= 7.1.0) concurrent-ruby (~> 1) @@ -382,7 +381,7 @@ GEM websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.7.4) + zeitwerk (2.8.1) PLATFORMS aarch64-linux @@ -413,10 +412,11 @@ DEPENDENCIES pry-rails puma rails-controller-testing + ruby-vips selenium-webdriver (~> 4.11.0) simplecov spina! sqlite3 BUNDLED WITH - 2.5.17 + 4.0.3 diff --git a/app/assets/builds/spina/tailwind.css b/app/assets/builds/spina/tailwind.css index ad41eb73a..f874c22b8 100644 --- a/app/assets/builds/spina/tailwind.css +++ b/app/assets/builds/spina/tailwind.css @@ -1,4 +1,4 @@ -/*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */ +/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */ @layer properties; @layer theme, base, components, utilities; @layer theme { @@ -273,7 +273,7 @@ left: calc(var(--spacing) * 0); } .left-1\/2 { - left: calc(1/2 * 100%); + left: calc(1 / 2 * 100%); } .left-2 { left: calc(var(--spacing) * 2); @@ -417,7 +417,7 @@ } :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) { border-color: var(--tw-prose-hr); - border-top-width: 1; + border-top-width: 1px; margin-top: 3em; margin-bottom: 3em; } @@ -502,7 +502,7 @@ font-weight: 500; font-family: inherit; color: var(--tw-prose-kbd); - box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%); + box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows); font-size: 0.875em; border-radius: 0.3125rem; padding-top: 0.1875em; @@ -638,7 +638,7 @@ --tw-prose-quote-borders: oklch(92.8% 0.006 264.531); --tw-prose-captions: oklch(55.1% 0.027 264.364); --tw-prose-kbd: oklch(21% 0.034 264.665); - --tw-prose-kbd-shadows: NaN NaN NaN; + --tw-prose-kbd-shadows: color-mix(in oklab, oklch(21% 0.034 264.665) 10%, transparent); --tw-prose-code: oklch(21% 0.034 264.665); --tw-prose-pre-code: oklch(92.8% 0.006 264.531); --tw-prose-pre-bg: oklch(27.8% 0.033 256.848); @@ -656,7 +656,7 @@ --tw-prose-invert-quote-borders: oklch(37.3% 0.034 259.733); --tw-prose-invert-captions: oklch(70.7% 0.022 261.325); --tw-prose-invert-kbd: #fff; - --tw-prose-invert-kbd-shadows: 255 255 255; + --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%); --tw-prose-invert-code: #fff; --tw-prose-invert-pre-code: oklch(87.2% 0.01 258.338); --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); @@ -1193,10 +1193,10 @@ min-height: 100vh; } .w-1\/2 { - width: calc(1/2 * 100%); + width: calc(1 / 2 * 100%); } .w-2\/3 { - width: calc(2/3 * 100%); + width: calc(2 / 3 * 100%); } .w-3 { width: calc(var(--spacing) * 3); @@ -1267,6 +1267,9 @@ .max-w-6xl { max-width: var(--container-6xl); } + .max-w-\[600px\] { + max-width: 600px; + } .max-w-lg { max-width: var(--container-lg); } @@ -1303,14 +1306,17 @@ .shrink-0 { flex-shrink: 0; } + .grow-0 { + flex-grow: 0; + } .origin-top-left { - transform-origin: top left; + transform-origin: 0 0; } .origin-top-right { - transform-origin: top right; + transform-origin: 100% 0; } .-translate-x-1\/2 { - --tw-translate-x: calc(calc(1/2 * 100%) * -1); + --tw-translate-x: calc(calc(1 / 2 * 100%) * -1); translate: var(--tw-translate-x) var(--tw-translate-y); } .-translate-x-2 { @@ -1452,6 +1458,9 @@ .flex-wrap { flex-wrap: wrap; } + .items-baseline { + align-items: baseline; + } .items-center { align-items: center; } @@ -1537,6 +1546,14 @@ border-top-left-radius: 0; border-top-right-radius: 0; } + .rounded-l-md { + border-top-left-radius: var(--radius-md); + border-bottom-left-radius: var(--radius-md); + } + .rounded-r-md { + border-top-right-radius: var(--radius-md); + border-bottom-right-radius: var(--radius-md); + } .rounded-b-lg { border-bottom-right-radius: var(--radius-lg); border-bottom-left-radius: var(--radius-lg); @@ -2007,6 +2024,10 @@ --tw-shadow: 0 0 #0000; box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } + .shadow-sm { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } .shadow-xs { --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); @@ -2474,7 +2495,7 @@ } .md\:w-1\/2 { @media (width >= 48rem) { - width: calc(1/2 * 100%); + width: calc(1 / 2 * 100%); } } .md\:w-64 { @@ -2499,7 +2520,7 @@ } .md\:origin-top-right { @media (width >= 48rem) { - transform-origin: top right; + transform-origin: 100% 0; } } .md\:translate-x-20 { @@ -2684,15 +2705,15 @@ font-family: var(--font-body); } body { - background: #F5F5FA; + background: #f5f5fa; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } a, button { - -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } } -@layer utilities { +@layer components { .btn { display: flex; align-items: center; @@ -2855,11 +2876,27 @@ border-width: 1px; border-color: var(--color-gray-400); } - .trix-toolbar button[data-trix-active] { + trix-toolbar button[data-trix-active] { background-color: var(--color-spina); color: var(--color-white); } - .trix-toolbar button[disabled] { + trix-toolbar [data-trix-dialog] { + display: none; + } + trix-toolbar .trix-dialog { + position: absolute; + top: calc(var(--spacing) * 0); + left: calc(var(--spacing) * 0); + z-index: 50; + background-color: var(--color-white); + border-radius: var(--radius-lg); + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + trix-toolbar [data-trix-dialog][data-trix-active] { + display: block; + } + trix-toolbar button[disabled] { background-color: var(--color-gray-100); color: var(--color-gray-400); } @@ -2920,7 +2957,7 @@ } } @layer base { - [type='text'],input:where(:not([type])),[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { + input:where([type='text']),input:where(:not([type])),input:where([type='email']),input:where([type='url']),input:where([type='password']),input:where([type='number']),input:where([type='date']),input:where([type='datetime-local']),input:where([type='month']),input:where([type='search']),input:where([type='tel']),input:where([type='time']),input:where([type='week']),select:where([multiple]),textarea,select { appearance: none; background-color: #fff; border-color: oklch(55.1% 0.027 264.364); @@ -2974,7 +3011,7 @@ padding-right: 2.5rem; print-color-adjust: exact; } - [multiple],[size]:where(select:not([size="1"])) { + select:where([multiple]),select:where([size]:not([size="1"])) { background-image: initial; background-position: initial; background-repeat: unset; @@ -2982,7 +3019,7 @@ padding-right: 0.75rem; print-color-adjust: unset; } - [type='checkbox'],[type='radio'] { + input:where([type='checkbox']),input:where([type='radio']) { appearance: none; padding: 0; print-color-adjust: exact; @@ -2999,13 +3036,13 @@ border-width: 1px; --tw-shadow: 0 0 #0000; } - [type='checkbox'] { + input:where([type='checkbox']) { border-radius: 0px; } - [type='radio'] { + input:where([type='radio']) { border-radius: 100%; } - [type='checkbox']:focus,[type='radio']:focus { + input:where([type='checkbox']):focus,input:where([type='radio']):focus { outline: 2px solid transparent; outline-offset: 2px; --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); @@ -3016,30 +3053,30 @@ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } - [type='checkbox']:checked,[type='radio']:checked { + input:where([type='checkbox']):checked,input:where([type='radio']):checked { border-color: transparent; background-color: currentColor; background-size: 100% 100%; background-position: center; background-repeat: no-repeat; } - [type='checkbox']:checked { + input:where([type='checkbox']):checked { background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); @media (forced-colors: active) { appearance: auto; } } - [type='radio']:checked { + input:where([type='radio']):checked { background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); @media (forced-colors: active) { appearance: auto; } } - [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { + input:where([type='checkbox']):checked:hover,input:where([type='checkbox']):checked:focus,input:where([type='radio']):checked:hover,input:where([type='radio']):checked:focus { border-color: transparent; background-color: currentColor; } - [type='checkbox']:indeterminate { + input:where([type='checkbox']):indeterminate { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); border-color: transparent; background-color: currentColor; @@ -3050,11 +3087,11 @@ appearance: auto; } } - [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { + input:where([type='checkbox']):indeterminate:hover,input:where([type='checkbox']):indeterminate:focus { border-color: transparent; background-color: currentColor; } - [type='file'] { + input:where([type='file']) { background: unset; border-color: inherit; border-width: 0; @@ -3063,7 +3100,7 @@ font-size: unset; line-height: inherit; } - [type='file']:focus { + input:where([type='file']):focus { outline: 1px solid ButtonText; outline: 1px auto -webkit-focus-ring-color; } diff --git a/lib/spina/version.rb b/lib/spina/version.rb index 1c6536a8e..5046eb6b0 100644 --- a/lib/spina/version.rb +++ b/lib/spina/version.rb @@ -1,3 +1,3 @@ module Spina - VERSION = "2.20.0" + VERSION = "2.21.0" end diff --git a/test/dummy/config/database.yml b/test/dummy/config/database.yml index 1ca5fe17b..0b9567649 100644 --- a/test/dummy/config/database.yml +++ b/test/dummy/config/database.yml @@ -1,5 +1,12 @@ -test: +default: &default adapter: sqlite3 pool: 5 timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +test: + <<: *default database: db/test.sqlite3