- Revert the automation action labels back to "Aux N: action" (no
functional reason to change this wording).
- Simplify the aux timers header in the playback control: the flex
container now only handles layout, and the label text reuses the
same font-size/color as the per-timer labels below it, instead of a
bespoke style block duplicating those values.
- Replace the generic, length-driven normaliser with an explicit
sanitiseAuxTimerNames() that always deals with exactly three timers,
and rename it away from "normalise" (which didn't convey that it
trims, caps length and fills in missing entries). Static defaults
now use a plain ['', '', ''] literal instead of calling the
sanitiser with no input to sanitise.
- Settings.type.ts and AuxTimerSettings.tsx no longer generate their
three fields from a loop; the form mirrors the same explicit,
one-field-per-row style already used by GeneralSettings.tsx.
- Trim comments that only restated what the following line already
says, keeping the ones that explain non-obvious behaviour (why
AuxTimerService needs to be resynced separately from the data
provider, why SimpleTimer.reset() preserves the name).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCZejVTzuAY3tHTE6nB3JH
Addresses the review findings on the aux timer naming feature.
- Aux timer names are project data, but they were only applied at
bootstrap and on a settings POST. Loading another project left the
previous project's names in the runtime store, so the controls and
views disagreed with the settings panel until a restart. The names are
now applied when a project is loaded, and patching the current project
settings applies them and sends a settings refetch to the clients
(loading a project already triggers a full refetch via the rundown).
- Consolidate the name handling into a single normaliser in ontime-utils,
used by the project file parser, the API validation and to build the
default value. This creates the property when importing project files
saved before the feature existed, and enforces the name length limit
server side rather than only in the form.
- loadNames normalises its input, so the runtime state is consistent
regardless of the shape of the stored settings.
- Clarify that auxTimerNames is ordered (index 0 is aux timer 1), and
derive the settings form from the shared aux timer count.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCZejVTzuAY3tHTE6nB3JH
Adds custom, persisted names for the three aux timers, editable in the
editor settings and surfaced everywhere an aux title is shown.
- Persist `auxTimerNames` on the Settings object (default empty, falls
back to the stock "Aux N" label when unset). Reuses the existing
settings pipeline: validation sanitises to a fixed-length trimmed
array, the parser normalises loaded/legacy data, and migrations carry
the field forward.
- New "Aux timers" settings section to name each timer, plus a shortcut
button next to the aux timers in the playback control that jumps
straight to it.
- Resolve names via a shared getAuxTimerLabel helper in the aux timer
control, Studio view, secondary-source selector and preview, and the
automation action labels.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WCZejVTzuAY3tHTE6nB3JH
* feat: update auto cue numbering
* feat: renumber from ui
* refactor: patchEntries is not used
* chore: format
* fix: correct cue at top of group
* fix: handle precision
* refactor dialog
* bump limit for performance time test
* extract type
* add class name to lable
* fix rebase
* refator: extract renumering logic
* chore: comments for getIntegerAndFraction function
* chore: add the for renumber mutation
* fix: fraction match precision
* refactor: small cleanup
* refactor: use more narrow validator
---------
Co-authored-by: alex-Arc <omnivox@LAPTOP-RC5SNBVV.localdomain>
* chore: migrate eslint to oxlint
* chore: migrate prettier to oxfmt
* chore: migrate typescript
* chore: toThrow should have a expected value
* chore: cast test value as Day
* chore: small title fix
* chore: mocks should be hoisted
* chore: incorrect async useage
* chore: test should be inside description
* chore: test sohuld include an expeced
* chore: oxfmt
---------
Co-authored-by: alex-Arc <omnivox@LAPTOP-RC5SNBVV.localdomain>
* feat: add group start time to state
* refactor: calculate expected times when offset mode changes
* feat: show relative data in ui
* fixup! feat: add group start time to state
* fixup! refactor: calculate expected times when offset mode changes
* fixup! feat: show relative data in ui
* try to handle multiday
* show planed/expected rundown end day offset values
* refactor: style tweaks to timers
* refactor: cleanup data use
* day offset
* update tests
* test getExpectedStart multiday
* write start epoch to restore file
* current day in relative mode
* remove todo
* move find day offset to utils
---------
Co-authored-by: arc-alex <ac@omnivox.dk>
* refactor: runtime types
* refactor: runtimeState functions to use the split type
* refactor: RuntimeService to use the new split data
* refactor: use the split data in the UI
* update comments
* refactor: rename runtime to offset
* fix utils test
* refactor: split event data and state data
* refactor: calculate the start time insted of until
* cleanup
* send next flag expected start from server
* refactor: render
* fix test
* use same icon
* refactor: group duration
* Optimize (#1711)
* refactor: consolidate block, flag and end loading and expected times
* work on test
* cal end value
* lint
* fix test
* remove todo