Skip to content

Commit d8a1cbd

Browse files
committed
Tiny improvements
1 parent bdf5f65 commit d8a1cbd

7 files changed

Lines changed: 768 additions & 920 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased] - yyyy-mm-dd
99

10+
## [0.3.2] - 2025-10-28
11+
12+
- Move About button from footer to top-right
13+
- Change "Online" toggle label to "Link". So it basically means people can type any link, for example google maps link instead of typing the address
14+
- Move the "Link" toggle to left, easier to spot and meaningful decision order
15+
1016
## [0.3.1] - 2025-10-14
1117

1218
- Fix some bugs

package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "calf",
33
"private": true,
4-
"version": "0.3.1",
4+
"version": "0.3.2",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",
@@ -36,8 +36,5 @@
3636
"typescript": "~5.9.2",
3737
"typescript-eslint": "^8.44.0",
3838
"vite": "^7.1.5"
39-
},
40-
"resolutions": {
41-
"@internationalized/date": "3.9.0"
4239
}
4340
}

src/AboutModal.tsx

Lines changed: 26 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import {
2-
ArrowTopRightOnSquareIcon,
3-
XMarkIcon,
4-
} from "@heroicons/react/16/solid";
1+
import { ArrowTopRightOnSquareIcon, XMarkIcon } from "@heroicons/react/16/solid";
52
import { Button } from "@heroui/react";
63
import { useMemo } from "react";
74
// import { useCallback } from "react";
@@ -13,16 +10,8 @@ type Props = {
1310
repo?: string;
1411
};
1512

