@spezutil/hijri-datepicker 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/index.cjs +580 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +120 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +577 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/render.ts","../src/selection.ts","../src/time.ts","../src/styles.ts","../src/hijri-datepicker.ts","../src/index.ts"],"names":["createCalendar","translitMonthNames","weekdayNames","formatHijri"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { HijriCalendar, HijriDate } from \"@spezutil/hijri-core\";\n\nexport interface DayCell {\n hijri: HijriDate;\n gregorian: Date;\n inCurrentMonth: boolean;\n selected: boolean;\n disabled: boolean;\n isToday: boolean;\n rangeStart: boolean;\n rangeEnd: boolean;\n inRange: boolean;\n}\n\nexport interface MonthModel {\n year: number;\n month: number;\n weeks: DayCell[][];\n}\n\nexport interface BuildOptions {\n selected?: HijriDate | null;\n selectedList?: HijriDate[];\n rangeStart?: HijriDate | null;\n /** Effective end (committed end or hover preview); range band is drawn start..end inclusive of endpoints. */\n rangeEnd?: HijriDate | null;\n isDisabled?: (h: HijriDate, g: Date) => boolean;\n today?: Date;\n}\n\nexport function sameHijri(a: HijriDate, b: HijriDate): boolean {\n return a.year === b.year && a.month === b.month && a.day === b.day;\n}\n\nfunction addDaysUtc(date: Date, days: number): Date {\n return new Date(date.getTime() + days * 86400000);\n}\n\nexport function buildMonthModel(\n cal: HijriCalendar,\n view: { year: number; month: number },\n opts: BuildOptions\n): MonthModel {\n const firstGreg = cal.hijriToGregorian({ year: view.year, month: view.month, day: 1 });\n const startOffset = firstGreg.getUTCDay();\n const gridStart = addDaysUtc(firstGreg, -startOffset);\n const todayHijri = opts.today ? cal.gregorianToHijri(opts.today) : null;\n\n const startT = opts.rangeStart ? cal.hijriToGregorian(opts.rangeStart).getTime() : null;\n const endT = opts.rangeEnd ? cal.hijriToGregorian(opts.rangeEnd).getTime() : null;\n const lo = startT !== null && endT !== null ? Math.min(startT, endT) : null;\n const hi = startT !== null && endT !== null ? Math.max(startT, endT) : null;\n\n const weeks: DayCell[][] = [];\n for (let w = 0; w < 6; w++) {\n const week: DayCell[] = [];\n for (let d = 0; d < 7; d++) {\n const g = addDaysUtc(gridStart, w * 7 + d);\n const t = g.getTime();\n const hijri = cal.gregorianToHijri(g);\n const selected =\n (opts.selected ? sameHijri(hijri, opts.selected) : false) ||\n (opts.selectedList ? opts.selectedList.some((s) => sameHijri(hijri, s)) : false);\n week.push({\n hijri,\n gregorian: g,\n inCurrentMonth: hijri.year === view.year && hijri.month === view.month,\n selected,\n disabled: opts.isDisabled ? opts.isDisabled(hijri, g) : false,\n isToday: todayHijri ? sameHijri(hijri, todayHijri) : false,\n rangeStart: startT !== null && t === startT,\n rangeEnd: endT !== null && t === endT,\n inRange: lo !== null && hi !== null && t > lo && t < hi,\n });\n }\n weeks.push(week);\n }\n return { year: view.year, month: view.month, weeks };\n}\n","export type Mode = \"single\" | \"range\" | \"multiple\";\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport function isMode(v: string | null): Mode {\n return v === \"range\" || v === \"multiple\" ? v : \"single\";\n}\n\nexport function parseIsoList(v: string | null): string[] {\n if (!v) return [];\n return v\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => ISO_DATE.test(s));\n}\n\n","export interface Time {\n hour: number; // 0-23\n minute: number; // 0-59\n}\n\nexport type Meridiem = \"AM\" | \"PM\";\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, \"0\");\n}\n\nexport function parseTime(s: string | null): Time | null {\n if (!s) return null;\n const m = /^(\\d{1,2}):(\\d{2})$/.exec(s.trim());\n if (!m) return null;\n const hour = Number(m[1]);\n const minute = Number(m[2]);\n if (hour < 0 || hour > 23 || minute < 0 || minute > 59) return null;\n return { hour, minute };\n}\n\nexport function formatTime24(t: Time): string {\n return `${pad2(t.hour)}:${pad2(t.minute)}`;\n}\n\nexport function to12(hour: number): { hour12: number; meridiem: Meridiem } {\n const meridiem: Meridiem = hour < 12 ? \"AM\" : \"PM\";\n let h = hour % 12;\n if (h === 0) h = 12;\n return { hour12: h, meridiem };\n}\n\nexport function from12(hour12: number, meridiem: Meridiem): number {\n let h = hour12 % 12;\n if (meridiem === \"PM\") h += 12;\n return h;\n}\n\nexport function combineDateTime(dateIso: string, t: Time): string {\n return `${dateIso}T${formatTime24(t)}`;\n}\n\nexport function splitDateTime(value: string | null): {\n date: string | null;\n time: Time | null;\n} {\n if (!value) return { date: null, time: null };\n const [d, tt] = value.split(\"T\");\n return { date: d ?? null, time: tt ? parseTime(tt) : null };\n}\n","export const styles = `\n:host {\n --dtp-bg: #fff;\n --dtp-fg: #1a1a1a;\n --dtp-muted: #9aa0a6;\n --dtp-accent: #0b7d3e;\n --dtp-accent-fg: #fff;\n --dtp-radius: 8px;\n display: inline-block;\n font-family: system-ui, sans-serif;\n color: var(--dtp-fg);\n}\n.cal { background: var(--dtp-bg); border: 1px solid #e0e0e0; border-radius: var(--dtp-radius); padding: 8px; width: 280px; }\n.header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }\n.header button { background: none; border: none; cursor: pointer; font-size: 18px; padding: 4px 8px; border-radius: 6px; color: var(--dtp-fg); }\n.header button:hover { background: #f0f0f0; }\n.title { font-weight: 600; text-align: center; }\n.title small { display: block; font-weight: 400; color: var(--dtp-muted); font-size: 11px; }\n.grid { display: flex; flex-direction: column; gap: 2px; }\n.dow-row, .week { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }\n.dow { text-align: center; font-size: 11px; color: var(--dtp-muted); padding: 4px 0; }\n.cell { aspect-ratio: 1; border: none; background: none; cursor: pointer; border-radius: 6px; display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1.1; color: var(--dtp-fg); }\n.cell:hover:not([disabled]) { background: #f0f0f0; }\n.cell .greg { font-size: 9px; color: var(--dtp-muted); }\n.cell.out { color: var(--dtp-muted); opacity: 0.5; }\n.cell.today { outline: 1px solid var(--dtp-accent); }\n.cell[aria-selected=\"true\"] { background: var(--dtp-accent); color: var(--dtp-accent-fg); }\n.cell[aria-selected=\"true\"] .greg { color: var(--dtp-accent-fg); }\n.cell[disabled] { cursor: not-allowed; opacity: 0.3; }\n.cell.in-range { background: color-mix(in srgb, var(--dtp-accent) 16%, transparent); border-radius: 0; }\n.cell.range-start { background: var(--dtp-accent); color: var(--dtp-accent-fg); border-top-right-radius: 0; border-bottom-right-radius: 0; }\n.cell.range-end { background: var(--dtp-accent); color: var(--dtp-accent-fg); border-top-left-radius: 0; border-bottom-left-radius: 0; }\n.cell.range-start .greg, .cell.range-end .greg { color: var(--dtp-accent-fg); }\n.time-row { display: flex; align-items: center; gap: 4px; margin-top: 8px; justify-content: center; }\n.time-row input { width: 44px; text-align: center; padding: 4px; border: 1px solid #e0e0e0; border-radius: 6px; font: inherit; }\n.time-row button { border: 1px solid var(--dtp-accent); background: none; color: var(--dtp-accent); border-radius: 6px; padding: 4px 8px; cursor: pointer; font: inherit; }\n.time-row button[aria-pressed=\"true\"] { background: var(--dtp-accent); color: var(--dtp-accent-fg); }\n:host([dir=\"rtl\"]) .cal { direction: rtl; }\n`;\n","import {\n createCalendar,\n formatHijri,\n translitMonthNames,\n weekdayNames,\n type HijriCalendar,\n type HijriDate,\n} from \"@spezutil/hijri-core\";\nimport { buildMonthModel, sameHijri, type DayCell } from \"./render\";\nimport { isMode, parseIsoList, type Mode } from \"./selection\";\nimport {\n combineDateTime,\n from12,\n splitDateTime,\n to12,\n type Time,\n} from \"./time\";\nimport { styles } from \"./styles\";\n\nexport interface SingleChangeDetail {\n mode: \"single\";\n hijri: HijriDate;\n gregorian: string;\n time?: Time;\n}\nexport interface RangeEndpoint {\n hijri: HijriDate;\n gregorian: string;\n}\nexport interface RangeChangeDetail {\n mode: \"range\";\n start: RangeEndpoint | null;\n end: RangeEndpoint | null;\n}\nexport interface MultipleChangeDetail {\n mode: \"multiple\";\n hijri: HijriDate[];\n gregorian: string[];\n}\nexport type ChangeDetail =\n | SingleChangeDetail\n | RangeChangeDetail\n | MultipleChangeDetail;\n\nconst ISO = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nfunction parseIsoUtc(s: string | null): Date | null {\n if (!s || !ISO.test(s)) return null;\n const [y, m, d] = s.split(\"-\").map(Number);\n return new Date(Date.UTC(y!, m! - 1, d!));\n}\n\nfunction toIso(date: Date): string {\n return date.toISOString().slice(0, 10);\n}\n\nexport class HijriDatepicker extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\n \"value\",\n \"start\",\n \"end\",\n \"min\",\n \"max\",\n \"dir\",\n \"disabled-weekdays\",\n \"mode\",\n \"enable-time\",\n \"time-format\",\n ];\n }\n\n private cal: HijriCalendar = createCalendar();\n private root: ShadowRoot;\n private view: { year: number; month: number };\n\n private _mode: Mode = \"single\";\n private selected: HijriDate | null = null; // single\n private selectedList: HijriDate[] = []; // multiple\n private rangeStart: HijriDate | null = null;\n private rangeEnd: HijriDate | null = null;\n private hoverDate: HijriDate | null = null;\n private time: Time | null = null; // single + enable-time\n\n private lastCells: DayCell[] = [];\n private suppress = false;\n\n public isDateDisabled?: (hijri: HijriDate, gregorian: Date) => boolean;\n\n private reflect(name: string, v: string | null): void {\n if (v === null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n }\n\n get value(): string | null { return this.getAttribute(\"value\"); }\n set value(v: string | null) { this.reflect(\"value\", v); }\n get start(): string | null { return this.getAttribute(\"start\"); }\n set start(v: string | null) { this.reflect(\"start\", v); }\n get end(): string | null { return this.getAttribute(\"end\"); }\n set end(v: string | null) { this.reflect(\"end\", v); }\n get mode(): string | null { return this.getAttribute(\"mode\"); }\n set mode(v: string | null) { this.reflect(\"mode\", v); }\n get min(): string | null { return this.getAttribute(\"min\"); }\n set min(v: string | null) { this.reflect(\"min\", v); }\n get max(): string | null { return this.getAttribute(\"max\"); }\n set max(v: string | null) { this.reflect(\"max\", v); }\n get timeFormat(): string | null { return this.getAttribute(\"time-format\"); }\n set timeFormat(v: string | null) { this.reflect(\"time-format\", v); }\n get disabledWeekdays(): string | null { return this.getAttribute(\"disabled-weekdays\"); }\n set disabledWeekdays(v: string | null) { this.reflect(\"disabled-weekdays\", v); }\n get enableTime(): boolean { return this.hasAttribute(\"enable-time\"); }\n set enableTime(v: boolean) {\n if (v) this.setAttribute(\"enable-time\", \"\");\n else this.removeAttribute(\"enable-time\");\n }\n\n constructor() {\n super();\n this.root = this.attachShadow({ mode: \"open\" });\n const todayHijri = this.cal.gregorianToHijri(new Date());\n this.view = { year: todayHijri.year, month: todayHijri.month };\n }\n\n connectedCallback(): void {\n this.syncFromAttrs();\n this.render();\n }\n\n attributeChangedCallback(): void {\n if (!this.root || this.suppress) return;\n this.syncFromAttrs();\n this.render();\n }\n\n private g2h(d: Date): HijriDate {\n return this.cal.gregorianToHijri(d);\n }\n\n private h2iso(h: HijriDate): string {\n return toIso(this.cal.hijriToGregorian(h));\n }\n\n private applyAttrs(fn: () => void): void {\n this.suppress = true;\n try {\n fn();\n } finally {\n this.suppress = false;\n }\n }\n\n private syncFromAttrs(): void {\n this._mode = isMode(this.getAttribute(\"mode\"));\n if (this._mode === \"range\") {\n const s = parseIsoUtc(this.getAttribute(\"start\"));\n const e = parseIsoUtc(this.getAttribute(\"end\"));\n this.rangeStart = s ? this.g2h(s) : null;\n this.rangeEnd = e ? this.g2h(e) : null;\n this.hoverDate = null;\n if (this.rangeStart) this.view = { year: this.rangeStart.year, month: this.rangeStart.month };\n } else if (this._mode === \"multiple\") {\n const isos = parseIsoList(this.getAttribute(\"value\"));\n this.selectedList = isos\n .map((iso) => parseIsoUtc(iso))\n .filter((d): d is Date => d !== null)\n .map((d) => this.g2h(d));\n const first = this.selectedList[0];\n if (first) this.view = { year: first.year, month: first.month };\n } else {\n const { date, time } = splitDateTime(this.getAttribute(\"value\"));\n const d = parseIsoUtc(date);\n this.selected = d ? this.g2h(d) : null;\n this.time = time ?? this.time;\n if (this.selected) this.view = { year: this.selected.year, month: this.selected.month };\n }\n }\n\n private buildDisabledFn(): (h: HijriDate, g: Date) => boolean {\n const min = parseIsoUtc(this.getAttribute(\"min\"));\n const max = parseIsoUtc(this.getAttribute(\"max\"));\n const dowAttr = this.getAttribute(\"disabled-weekdays\");\n const disabledDows = dowAttr ? dowAttr.split(\",\").map((n) => Number(n.trim())) : [];\n return (h, g) => {\n if (min && g.getTime() < min.getTime()) return true;\n if (max && g.getTime() > max.getTime()) return true;\n // weekday numbers are UTC-based (0=Sunday..6=Saturday)\n if (disabledDows.includes(g.getUTCDay())) return true;\n if (this.isDateDisabled && this.isDateDisabled(h, g)) return true;\n return false;\n };\n }\n\n private navigate(delta: number): void {\n let { year, month } = this.view;\n month += delta;\n if (month < 1) {\n month = 12;\n year -= 1;\n } else if (month > 12) {\n month = 1;\n year += 1;\n }\n this.view = { year, month };\n this.render();\n }\n\n private emit(detail: ChangeDetail): void {\n this.dispatchEvent(\n new CustomEvent(\"change\", { bubbles: true, composed: true, detail })\n );\n }\n\n private select(cell: DayCell): void {\n if (cell.disabled) return;\n if (this._mode === \"range\") return this.selectRange(cell);\n if (this._mode === \"multiple\") return this.selectMultiple(cell);\n return this.selectSingle(cell);\n }\n\n private selectSingle(cell: DayCell): void {\n this.selected = cell.hijri;\n const iso = toIso(cell.gregorian);\n const value = this.time ? combineDateTime(iso, this.time) : iso;\n this.applyAttrs(() => this.setAttribute(\"value\", value));\n this.render();\n this.emit({\n mode: \"single\",\n hijri: cell.hijri,\n gregorian: value,\n ...(this.time ? { time: this.time } : {}),\n });\n }\n\n private selectMultiple(cell: DayCell): void {\n const idx = this.selectedList.findIndex((h) => sameHijri(h, cell.hijri));\n if (idx >= 0) this.selectedList.splice(idx, 1);\n else this.selectedList.push(cell.hijri);\n this.selectedList.sort(\n (a, b) => this.cal.hijriToGregorian(a).getTime() - this.cal.hijriToGregorian(b).getTime()\n );\n const isos = this.selectedList.map((h) => this.h2iso(h));\n this.applyAttrs(() => {\n if (isos.length) this.setAttribute(\"value\", isos.join(\",\"));\n else this.removeAttribute(\"value\");\n });\n this.render();\n this.emit({ mode: \"multiple\", hijri: this.selectedList.slice(), gregorian: isos });\n }\n\n private selectRange(cell: DayCell): void {\n const startingNew = !this.rangeStart || (this.rangeStart && this.rangeEnd);\n if (startingNew) {\n this.rangeStart = cell.hijri;\n this.rangeEnd = null;\n this.hoverDate = null;\n this.applyAttrs(() => {\n this.setAttribute(\"start\", toIso(cell.gregorian));\n this.removeAttribute(\"end\");\n });\n this.render();\n return; // no change event until the range is complete\n }\n // complete the range, normalizing order\n const startG = this.cal.hijriToGregorian(this.rangeStart!).getTime();\n if (cell.gregorian.getTime() < startG) {\n this.rangeEnd = this.rangeStart;\n this.rangeStart = cell.hijri;\n } else {\n this.rangeEnd = cell.hijri;\n }\n const startIso = this.h2iso(this.rangeStart!);\n const endIso = this.h2iso(this.rangeEnd!);\n this.applyAttrs(() => {\n this.setAttribute(\"start\", startIso);\n this.setAttribute(\"end\", endIso);\n });\n this.render();\n this.emit({\n mode: \"range\",\n start: { hijri: this.rangeStart!, gregorian: startIso },\n end: { hijri: this.rangeEnd!, gregorian: endIso },\n });\n }\n\n private setTime(t: Time): void {\n this.time = t;\n if (this.selected) {\n const iso = this.h2iso(this.selected);\n const value = combineDateTime(iso, t);\n this.applyAttrs(() => this.setAttribute(\"value\", value));\n this.emit({ mode: \"single\", hijri: this.selected!, gregorian: value, time: t });\n }\n }\n\n private paintRange(hoverHijri: HijriDate | null): void {\n if (this._mode !== \"range\" || !this.rangeStart || this.rangeEnd) return;\n const startT = this.cal.hijriToGregorian(this.rangeStart).getTime();\n const endT = hoverHijri ? this.cal.hijriToGregorian(hoverHijri).getTime() : startT;\n const lo = Math.min(startT, endT);\n const hi = Math.max(startT, endT);\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-i]\").forEach((btn) => {\n const cell = this.lastCells[Number(btn.dataset.i)];\n if (!cell) return;\n const t = cell.gregorian.getTime();\n btn.classList.toggle(\"in-range\", t > lo && t < hi);\n btn.classList.toggle(\"range-end\", hoverHijri ? t === hi && t !== startT : false);\n });\n }\n\n private renderTimeRow(): string {\n if (this._mode !== \"single\" || !this.hasAttribute(\"enable-time\")) return \"\";\n const t: Time = this.time ?? { hour: 0, minute: 0 };\n const is12 = this.getAttribute(\"time-format\") === \"12\";\n if (is12) {\n const { hour12, meridiem } = to12(t.hour);\n return `<div class=\"time-row\" part=\"time\">\n <input data-time=\"hour\" type=\"number\" min=\"1\" max=\"12\" value=\"${hour12}\" aria-label=\"Hour\" />\n <span>:</span>\n <input data-time=\"minute\" type=\"number\" min=\"0\" max=\"59\" value=\"${String(t.minute).padStart(2, \"0\")}\" aria-label=\"Minute\" />\n <button type=\"button\" data-time=\"meridiem\" aria-pressed=\"${meridiem === \"PM\"}\" aria-label=\"Toggle AM/PM\">${meridiem}</button>\n </div>`;\n }\n return `<div class=\"time-row\" part=\"time\">\n <input data-time=\"hour\" type=\"number\" min=\"0\" max=\"23\" value=\"${String(t.hour).padStart(2, \"0\")}\" aria-label=\"Hour\" />\n <span>:</span>\n <input data-time=\"minute\" type=\"number\" min=\"0\" max=\"59\" value=\"${String(t.minute).padStart(2, \"0\")}\" aria-label=\"Minute\" />\n </div>`;\n }\n\n private wireTimeRow(): void {\n const is12 = this.getAttribute(\"time-format\") === \"12\";\n const hourEl = this.root.querySelector<HTMLInputElement>('[data-time=\"hour\"]');\n const minEl = this.root.querySelector<HTMLInputElement>('[data-time=\"minute\"]');\n const ampmEl = this.root.querySelector<HTMLButtonElement>('[data-time=\"meridiem\"]');\n if (!hourEl || !minEl) return;\n\n const commit = (): void => {\n const minute = Math.max(0, Math.min(59, Number(minEl.value) || 0));\n let hour: number;\n if (is12) {\n const h12 = Math.max(1, Math.min(12, Number(hourEl.value) || 12));\n const meridiem = ampmEl?.getAttribute(\"aria-pressed\") === \"true\" ? \"PM\" : \"AM\";\n hour = from12(h12, meridiem);\n } else {\n hour = Math.max(0, Math.min(23, Number(hourEl.value) || 0));\n }\n this.setTime({ hour, minute });\n };\n\n hourEl.addEventListener(\"change\", commit);\n minEl.addEventListener(\"change\", commit);\n ampmEl?.addEventListener(\"click\", () => {\n const isPm = ampmEl.getAttribute(\"aria-pressed\") === \"true\";\n ampmEl.setAttribute(\"aria-pressed\", String(!isPm));\n ampmEl.textContent = !isPm ? \"PM\" : \"AM\";\n commit();\n });\n }\n\n private render(): void {\n const model = buildMonthModel(this.cal, this.view, {\n selected: this._mode === \"single\" ? this.selected : null,\n selectedList: this._mode === \"multiple\" ? this.selectedList : undefined,\n rangeStart: this._mode === \"range\" ? this.rangeStart : null,\n rangeEnd: this._mode === \"range\" ? this.rangeEnd ?? this.hoverDate : null,\n isDisabled: this.buildDisabledFn(),\n today: new Date(),\n });\n this.lastCells = model.weeks.flat();\n\n const headerGreg = this.cal.hijriToGregorian({\n year: this.view.year,\n month: this.view.month,\n day: 1,\n });\n const title = `${translitMonthNames[this.view.month - 1] ?? \"\"} ${this.view.year}`;\n const subtitle = headerGreg.toLocaleDateString(\"en-US\", {\n month: \"long\",\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n\n this.root.innerHTML = `<style>${styles}</style>\n <div class=\"cal\" role=\"application\" aria-label=\"Hijri date picker\">\n <div class=\"header\">\n <button type=\"button\" part=\"nav-prev\" aria-label=\"Previous month\" data-nav=\"-1\">‹</button>\n <div class=\"title\">${title}<small>${subtitle}</small></div>\n <button type=\"button\" part=\"nav-next\" aria-label=\"Next month\" data-nav=\"1\">›</button>\n </div>\n <div class=\"grid\" role=\"grid\">\n <div class=\"dow-row\" role=\"row\">\n ${weekdayNames.map((d) => `<div class=\"dow\" role=\"columnheader\">${d.slice(0, 2)}</div>`).join(\"\")}\n </div>\n ${model.weeks\n .map((week, w) => {\n const cells = week\n .map((cell, d) => {\n const i = w * 7 + d;\n const cls = [\n \"cell\",\n cell.inCurrentMonth ? \"\" : \"out\",\n cell.isToday ? \"today\" : \"\",\n cell.rangeStart ? \"range-start\" : \"\",\n cell.rangeEnd ? \"range-end\" : \"\",\n cell.inRange ? \"in-range\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const ariaSelected = cell.selected || cell.rangeStart || cell.rangeEnd;\n const label = `${formatHijri(cell.hijri, \"D MMMM YYYY\")} (${toIso(cell.gregorian)})`;\n return `<button type=\"button\" part=\"day\" class=\"${cls}\" role=\"gridcell\"\n data-i=\"${i}\" aria-selected=\"${ariaSelected}\" aria-label=\"${label}\"\n tabindex=\"-1\" ${cell.disabled ? \"disabled\" : \"\"}>\n <span class=\"hijri\">${cell.hijri.day}</span>\n <span class=\"greg\">${cell.gregorian.getUTCDate()}</span>\n </button>`;\n })\n .join(\"\");\n return `<div class=\"week\" role=\"row\">${cells}</div>`;\n })\n .join(\"\")}\n </div>\n ${this.renderTimeRow()}\n </div>`;\n\n const flat = this.lastCells;\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-nav]\").forEach((btn) => {\n btn.addEventListener(\"click\", () => this.navigate(Number(btn.dataset.nav)));\n });\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-i]\").forEach((btn) => {\n const cell = flat[Number(btn.dataset.i)]!;\n btn.addEventListener(\"click\", () => this.select(cell));\n if (this._mode === \"range\" && this.rangeStart && !this.rangeEnd) {\n btn.addEventListener(\"mouseenter\", () => {\n this.hoverDate = cell.hijri;\n this.paintRange(cell.hijri);\n });\n }\n });\n\n this.wireTimeRow();\n\n const dayButtons = Array.from(\n this.root.querySelectorAll<HTMLButtonElement>(\"[data-i]\")\n );\n const selectedIdx = dayButtons.findIndex(\n (b) => b.getAttribute(\"aria-selected\") === \"true\"\n );\n const initialIdx =\n selectedIdx !== -1 ? selectedIdx : dayButtons.findIndex((b) => !b.disabled);\n dayButtons.forEach((b, i) => (b.tabIndex = i === initialIdx ? 0 : -1));\n\n const moveFocus = (from: number, delta: number): void => {\n let i = from + delta;\n while (i >= 0 && i < dayButtons.length && dayButtons[i]?.disabled) i += delta;\n const target = dayButtons[i];\n if (target) {\n dayButtons.forEach((b) => (b.tabIndex = -1));\n target.tabIndex = 0;\n target.focus();\n }\n };\n\n const grid = this.root.querySelector(\".grid\") as HTMLElement;\n grid.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n const active = this.root.activeElement as HTMLElement | null;\n const fromEl = (\n active && active.matches?.(\"[data-i]\")\n ? active\n : (e.target as HTMLElement | null)?.closest?.(\"[data-i]\") ?? null\n ) as HTMLButtonElement | null;\n const idx = fromEl ? dayButtons.indexOf(fromEl) : -1;\n const deltas: Record<string, number> = {\n ArrowRight: 1,\n ArrowLeft: -1,\n ArrowDown: 7,\n ArrowUp: -7,\n };\n if (e.key in deltas) {\n e.preventDefault();\n moveFocus(idx === -1 ? initialIdx : idx, deltas[e.key] ?? 0);\n } else if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const useIdx = idx === -1 ? initialIdx : idx;\n if (useIdx >= 0) {\n const cell = flat[Number(dayButtons[useIdx]?.dataset.i)];\n if (cell) this.select(cell);\n }\n }\n });\n\n grid.addEventListener(\"mouseleave\", () => {\n if (this._mode === \"range\" && this.rangeStart && !this.rangeEnd) {\n this.hoverDate = null;\n this.paintRange(null);\n }\n });\n }\n}\n","import { HijriDatepicker } from \"./hijri-datepicker\";\n\nexport { HijriDatepicker } from \"./hijri-datepicker\";\nexport type {\n ChangeDetail,\n SingleChangeDetail,\n RangeChangeDetail,\n MultipleChangeDetail,\n RangeEndpoint,\n} from \"./hijri-datepicker\";\nexport { buildMonthModel } from \"./render\";\nexport type { DayCell, MonthModel } from \"./render\";\n\nif (typeof customElements !== \"undefined\" && !customElements.get(\"hijri-datepicker\")) {\n customElements.define(\"hijri-datepicker\", HijriDatepicker);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hijri-datepicker\": HijriDatepicker;\n }\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { HijriDate, HijriCalendar } from '@spezutil/hijri-core';
|
|
2
|
+
|
|
3
|
+
interface Time {
|
|
4
|
+
hour: number;
|
|
5
|
+
minute: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface SingleChangeDetail {
|
|
9
|
+
mode: "single";
|
|
10
|
+
hijri: HijriDate;
|
|
11
|
+
gregorian: string;
|
|
12
|
+
time?: Time;
|
|
13
|
+
}
|
|
14
|
+
interface RangeEndpoint {
|
|
15
|
+
hijri: HijriDate;
|
|
16
|
+
gregorian: string;
|
|
17
|
+
}
|
|
18
|
+
interface RangeChangeDetail {
|
|
19
|
+
mode: "range";
|
|
20
|
+
start: RangeEndpoint | null;
|
|
21
|
+
end: RangeEndpoint | null;
|
|
22
|
+
}
|
|
23
|
+
interface MultipleChangeDetail {
|
|
24
|
+
mode: "multiple";
|
|
25
|
+
hijri: HijriDate[];
|
|
26
|
+
gregorian: string[];
|
|
27
|
+
}
|
|
28
|
+
type ChangeDetail = SingleChangeDetail | RangeChangeDetail | MultipleChangeDetail;
|
|
29
|
+
declare class HijriDatepicker extends HTMLElement {
|
|
30
|
+
static get observedAttributes(): string[];
|
|
31
|
+
private cal;
|
|
32
|
+
private root;
|
|
33
|
+
private view;
|
|
34
|
+
private _mode;
|
|
35
|
+
private selected;
|
|
36
|
+
private selectedList;
|
|
37
|
+
private rangeStart;
|
|
38
|
+
private rangeEnd;
|
|
39
|
+
private hoverDate;
|
|
40
|
+
private time;
|
|
41
|
+
private lastCells;
|
|
42
|
+
private suppress;
|
|
43
|
+
isDateDisabled?: (hijri: HijriDate, gregorian: Date) => boolean;
|
|
44
|
+
private reflect;
|
|
45
|
+
get value(): string | null;
|
|
46
|
+
set value(v: string | null);
|
|
47
|
+
get start(): string | null;
|
|
48
|
+
set start(v: string | null);
|
|
49
|
+
get end(): string | null;
|
|
50
|
+
set end(v: string | null);
|
|
51
|
+
get mode(): string | null;
|
|
52
|
+
set mode(v: string | null);
|
|
53
|
+
get min(): string | null;
|
|
54
|
+
set min(v: string | null);
|
|
55
|
+
get max(): string | null;
|
|
56
|
+
set max(v: string | null);
|
|
57
|
+
get timeFormat(): string | null;
|
|
58
|
+
set timeFormat(v: string | null);
|
|
59
|
+
get disabledWeekdays(): string | null;
|
|
60
|
+
set disabledWeekdays(v: string | null);
|
|
61
|
+
get enableTime(): boolean;
|
|
62
|
+
set enableTime(v: boolean);
|
|
63
|
+
constructor();
|
|
64
|
+
connectedCallback(): void;
|
|
65
|
+
attributeChangedCallback(): void;
|
|
66
|
+
private g2h;
|
|
67
|
+
private h2iso;
|
|
68
|
+
private applyAttrs;
|
|
69
|
+
private syncFromAttrs;
|
|
70
|
+
private buildDisabledFn;
|
|
71
|
+
private navigate;
|
|
72
|
+
private emit;
|
|
73
|
+
private select;
|
|
74
|
+
private selectSingle;
|
|
75
|
+
private selectMultiple;
|
|
76
|
+
private selectRange;
|
|
77
|
+
private setTime;
|
|
78
|
+
private paintRange;
|
|
79
|
+
private renderTimeRow;
|
|
80
|
+
private wireTimeRow;
|
|
81
|
+
private render;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
interface DayCell {
|
|
85
|
+
hijri: HijriDate;
|
|
86
|
+
gregorian: Date;
|
|
87
|
+
inCurrentMonth: boolean;
|
|
88
|
+
selected: boolean;
|
|
89
|
+
disabled: boolean;
|
|
90
|
+
isToday: boolean;
|
|
91
|
+
rangeStart: boolean;
|
|
92
|
+
rangeEnd: boolean;
|
|
93
|
+
inRange: boolean;
|
|
94
|
+
}
|
|
95
|
+
interface MonthModel {
|
|
96
|
+
year: number;
|
|
97
|
+
month: number;
|
|
98
|
+
weeks: DayCell[][];
|
|
99
|
+
}
|
|
100
|
+
interface BuildOptions {
|
|
101
|
+
selected?: HijriDate | null;
|
|
102
|
+
selectedList?: HijriDate[];
|
|
103
|
+
rangeStart?: HijriDate | null;
|
|
104
|
+
/** Effective end (committed end or hover preview); range band is drawn start..end inclusive of endpoints. */
|
|
105
|
+
rangeEnd?: HijriDate | null;
|
|
106
|
+
isDisabled?: (h: HijriDate, g: Date) => boolean;
|
|
107
|
+
today?: Date;
|
|
108
|
+
}
|
|
109
|
+
declare function buildMonthModel(cal: HijriCalendar, view: {
|
|
110
|
+
year: number;
|
|
111
|
+
month: number;
|
|
112
|
+
}, opts: BuildOptions): MonthModel;
|
|
113
|
+
|
|
114
|
+
declare global {
|
|
115
|
+
interface HTMLElementTagNameMap {
|
|
116
|
+
"hijri-datepicker": HijriDatepicker;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { type ChangeDetail, type DayCell, HijriDatepicker, type MonthModel, type MultipleChangeDetail, type RangeChangeDetail, type RangeEndpoint, type SingleChangeDetail, buildMonthModel };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { HijriDate, HijriCalendar } from '@spezutil/hijri-core';
|
|
2
|
+
|
|
3
|
+
interface Time {
|
|
4
|
+
hour: number;
|
|
5
|
+
minute: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface SingleChangeDetail {
|
|
9
|
+
mode: "single";
|
|
10
|
+
hijri: HijriDate;
|
|
11
|
+
gregorian: string;
|
|
12
|
+
time?: Time;
|
|
13
|
+
}
|
|
14
|
+
interface RangeEndpoint {
|
|
15
|
+
hijri: HijriDate;
|
|
16
|
+
gregorian: string;
|
|
17
|
+
}
|
|
18
|
+
interface RangeChangeDetail {
|
|
19
|
+
mode: "range";
|
|
20
|
+
start: RangeEndpoint | null;
|
|
21
|
+
end: RangeEndpoint | null;
|
|
22
|
+
}
|
|
23
|
+
interface MultipleChangeDetail {
|
|
24
|
+
mode: "multiple";
|
|
25
|
+
hijri: HijriDate[];
|
|
26
|
+
gregorian: string[];
|
|
27
|
+
}
|
|
28
|
+
type ChangeDetail = SingleChangeDetail | RangeChangeDetail | MultipleChangeDetail;
|
|
29
|
+
declare class HijriDatepicker extends HTMLElement {
|
|
30
|
+
static get observedAttributes(): string[];
|
|
31
|
+
private cal;
|
|
32
|
+
private root;
|
|
33
|
+
private view;
|
|
34
|
+
private _mode;
|
|
35
|
+
private selected;
|
|
36
|
+
private selectedList;
|
|
37
|
+
private rangeStart;
|
|
38
|
+
private rangeEnd;
|
|
39
|
+
private hoverDate;
|
|
40
|
+
private time;
|
|
41
|
+
private lastCells;
|
|
42
|
+
private suppress;
|
|
43
|
+
isDateDisabled?: (hijri: HijriDate, gregorian: Date) => boolean;
|
|
44
|
+
private reflect;
|
|
45
|
+
get value(): string | null;
|
|
46
|
+
set value(v: string | null);
|
|
47
|
+
get start(): string | null;
|
|
48
|
+
set start(v: string | null);
|
|
49
|
+
get end(): string | null;
|
|
50
|
+
set end(v: string | null);
|
|
51
|
+
get mode(): string | null;
|
|
52
|
+
set mode(v: string | null);
|
|
53
|
+
get min(): string | null;
|
|
54
|
+
set min(v: string | null);
|
|
55
|
+
get max(): string | null;
|
|
56
|
+
set max(v: string | null);
|
|
57
|
+
get timeFormat(): string | null;
|
|
58
|
+
set timeFormat(v: string | null);
|
|
59
|
+
get disabledWeekdays(): string | null;
|
|
60
|
+
set disabledWeekdays(v: string | null);
|
|
61
|
+
get enableTime(): boolean;
|
|
62
|
+
set enableTime(v: boolean);
|
|
63
|
+
constructor();
|
|
64
|
+
connectedCallback(): void;
|
|
65
|
+
attributeChangedCallback(): void;
|
|
66
|
+
private g2h;
|
|
67
|
+
private h2iso;
|
|
68
|
+
private applyAttrs;
|
|
69
|
+
private syncFromAttrs;
|
|
70
|
+
private buildDisabledFn;
|
|
71
|
+
private navigate;
|
|
72
|
+
private emit;
|
|
73
|
+
private select;
|
|
74
|
+
private selectSingle;
|
|
75
|
+
private selectMultiple;
|
|
76
|
+
private selectRange;
|
|
77
|
+
private setTime;
|
|
78
|
+
private paintRange;
|
|
79
|
+
private renderTimeRow;
|
|
80
|
+
private wireTimeRow;
|
|
81
|
+
private render;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
interface DayCell {
|
|
85
|
+
hijri: HijriDate;
|
|
86
|
+
gregorian: Date;
|
|
87
|
+
inCurrentMonth: boolean;
|
|
88
|
+
selected: boolean;
|
|
89
|
+
disabled: boolean;
|
|
90
|
+
isToday: boolean;
|
|
91
|
+
rangeStart: boolean;
|
|
92
|
+
rangeEnd: boolean;
|
|
93
|
+
inRange: boolean;
|
|
94
|
+
}
|
|
95
|
+
interface MonthModel {
|
|
96
|
+
year: number;
|
|
97
|
+
month: number;
|
|
98
|
+
weeks: DayCell[][];
|
|
99
|
+
}
|
|
100
|
+
interface BuildOptions {
|
|
101
|
+
selected?: HijriDate | null;
|
|
102
|
+
selectedList?: HijriDate[];
|
|
103
|
+
rangeStart?: HijriDate | null;
|
|
104
|
+
/** Effective end (committed end or hover preview); range band is drawn start..end inclusive of endpoints. */
|
|
105
|
+
rangeEnd?: HijriDate | null;
|
|
106
|
+
isDisabled?: (h: HijriDate, g: Date) => boolean;
|
|
107
|
+
today?: Date;
|
|
108
|
+
}
|
|
109
|
+
declare function buildMonthModel(cal: HijriCalendar, view: {
|
|
110
|
+
year: number;
|
|
111
|
+
month: number;
|
|
112
|
+
}, opts: BuildOptions): MonthModel;
|
|
113
|
+
|
|
114
|
+
declare global {
|
|
115
|
+
interface HTMLElementTagNameMap {
|
|
116
|
+
"hijri-datepicker": HijriDatepicker;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { type ChangeDetail, type DayCell, HijriDatepicker, type MonthModel, type MultipleChangeDetail, type RangeChangeDetail, type RangeEndpoint, type SingleChangeDetail, buildMonthModel };
|