Skip to content

Commit fefb288

Browse files
committed
Merge branch 'main' into mobile/prepare-webviews-2
* main: (26 commits) Add a new Pins section to docs/API.md covering pin/unpin and the pinned cards list response. Align board name start so it doesn't get too big Clean up card/events header layout Sync email to Stripe when user changes email address (#2432) Fix IDOR in webhook activation endpoint (#2431) Add card reactions to API docs and reactions_url to card JSON (#2427) Remove unnecessary claude plan Allow boosts on cards (#2411) Revert "Fix notification click URL by using correct data property" Add migration to remove draft cards from search index Guard search indexing with searchable? check Forbid comments on draft cards prefactor: update search to use published cards Fix notification click URL by using correct data property Wait for service worker to be active before subscribing Fix stuck state when permission granted but no subscription Extract Card::Commentable Include arm64 build in Docker workflow Remove unnecessary `await` in push handler Correctly initialise WebPush connection (#2417) ...
2 parents 70fc2a8 + ec1b8f2 commit fefb288

File tree

92 files changed

+1252
-229
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+1252
-229
lines changed

.github/workflows/publish-image.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ jobs:
3434
- runner: ubuntu-latest
3535
platform: linux/amd64
3636
arch: amd64
37+
- runner: ubuntu-24.04-arm
38+
platform: linux/arm64
39+
arch: arm64
3740
env:
3841
REGISTRY: ghcr.io
3942
IMAGE_NAME: ${{ github.repository }}
@@ -170,11 +173,13 @@ jobs:
170173
docker buildx imagetools create \
171174
--tag "$tag" \
172175
--annotation "index:org.opencontainers.image.description=${IMAGE_DESCRIPTION}" \
173-
"${src_tag}-amd64"
176+
"${src_tag}-amd64" \
177+
"${src_tag}-arm64"
174178
else
175179
docker buildx imagetools create \
176180
--tag "$tag" \
177-
"${src_tag}-amd64"
181+
"${src_tag}-amd64" \
182+
"${src_tag}-arm64"
178183
fi
179184
done <<< "$tags"
180185

app/assets/images/person.svg

Lines changed: 1 addition & 1 deletion
Loading

app/assets/stylesheets/card-columns.css

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -536,16 +536,33 @@
536536
/* Set lower limit for font size */
537537
font-size: clamp(0.6rem, 0.85cqi, 100px);
538538

539+
.card__counts {
540+
--gap: 0.5ch;
541+
542+
align-items: flex-end;
543+
display: flex;
544+
flex-shrink: 0;
545+
gap: calc(2 * var(--gap));
546+
margin-inline: auto calc(var(--card-padding-inline) * -0.5);
547+
padding-inline-start: var(--gap);
548+
}
549+
550+
.card__boosts,
539551
.card__comments {
540-
--column-gap: 0.8ch;
552+
--icon-size: 1.6em;
541553

554+
align-items: center;
542555
display: flex;
543-
margin-block-end: calc(var(--block-space) * -1.7);
544-
margin-inline-end: calc(var(--card-padding-inline) * -0.5);
556+
flex-shrink: 0;
557+
font-weight: 600;
558+
gap: var(--gap);
545559

546-
.icon {
547-
--icon-size: 1.6em;
560+
img {
561+
block-size: var(--icon-size);
562+
inline-size: var(--icon-size);
563+
}
548564

565+
.icon--comment {
549566
color: var(--card-color);
550567
}
551568
}
@@ -584,11 +601,16 @@
584601
.local-time-value {
585602
font-weight: inherit;
586603
}
604+
605+
@media (max-width: 639px) {
606+
inline-size: auto;
607+
}
587608
}
588609

