From ff6464ffef6a06d0a79a1bb932fe1130604baa2b Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Mon, 14 Apr 2025 17:02:50 -0500 Subject: [PATCH 01/29] Stub out closing soon badge --- app/assets/stylesheets/cards.css | 18 ++++++++++++++++++ app/assets/stylesheets/pins.css | 4 ++++ .../controllers/local_time_controller.js | 14 +++++++++++++- app/views/cards/display/_preview.html.erb | 13 +++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index 6f869df5c..33c9eb29b 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -212,4 +212,22 @@ -2px 2px 0 var(--card-color), 2px 2px 0 var(--card-color); } + + .card__badge { + --size: 48px; + + block-size: var(--size); + border-radius: 50%; + inline-size: var(--size); + + position: absolute; + inset: 50% auto 0 -1ch; + translate: -100% -50%; + + display: grid; + place-content: center; + + background: black; + color: white; + } } diff --git a/app/assets/stylesheets/pins.css b/app/assets/stylesheets/pins.css index e42f2d3e7..848410931 100644 --- a/app/assets/stylesheets/pins.css +++ b/app/assets/stylesheets/pins.css @@ -76,5 +76,9 @@ inset: 0 0 auto auto; position: absolute; } + + .card__badge { + display: none; + } } } diff --git a/app/javascript/controllers/local_time_controller.js b/app/javascript/controllers/local_time_controller.js index 3bc77b769..a36ac305b 100644 --- a/app/javascript/controllers/local_time_controller.js +++ b/app/javascript/controllers/local_time_controller.js @@ -2,7 +2,7 @@ import { Controller } from "@hotwired/stimulus" import { differenceInDays } from "helpers/date_helpers" export default class extends Controller { - static targets = [ "time", "date", "datetime", "shortdate", "ago", "indays", "daysago" ] + static targets = [ "time", "date", "datetime", "shortdate", "ago", "indays", "daysago", "daysuntil" ] #timer @@ -14,6 +14,7 @@ export default class extends Controller { this.agoFormatter = new AgoFormatter() this.daysagoFormatter = new DaysAgoFormatter() this.indaysFormatter = new InDaysFormatter() + this.daysuntilFormatter = new DaysUntilFormatter() } connect() { @@ -60,6 +61,10 @@ export default class extends Controller { this.#formatTime(this.daysagoFormatter, target) } + daysuntilTargetConnected(target) { + this.#formatTime(this.daysuntilFormatter, target) + } + #refreshRelativeTimes() { this.agoTargets.forEach(target => { this.#formatTime(this.agoFormatter, target) @@ -121,6 +126,13 @@ class InDaysFormatter { } } +class DaysUntilFormatter { + format(date) { + const days = differenceInDays(new Date(), date) + return styleableValue(days) + } +} + function styleableValue(value) { return `${value}` } diff --git a/app/views/cards/display/_preview.html.erb b/app/views/cards/display/_preview.html.erb index 7d673308c..419100891 100644 --- a/app/views/cards/display/_preview.html.erb +++ b/app/views/cards/display/_preview.html.erb @@ -22,5 +22,18 @@ <%= render "cards/display/common/background", card: card %> + + <% unless card.closed? %> + <% if card.doing? %> +
+ <%= local_datetime_tag(card.auto_reconsider_at, style: :daysuntil) -%> +
+ <% else %> +
+ <%= local_datetime_tag(card.auto_close_at, style: :daysuntil) -%> +
+ <% end %> + <% end %> + <% end %> <% end %> From ad80aee38eeddad7618a9e0e8c3ec3cced413c87 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Tue, 15 Apr 2025 13:15:29 -0500 Subject: [PATCH 02/29] Stub out working auto close reminder --- app/assets/stylesheets/cards.css | 29 ++++++++++++++----- app/models/card/closeable.rb | 10 +++++++ app/views/cards/display/_preview.html.erb | 13 ++------- .../cards/display/preview/_badge.html.erb | 23 +++++++++++++++ 4 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 app/views/cards/display/preview/_badge.html.erb diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index 33c9eb29b..00c3de056 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -214,20 +214,35 @@ } .card__badge { - --size: 48px; + --size: 5cqi; + background: var(--color-ink); block-size: var(--size); border-radius: 50%; + color: var(--color-ink-reversed); + container-type: inline-size; + font-size: 1.5rem; + font-weight: 500; + inset: 50% auto auto -0.5ch; inline-size: var(--size); - + padding: 0.25cqi; position: absolute; - inset: 50% auto 0 -1ch; translate: -100% -50%; - display: grid; - place-content: center; + span { + display: grid; + inset: 0; + font-size: 45cqi; + font-weight: bold; + place-content: center; + position: absolute; + text-align: center; + } - background: black; - color: white; + svg { + display: block; + letter-spacing: 0.25ch; + text-transform: uppercase; + } } } diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index ce0a63e33..5b7ab98af 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,6 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days + AUTO_CLOSE_REMINDER = 7.days included do has_one :closure, dependent: :destroy @@ -25,6 +26,15 @@ module Card::Closeable last_active_at + AUTO_CLOSE_AFTER if last_active_at end + def auto_close_days_until + return false unless auto_close_at + (auto_close_at.to_date - Date.today).to_i + end + + def auto_close_remind? + auto_close_days_until <= AUTO_CLOSE_REMINDER / 1.day + end + def closed? closure.present? end diff --git a/app/views/cards/display/_preview.html.erb b/app/views/cards/display/_preview.html.erb index 419100891..2dc6b70f1 100644 --- a/app/views/cards/display/_preview.html.erb +++ b/app/views/cards/display/_preview.html.erb @@ -23,17 +23,8 @@ <%= render "cards/display/common/background", card: card %> - <% unless card.closed? %> - <% if card.doing? %> -
- <%= local_datetime_tag(card.auto_reconsider_at, style: :daysuntil) -%> -
- <% else %> -
- <%= local_datetime_tag(card.auto_close_at, style: :daysuntil) -%> -
- <% end %> + <% if card.considering? && card.auto_close_remind? %> + <%= render "cards/display/preview/badge", top: "closes in", days: card.auto_close_days_until, bottom: "days" %> <% end %> - <% end %> <% end %> diff --git a/app/views/cards/display/preview/_badge.html.erb b/app/views/cards/display/preview/_badge.html.erb new file mode 100644 index 000000000..ed58db664 --- /dev/null +++ b/app/views/cards/display/preview/_badge.html.erb @@ -0,0 +1,23 @@ +
+ + + + + <%= top %> + + + + + + <%= days %> + + + + + + + <%= bottom %> + + + +
From eeadc1c494724cba398c17df3e01a3f067f8c5fc Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Tue, 15 Apr 2025 13:22:12 -0500 Subject: [PATCH 03/29] Make it look like a stamp --- app/assets/stylesheets/cards.css | 10 +++++----- app/models/card/closeable.rb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index 00c3de056..c6eede99d 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -216,24 +216,24 @@ .card__badge { --size: 5cqi; - background: var(--color-ink); + border: 1px solid currentColor; block-size: var(--size); border-radius: 50%; - color: var(--color-ink-reversed); + color: var(--color-negative); container-type: inline-size; font-size: 1.5rem; - font-weight: 500; + font-weight: bold; inset: 50% auto auto -0.5ch; inline-size: var(--size); - padding: 0.25cqi; + padding: calc(var(--size) * 0.05); position: absolute; + transform: rotate(-10deg); translate: -100% -50%; span { display: grid; inset: 0; font-size: 45cqi; - font-weight: bold; place-content: center; position: absolute; text-align: center; diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index 5b7ab98af..2f9c69d76 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,7 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days - AUTO_CLOSE_REMINDER = 7.days + AUTO_CLOSE_REMINDER = 22.days included do has_one :closure, dependent: :destroy From adad6dd657b8985bbec059a67cb0ec168776e3fa Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Tue, 15 Apr 2025 13:24:40 -0500 Subject: [PATCH 04/29] Remind 7 days before auto close --- app/models/card/closeable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index 2f9c69d76..5b7ab98af 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,7 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days - AUTO_CLOSE_REMINDER = 22.days + AUTO_CLOSE_REMINDER = 7.days included do has_one :closure, dependent: :destroy From f1dbe1bcafaec898fa49ff112c9630862e6743ba Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Tue, 15 Apr 2025 13:26:41 -0500 Subject: [PATCH 05/29] Better prop names --- app/views/cards/display/_preview.html.erb | 2 +- app/views/cards/display/preview/_badge.html.erb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/cards/display/_preview.html.erb b/app/views/cards/display/_preview.html.erb index 2dc6b70f1..0b7c8ebcf 100644 --- a/app/views/cards/display/_preview.html.erb +++ b/app/views/cards/display/_preview.html.erb @@ -24,7 +24,7 @@ <%= render "cards/display/common/background", card: card %> <% if card.considering? && card.auto_close_remind? %> - <%= render "cards/display/preview/badge", top: "closes in", days: card.auto_close_days_until, bottom: "days" %> + <%= render "cards/display/preview/badge", label: "Closes in", days: card.auto_close_days_until %> <% end %> <% end %> <% end %> diff --git a/app/views/cards/display/preview/_badge.html.erb b/app/views/cards/display/preview/_badge.html.erb index ed58db664..713949227 100644 --- a/app/views/cards/display/preview/_badge.html.erb +++ b/app/views/cards/display/preview/_badge.html.erb @@ -3,7 +3,7 @@ - <%= top %> + <%= label %> @@ -16,7 +16,7 @@ - <%= bottom %> + Days From 7f944b601f1432e54817a3d40d50cbccd11edbc2 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Wed, 16 Apr 2025 09:49:42 -0500 Subject: [PATCH 06/29] Remove unused DaysUntilFormatter --- .../controllers/local_time_controller.js | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/app/javascript/controllers/local_time_controller.js b/app/javascript/controllers/local_time_controller.js index a36ac305b..3bc77b769 100644 --- a/app/javascript/controllers/local_time_controller.js +++ b/app/javascript/controllers/local_time_controller.js @@ -2,7 +2,7 @@ import { Controller } from "@hotwired/stimulus" import { differenceInDays } from "helpers/date_helpers" export default class extends Controller { - static targets = [ "time", "date", "datetime", "shortdate", "ago", "indays", "daysago", "daysuntil" ] + static targets = [ "time", "date", "datetime", "shortdate", "ago", "indays", "daysago" ] #timer @@ -14,7 +14,6 @@ export default class extends Controller { this.agoFormatter = new AgoFormatter() this.daysagoFormatter = new DaysAgoFormatter() this.indaysFormatter = new InDaysFormatter() - this.daysuntilFormatter = new DaysUntilFormatter() } connect() { @@ -61,10 +60,6 @@ export default class extends Controller { this.#formatTime(this.daysagoFormatter, target) } - daysuntilTargetConnected(target) { - this.#formatTime(this.daysuntilFormatter, target) - } - #refreshRelativeTimes() { this.agoTargets.forEach(target => { this.#formatTime(this.agoFormatter, target) @@ -126,13 +121,6 @@ class InDaysFormatter { } } -class DaysUntilFormatter { - format(date) { - const days = differenceInDays(new Date(), date) - return styleableValue(days) - } -} - function styleableValue(value) { return `${value}` } From 6fb69294a3c547bf01f93f7c86853a5b98599ad6 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Wed, 16 Apr 2025 10:14:24 -0500 Subject: [PATCH 07/29] Smaller badge size --- app/assets/stylesheets/cards.css | 11 ++++++----- app/models/card/closeable.rb | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index c6eede99d..3e381f57f 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -214,14 +214,14 @@ } .card__badge { - --size: 5cqi; + --size: 4cqi; - border: 1px solid currentColor; + border: 1.5px solid currentColor; block-size: var(--size); border-radius: 50%; color: var(--color-negative); container-type: inline-size; - font-size: 1.5rem; + font-size: 1.75rem; font-weight: bold; inset: 50% auto auto -0.5ch; inline-size: var(--size); @@ -233,7 +233,8 @@ span { display: grid; inset: 0; - font-size: 45cqi; + font-size: 40cqi; + font-weight: 900; place-content: center; position: absolute; text-align: center; @@ -241,7 +242,7 @@ svg { display: block; - letter-spacing: 0.25ch; + letter-spacing: 0.125ch; text-transform: uppercase; } } diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index 5b7ab98af..7c9f8980e 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,7 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days - AUTO_CLOSE_REMINDER = 7.days + AUTO_CLOSE_REMINDER = 23.days included do has_one :closure, dependent: :destroy From 5ccff34e6b93d093ae98fc1c4f1a01da60a981d4 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Wed, 16 Apr 2025 10:20:16 -0500 Subject: [PATCH 08/29] Add Closes Today styles --- app/assets/stylesheets/cards.css | 6 ++++++ app/models/card/closeable.rb | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index 3e381f57f..f316b1d90 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -246,4 +246,10 @@ text-transform: uppercase; } } + + .card__badge--today { + span { + font-size: 30cqi; + } + } } diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index 7c9f8980e..5b7ab98af 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,7 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days - AUTO_CLOSE_REMINDER = 23.days + AUTO_CLOSE_REMINDER = 7.days included do has_one :closure, dependent: :destroy From 5eccad2659b03265a004f7a4ace0d469b6cf707c Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Wed, 16 Apr 2025 10:23:58 -0500 Subject: [PATCH 09/29] Pluralize "Day" --- app/views/cards/display/preview/_badge.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/cards/display/preview/_badge.html.erb b/app/views/cards/display/preview/_badge.html.erb index 713949227..48d3fe4ce 100644 --- a/app/views/cards/display/preview/_badge.html.erb +++ b/app/views/cards/display/preview/_badge.html.erb @@ -16,7 +16,7 @@ - Days + <%= "Day".pluralize(days) %> From 78941e506822354f965014a4d69ef36bef6f3aec Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Thu, 1 May 2025 09:58:23 +0200 Subject: [PATCH 10/29] Address PR feedback --- app/models/card/closeable.rb | 11 +++++------ app/views/cards/display/_preview.html.erb | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index 5b7ab98af..2fec6ba6f 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,7 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days - AUTO_CLOSE_REMINDER = 7.days + AUTO_CLOSE_REMINDER_BEFORE = 7.days included do has_one :closure, dependent: :destroy @@ -26,13 +26,12 @@ module Card::Closeable last_active_at + AUTO_CLOSE_AFTER if last_active_at end - def auto_close_days_until - return false unless auto_close_at - (auto_close_at.to_date - Date.today).to_i + def days_until_close + (auto_close_at.to_date - Date.current).to_i if auto_close_at end - def auto_close_remind? - auto_close_days_until <= AUTO_CLOSE_REMINDER / 1.day + def closing_soon? + considering? && Time.current >= auto_close_at - AUTO_CLOSE_REMINDER_BEFORE end def closed? diff --git a/app/views/cards/display/_preview.html.erb b/app/views/cards/display/_preview.html.erb index 0b7c8ebcf..cdfe91764 100644 --- a/app/views/cards/display/_preview.html.erb +++ b/app/views/cards/display/_preview.html.erb @@ -23,8 +23,8 @@ <%= render "cards/display/common/background", card: card %> - <% if card.considering? && card.auto_close_remind? %> - <%= render "cards/display/preview/badge", label: "Closes in", days: card.auto_close_days_until %> + <% if card.closing_soon? %> + <%= render "cards/display/preview/badge", label: "Closes in", days: card.days_until_close %> <% end %> <% end %> <% end %> From 6c7de5413729574c55583a6c4c0cdb0311b64860 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Thu, 1 May 2025 10:12:22 +0200 Subject: [PATCH 11/29] Rename 'badge' to 'bubble' --- app/assets/stylesheets/cards.css | 4 ++-- app/assets/stylesheets/pins.css | 2 +- app/models/card/closeable.rb | 2 +- app/views/cards/display/_preview.html.erb | 2 +- .../display/preview/{_badge.html.erb => _bubble.html.erb} | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) rename app/views/cards/display/preview/{_badge.html.erb => _bubble.html.erb} (90%) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index be10a0a52..01d43ca31 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -268,7 +268,7 @@ 2px 2px 0 var(--card-color); } - .card__badge { + .card__bubble { --size: 4cqi; border: 1.5px solid currentColor; @@ -302,7 +302,7 @@ } } - .card__badge--today { + .card__bubble--today { span { font-size: 30cqi; } diff --git a/app/assets/stylesheets/pins.css b/app/assets/stylesheets/pins.css index d14ee1e28..46e50414a 100644 --- a/app/assets/stylesheets/pins.css +++ b/app/assets/stylesheets/pins.css @@ -80,7 +80,7 @@ position: absolute; } - .card__badge { + .card__bubble { display: none; } } diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index 5f69e39bb..9d83ad9c8 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,7 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days - AUTO_CLOSE_REMINDER_BEFORE = 7.days + AUTO_CLOSE_REMINDER_BEFORE = 30.days included do has_one :closure, dependent: :destroy diff --git a/app/views/cards/display/_preview.html.erb b/app/views/cards/display/_preview.html.erb index 6a550c15b..316c20a17 100644 --- a/app/views/cards/display/_preview.html.erb +++ b/app/views/cards/display/_preview.html.erb @@ -26,7 +26,7 @@ <%= render "cards/display/common/background", card: card %> <% if card.closing_soon? %> - <%= render "cards/display/preview/badge", label: "Closes in", days: card.days_until_close %> + <%= render "cards/display/preview/bubble", label: "Closes in", days: card.days_until_close %> <% end %> <% end %> <% end %> diff --git a/app/views/cards/display/preview/_badge.html.erb b/app/views/cards/display/preview/_bubble.html.erb similarity index 90% rename from app/views/cards/display/preview/_badge.html.erb rename to app/views/cards/display/preview/_bubble.html.erb index 48d3fe4ce..1b90ae83c 100644 --- a/app/views/cards/display/preview/_badge.html.erb +++ b/app/views/cards/display/preview/_bubble.html.erb @@ -1,4 +1,4 @@ -
+
@@ -8,7 +8,7 @@ - + <%= days %> From 73c8a25808408e324737366bbcca6447b4378aca Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Thu, 1 May 2025 11:19:52 +0200 Subject: [PATCH 12/29] Bubble CSS --- app/assets/stylesheets/cards.css | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index 01d43ca31..e492a017b 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -269,20 +269,25 @@ } .card__bubble { - --size: 4cqi; + --size: 5cqi; - border: 1.5px solid currentColor; + background: + /* Iridescent color swirl */ + radial-gradient(circle at 60% 40%, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.0) 40%), + radial-gradient(circle at 70% 70%, rgba(255,182,193,0.5) 0%, rgba(173,216,230,0.5) 40%, rgba(144,238,144,0.2) 60%, rgba(255,255,224,0.2) 80%, rgba(255,255,255,0.0) 100%), + radial-gradient(circle at 30% 70%, rgba(255,255,255,0.4) 0%, rgba(255,255,255,0.0) 50%), + radial-gradient(circle at 50% 50%, rgba(176,224,230,0.4) 0%, rgba(255,182,193,0.2) 60%, rgba(255,255,255,0.0) 100%); + box-shadow: 0 0 4px 2px rgba(100,150,255,0.1) inset; block-size: var(--size); - border-radius: 50%; - color: var(--color-negative); + border-radius: 42% 72% 68% 43% / 53% 73% 45% 67%; + padding: 0.5cqi; + /* color: var(--color-negative); */ container-type: inline-size; font-size: 1.75rem; font-weight: bold; - inset: 50% auto auto -0.5ch; inline-size: var(--size); - padding: calc(var(--size) * 0.05); + inset: 50% auto auto -0.5ch; position: absolute; - transform: rotate(-10deg); translate: -100% -50%; span { From e3ed381621f59d15f2eed06fbd166ecbf79f7854 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Thu, 1 May 2025 11:35:50 +0200 Subject: [PATCH 13/29] Variable bubble shapes --- app/assets/stylesheets/cards.css | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index e492a017b..b74e76fba 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -174,7 +174,7 @@ box-shadow: 0 0 0 1px color-mix(in srgb, var(--color-link) 20%, var(--color-canvas)); color: var(--btn-color); font-weight: 700; - + } .card__move-button { @@ -269,19 +269,30 @@ } .card__bubble { + --bubble-shape: 42% 72% 68% 43% / 53% 73% 45% 67%; --size: 5cqi; background: - /* Iridescent color swirl */ - radial-gradient(circle at 60% 40%, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.0) 40%), - radial-gradient(circle at 70% 70%, rgba(255,182,193,0.5) 0%, rgba(173,216,230,0.5) 40%, rgba(144,238,144,0.2) 60%, rgba(255,255,224,0.2) 80%, rgba(255,255,255,0.0) 100%), - radial-gradient(circle at 30% 70%, rgba(255,255,255,0.4) 0%, rgba(255,255,255,0.0) 50%), - radial-gradient(circle at 50% 50%, rgba(176,224,230,0.4) 0%, rgba(255,182,193,0.2) 60%, rgba(255,255,255,0.0) 100%); - box-shadow: 0 0 4px 2px rgba(100,150,255,0.1) inset; + radial-gradient(circle at 60% 40%, + oklch(var(--lch-ink-inverted)/80%) 0%, + oklch(var(--lch-ink-inverted)/0%) 40%), + radial-gradient(circle at 70% 70%, + oklch(var(--lch-red-medium)/40%) 0%, + oklch(var(--lch-purple-medium)/30%) 40%, + oklch(var(--lch-green-medium)/10%) 60%, + oklch(var(--lch-yellow-medium)/10%) 80%, + oklch(var(--lch-ink-inverted)/0%) 100%), + radial-gradient(circle at 30% 70%, + oklch(var(--lch-ink-inverted)/30%) 0%, + oklch(var(--lch-ink-inverted)/0%) 50%), + radial-gradient(circle at 50% 50%, + oklch(var(--lch-blue-medium)/50%) 0%, + oklch(var(--lch-pink-medium)/10%) 60%, + oklch(var(--lch-ink-inverted)/0%) 100%); + box-shadow: 0 0 4px 2px oklch(var(--lch-blue-medium)/0.2) inset; block-size: var(--size); - border-radius: 42% 72% 68% 43% / 53% 73% 45% 67%; + border-radius: var(--bubble-shape); padding: 0.5cqi; - /* color: var(--color-negative); */ container-type: inline-size; font-size: 1.75rem; font-weight: bold; @@ -305,6 +316,9 @@ letter-spacing: 0.125ch; text-transform: uppercase; } + + .card:nth-child(2n+1) & { --bubble-shape: 70% 72% 39% 80% / 74% 73% 64% 51%; } + .card:nth-child(3n+1) & { --bubble-shape: 45% 72% 65% 50% / 41% 73% 44% 72%; } } .card__bubble--today { From 7580b331709dba1780128b21fe12efcb09c7d813 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Tue, 6 May 2025 15:24:11 -0500 Subject: [PATCH 14/29] Subtler bubble styles --- app/assets/stylesheets/animation.css | 9 ++++++ app/assets/stylesheets/cards.css | 48 +++++++++++++--------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/app/assets/stylesheets/animation.css b/app/assets/stylesheets/animation.css index c99081856..656f1ae76 100644 --- a/app/assets/stylesheets/animation.css +++ b/app/assets/stylesheets/animation.css @@ -26,4 +26,13 @@ 50% { transform: translateX(-1rem); } 75% { transform: translateX(1rem); } } + + @keyframes wobble { + 0% { transform: rotate(calc(var(--bubble-rotate) + 30deg)); } + 15% { border-radius: 66% 34% 72% 28% / 39% 63% 37% 61%; } + 25% { border-radius: 55% 47% 62% 40% / 58% 50% 52% 44%; } + 33% { border-radius: 46% 54% 61% 39% / 50% 51% 49% 50%; } + 50% { border-radius: 54% 46% 61% 39% / 57% 49% 51% 43%; } + 75% { border-radius: 53% 45% 60% 38% / 56% 48% 50% 42%; } + } } diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index b74e76fba..97d3b86a5 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -59,7 +59,7 @@ transition: opacity 0.2s ease-in-out; } - @media (hover: hover) { + @media (any-hover: hover) { .card:hover & { img:not([src=""]) { opacity: 1; @@ -269,43 +269,41 @@ } .card__bubble { - --bubble-shape: 42% 72% 68% 43% / 53% 73% 45% 67%; + --bubble-color: radial-gradient(oklch(var(--lch-blue-medium) / 10%) 50%, oklch(var(--lch-blue-medium) / 50%) 100%); + --bubble-shape: 54% 46% 61% 39% / 57% 49% 51% 43%; + --bubble-rotate: 0deg; --size: 5cqi; - background: - radial-gradient(circle at 60% 40%, - oklch(var(--lch-ink-inverted)/80%) 0%, - oklch(var(--lch-ink-inverted)/0%) 40%), - radial-gradient(circle at 70% 70%, - oklch(var(--lch-red-medium)/40%) 0%, - oklch(var(--lch-purple-medium)/30%) 40%, - oklch(var(--lch-green-medium)/10%) 60%, - oklch(var(--lch-yellow-medium)/10%) 80%, - oklch(var(--lch-ink-inverted)/0%) 100%), - radial-gradient(circle at 30% 70%, - oklch(var(--lch-ink-inverted)/30%) 0%, - oklch(var(--lch-ink-inverted)/0%) 50%), - radial-gradient(circle at 50% 50%, - oklch(var(--lch-blue-medium)/50%) 0%, - oklch(var(--lch-pink-medium)/10%) 60%, - oklch(var(--lch-ink-inverted)/0%) 100%); - box-shadow: 0 0 4px 2px oklch(var(--lch-blue-medium)/0.2) inset; block-size: var(--size); - border-radius: var(--bubble-shape); - padding: 0.5cqi; container-type: inline-size; font-size: 1.75rem; font-weight: bold; inline-size: var(--size); inset: 50% auto auto -0.5ch; + padding: 0.5cqi; position: absolute; translate: -100% -50%; + &:before { + background: var(--bubble-color); + border-radius: var(--bubble-shape); + content: ""; + inset: 0; + position: absolute; + transform: rotate(var(--bubble-rotate)); + } + + @media (any-hover: hover) { + &:hover:before { + animation: wobble 1200ms; + } + } + span { display: grid; - inset: 0; font-size: 40cqi; font-weight: 900; + inset: 0; place-content: center; position: absolute; text-align: center; @@ -317,8 +315,8 @@ text-transform: uppercase; } - .card:nth-child(2n+1) & { --bubble-shape: 70% 72% 39% 80% / 74% 73% 64% 51%; } - .card:nth-child(3n+1) & { --bubble-shape: 45% 72% 65% 50% / 41% 73% 44% 72%; } + .card:nth-child(2n+1) & { --bubble-rotate: -90deg; } + .card:nth-child(3n+1) & { --bubble-rotate: 45deg; } } .card__bubble--today { From dd77440b73b62cbf9b4e2d48b24067a80339fd71 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Wed, 7 May 2025 09:43:47 -0500 Subject: [PATCH 15/29] Make the icon square --- app/assets/images/picture-remove.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/images/picture-remove.svg b/app/assets/images/picture-remove.svg index db868e362..ba80174fe 100644 --- a/app/assets/images/picture-remove.svg +++ b/app/assets/images/picture-remove.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 289ca452d8508c30c67b00484d17396687cb660c Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Wed, 7 May 2025 11:15:40 -0500 Subject: [PATCH 16/29] Remind 7 days before, not 30 --- app/models/card/closeable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index 8f69a7098..0f7b88dd6 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -2,7 +2,7 @@ module Card::Closeable extend ActiveSupport::Concern AUTO_CLOSE_AFTER = 30.days - AUTO_CLOSE_REMINDER_BEFORE = 30.days + AUTO_CLOSE_REMINDER_BEFORE = 7.days included do has_one :closure, dependent: :destroy From 8dd5b723a865eab97f77e1317ff0f4eda2e183d2 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 11:39:28 -0500 Subject: [PATCH 17/29] The command is lowercase --- app/javascript/controllers/terminal_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/controllers/terminal_controller.js b/app/javascript/controllers/terminal_controller.js index a4148623c..2b4d7bee2 100644 --- a/app/javascript/controllers/terminal_controller.js +++ b/app/javascript/controllers/terminal_controller.js @@ -55,7 +55,7 @@ export default class extends Controller { async #requestConfirmation(message) { const originalInputValue = this.inputTarget.value this.element.classList.add(this.confirmationClass) - this.inputTarget.value = `${message}? [Y/n] ` + this.inputTarget.value = `${message}? [y/n] ` try { await this.#waitForConfirmation() From 19a7972a467008407768a2e52c10aad38796097e Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 11:43:45 -0500 Subject: [PATCH 18/29] Don't indicate spelling errors --- app/views/commands/_form.html.erb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/commands/_form.html.erb b/app/views/commands/_form.html.erb index 5a82423ad..46d2be019 100644 --- a/app/views/commands/_form.html.erb +++ b/app/views/commands/_form.html.erb @@ -18,7 +18,8 @@ action: "keydown.up->toggle-class#add:prevent keydown.up->navigable-list#selectCurrentOrLast", turbo_permanent: true }, - placeholder: "Press ⌘+K to search or type commands…" %> + placeholder: "Press ⌘+K to search or type commands…", + spellcheck: "false" %> <%= hidden_field_tag "confirmed", nil, data: { terminal_target: "confirmation" } %> <% end %> From 22b842026adf3b00e843bc727df9af4242f62f18 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 11:44:06 -0500 Subject: [PATCH 19/29] Color terminal text on error --- app/assets/stylesheets/terminals.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/terminals.css b/app/assets/stylesheets/terminals.css index 7e82d6792..98fa83dd3 100644 --- a/app/assets/stylesheets/terminals.css +++ b/app/assets/stylesheets/terminals.css @@ -75,7 +75,8 @@ } .terminal--error .terminal__input { - outline: 2px solid var(--color-negative); - outline-offset: 2px; + accent-color: var(--color-negative); + caret-color: var(--color-negative); + color: var(--color-negative); } } From 28659c12950c50ba4acca1931e35ebe1e4f63d43 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 11:52:20 -0500 Subject: [PATCH 20/29] Clear error state when you start editing - It feels wrong to persist the error state while you're fixing the command --- app/javascript/controllers/terminal_controller.js | 4 ++++ app/views/commands/_form.html.erb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/controllers/terminal_controller.js b/app/javascript/controllers/terminal_controller.js index 2b4d7bee2..65aaca9a3 100644 --- a/app/javascript/controllers/terminal_controller.js +++ b/app/javascript/controllers/terminal_controller.js @@ -28,6 +28,10 @@ export default class extends Controller { } } + hideError() { + this.element.classList.remove(this.errorClass) + } + async #handleErrorResponse(response) { const status = response.status const message = await response.text() diff --git a/app/views/commands/_form.html.erb b/app/views/commands/_form.html.erb index 46d2be019..ece1cc8ee 100644 --- a/app/views/commands/_form.html.erb +++ b/app/views/commands/_form.html.erb @@ -15,7 +15,7 @@ class: "terminal__input input fill-transparent unpad", data: { terminal_target: "input", - action: "keydown.up->toggle-class#add:prevent keydown.up->navigable-list#selectCurrentOrLast", + action: "keydown.up->toggle-class#add:prevent keydown.up->navigable-list#selectCurrentOrLast terminal#hideError", turbo_permanent: true }, placeholder: "Press ⌘+K to search or type commands…", From fe48aecaae6d967e44aaa20e460ecc896ed2c8fb Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 12:28:09 -0500 Subject: [PATCH 21/29] Eliminate double-tab behavior --- app/views/commands/_command.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/commands/_command.html.erb b/app/views/commands/_command.html.erb index 9fcecfac9..7f4fda5bb 100644 --- a/app/views/commands/_command.html.erb +++ b/app/views/commands/_command.html.erb @@ -2,7 +2,7 @@ action: "keydown.enter->terminal#restoreCommand:prevent keydown.enter->toggle-class#remove:prevent", navigable_list_target: "item" } do %> <%= button_tag command.title, type: "button", class: "btn btn--plain overflow-ellipsis terminal__command flex-item-grow justify-start", - data: { action: "toggle-class#remove terminal#restoreCommand", line: command.line } %> + data: { action: "toggle-class#remove terminal#restoreCommand", line: command.line }, tabindex: -1 %> <% if command.undoable? %> <%= button_to "Undo", command_undo_path(command), class: "btn btn--plain terminal__button flex-item-justify-end", From 0c6f7566c6bfd4bfaa1fb13ffc5f2ab66107b079 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 12:28:22 -0500 Subject: [PATCH 22/29] Adjust selection color to feel more terminal-y --- app/assets/stylesheets/terminals.css | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/terminals.css b/app/assets/stylesheets/terminals.css index 98fa83dd3..c854106f3 100644 --- a/app/assets/stylesheets/terminals.css +++ b/app/assets/stylesheets/terminals.css @@ -36,17 +36,22 @@ } .terminal__button { + --btn-background: var(--color-terminal-bg); --btn-color: var(--color-terminal-text); - --btn-border-radius: 1em; + --btn-border-radius: 0; --btn-border-color: var(--color-terminal-text); --btn-padding: 0.1em 0.7em; --btn-border-size: 1px; --hover-color: var(--color-terminal-text); - --hover-size: 2px; + --hover-size: 1px; font-family: var(--font-mono); font-size: var(--text-x-small); white-space: nowrap; + + &:where(:not(:active)):focus-visible { + outline: 2px solid var(--color-terminal-text); + } } .terminal__command { @@ -54,6 +59,7 @@ --btn-color: var(--color-terminal-text); font-weight: normal; + transition: unset; } .terminal__menu { @@ -66,10 +72,21 @@ } .terminal__item { + &:where(:not(:active)):focus-visible { + --btn-color: var(--color-terminal-bg); + + background: var(--color-terminal-text); + color: var(--color-terminal-bg); + outline: 2px solid var(--color-terminal-text); + + .terminal__command { + color: var(--color-terminal-bg); + } + } + @media (any-hover: hover) { - &:where(:not(:active):hover), - &:where(:not(:active)):focus-visible { - background: color-mix(in srgb, var(--color-terminal-text) 15%, var(--color-terminal-bg)); + &:where(:not(:active):hover) { + background: color-mix(in srgb, var(--color-terminal-text) 20%, var(--color-terminal-bg)); } } } From f42973618d6a79d90c88d2b338f8841e5d58b8ff Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Wed, 7 May 2025 14:38:59 -0400 Subject: [PATCH 23/29] bin/dev ensures puma runs solid queue ref: https://37s.fizzy.37signals.com/collections/693169850/cards/999009028 --- bin/dev | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/dev b/bin/dev index e58bc97c3..316b6a0af 100755 --- a/bin/dev +++ b/bin/dev @@ -4,4 +4,5 @@ echo "Access with david@37signals.com / secret123456 on http://37signals.fizzy.l echo "Access with david@37signals.com / secret123456 on http://honcho.fizzy.localhost:3006" echo "Access first run on http://first-run.fizzy.localhost:3006" +export SOLID_QUEUE_IN_PUMA=1 exec ./bin/rails server -p 3006 From c2c4def3b4b18fd779ec62dc0d33b43022948a6e Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Wed, 7 May 2025 15:54:29 -0400 Subject: [PATCH 24/29] Ensure that cards with an empty title aren't mysterious in notifs Use something like "Card 55" instead of it being blank or raising an exception. --- app/helpers/notifications_helper.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 3baaf7aab..19ca08745 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -1,9 +1,9 @@ module NotificationsHelper def event_notification_title(event) case event_notification_action(event) - when "comment_created" then "RE: " + event.eventable.card.title - when "card_assigned" then "Assigned to #{event.assignees.pluck(:name).to_sentence}: " + event.eventable.title - else event.eventable.title + when "comment_created" then "RE: #{card_notification_title(event.eventable.card)}" + when "card_assigned" then "Assigned to #{event.assignees.pluck(:name).to_sentence}: #{card_notification_title(event.eventable)}" + else card_notification_title(event.eventable) end end @@ -59,4 +59,8 @@ module NotificationsHelper comment = event.eventable "#{strip_tags(comment.body_html).blank? ? "#{event.creator.name} replied" : "#{event.creator.name}:" } #{strip_tags(comment.body_html).truncate(200)}" end + + def card_notification_title(card) + card.title.presence || "Card #{card.id}" + end end From dd5e45c93d7a34dacae4c0fcdffd8351f64072cf Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 15:09:47 -0500 Subject: [PATCH 25/29] Display card number in notifications and events --- app/views/events/event/_layout.html.erb | 2 +- app/views/notifications/notification/_event.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/events/event/_layout.html.erb b/app/views/events/event/_layout.html.erb index 44e9e526a..be948aa12 100644 --- a/app/views/events/event/_layout.html.erb +++ b/app/views/events/event/_layout.html.erb @@ -24,6 +24,6 @@ <%= yield %> - <%= event.collection.name %> + <%= card.id %> · <%= event.collection.name %>
<% end %> diff --git a/app/views/notifications/notification/_event.html.erb b/app/views/notifications/notification/_event.html.erb index 2dd8d16ee..8768d3d19 100644 --- a/app/views/notifications/notification/_event.html.erb +++ b/app/views/notifications/notification/_event.html.erb @@ -4,4 +4,4 @@
<%= event_notification_body(event) %>
-
<%= notification.source.collection.name %> · <%= local_datetime_tag(notification.created_at, style: :ago) %>
+
<%= event.eventable.id %> · <%= notification.source.collection.name %> · <%= local_datetime_tag(notification.created_at, style: :ago) %>
From d4d6a702f85781cff544bccc45e0a4c309c6263b Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 15:13:10 -0500 Subject: [PATCH 26/29] Remove leading space when avatar is hidden on pinned cards --- app/assets/stylesheets/cards.css | 1 + app/assets/stylesheets/pins.css | 4 ++++ app/views/cards/display/common/_meta.html.erb | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/cards.css b/app/assets/stylesheets/cards.css index a8068226e..bc1f9ad6e 100644 --- a/app/assets/stylesheets/cards.css +++ b/app/assets/stylesheets/cards.css @@ -212,6 +212,7 @@ .card__meta-grid { display: grid; grid-template-columns: auto auto; + margin-inline-start: var(--inline-space); } .card__meta-item { diff --git a/app/assets/stylesheets/pins.css b/app/assets/stylesheets/pins.css index 46e50414a..8b77e95ee 100644 --- a/app/assets/stylesheets/pins.css +++ b/app/assets/stylesheets/pins.css @@ -25,6 +25,10 @@ display: none; } + .card__meta-grid { + margin-inline-start: 0; + } + .card { --block-space: 1em; --block-space-half: 0.5em; diff --git a/app/views/cards/display/common/_meta.html.erb b/app/views/cards/display/common/_meta.html.erb index 12dca7c9e..acec071b1 100644 --- a/app/views/cards/display/common/_meta.html.erb +++ b/app/views/cards/display/common/_meta.html.erb @@ -1,7 +1,7 @@
<%= avatar_tag card.creator %> -
+
Added <%= local_datetime_tag(card.created_at, style: :daysago) %> <% if card.drafted? %> From 7dee9ed9d6e4c82ccb54f831bc6b1ee996d7d29b Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Wed, 7 May 2025 17:13:25 -0400 Subject: [PATCH 27/29] Log the authenticated user to help track down issues reported by individuals in the logs --- app/controllers/concerns/authentication.rb | 1 + config/environments/development.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app/controllers/concerns/authentication.rb b/app/controllers/concerns/authentication.rb index 68e729f02..746d3cda5 100644 --- a/app/controllers/concerns/authentication.rb +++ b/app/controllers/concerns/authentication.rb @@ -59,6 +59,7 @@ module Authentication end def set_current_session(session) + logger.struct " Authorized User##{session.user.id}", authentication: { user: { id: session.user.id } } Current.session = session cookies.signed.permanent[:session_token] = { value: session.signed_id, httponly: true, same_site: :lax } end diff --git a/config/environments/development.rb b/config/environments/development.rb index b929be5c4..74836019d 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -77,4 +77,8 @@ Rails.application.configure do config.active_job.queue_adapter = :solid_queue config.solid_queue.connects_to = { database: { writing: :queue } } + + if Rails.root.join("tmp/structured-logging.txt").exist? + config.structured_logging.logger = ActiveSupport::Logger.new("log/structured-development.log") + end end From d3cad768a1c20b80361bd4d313711472589c464d Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 7 May 2025 16:26:32 -0500 Subject: [PATCH 28/29] Try a fresh activity design --- app/assets/stylesheets/_global.css | 3 --- app/assets/stylesheets/events.css | 24 ++++++++++++++---------- app/views/events/event/_layout.html.erb | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/app/assets/stylesheets/_global.css b/app/assets/stylesheets/_global.css index d6d7712fc..f737200eb 100644 --- a/app/assets/stylesheets/_global.css +++ b/app/assets/stylesheets/_global.css @@ -153,7 +153,6 @@ --color-selected-dark: oklch(var(--lch-blue-light)); --color-highlight: oklch(var(--lch-yellow-lighter)); --color-marker: oklch(var(--lch-red-medium)); - --color-container: oklch(var(--lch-aqua-light)); --color-terminal-bg: oklch(var(--lch-blue-darkest)); --color-terminal-text: oklch(var(--lch-green-medium)); @@ -261,8 +260,6 @@ --lch-pink-lighter: 30% 0.03 346; --lch-pink-lightest: 25% 0.011 348; - --color-container: oklch(var(--lch-aqua-lighter)); - --shadow: 0 0 0 1px oklch(var(--lch-black) / 0.42), 0 .2em 1.6em -0.8em oklch(var(--lch-black) / 0.6), 0 .4em 2.4em -1em oklch(var(--lch-black) / 0.7), diff --git a/app/assets/stylesheets/events.css b/app/assets/stylesheets/events.css index f4f280412..7770a1bd8 100644 --- a/app/assets/stylesheets/events.css +++ b/app/assets/stylesheets/events.css @@ -1,5 +1,8 @@ @layer components { .events { + background-color: var(--color-ink-lighter); + border-block-start: var(--grid-lines) solid var(--color-ink-lighter); + border-inline-start: var(--grid-lines) solid var(--color-ink-lighter); display: grid; gap: 0 var(--grid-lines); grid-template-columns: repeat(3, 1fr); @@ -9,7 +12,7 @@ .events__container { --column-gap: clamp(var(--inline-space), 3cqmin, calc(var(--inline-space) * 3)); - --grid-lines: 0.1rem; + --grid-lines: 1px; margin: auto; max-inline-size: min(105ch, 100%); @@ -24,7 +27,8 @@ } .events__day-header-content { - background-color: var(--color-canvas); + background-color: var(--color-ink-lighter); + border-radius: 0.2em; display: inline-flex; font-size: 0.8em; inset: calc(var(--grid-lines) - 1em) auto -1em; @@ -53,10 +57,10 @@ } .events--none { - background-color: var(--color-container); - border-block-start: var(--grid-lines) solid var(--color-canvas); + background-color: var(--color-canvas); + border-block-start: var(--grid-lines) solid var(--color-ink-lightest); padding-block: 3em; - margin: auto var(--grid-lines) calc(var(--grid-lines) * -1) auto; + margin: auto; } .events__popup { @@ -66,7 +70,7 @@ .event { --column-gap: 0.7ch; --panel-border-color: transparent; - --panel-border-radius: var(--grid-lines); + --panel-border-radius: 0.2em; --panel-padding: 0.6em 1.2em 0.6em 0.6em; --panel-size: auto; @@ -90,7 +94,7 @@ } .event__grid-item { - background-color: var(--color-container); + background-color: var(--color-canvas); block-size: 100%; border-radius: 0; display: flex; @@ -100,7 +104,7 @@ .event__grid-column-title { --z: 3; - background-color: var(--color-container); + background-color: var(--color-canvas); font-size: 0.9em; padding: 1.5em 0 1em; text-transform: uppercase; @@ -123,10 +127,10 @@ .event__wrapper { align-content: end; display: grid; - gap: calc(var(--grid-lines) * 2); + gap: var(--block-space-half); justify-items: center; margin: var(--grid-lines) var(--grid-lines) calc(var(--grid-lines) * 6) var(--grid-lines); - padding: 0 var(--grid-lines); + padding: var(--block-space) var(--inline-space-double); .event { grid-column-start: unset !important; diff --git a/app/views/events/event/_layout.html.erb b/app/views/events/event/_layout.html.erb index be948aa12..067c3c2d6 100644 --- a/app/views/events/event/_layout.html.erb +++ b/app/views/events/event/_layout.html.erb @@ -1,7 +1,7 @@ <%= link_to event.notifiable_target, class: "event event--#{ event.action } panel center center-block flex-inline align-start justify-start gap position-relative", style: "--card-color: #{ card.color }; background-color: color-mix(in srgb, var(--card-color) 10%, var(--color-canvas)); - color: color-mix(in srgb, var(--card-color) 40%, var(--color-ink));", + color: color-mix(in srgb, var(--card-color) 40%, var(--color-ink)); border: 1px solid color-mix(in srgb, var(--card-color) 20%, var(--color-canvas))", data: { related_element_target: "related", related_element_group_value: card.id, action: "mouseover->related-element#highlight mouseout->related-element#unhighlight" } do %> From 4e815fc423057e4c17fa5779e2876fdc2c08d0ed Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Wed, 7 May 2025 16:16:13 -0400 Subject: [PATCH 29/29] Ensure that a "reconsidered" card gets an updated timestamp so that it's not closed by the subsequent Card::AutoCloseAllDueJob ref: https://37s.fizzy.37signals.com/collections/693169850/cards/999009030 --- app/models/card/engageable.rb | 1 + test/models/card/engageable_test.rb | 3 +++ 2 files changed, 4 insertions(+) diff --git a/app/models/card/engageable.rb b/app/models/card/engageable.rb index 6671bc5a1..f59ef2ab3 100644 --- a/app/models/card/engageable.rb +++ b/app/models/card/engageable.rb @@ -49,6 +49,7 @@ module Card::Engageable transaction do reopen engagement&.destroy + touch(:last_active_at) end end end diff --git a/test/models/card/engageable_test.rb b/test/models/card/engageable_test.rb index a0b041689..0db817a40 100644 --- a/test/models/card/engageable_test.rb +++ b/test/models/card/engageable_test.rb @@ -48,6 +48,8 @@ class Card::EngageableTest < ActiveSupport::TestCase end test "auto_reconsider_all_stagnated" do + travel_to Time.current + cards(:logo, :shipping).each(&:engage) cards(:logo).update!(last_active_at: 1.day.ago - Card::Engageable::STAGNATED_AFTER) @@ -59,5 +61,6 @@ class Card::EngageableTest < ActiveSupport::TestCase assert cards(:shipping).reload.doing? assert cards(:logo).reload.considering? + assert_equal Time.current, cards(:logo).last_active_at end end