Repository navigation
expo-kloq: native Expo port of kloq (v2) - #231
Merged
Merged
Conversation
expo-kloq reuses kloq's store, projection, layout, recurrence, RRULE, quick add, reminder and time zone modules; the root entry pulls in the DOM components, so the model needs a path of its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JxeHwHtptoRw4q5YBnkz1G
<KloqCalendar> runs on kloq's own model (imported through src/model.ts, never copied): day, 3-day and week time grids with a multi-zone gutter, month, year, schedule and timeline views; a native page sheet editor (SwiftUI Form: compact date/time pickers, all-day toggle, calendar and repeat menus, a custom RRULE builder, alerts) with the this / following / all dialog; quick add on kloq's parser; calendar and zone settings. iOS uses @expo/ui's SwiftUI components and Liquid Glass (expo-glass-effect); Android implements the same props with Jetpack Compose. MIT, like kloq. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JxeHwHtptoRw4q5YBnkz1G
Works on iOS 27: plugins/with-scene-delegate.js adopts the scene life cycle (Expo's ExpoAppSceneDelegate) that SDK 57's prebuild template lacks. Metro pins React and the native modules' JS to the app so kloq's sources share one React. Seeds are relative to today. maestro/demo.yaml walks every interaction; maestro/screenshots.yaml captures each view. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JxeHwHtptoRw4q5YBnkz1G
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JxeHwHtptoRw4q5YBnkz1G
…d; Bun 1.4.2 lockfile The lockfile had been written by an older Bun (lockfile v1). Pinning the versions the repository already resolves keeps the change additive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JxeHwHtptoRw4q5YBnkz1G
PeerRich
marked this pull request as ready for review
November 1, 2026 21:22
Picking one and saving locked the event: it could not be edited, deleted or moved back. Offer the writable calendars plus the event's own, like kloq's calendarChoices. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A tap ignored the lane, so every event landed on the default calendar, even from the read-only Holidays lane. Pass the lane's calendar through onCreate into the draft, and don't create on read-only lanes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Changing an alert's time dropped its method, and neither form showed it. Keep the method when replacing, and label alerts with kloq's describeReminder, which also names offsets outside the presets properly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"(No title)" was saved as the title and came back in the field on reopen. Store "" like kloq, and show kloq's "Untitled" in the views. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Timeline steps a day at a time, so "Next timeline" said the wrong thing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hour12 defaulted to true, so a 24-hour locale saw "1 PM" in the grid next to "13:00" in the native pickers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"S M T W T F S" read the same for Tuesday and Thursday, and for Saturday and Sunday. The example's Maestro flows now tap the full name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Same label as kloq's event block, including the continuation notes on a cross-midnight event. The example's Maestro flows match the new label. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The date number becomes a button labelled with the date and event count.
The cell itself stays accessible={false}: an accessible container would
hide the event chips inside it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The preview dropped the year on a far date and the next-day note on an overnight event. quickAddPreview gives kloq's own line. The parser's all-day end is inclusive, so add a day like kloq, which matters once the parser returns multi-day ranges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Rocky seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account. You have signed the CLA already but the status is still pending? Let us recheck it. |
Contributor
|
Artifact showing before and after of issues that last 10 commits fixed https://claude.ai/artifact/UjikbYU6PkrH64TF3V6EwD#d29f3487-713e |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Supersedes #229.
packages/expo-kloqis a new React Native port of kloq. It renders a calendar with native controls: SwiftUI on iOS through@expo/ui, with Liquid Glass on iOS 26+ throughexpo-glass-effect, and Jetpack Compose on Android.apps/expo-kloq-exampleis a runnable development build of it that works on iOS 27.Architecture
src/model.tsis the only file that imports kloq. It pulls in kloq's store (InternalStore), the calendar-source registry, projection, the month, year and agenda layouts, overlap, recurrence expansion,editOccurrence/deleteOccurrence/applyPlan, RRULE presets, the quick-add parser, reminders, time zones and the timeline window. kloq's root entry imports its DOM components, so kloq gets one new export,"./lib/*". Nothing inpackages/kloq/srcchanged.use-kloq.tsis the controller. It holds the store, the registered calendars, the current view and anchor date, and the save and delete paths. When a repeating event is saved or deleted, it asks an injected "scope asker" which occurrences to change, then applies kloq's recurrence plan.views/) are plain React Native views drawn over kloq's layout:TimeGridcovers day, 3 days and week. It has an all-day lane, a now line and a gutter that shows several time zones. It opens scrolled to 8 AM, has 7 equal columns, and shows a single truncated line for narrow overlapping blocks.MonthViewhas 6 rows of 7 equal columns, with one-line chips and "+N more".AgendaView(shown as "Schedule") groups events by day and shows the title and time on each row.YearViewshows 12 mini-months, shaded by how busy each day is. Every day can be tapped, and the view opens on the current month.TimelineViewhas one lane per visible calendar, with the day's hours running across.src/native/*.ios.tsxand*.android.tsx. Both platforms implement the same props, defined innative/types.ts.@expo/ui)@expo/ui)Buttons (previous, Today, next) in aGlassEffectContainer, plus aMenuholding Quick add, a ViewPicker(3 days, Timeline and the rest), "Calendars & time zones" and ResetOutlinedButtons +DropdownMenuPickerSingleChoiceSegmentedButtonRowexpo-glass-effectGlassContainer+GlassView(New event, Quick add)ModalwithpageSheet) whose actions stay pinned above a SwiftUIForm:TextFields, an all-dayToggle, compactDatePickers (calendar and wheel popovers), menuPickers for Repeat, Calendar and Alerts, and a custom-repeat builder (segmented frequency,Stepper, weekday button toggles, end date or count)TextField,Switch,DatePickerDialog/TimePickerDialog, dropdownsConfirmationDialog, shown as a popover pointing at Save (this event / this and following / all; only "this" and "all" on the first occurrence)AlertDialogTextFieldwith a live preview of what kloq's parser understoodTextFieldFormofToggles (calendar visibility, extra gutter zones, 24-hour clock)SwitchrowsFixes for the bugs found in #229
plugins/with-scene-delegate.jsmakes the AppDelegate anExpoReactNativeFactoryProviderand pointsUIApplicationSceneManifestat Expo's ownExpoAppSceneDelegate. No hand edits toios/.@expo/uiview sits inside a sizedHost. The event sheet'sFormfills the sheet and scrolls, and Save stays in the pinned header.How to run
The example needs a development build; Expo Go won't work because
@expo/uiandexpo-glass-effectare native modules.maestro/demo.yamlwalks through every interaction andmaestro/screenshots.yamlcaptures each view. Run both against a Release build (bunx expo run:ios --configuration Release), because a debug build's dev-client gear button covers the sheet's Save button.Verification
biome ci .passes, andtscpasses forexpo-kloq, the example andkloq.Decisions and known gaps
expo-kloqis MIT with its own LICENSE, like kloq. AGENTS.md now lists it.🤖 Generated with Claude Code
https://claude.ai/code/session_01JxeHwHtptoRw4q5YBnkz1G
Need help on this PR? Tag
@codesmith-botwith what you need.