589610
&:has(.card__background img:not([src=""])) {
590611
.card__content,
591612
.card__meta,
613+
.card__boosts,
592614
.card__comments,
593615
.card__column-name:not(.card__column-name--current) {
594616
opacity: 0;
@@ -599,6 +621,7 @@
599621
&:hover {
600622
.card__content,
601623
.card__footer,
624+
.card__boosts,
602625
.card__comments,
603626
.card__column-name:not(.card__column-name--current) {
604627
opacity: 1;

app/assets/stylesheets/card-perma.css

Lines changed: 89 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,23 @@
3434
}
3535
}
3636

37+
@media (max-width: 799px) {
38+
--half-btn-height: 1.25rem;
39+
--padding-inline: 1.5ch;
40+
41+
column-gap: 0;
42+
grid-template-areas:
43+
"notch-top notch-top notch-top"
44+
"card card card"
45+
"actions-left notch-bottom actions-right"
46+
"closure-message closure-message closure-message";
47+
grid-template-columns: 1fr auto 1fr;
48+
inline-size: calc(100% + 2 * var(--padding-inline));
49+
margin-inline: calc(-1 * var(--padding-inline));
50+
max-inline-size: none;
51+
position: relative;
52+
}
53+
3754
.card {
3855
--card-aspect-ratio: 2 / 0.95;
3956
--lexxy-bg-color: var(--card-bg-color);
@@ -47,6 +64,8 @@
4764
}
4865

4966
.card__body {
67+
position: relative;
68+
5069
@media (max-width: 639px) {
5170
flex-direction: column;
5271
padding-block-end: calc(var(--card-padding-block) * 1.5);
@@ -86,6 +105,11 @@
86105
}
87106
}
88107

108+
.card__meta {
109+
grid-area: meta;
110+
margin-inline-end: auto;
111+
}
112+
89113
.card__stages {
90114
max-inline-size: 32ch;
91115

@@ -119,6 +143,71 @@
119143
}
120144
}
121145

146+
.card__footer {
147+
--btn-size: 2.5rem;
148+
149+
display: flex;
150+
gap: 0.5ch;
151+
inline-size: 100%;
152+
text-align: start;
153+
154+
/* Switch to grid layout so that the bg zoom button can stay next to the
155+
* meta element, and the reactions can sit below */
156+
&:has(.reaction) {
157+
display: grid;
158+
grid-template-columns: 1fr auto;
159+
grid-template-areas:
160+
"meta bg-zoom"
161+
"reactions reactions";
162+
}
163+
164+
@media (max-width: 639px) {
165+
font-size: var(--text-x-small);
166+
}
167+
}
168+
169+
.reactions {
170+
--reaction-size: var(--btn-size);
171+
172+
align-self: flex-end;
173+
display: flex;
174+
gap: 0.5ch;
175+
grid-area: reactions;
176+
margin-inline-start: auto;
177+
178+
&:has(.reaction) {
179+
--padding: calc(var(--card-padding-block) / 2);
180+
--reaction-size: 1.6875rem;
181+
182+
margin-block: var(--padding) calc(-1 * var(--padding));
183+
padding-block-start: var(--padding);
184+
position: relative;
185+
186+
&:before {
187+
border-block-start: 1px dashed color-mix(in srgb, transparent, var(--card-color) 33%);
188+
content: "";
189+
inset: 0 calc(-1 * var(--card-padding-inline)) auto;
190+
position: absolute;
191+
}
192+
}
193+
194+
&:not(:has(.reaction)) {
195+
position: static;
196+
197+
.reactions__trigger {
198+
--btn-border-color: var(--color-ink-light);
199+
}
200+
}
201+
}
202+
203+
.reaction__popup.popup {
204+
inline-size: max-content;
205+
}
206+
207+
.card__zoom-bg-btn {
208+
grid-area: bg-zoom;
209+
}
210+
122211
.bubble {
123212
--bubble-number-max: 42px;
124213
--bubble-size: 6rem;
@@ -132,23 +221,6 @@
132221
inset: calc(var(--bubble-size) / 1.5) 0 auto auto;
133222
}
134223
}
135-
136-
@media (max-width: 799px) {
137-
--half-btn-height: 1.5rem;
138-
--padding-inline: 1.5ch;
139-
140-
column-gap: 0;
141-
grid-template-areas:
142-
"notch-top notch-top notch-top"
143-
"card card card"
144-
"actions-left notch-bottom actions-right"
145-
"closure-message closure-message closure-message";
146-
grid-template-columns: 1fr auto 1fr;
147-
inline-size: calc(100% + 2 * var(--padding-inline));
148-
margin-inline: calc(-1 * var(--padding-inline));
149-
max-inline-size: none;
150-
position: relative;
151-
}
152224
}
153225

