## Description
`InputDatePicker` now types and pastes like `InputCurrency`.
- Typing: a separator key (`/`, `-` or `.`) in the month or day splits
the segment at the caret. Digits before it stay and get padded (`1`
becomes `01`). Digits after it move to the front of the next segment,
and focus moves there. So `1/2/2026` types as it reads. Typing past a
full segment is blocked. Other non-digits do nothing.
- Pasting reads the text as a date in any segment:
- a whole date fills every segment: `10/19/2026`, `10-19-2026`,
`10.19.2026` or ISO `2026-10-19`;
- digits alone go into the focused segment at the caret, clipped to fit;
- anything else (`10/19`, `Oct 19 2026`, `1/2/26`) is ignored.
- Arabic-Indic digits and invisible direction marks are handled as in
`InputCurrency`.
- A pasted date commits like a typed one, on blur or Enter.
`toAsciiDigits`, `cleanPastedText` and `usePendingCaret` move from
`InputCurrency` into `inputs/segmented.tsx`, so both fields share one
implementation. `InputTime` also reads Arabic-Indic digits now.
## Changes
TODO
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
`InputDatePicker` now types and pastes like `InputCurrency`, so a date
can be entered as it reads.
- Typing a separator (`/`, `-`, `.`) in the month or day splits the
segment at the caret: digits before it stay and get padded (`1` → `01`),
digits after it move to the front of the next segment, and focus moves
there, so `1/2/2026` fills all three segments. A separator in an empty
segment does nothing, keeping `10/19/2026` typing as it reads. Other
non-digits do nothing, and typing past a full segment is blocked.
- Pasting reads the text as a date in any segment: a whole date
(`10/19/2026`, `10-19-2026`, `10.19.2026`, or ISO `2026-10-19`) fills
every segment, digits alone go into the focused segment at the caret
clipped to fit, and anything else (`10/19`, `Oct 19 2026`, `1/2/26`) is
ignored. A pasted date commits like a typed one, on blur or Enter.
- Arabic-Indic digits and invisible direction marks are handled as in
`InputCurrency`.
The digit, paste-cleanup, and caret helpers move from `InputCurrency`
into `inputs/segmented.tsx` so both fields share one implementation; the
caret helper is now typed on the segments shape. `InputTime` also reads
Arabic-Indic digits now.
<sup>Written for commit ef69f89917.
Summary will update on new commits.</sup>
<a
href="https://cubic.dev/pr/onyx-dot-app/onyx/pull/16364?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="View guided diff"
src="https://www.cubic.dev/buttons/review-in-cubic-light.svg"></picture></a>
<a
href="https://www.cubic.dev/action/auto-fix/pr/onyx-dot-app/onyx/16364?returnTo=https%3A%2F%2Fgithub.com%2Fonyx-dot-app%2Fonyx%2Fpull%2F16364&source=description"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"><img
alt="Turn on auto-fix"
src="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
<!-- coderabbit-ai-generated:v1 -->
## Summary by CodeRabbit
* **New Features**
* Date inputs now support segment-based typing, separator handling, and
automatic movement between date fields.
* Dates can be pasted in supported formats, including `MM/DD/YYYY` and
`YYYY-MM-DD`.
* Arabic-Indic and Extended Arabic-Indic digits are recognized in date
and numeric inputs.
* Invalid, incomplete, or overly long input is handled consistently
without altering the field unexpectedly.
* Currency paste handling now provides improved whitespace, formatting,
and caret behavior.
* **Documentation**
* Added guidance on date formats, typing, pasting, validation, and
commit behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This is a Next.js project bootstrapped with create-next-app.
Getting Started
Install bun: https://bun.sh/docs/installation
Install all dependencies: bun install.
Then, run the development server:
bun run dev
Open http://localhost:3000 with your browser to see the result.
Note: if you are having problems accessing the ^, try setting the WEB_DOMAIN env variable to
http://127.0.0.1:3000 and accessing it there.
Tip
Packages are installed automatically when switching branches after
package.jsonchanges with pre-commit configured.
Connecting to a Cloud Backend
To test your local frontend development server against a cloud backend (e.g., staging or production),
create a .env.local file in the web/ directory with the following configuration:
# Point local dev server to cloud backend
INTERNAL_URL=https://st-dev.onyx.app/api
# Debug auth cookie for authenticating against remote backend
# This cookie is automatically injected into API requests when in development mode
# To get this value:
# 1. Go to https://st-dev.onyx.app (or your target backend URL) and log in
# 2. Open DevTools (F12) → Application → Cookies → [your backend domain]
# 3. Find the "fastapiusersauth" cookie and copy its value
# 4. Paste the value below (without quotes)
# Note: This cookie may expire, so you may need to refresh it periodically
DEBUG_AUTH_COOKIE=your_cookie_value_here
By default, this does NOT override existing cookies, so if you've logged in previously, you
may need to delete the cookies for the localhost domain.
Important notes:
- The
.env.localfile should be created in theweb/directory (same level aspackage.json) - After creating or modifying
.env.local, restart your development server for changes to take effect - The
DEBUG_AUTH_COOKIEis only used in development mode (NODE_ENV=development) - If
INTERNAL_URLis not set, the frontend will connect to the local backend athttp://127.0.0.1:8080 - Keep your
.env.localfile secure and never commit it to version control (it should already be in.gitignore)
Testing
This testing process will reset your application into a clean state. Don't run these tests if you don't want to do this!
Bring up the entire application.
- Install playwright dependencies (run
bun installfirst sobunxresolves to the repo-pinned Playwright innode_modulesinstead of fetching the latest version)
bun install
bunx playwright install
- Run playwright (the
playwrightscript expands toplaywright test)
bun run playwright
To run a single test:
bun run playwright landing-page.spec.ts
If running locally, interactive options can help you see exactly what is happening in the test.
bun run playwright --ui
bun run playwright --headed
- Inspect results
By default, playwright.config.ts is configured to output the results to:
web/output/playwright/
- Visual regression screenshots
Screenshots are captured automatically during test runs and saved to web/output/screenshots/.
To compare screenshots across CI runs, use:
ods screenshot-diff compare --project admin
For more information, see tools/ods/README.md.