TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A React 19 calendar built on the Temporal API. Time handles dates, time zones, navigation, calendar state, fast event lookups, and saving changes. Your events stay in the shape your app already uses. Week, day, month, year, and agenda views come as shadcn/ui-style source that you copy into your app and own.
Status: release candidate. The packages are on npm as a release candidate for 1.0.0. The API can still change before 1.0.0 if the release candidate turns up problems.
pnpm add @moltenship/calendar react react-dom
You need React 19, a runtime with Temporal (Node.js 26+; a polyfill in browsers without it), and
TypeScript 6+ with "lib": ["ESNext"].
The smallest calendar, with a hand-written view. The Quick start uses the built-in views instead.
import {
createCalendar,
defineCalendarView,
defineEventAdapter,
plainDateInterval,
} from "@moltenship/calendar";
interface Meeting {
id: string;
title: string;
start: Temporal.Instant;
end: Temporal.Instant;
}
const eventAdapter = defineEventAdapter<Meeting>()({
getId: (meeting) => meeting.id,
getTitle: (meeting) => meeting.title,
getInterval: (meeting) => ({ kind: "timed", start: meeting.start, end: meeting.end }),
getResourceIds: () => [],
});
// A minimal view: the meetings on the visible day.
const dayView = defineCalendarView({
name: "day",
strategy: {
getRange: (date) => plainDateInterval(date, date.add({ days: 1 })),
navigate: (date, delta) => date.add({ days: delta }),
getTitle: (range, { locale }) => range.start.toLocaleString(locale, { dateStyle: "full" }),
project: ({ snapshot, instantRange }) => snapshot.queryTimed(instantRange),
},
Renderer: ({ projection }) => (
<ul>
{projection.map((meeting) => (
<li key={meeting.id}>{meeting.title}</li>
))}
</ul>
),
});
const Calendar = createCalendar<Meeting>()({ eventAdapter, views: [dayView] });
export function MeetingCalendar({ meetings }: { meetings: readonly Meeting[] }) {
return (
<Calendar.Root
events={meetings}
defaultAnchorDate={Temporal.PlainDate.from("2026-10-08")}
defaultTimeZone="Europe/Berlin"
locale="en-US"
weekRules={{ firstDay: 1, minimalDays: 4, weekend: [6, 7] }}
>
<Calendar.PreviousTrigger>Previous</Calendar.PreviousTrigger>
<Calendar.Title />
<Calendar.NextTrigger>Next</Calendar.NextTrigger>
<Calendar.ActiveView />
</Calendar.Root>
);
}
Read the docs at time.molten.sh. Good places to start:
The live demo is a Google Calendar-style app built from
the same views. Its source is in apps/demo.
To work on the docs, run vp run dev and edit the MDX in
apps/showcase/content/docs. Start the demo with
vp run demo#dev.
The repository uses the Vite+ toolchain (vp) and Node.js 26.
vp install # install dependencies
vp check # format, lint, and type-check
vp test # run the tests
vp run ready # everything CI runs
vp run ready:full # the release gate
architecture.md is the design the project is building toward.docs/adr records individual design decisions.docs/internal has contributor notes: quality gates, package layout,
benchmarks, and verification records.CHANGELOG.md has 1.0.0-rc.1's.MIT. @moltenship/ics also bundles Unicode CLDR data under the Unicode License v3, so
it's MIT AND Unicode-3.0; see its
THIRD-PARTY-NOTICES.md.