UNPKG

@brightsoftware/date-np

Version:

Simple & minimal Nepali date picker that just works.

246 lines (245 loc) 7.12 kB
import { jsx as T } from "react/jsx-runtime"; import { createContext as B, useState as M, useContext as S } from "react"; const g = B(null), j = () => { const l = S(g); if (!l) throw new Error("useTimePicker must be used within a TimePickerProvider"); const { timePickerState: s, setTimePickerState: n } = l, o = (e) => { n((t) => { let c = e; return t.format === "24hr" ? c = Math.max(0, Math.min(23, e)) : c = Math.max(1, Math.min(12, e)), { ...t, selectedTime: { ...t.selectedTime, hours: c } }; }); }, m = (e) => { n((t) => ({ ...t, selectedTime: { ...t.selectedTime, minutes: Math.max(0, Math.min(59, e)) } })); }, f = (e) => { n((t) => ({ ...t, selectedTime: { ...t.selectedTime, seconds: Math.max(0, Math.min(59, e)) } })); }, P = (e) => { s.format === "am/pm" && n((t) => ({ ...t, selectedTime: { ...t.selectedTime, period: e } })); }; return { timePickerState: s, updateHours: o, updateMinutes: m, updateSeconds: f, updatePeriod: P, incrementHours: () => { const e = s.selectedTime.hours; s.format === "24hr" ? o(e === 23 ? 0 : e + 1) : o(e === 12 ? 1 : e + 1); }, decrementHours: () => { const e = s.selectedTime.hours; s.format === "24hr" ? o(e === 0 ? 23 : e - 1) : o(e === 1 ? 12 : e - 1); }, incrementMinutes: () => { const e = s.selectedTime.minutes; m(e === 59 ? 0 : e + 1); }, decrementMinutes: () => { const e = s.selectedTime.minutes; m(e === 0 ? 59 : e - 1); }, incrementSeconds: () => { const e = s.selectedTime.seconds; f(e === 59 ? 0 : e + 1); }, decrementSeconds: () => { const e = s.selectedTime.seconds; f(e === 0 ? 59 : e - 1); }, togglePeriod: () => { s.format === "am/pm" && s.selectedTime.period && P(s.selectedTime.period === "AM" ? "PM" : "AM"); }, setVisibility: (e) => { n((t) => ({ ...t, isVisible: e })); }, getFormattedTime: () => { const { hours: e, minutes: t, seconds: c, period: a } = s.selectedTime, d = e.toString().padStart(2, "0"), i = t.toString().padStart(2, "0"), r = c.toString().padStart(2, "0"); return s.format === "am/pm" ? `${d}:${i}:${r} ${a}` : `${d}:${i}:${r}`; }, setCurrentInputPosition: (e) => { n((t) => ({ ...t, currentInputPosition: e, inputBuffer: "" // Clear buffer when changing position })); }, handleKeyInput: (e) => { if (!/^\d$/.test(e)) return !1; const t = parseInt(e), { currentInputPosition: c, inputBuffer: a, format: d } = s; switch (c) { case "hours": { const i = a + t; if (i.length === 1) if (d === "24hr") if (t >= 0 && t <= 2) { const r = t * 10; return o(r), n((u) => ({ ...u, inputBuffer: i })), !0; } else return o(t), n((r) => ({ ...r, currentInputPosition: "minutes", inputBuffer: "" })), !0; else return t === 0 ? (o(t), n((r) => ({ ...r, inputBuffer: i })), !0) : t === 1 ? (o(10), n((r) => ({ ...r, inputBuffer: i })), !0) : (o(t), n((r) => ({ ...r, currentInputPosition: "minutes", inputBuffer: "" })), !0); else if (i.length === 2) { const r = parseInt(i); if (d === "24hr") { if (r <= 23) return o(r), n((u) => ({ ...u, currentInputPosition: "minutes", inputBuffer: "" })), !0; } else if (r >= 1 && r <= 12) return o(r), n((u) => ({ ...u, currentInputPosition: "minutes", inputBuffer: "" })), !0; return n((u) => ({ ...u, inputBuffer: "" })), !1; } break; } case "minutes": { const i = a + t; if (i.length === 1) if (t >= 0 && t <= 5) { const r = t * 10; return m(r), n((u) => ({ ...u, inputBuffer: i })), !0; } else return m(t), n((r) => ({ ...r, currentInputPosition: "seconds", inputBuffer: "" })), !0; else if (i.length === 2) { const r = parseInt(i); return r <= 59 ? (m(r), n((u) => ({ ...u, currentInputPosition: "seconds", inputBuffer: "" })), !0) : (n((u) => ({ ...u, inputBuffer: "" })), !1); } break; } case "seconds": { const i = a + t; if (i.length === 1) if (t >= 0 && t <= 5) { const r = t * 10; return f(r), n((u) => ({ ...u, inputBuffer: i })), !0; } else return f(t), n((r) => ({ ...r, inputBuffer: "" })), !0; else if (i.length === 2) { const r = parseInt(i); return r <= 59 ? (f(r), n((u) => ({ ...u, inputBuffer: "" })), !0) : (n((u) => ({ ...u, inputBuffer: "" })), !1); } break; } } return !1; }, getFormattedTimeWithHighlight: () => { const { hours: e, minutes: t, seconds: c, period: a } = s.selectedTime, { currentInputPosition: d } = s, i = e.toString().padStart(2, "0"), r = t.toString().padStart(2, "0"), u = c.toString().padStart(2, "0"); let p = ""; switch (d) { case "hours": p = i; break; case "minutes": p = r; break; case "seconds": p = u; break; } let h = ""; return s.format === "am/pm" ? h = `${i}:${r}:${u} ${a}` : h = `${i}:${r}:${u}`, { display: h, highlightedPart: p }; } }; }, v = ({ children: l, format: s = "am/pm", defaultTime: n = {} }) => { const o = () => n.hours ?? 8, [m, f] = M({ isVisible: !1, selectedTime: { hours: o(), minutes: n.minutes ?? 30, seconds: n.seconds ?? 45, period: s === "am/pm" ? n.period ?? "PM" : void 0 }, format: s, currentInputPosition: "hours", inputBuffer: "" }); return /* @__PURE__ */ T(g.Provider, { value: { timePickerState: m, setTimePickerState: f }, children: l }); }; export { v as TimePickerProvider, j as useTimePicker };