rdbr 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87da572f183e27a7a655a00bfe361c5f41b1c6804839d70937dffbc78f43ecd2
4
- data.tar.gz: 05bc097aa41fd2fbdd8514013cbcca12c6ee113e1d5aaee98f469ff8710976c5
3
+ metadata.gz: a34fec0f8ef2d3976b5d3048a52d2d25db7b27551eed07c236584263daec5112
4
+ data.tar.gz: 8ff7094a26a39491724bc59c52ad6a611abaa4eb920565447e28941f5d5a73d4
5
5
  SHA512:
6
- metadata.gz: a0bba4640c5e90eca6058d6213e8c3b95d119992af39d12bee882b7118a38eb0e6a348fee053c8da41effad5d3067dfe75d01caa6f2eb1413678d015564c82ab
7
- data.tar.gz: 76ff18c1b73aa3036eeda5434ea024c89c96e0f4d363684e019eb06258bc0c4c0eeb56193af5089673d97fb6d7008f1ad3eff8176fc56573fdd94cef8b4d5abd
6
+ metadata.gz: 9014e861e83a86c6d130c022c46aadc091a415c37316c8eb17f7d13580c5df763fc4da2fd3b437b325056d6c86046f7b9aaa46da736b78c057de972917e44358
7
+ data.tar.gz: 7c2631bd3064270523261d41f1ce2fae06c7e97975796dbfb88304bfa35e041e4fd781d687793e36e31e3d1d58f4ce035654e8863ac6a95797e5973e05ad2fda
data/CHANGELOG.md CHANGED
@@ -3,7 +3,11 @@
3
3
  RDBr follows [Semantic Versioning](https://semver.org/). Until version 1.0,
4
4
  minor releases may change public interfaces with an accompanying migration note.
5
5
 
6
- ## [Unreleased]
6
+ ## [0.1.1] - 2026-07-26
7
+
8
+ - Add a database favicon for easier identification in browser tabs.
9
+ - Add a System theme that follows the browser colour-scheme preference while
10
+ preserving explicit Light and Dark choices.
7
11
 
8
12
  ## [0.1.0] - 2026-07-25
9
13
 
@@ -3,16 +3,28 @@
3
3
  if (!picker) return;
4
4
 
5
5
  const storedTheme = window.localStorage.getItem('rdbr-theme');
6
- picker.value = ['dark', 'madhat2r'].includes(storedTheme) ? 'dark' : 'default';
6
+ const preference = storedTheme === 'madhat2r' ? 'dark' :
7
+ storedTheme === 'default' ? 'light' : storedTheme;
8
+ const systemTheme = window.matchMedia('(prefers-color-scheme: dark)');
9
+ const applyTheme = (theme) => {
10
+ const useDark = theme === 'dark' || (theme === 'system' && systemTheme.matches);
11
+ if (useDark) document.documentElement.dataset.theme = 'dark';
12
+ else delete document.documentElement.dataset.theme;
13
+ };
14
+
15
+ picker.value = ['light', 'dark'].includes(preference) ? preference : 'system';
16
+ applyTheme(picker.value);
7
17
  picker.addEventListener('change', () => {
8
- if (picker.value === 'dark') {
9
- document.documentElement.dataset.theme = picker.value;
10
- window.localStorage.setItem('rdbr-theme', picker.value);
11
- } else {
12
- delete document.documentElement.dataset.theme;
18
+ applyTheme(picker.value);
19
+ if (picker.value === 'system') {
13
20
  window.localStorage.removeItem('rdbr-theme');
21
+ } else {
22
+ window.localStorage.setItem('rdbr-theme', picker.value);
14
23
  }
15
24
  });
25
+ systemTheme.addEventListener('change', () => {
26
+ if (picker.value === 'system') applyTheme('system');
27
+ });
16
28
  })();
17
29
 
18
30
  (() => {
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
+ <rect width="32" height="32" fill="#fff"/>
3
+ <g fill="none" stroke="#3f454b" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
4
+ <ellipse cx="16" cy="7" rx="10.5" ry="4"/>
5
+ <path d="M5.5 7v17c0 2.76 4.7 5 10.5 5s10.5-2.24 10.5-5V7"/>
6
+ <path d="M5.5 15.5c0 2.48 4.7 4.5 10.5 4.5s10.5-2.02 10.5-4.5"/>
7
+ </g>
8
+ </svg>
@@ -4,13 +4,18 @@
4
4
  %meta{ charset: 'utf-8' }
5
5
  %meta{ content: 'width=device-width, initial-scale=1', name: 'viewport' }
6
6
  %title RDBr
7
+ %link{ href: versioned_asset_url('/favicon.svg'), rel: 'icon', type: 'image/svg+xml' }
7
8
  :javascript
8
9
  (() => {
9
10
  const storedTheme = window.localStorage.getItem('rdbr-theme');
10
- const theme = storedTheme === 'madhat2r' ? 'dark' : storedTheme;
11
- if (theme === 'dark') {
12
- document.documentElement.dataset.theme = theme;
13
- if (storedTheme !== theme) window.localStorage.setItem('rdbr-theme', theme);
11
+ const preference = storedTheme === 'madhat2r' ? 'dark' :
12
+ storedTheme === 'default' ? 'light' : storedTheme;
13
+ const systemIsDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
14
+ if (preference === 'dark' || (!['light', 'dark'].includes(preference) && systemIsDark)) {
15
+ document.documentElement.dataset.theme = 'dark';
16
+ }
17
+ if (storedTheme && preference !== storedTheme) {
18
+ window.localStorage.setItem('rdbr-theme', preference);
14
19
  }
15
20
  const scrollKey = `rdbr.tableScroll:${window.location.pathname}${window.location.search}`;
16
21
  if (window.sessionStorage.getItem(scrollKey) !== null) {
@@ -52,7 +57,8 @@
52
57
  %label.theme-picker
53
58
  %span Theme
54
59
  %select{ data: { theme_picker: true }, 'aria-label': 'Theme' }
55
- %option{ value: 'default' } Light
60
+ %option{ value: 'system' } System
61
+ %option{ value: 'light' } Light
56
62
  %option{ value: 'dark' } Dark
57
63
  %main
58
64
  != yield
data/lib/rdbr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RDBr
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.1.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdbr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Blake
@@ -193,6 +193,7 @@ files:
193
193
  - README.md
194
194
  - app/public/application.js
195
195
  - app/public/database-diagram.js
196
+ - app/public/favicon.svg
196
197
  - app/public/styles.css
197
198
  - app/views/data.haml
198
199
  - app/views/group.haml