การเข้าถึง
ส่วนประกอบของ Picker ทั้งหมดมาพร้อมกับการสนับสนุนการเข้าถึงในตัว การนำทางด้วยคีย์บอร์ด, แอตทริบิวต์ ARIA และการจัดการโฟกัสทำงานได้ทันทีในทุกรูปแบบ — Styled, Tailwind v3/v4 และ Headless
ไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติมสำหรับการใช้งานมาตรฐาน หน้านี้จะบันทึกสิ่งที่รวมอยู่เพื่อให้คุณสามารถตรวจสอบ, ขยาย หรือทำซ้ำรูปแบบใน UI ที่กำหนดเองได้
การนำทางด้วยคีย์บอร์ด
ตัวเลือกปฏิทิน
| คีย์ | การกระทำ |
|---|---|
ArrowLeft | เลื่อนโฟกัสไปยังวันก่อนหน้า |
ArrowRight | เลื่อนโฟกัสไปยังวันถัดไป |
ArrowUp | เลื่อนโฟกัสไปยังสัปดาห์ก่อนหน้า (วันเดียวกันของสัปดาห์) |
ArrowDown | เลื่อนโฟกัสไปยังสัปดาห์ถัดไป (วันเดียวกันของสัปดาห์) |
Enter / Space | เลือกวันที่โฟกัสอยู่ |
Escape | ยกเลิกการเปลี่ยนแปลงและปิดป๊อปอัป |
Tab | ย้ายไปยังองค์ประกอบที่สามารถโฟกัสได้ถัดไป (ค่าเริ่มต้นของเบราว์เซอร์) |
การข้ามวันที่ถูกปิดใช้งาน: เมื่อนำทางด้วยปุ่มลูกศร วันที่ถูกปิดใช้งานจะถูกข้ามโดยอัตโนมัติ ตัวเลือกจะค้นหาวันที่เปิดใช้งานถัดไปในทิศทางการเคลื่อนไหวได้ถึง 365 วัน
การเลื่อนเดือนอัตโนมัติ: เมื่อโฟกัสของคีย์บอร์ดย้ายไปยังวันในเดือนอื่น มุมมองปฏิทินจะอัปเดตเพื่อแสดงเดือนนั้น
ตัวเลือกเวลา
| คีย์ | การกระทำ |
|---|---|
Escape | ยกเลิกการเปลี่ยนแปลงและปิดป๊อปอัป |
การเลือกเวลาใช้อินเทอร์เฟซแบบล้อเลื่อนพร้อมการโต้ตอบด้วยการคลิก/สัมผัส คอลัมน์เลื่อนใช้ scroll-snap เพื่อการเลือกค่าที่แม่นยำ
แอตทริบิวต์ ARIA
องค์ประกอบที่โต้ตอบได้ทุกอย่างมีบทบาทและแอตทริบิวต์ ARIA ที่เหมาะสม:
ป๊อปอัปและคอนเทนเนอร์
| องค์ประกอบ | แอตทริบิวต์ | ค่า |
|---|---|---|
| คอนเทนเนอร์ป๊อปอัป | role | "dialog" |
| คอนเทนเนอร์อินไลน์ | role | "group" |
| คอนเทนเนอร์ | aria-label | ข้อความตัวยึดจาก locale |
| คอนเทนเนอร์ | aria-activedescendant | ID ของเซลล์วันที่กำลังโฟกัสอยู่ |
ปุ่มทริกเกอร์
| แอตทริบิวต์ | ค่า |
|---|---|
aria-expanded | true เมื่อป๊อปอัปเปิด |
aria-haspopup | "dialog" |
ตารางปฏิทิน
| องค์ประกอบ | แอตทริบิวต์ | ค่า |
|---|---|---|
| ตัวห่อตาราง | role | "grid" |
| แถวสัปดาห์ | role | "row" |
| เซลล์หัวข้อวันในสัปดาห์ | role | "columnheader" |
| เซลล์วัน | role | "gridcell" |
| เซลล์วัน | aria-selected | true เมื่อถูกเลือก |
| เซลล์วัน | aria-current | "date" เมื่อเซลล์เป็นวันนี้ |
| เซลล์วัน | aria-label | สตริงวันที่จัดรูปแบบ (เช่น "2026-03-04") |
| เซลล์วัน | disabled | ตั้งค่าในวันที่ปิดใช้งาน (แอตทริบิวต์ HTML ดั้งเดิม) |
การนำทางและดรอปดาวน์
| องค์ประกอบ | แอตทริบิวต์ | ค่า |
|---|---|---|
| ปุ่มเดือนก่อนหน้า | aria-label | "Previous month" (จาก locale.prevMonthLabel) |
| ปุ่มเดือนถัดไป | aria-label | "Next month" (จาก locale.nextMonthLabel) |
| ดรอปดาวน์เดือน | aria-label | "Select month" (จาก locale.selectMonthLabel) |
| ดรอปดาวน์ปี | aria-label | "Select year" (จาก locale.selectYearLabel) |
คอลัมน์เวลา
| องค์ประกอบ | แอตทริบิวต์ | ค่า |
|---|---|---|
| คอลัมน์ชั่วโมง | role | "listbox" |
| คอลัมน์ชั่วโมง | aria-orientation | "vertical" |
| คอลัมน์ชั่วโมง | aria-label | "Hours" (จาก locale.hourLabel) |
| คอลัมน์นาที | role | "listbox" |
| คอลัมน์นาที | aria-orientation | "vertical" |
| คอลัมน์นาที | aria-label | "Minutes" (จาก locale.minuteLabel) |
| คอลัมน์วินาที | role | "listbox" |
| คอลัมน์วินาที | aria-orientation | "vertical" |
| คอลัมน์วินาที | aria-label | "Seconds" (จาก locale.secondLabel) |
| รายการเวลา | role | "option" (รายการเสริม: "presentation") |
| รายการเวลา | aria-selected | true เมื่อรายการเป็นค่าปัจจุบัน |
| ตัวสลับช่วงเวลา | aria-label | ช่วงเวลาปัจจุบัน + ”, toggle AM/PM” |
| ปุ่มล้าง | aria-label | "Clear" (จาก locale.clear) |
สตริงป้ายกำกับทั้งหมดสามารถปรับแต่งได้ผ่าน ระบบ locale
การจัดการโฟกัส
Roving Tabindex
ตารางปฏิทินใช้รูปแบบ roving tabindex:
- เฉพาะเซลล์วันที่กำลังโฟกัสอยู่เท่านั้นที่มี
tabIndex={0}(สามารถแท็บได้) - เซลล์วันอื่นๆ ทั้งหมดมี
tabIndex={-1}(ไม่สามารถแท็บได้ แต่สามารถโฟกัสได้ผ่านปุ่มลูกศร) - ซึ่งหมายความว่า
Tabจะย้ายโฟกัสออกจากตารางปฏิทิน (ไปยังส่วนควบคุมถัดไป) และปุ่มลูกศรจะย้ายโฟกัสภายในตาราง
การดักจับโฟกัสของป๊อปอัป
โหมดป๊อปอัปใช้ FloatingFocusManager จาก @floating-ui/react เพื่อ:
- ดักจับโฟกัสภายในป๊อปอัปขณะเปิดอยู่
- คืนโฟกัสไปยังปุ่มทริกเกอร์เมื่อป๊อปอัปปิด
- ป้องกันการแท็บออกจากป๊อปอัปไปยังเนื้อหาพื้นหลัง
องค์ประกอบดั้งเดิม
การเลือกเดือนและปีใช้องค์ประกอบ <select> ดั้งเดิม ซึ่งสามารถเข้าถึงได้ด้วยคีย์บอร์ดโดยธรรมชาติ เซลล์วันใช้องค์ประกอบ <button> ดั้งเดิมพร้อมสถานะปิดใช้งานที่เหมาะสม