diff --git a/README.md b/README.md index 0597b04..76c1b04 100644 --- a/README.md +++ b/README.md @@ -19,11 +19,11 @@ Extract dates, times, ranges and recurrence periods from reminder text, without ## See it in action -Type a reminder, review the extracted title and time, then confirm. Real screenshots of the Android Compose demo on API 35: +Type a phrase, review the extracted title and time, then add the reminder. A short recording of the Android Compose demo: -| Parsed reminder | Edited and saved | Ambiguous time: manual review | -| --- | --- | --- | -| ![Natural-language reminder parsed as Buy milk at 19:00](website/assets/reminder-preview.png) | ![Confirmed reminder in the session-only list](website/assets/reminder-saved.png) | ![Ambiguous time requires clarification before saving](website/assets/reminder-needs-review.png) | +![Typing Buy milk tomorrow at 7pm, reviewing Buy milk for tomorrow at 19:00, and confirming it in the reminder list](website/assets/reminder-demo.gif) + +The demo keeps reminders for the current session; it does not send notifications. ## Installation @@ -172,6 +172,12 @@ A range end with no date inherits the start's calendar date. An earlier end cloc The checked-in `app` module contains an interactive Compose reminder prototype. Run `./gradlew :app:installDebug` with an Android device or emulator, then open **DateParser**. Enter `Buy milk tomorrow at 7pm`, preview the extracted title and date, correct either field using the title editor/date/time pickers, and explicitly add the reminder to a session-only list. Tap an English or Russian example to try it immediately. Editing the input clears the previous preview, so it must be reviewed again. No notifications, account, or database are involved. +Real screenshots on Android API 35: + +| Parsed reminder | Edited and saved | Ambiguous time: manual review | +| --- | --- | --- | +| ![Natural-language reminder parsed as Buy milk at 19:00](website/assets/reminder-preview.png) | ![Confirmed reminder in the session-only list](website/assets/reminder-saved.png) | ![Ambiguous time requires clarification before saving](website/assets/reminder-needs-review.png) | + For ambiguous wording such as `Remind me tomorow at 7`, `Buy milk tomorrow 7, please`, or an invalid bare hour such as `tomorrow at 25`, the library rejects the unresolved time instead of quietly scheduling at the reference hour. Supply `7am`, `7pm`, or `19:00`, or select a date and time manually in the demo. A date-only expression such as `tomorrow` still inherits the reference time by design. The preview is always for review; a rule score is not a probability. The Android screen compiles the **same** `integration/consumer/src/commonMain/kotlin/ReminderDraft.kt` source as the standalone KMP consumer. UI edits and the in-memory list remain Android-only. A parsed range is not silently shortened to a single instant; the screen asks for a single time or manual selection. Manually chosen local times are validated for DST gaps and overlaps before saving. diff --git a/README.ru.md b/README.ru.md index 3c711b8..db0fb3f 100644 --- a/README.ru.md +++ b/README.ru.md @@ -19,11 +19,11 @@ ## Как это выглядит -Введи напоминание, проверь извлечённое название и время, затем подтверди. Реальные скриншоты Android Compose demo на API 35: +Введи фразу, проверь извлечённое название и время, затем добавь напоминание. Короткая запись работы Android Compose demo: -| Распознанное напоминание | Исправлено и сохранено | Неоднозначное время | -| --- | --- | --- | -| ![Фраза распознана как Buy milk, 19:00](website/assets/reminder-preview.png) | ![Подтверждённое напоминание в списке на время работы приложения](website/assets/reminder-saved.png) | ![Неоднозначное время нужно уточнить перед сохранением](website/assets/reminder-needs-review.png) | +![Ввод Buy milk tomorrow at 7pm, проверка Buy milk на завтра в 19:00 и подтверждение в списке напоминаний](website/assets/reminder-demo.gif) + +Демо хранит напоминания на время работы приложения и не отправляет уведомления. ## Подключение @@ -166,6 +166,12 @@ python3 scripts/generate_rules.py --check В модуле `app` есть рабочий Compose-пример: поле для фразы, предварительный результат, редактирование названия и даты/времени, подтверждение и список напоминаний на время работы приложения. Для запуска: `./gradlew :app:installDebug` и открыть **DateParser** на устройстве или эмуляторе. Можно сразу нажать на английский или русский пример. Изменение исходной фразы закрывает предыдущий предпросмотр: новый результат нужно проверить заново. Уведомлений, БД и авторизации нет. +Реальные скриншоты на Android API 35: + +| Распознанное напоминание | Исправлено и сохранено | Неоднозначное время | +| --- | --- | --- | +| ![Фраза распознана как Buy milk, 19:00](website/assets/reminder-preview.png) | ![Подтверждённое напоминание в списке на время работы приложения](website/assets/reminder-saved.png) | ![Неоднозначное время нужно уточнить перед сохранением](website/assets/reminder-needs-review.png) | + Для `Buy milk tomorrow at 7pm` показываются название `Buy milk` и дата со временем. Фразы `Remind me tomorow at 7`, `Buy milk tomorrow 7, please` и некорректный час `tomorrow at 25` теперь отклоняются: одиночные числа без точного формата времени не должны приводить к тихому наследованию часов reference. Уточните `7am`, `7pm` или `19:00`, либо выберите дату и время вручную. Одна дата `tomorrow` по-прежнему наследует время reference. Не сохраняйте результат без подтверждения пользователем. Android-экран использует **тот же** `integration/consumer/src/commonMain/kotlin/ReminderDraft.kt`, что и независимый KMP consumer. UI и список в памяти остаются Android-специфичными. Диапазон времени не сокращается до одной даты молча: экран просит ввести одно время или выбрать его вручную. При ручном выборе проверяются несуществующие и двоякие локальные времена на переходах DST. diff --git a/website/assets/reminder-demo.gif b/website/assets/reminder-demo.gif new file mode 100644 index 0000000..a7f877d Binary files /dev/null and b/website/assets/reminder-demo.gif differ diff --git a/website/en/index.md b/website/en/index.md index 4070835..94d4b6b 100644 --- a/website/en/index.md +++ b/website/en/index.md @@ -24,11 +24,11 @@ Extract dates, times, ranges and recurrence periods from reminder text, without ## See it in action -Type a reminder, review the extracted title and time, then confirm. Real screenshots of the Android Compose demo on API 35: +Type a phrase, review the extracted title and time, then add the reminder. A short recording of the Android Compose demo: -| Parsed reminder | Edited and saved | Ambiguous time: manual review | -| --- | --- | --- | -| ![Natural-language reminder parsed as Buy milk at 19:00](../assets/reminder-preview.png) | ![Confirmed reminder in the session-only list](../assets/reminder-saved.png) | ![Ambiguous time requires clarification before saving](../assets/reminder-needs-review.png) | +![Typing Buy milk tomorrow at 7pm, reviewing Buy milk for tomorrow at 19:00, and confirming it in the reminder list](../assets/reminder-demo.gif) + +The demo keeps reminders for the current session; it does not send notifications. ## Installation @@ -177,6 +177,12 @@ A range end with no date inherits the start's calendar date. An earlier end cloc The checked-in `app` module contains an interactive Compose reminder prototype. Run `./gradlew :app:installDebug` with an Android device or emulator, then open **DateParser**. Enter `Buy milk tomorrow at 7pm`, preview the extracted title and date, correct either field using the title editor/date/time pickers, and explicitly add the reminder to a session-only list. Tap an English or Russian example to try it immediately. Editing the input clears the previous preview, so it must be reviewed again. No notifications, account, or database are involved. +Real screenshots on Android API 35: + +| Parsed reminder | Edited and saved | Ambiguous time: manual review | +| --- | --- | --- | +| ![Natural-language reminder parsed as Buy milk at 19:00](../assets/reminder-preview.png) | ![Confirmed reminder in the session-only list](../assets/reminder-saved.png) | ![Ambiguous time requires clarification before saving](../assets/reminder-needs-review.png) | + For ambiguous wording such as `Remind me tomorow at 7`, `Buy milk tomorrow 7, please`, or an invalid bare hour such as `tomorrow at 25`, the library rejects the unresolved time instead of quietly scheduling at the reference hour. Supply `7am`, `7pm`, or `19:00`, or select a date and time manually in the demo. A date-only expression such as `tomorrow` still inherits the reference time by design. The preview is always for review; a rule score is not a probability. The Android screen compiles the **same** `integration/consumer/src/commonMain/kotlin/ReminderDraft.kt` source as the standalone KMP consumer. UI edits and the in-memory list remain Android-only. A parsed range is not silently shortened to a single instant; the screen asks for a single time or manual selection. Manually chosen local times are validated for DST gaps and overlaps before saving. diff --git a/website/index.md b/website/index.md index a7482d2..a3c54ad 100644 --- a/website/index.md +++ b/website/index.md @@ -15,3 +15,5 @@ English and Russian · Android, JVM and iOS. - [English documentation](en/index.md) - [Документация на русском](ru/index.md) - [Source code / Исходники](https://github.com/Alox1d/dateparser-kotlin) + +![From a phrase to a reviewed and confirmed reminder / Из фразы в проверенное и подтверждённое напоминание](assets/reminder-demo.gif) diff --git a/website/ru/index.md b/website/ru/index.md index 5fc2b1d..1aaa87d 100644 --- a/website/ru/index.md +++ b/website/ru/index.md @@ -24,11 +24,11 @@ description: Парсер дат и времени из текста для Kotl ## Как это выглядит -Введи напоминание, проверь извлечённое название и время, затем подтверди. Реальные скриншоты Android Compose demo на API 35: +Введи фразу, проверь извлечённое название и время, затем добавь напоминание. Короткая запись работы Android Compose demo: -| Распознанное напоминание | Исправлено и сохранено | Неоднозначное время | -| --- | --- | --- | -| ![Фраза распознана как Buy milk, 19:00](../assets/reminder-preview.png) | ![Подтверждённое напоминание в списке на время работы приложения](../assets/reminder-saved.png) | ![Неоднозначное время нужно уточнить перед сохранением](../assets/reminder-needs-review.png) | +![Ввод Buy milk tomorrow at 7pm, проверка Buy milk на завтра в 19:00 и подтверждение в списке напоминаний](../assets/reminder-demo.gif) + +Демо хранит напоминания на время работы приложения и не отправляет уведомления. ## Подключение @@ -171,6 +171,12 @@ python3 scripts/generate_rules.py --check В модуле `app` есть рабочий Compose-пример: поле для фразы, предварительный результат, редактирование названия и даты/времени, подтверждение и список напоминаний на время работы приложения. Для запуска: `./gradlew :app:installDebug` и открыть **DateParser** на устройстве или эмуляторе. Можно сразу нажать на английский или русский пример. Изменение исходной фразы закрывает предыдущий предпросмотр: новый результат нужно проверить заново. Уведомлений, БД и авторизации нет. +Реальные скриншоты на Android API 35: + +| Распознанное напоминание | Исправлено и сохранено | Неоднозначное время | +| --- | --- | --- | +| ![Фраза распознана как Buy milk, 19:00](../assets/reminder-preview.png) | ![Подтверждённое напоминание в списке на время работы приложения](../assets/reminder-saved.png) | ![Неоднозначное время нужно уточнить перед сохранением](../assets/reminder-needs-review.png) | + Для `Buy milk tomorrow at 7pm` показываются название `Buy milk` и дата со временем. Фразы `Remind me tomorow at 7`, `Buy milk tomorrow 7, please` и некорректный час `tomorrow at 25` теперь отклоняются: одиночные числа без точного формата времени не должны приводить к тихому наследованию часов reference. Уточните `7am`, `7pm` или `19:00`, либо выберите дату и время вручную. Одна дата `tomorrow` по-прежнему наследует время reference. Не сохраняйте результат без подтверждения пользователем. Android-экран использует **тот же** `integration/consumer/src/commonMain/kotlin/ReminderDraft.kt`, что и независимый KMP consumer. UI и список в памяти остаются Android-специфичными. Диапазон времени не сокращается до одной даты молча: экран просит ввести одно время или выбрать его вручную. При ручном выборе проверяются несуществующие и двоякие локальные времена на переходах DST.