用途:实现公开预约流程,覆盖从选日期到预约成功的完整交互,并支持改期。主要能力:分为 pick-date(月历显示可预约日期)、pick-slot(选中日的可用时段)、fill-form(参与者表单,含姓名、邮箱与自定义字段)、success(确认页并提供加入日历按钮)四个阶段,另有 reschedule 模式,从已有预约 uid 预填。动画使用 motion(motion/react)的 AnimatePresence 与 fadeInLeft 变体,外层容器随阶段改变宽度:窄(仅日历)→较宽(日历+时段)→最宽(表单)。时区与制式:挂载时检测浏览器时区,允许下拉覆盖,选择持久化到 localStorage 键 scheduling.timezone;时段列附近的 12/24 小时切换持久化到用户设置。状态同步:所选日期、时段、时区与时长同时镜像到 URL 查询参数和 application_state.booker-state,使刷新保留选择、智能体可读取当前选择。复制链接:每个事件类型行有复制链接按钮,点击写入剪贴板并用 Sonner 弹出“Copied!”提示,移动端 Safari 亦可用。无障碍:月历为 ARIA grid + gridcell 并支持方向键导航;时段按钮可键盘聚焦并带 aria-pressed;模态关闭后焦点返回触发元素;提示内容通过 aria-live=polite 播报。移动端:宽度小于 768px 时垂直堆叠,日历满宽,时段列表在下,表单以全屏 sheet 滑入。限制:资料未提供具体安装方式、依赖版本、价格或平台信息。
booker
设计与创作
更新于 10-15 20:09