16-
export default function AboutModal({
17-
isOpen,
18-
onClose,
19-
username = "omid",
20-
repo = "calf",
21-
}: Props) {
22-
useMemo(
23-
() => (document.body.style.overflow = isOpen ? "hidden" : "auto"),
24-
[isOpen]
25-
);
13+
export default function AboutModal({ isOpen, onClose, username = "omid", repo = "calf" }: Props) {
14+
useMemo(() => (document.body.style.overflow = isOpen ? "hidden" : "auto"), [isOpen]);
2615

2716
if (!isOpen) return null;
2817

@@ -48,77 +37,50 @@ export default function AboutModal({
4837

4938
<div
5039
className={`relative w-[92vw] max-w-2xl max-h-[90vh] rounded-2xl bg-white p-6 shadow-xl transform transition-all duration-300 flex flex-col overflow-hidden ${
51-
isOpen
52-
? "opacity-100 translate-y-0 scale-100"
53-
: "opacity-0 translate-y-2 scale-95"
40+
isOpen ? "opacity-100 translate-y-0 scale-100" : "opacity-0 translate-y-2 scale-95"
5441
}`}
5542
>
5643
<div className="flex items-start justify-between">
5744
<h2 id="about-title" className="text-xl font-bold">
58-
Calf (Calendar Factory) — About &amp; Disclaimer
45+
Calf (Calendar Factory) — About
5946
</h2>
6047

61-
<Button
62-
className="bg-white min-w-auto"
63-
onPress={onClose}
64-
aria-label="Close"
65-
>
48+
<Button className="bg-white min-w-auto" onPress={onClose} aria-label="Close">
6649
<XMarkIcon className="h-6 w-6 text-gray-600" />
6750
</Button>
6851
</div>
6952

7053
<div className="mt-4 flex-1 overflow-y-auto space-y-4 text-sm text-gray-700 dark:text-gray-300 text-left pr-1">
7154
<p>
72-
<strong>Calf</strong> helps you create a calendar event and share it
73-
with a single link. Anyone with the link can add the event to their
74-
calendar or download an iCal (<code>.ics</code>) file. Everything
75-
runs entirely in your browser — no accounts, no backend.
55+
<strong>Calf</strong> helps you create a calendar event and share it with a single link. Anyone with the
56+
link can add the event to their calendar or download an iCal (<code>.ics</code>) file. Everything runs
57+
entirely in your browser — no accounts, no backend.
7658
</p>
7759

7860
<div>
7961
<h3 className="font-semibold">Links</h3>
8062
<ul className="ml-5 list-disc space-y-1">
8163
<li>
8264
Repository:{" "}
83-
<a
84-
className="text-blue-600 underline"
85-
href={repoUrl}
86-
target="_blank"
87-
rel="noopener noreferrer"
88-
>
65+
<a className="text-blue-600 underline" href={repoUrl} target="_blank" rel="noopener noreferrer">
8966
{repoUrl}
9067
</a>
9168
</li>
9269
<li>
9370
Donate:{" "}
94-
<a
95-
className="text-blue-600 underline"
96-
href={donateUrl}
97-
target="_blank"
98-
rel="noopener noreferrer"
99-
>
71+
<a className="text-blue-600 underline" href={donateUrl} target="_blank" rel="noopener noreferrer">
10072
{donateUrl}
10173
</a>
10274
</li>
10375
<li>
10476
Bugs:{" "}
105-
<a
106-
className="text-blue-600 underline"
107-
href={reportBugUrl}
108-
target="_blank"
109-
rel="noopener noreferrer"
110-
>
77+
<a className="text-blue-600 underline" href={reportBugUrl} target="_blank" rel="noopener noreferrer">
11178
{reportBugUrl}
11279
</a>
11380
</li>
11481
<li>
11582
Changelog:{" "}
116-
<a
117-
className="text-blue-600 underline"
118-
href={changeLogUrl}
119-
target="_blank"
120-
rel="noopener noreferrer"
121-
>
83+
<a className="text-blue-600 underline" href={changeLogUrl} target="_blank" rel="noopener noreferrer">
12284
{changeLogUrl}
12385
</a>
12486
</li>
@@ -128,54 +90,36 @@ export default function AboutModal({
12890
<div>
12991
<h3 className="font-semibold">Privacy</h3>
13092
<ul className="ml-5 list-disc space-y-1">
93+
<li>All event generation happens locally in your browser; the iCal file is created client-side.</li>
13194
<li>
132-
All event generation happens locally in your browser; the iCal
133-
file is created client-side.
134-
</li>
135-
<li>
136-
When searching for places, the app may query a geocoding service
137-
(e.g., OpenStreetMap’s Nominatim) to fetch suggestions.
138-
</li>
139-
<li>
140-
GoatCounter is used as a privacy-friendly visit counter. No
141-
personal data is collected.
142-
</li>
143-
<li>
144-
No cookies or local storage are used. The app does not track or
145-
store any personal information.
146-
</li>
147-
<li>
148-
The source code is open and available for review on GitHub.
95+
When searching for places, the app may query a geocoding service (e.g., OpenStreetMap’s Nominatim) to
96+
fetch suggestions.
14997
</li>
98+
<li>GoatCounter is used as a privacy-friendly visit counter. No personal data is collected.</li>
99+
<li>No cookies or local storage are used. The app does not track or store any personal information.</li>
100+
<li>The source code is open and available for review on GitHub.</li>
150101
</ul>
151102
</div>
152103

153104
<div className="rounded-lg border border-amber-300 bg-amber-50 dark:border-none dark:bg-amber-900 p-3 pb-5">
154-
<h3 className="font-semibold text-amber-900 dark:text-amber-50">
155-
Disclaimer
156-
</h3>
105+
<h3 className="font-semibold text-amber-900 dark:text-amber-50">Disclaimer</h3>
157106
<ul className="ml-5 list-disc space-y-1 text-amber-900 dark:text-amber-50">
158107
<li>
159-
<strong>GitHub may track created links.</strong> Links you open
160-
via GitHub Pages can appear in repository traffic or analytics.
108+
<strong>GitHub may track created links.</strong> Links you open via GitHub Pages can appear in
109+
repository traffic or analytics.
161110
</li>
162111
<li>
163-
<strong>Updates may break older links.</strong> I aim to keep
164-
things backward-compatible, but breaking changes can happen.
112+
<strong>Updates may break older links.</strong> I aim to keep things backward-compatible, but breaking
113+
changes can happen.
165114
</li>
166115
</ul>
167116
</div>
168117

169-
<p className="text-xs text-gray-500">
170-
MIT License. Feedback and contributions are welcome!
171-
</p>
118+
<p className="text-xs text-gray-500">MIT License. Feedback and contributions are welcome!</p>
172119
</div>
173120

174121
<div className="mt-6 flex justify-end gap-2 flex-shrink-0">
175-
<Button
176-
className="rounded-lg border bg-white px-4 py-2 text-gray-800 hover:shadow-sm"
177-
onPress={onClose}
178-
>
122+
<Button className="rounded-lg border bg-white px-4 py-2 text-gray-800 hover:shadow-sm" onPress={onClose}>
179123
Close
180124
</Button>
181125
<a

0 commit comments

Comments
 (0)