diff --git a/__tests__/duration.test.ts b/__tests__/duration.test.ts index 823b62c..4720d09 100644 --- a/__tests__/duration.test.ts +++ b/__tests__/duration.test.ts @@ -4,6 +4,8 @@ import { formatHoursAndMinutes, formatPaddedDuration, formatSignedHoursAndMinutes, + isRealDuration, + minutesToHours, minutesToSeconds, parsePaddedDuration, splitHoursAndMinutes, @@ -65,3 +67,24 @@ describe("minutesToSeconds", () => { expect(minutesToSeconds(90)).toBe(5400); }); }); + +describe("minutesToHours", () => { + it("converts minutes to fractional hours", () => { + expect(minutesToHours(0)).toBe(0); + expect(minutesToHours(528)).toBeCloseTo(8.8, 10); + }); +}); + +describe("isRealDuration", () => { + it("accepts durations inside a day", () => { + expect(isRealDuration("00:00")).toBe(true); + expect(isRealDuration("08:48")).toBe(true); + expect(isRealDuration("23:59")).toBe(true); + }); + + it("rejects impossible hours and minutes", () => { + expect(isRealDuration("24:00")).toBe(false); + expect(isRealDuration("08:60")).toBe(false); + expect(isRealDuration("ab:cd")).toBe(false); + }); +}); diff --git a/components/atoms/label.tsx b/components/atoms/label.tsx index 4080edd..bbce49d 100644 --- a/components/atoms/label.tsx +++ b/components/atoms/label.tsx @@ -1,17 +1,11 @@ import * as React from "react"; import { cn } from "@/lib/utils"; +export const labelClasses = + "flex items-center gap-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-neutral-500 dark:text-neutral-400"; + const Label = React.forwardRef>( - ({ className, ...props }, ref) => ( -