Skip to content

Commit b275c69

Browse files
committed
web: Improve app title readability.
1 parent 82ecd41 commit b275c69

File tree

5 files changed

+42
-5
lines changed

5 files changed

+42
-5
lines changed

web/src/elements/AppIcon.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
font-size: var(--icon-font-size, var(--icon-height));
3939
color: var(--ak-global--Color--100);
4040
padding: var(--icon-border);
41+
height: var(--icon-height);
4142
max-height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border));
4243
line-height: 1;
4344
filter: drop-shadow(-0.5px 0px 0px var(--app-icon-shadow-blend-color));

web/src/user/LibraryApplication/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export interface AKLibraryAppProps extends HTMLAttributes<HTMLDivElement> {
2828
application?: Application;
2929
editURL?: string | URL | null;
3030
background?: string | null;
31+
titleWidth?: number;
3132
appIndex: number;
3233
groupIndex: number;
3334
targetRef?: RefOrCallback | null;
@@ -37,6 +38,7 @@ export const AKLibraryApp: LitFC<AKLibraryAppProps> = ({
3738
application,
3839
editURL,
3940
background,
41+
titleWidth,
4042
appIndex,
4143
groupIndex,
4244
className = "",
@@ -83,7 +85,10 @@ export const AKLibraryApp: LitFC<AKLibraryAppProps> = ({
8385
part="card-wrapper"
8486
data-application-name=${ifPresent(dataID)}
8587
aria-describedby=${descriptionID}
86-
style=${styleMap({ background: background || null })}
88+
style=${styleMap({
89+
"background": background || null,
90+
"--ak-card-title-width": titleWidth ? `${titleWidth}px` : null,
91+
})}
8792
${spread(props)}
8893
>
8994
<div part="card" class="pf-c-card pf-m-hoverable pf-m-compact ${classMap(classes)}">

web/src/user/LibraryPage/ApplicationList.css

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
--app-card-min-width: 6.5rem;
66
--app-group-header-min-height: calc(var(--app-card-min-width) / 4);
77
--app-icon-offset: 1rem;
8-
--app-card-row-coefficient: 3.5;
8+
--app-card-row-coefficient: 2.5;
9+
--app-card-font-size-minimum: var(--pf-global--FontSize--md);
10+
--app-card-font-size-maximum: var(--pf-global--FontSize--md);
11+
--app-card-line-clamp: 3;
912

1013
@media (min-width: 390px) {
14+
--app-card-row-coefficient: 3.5;
1115
--app-card-aspect-ratio: 1;
1216
--app-group-template-columns: repeat(auto-fill, var(--app-card-min-width));
17+
--app-card-font-size-minimum: 0.6rem;
1318
}
1419

1520
@media (min-width: 409px) {
@@ -19,6 +24,8 @@
1924
@media (min-width: 768px) {
2025
--app-icon-offset: 0.5rem;
2126
--app-card-min-width: 10rem;
27+
--app-card-font-size-minimum: 0.9rem;
28+
--app-card-line-clamp: 3;
2229
}
2330
}
2431

@@ -76,6 +83,15 @@
7683
/* #region Title */
7784

7885
[part="card-title"] {
86+
--font-size-adjustment: calc(
87+
(var(--app-card-min-width) / var(--ak-card-title-width, var(--app-card-min-width)))
88+
);
89+
--pf-c-card__title--FontSize: clamp(
90+
var(--app-card-font-size-minimum),
91+
calc(1rem * var(--font-size-adjustment, 1)),
92+
var(--app-card-font-size-maximum)
93+
);
94+
7995
padding: 0 !important;
8096
z-index: 1;
8197
text-stroke-width: 0.15em;
@@ -93,16 +109,16 @@
93109

94110
.clamp-wrapper {
95111
--clamp-padding: calc(0.1em * var(--app-card-row-coefficient));
96-
97112
display: box;
98113
display: -webkit-box;
99-
line-clamp: 2;
100-
-webkit-line-clamp: 2;
114+
line-clamp: var(--app-card-line-clamp);
115+
-webkit-line-clamp: var(--app-card-line-clamp);
101116
box-orient: vertical;
102117
-webkit-box-orient: vertical;
103118
overflow: hidden;
104119
text-align: center;
105120
text-wrap: balance;
121+
word-break: break-word;
106122
line-height: 1.2;
107123
padding-block: var(--clamp-padding);
108124
max-height: calc((var(--pf-global--LineHeight--md) * 2rem) - (var(--clamp-padding) / 2));

web/src/user/LibraryPage/ApplicationList.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const LayoutColumnCount = {
3030
} as const satisfies Record<LayoutType, number>;
3131

3232
export interface AKLibraryApplicationListProps extends HTMLAttributes<HTMLDivElement> {
33+
measurements?: WeakMap<Application, number>;
3334
groupedApps: AppGroupEntry[];
3435
layout: LayoutType;
3536
background?: string | null;
@@ -46,6 +47,7 @@ export const AKLibraryApplicationList: LitFC<AKLibraryApplicationListProps> = ({
4647
background,
4748
selectedApp,
4849
targetRef,
50+
measurements,
4951
...props
5052
}) => {
5153
const columnCount = LayoutColumnCount[layout] ?? 1;
@@ -84,6 +86,7 @@ export const AKLibraryApplicationList: LitFC<AKLibraryApplicationListProps> = ({
8486
apps,
8587
(application) => application.pk,
8688
(application, appIndex) => {
89+
const titleWidth = measurements?.get(application);
8790
const selected = selectedApp === application;
8891
8992
const editURL = canEdit
@@ -96,6 +99,7 @@ export const AKLibraryApplicationList: LitFC<AKLibraryApplicationListProps> = ({
9699
groupIndex,
97100
background,
98101
editURL,
102+
titleWidth,
99103
"targetRef": selected ? targetRef : null,
100104
"aria-selected": selected,
101105
});

web/src/user/LibraryPage/ak-library-impl.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { AKLibraryApplicationList } from "./ApplicationList.js";
88
import { appHasLaunchUrl } from "./LibraryPageImpl.utils.js";
99
import type { PageUIConfig } from "./types.js";
1010

11+
import { TextMeasurer } from "#common/text/measurement";
1112
import { groupBy } from "#common/utils";
1213

1314
import { AKSkipToContent } from "#elements/a11y/ak-skip-to-content";
@@ -82,6 +83,9 @@ export class LibraryPage extends AKElement {
8283
@property({ type: Boolean })
8384
public admin = false;
8485

86+
#textMeasurer = new TextMeasurer();
87+
88+
#titleMeasurements = new WeakMap<Application, number>();
8589
#applications: Application[] = [];
8690

8791
/**
@@ -98,6 +102,12 @@ export class LibraryPage extends AKElement {
98102
this.#applications = value;
99103

100104
this.fuse.setCollection(this.searchEnabled ? this.#applications : []);
105+
106+
for (const app of this.#applications) {
107+
const metrics = this.#textMeasurer.measure(app.name);
108+
const titleWidth = Math.ceil(metrics.width);
109+
this.#titleMeasurements.set(app, titleWidth);
110+
}
101111
}
102112

103113
/**
@@ -296,6 +306,7 @@ export class LibraryPage extends AKElement {
296306
background,
297307
selectedApp,
298308
groupedApps,
309+
measurements: this.#titleMeasurements,
299310
targetRef: this.targetRef,
300311
});
301312
}

0 commit comments

Comments
 (0)