154226
/* Child items

app/assets/stylesheets/cards.css

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
}
6363

6464
.card__board {
65+
align-items: center;
66+
align-self: start;
6567
background-color: var(--card-color);
6668
border-radius: var(--border-radius) 0 var(--border-radius) 0;
6769
color: var(--color-ink-inverted);
@@ -252,9 +254,10 @@
252254
padding-block: var(--block-space-half);
253255
}
254256

255-
/* Meta
257+
/* Footer
256258
/* ------------------------------------------------------------------------ */
257259

260+
/* Card metadata */
258261
.card__meta {
259262
--meta-spacer-block: 0.5ch;
260263
--meta-spacer-inline: 0.75ch;
@@ -376,11 +379,12 @@
376379
display: flex;
377380
flex-direction: column;
378381
font-weight: bold;
379-
inset: auto 1ch 1ch auto;
382+
inset: auto 0 -1lh auto;
380383
justify-content: center;
381384
max-inline-size: 25ch;
382385
min-inline-size: 16ch;
383386
padding: 1ch;
387+
pointer-events: none;
384388
position: absolute;
385389
rotate: 5deg;
386390
transform-origin: top right;

app/assets/stylesheets/comments.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@
8080
display: none !important;
8181
}
8282
}
83+
84+
.reactions {
85+
margin-block-start: var(--block-space-half);
86+
margin-inline: calc(var(--column-gap) / -1);
87+
}
8388
}
8489

8590
.comment__author {

app/assets/stylesheets/events.css

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@
291291

292292
.event {
293293
--column-gap: 0.7ch;
294+
--event-padding: 0.6em;
294295

295296
background-color: color-mix(in srgb, var(--card-color) 10%, var(--color-canvas));
296297
border-radius: 0.2em;
@@ -300,7 +301,7 @@
300301
max-inline-size: 100%;
301302
min-inline-size: 0;
302303
overflow: clip;
303-
padding: 0.6em;
304+
padding: var(--event-padding);
304305
position: relative;
305306
z-index: 0;
306307

@@ -325,12 +326,15 @@
325326
z-index: 0;
326327
}
327328

329+
.card__header {
330+
inline-size: 100%;
331+
margin-block-start: calc(-1 * var(--event-padding));
332+
}
333+
328334
.card__board {
329335
background-color: transparent;
330336
color: color-mix(in srgb, var(--card-color) 40%, var(--color-ink));
331337
font-size: 0.7em;
332-
padding: 0;
333-
translate: 0 -0.3em;
334338
}
335339

336340
.card__board-name {
@@ -377,16 +381,11 @@
377381
}
378382

379383
.event__icon {
384+
color: var(--card-color);
380385
display: grid;
381-
margin: -0.3em -0.3em auto auto;
386+
margin-inline-start: auto;
382387
place-content: center;
383-
384-
.icon {
385-
background-color: var(--card-color);
386-
block-size: 1em;
387-
inline-size: 1em;
388-
grid-area: 1 / 1;
389-
}
388+
translate: calc(var(--event-padding) / 2);
390389
}
391390

392391
.event__timestamp {

app/assets/stylesheets/reactions.css

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
flex-wrap: wrap;
1111
gap: var(--inline-space-half);
1212
inline-size: 100%;
13-
margin-block-start: var(--block-space-half);
14-
margin-inline: calc(var(--column-gap) / -1);
1513

1614
&:has([open]) {
1715
z-index: var(--z-popup);
@@ -34,11 +32,8 @@
3432

3533
.reactions__trigger {
3634
--btn-border-color: var(--color-ink-lightest);
37-
background-color: var(--color-ink-lightest);
3835

39-
&:not(:hover) {
40-
opacity: 0.66;
41-
}
36+
background-color: var(--color-ink-lightest);
4237
}
4338
}
4439
}

app/assets/stylesheets/trays.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,7 @@
440440
.card__meta-text:not(.card__meta-text--updated),
441441
.card__stages,
442442
.card__steps,
443+
.card__boosts,
443444
.card__comments,
444445
.card__closed {
445446
display: none;

0 commit comments

Comments
 (0)