#standards#ui#motion#css#theme#frontend
กฎความปลอดภัยของ Animation และ Prepaint 3 จุด
Animation ต้องไม่ทำให้ Modal/Popover/Grid เพี้ยน ต้องเคารพผู้ใช้ที่ปิดการเคลื่อนไหว และการตั้งค่า Appearance ใหม่ต้องไม่ทำให้หน้าจอกะพริบตอนโหลด คลาสที่ใช้ได้ดู UI พรีเมียมและคลาส Motion กลาง (Premium UI, sml-anim, Design Tokens)
กฎ/วิธีทำ
- หาคลาสกลางก่อนเขียน animation เสมอ; ถ้าจำเป็นต้องมี keyframes ใหม่ ให้เพิ่มใน
globals.cssเท่านั้น (ห้ามใน.tsx) - ทุก animation ที่มี
transformใช้animation-fill-mode: backwards— ห้ามboth/forwardsเพราะ element ที่ค้าง transform จะเป็น containing block ของลูกposition: fixedทำให้ Modal/Popover เลื่อนผิดที่ (บั๊ก U5:.sml-motion-cardที่ใช้bothแก้เป็นbackwards) - แผงที่ซ่อน/แสดงด้วย
hidden(แท็บ MDI[data-workspace-tab-panel], โมดูล Keep-Alive[data-persistent-module]) ใช้ได้เฉพาะopacity— ห้ามtransform,filter,will-change - Animation วนลูปเฉพาะหน้าตกแต่ง (Login, Portal, Welcome, Dashboard) และต้องเป็น
transform/opacity(GPU) ห้ามบน Header, MenuBar, แถบแท็บ, Grid - เคารพ reduced motion:
prefers-reduced-motionของ OS + ตัวเลือก9. ภาพเคลื่อนไหว (Animation)ในแผงธีม & ฟอนต์(settings.motion = "auto" | "off"→html[data-motion]);offปิด animation/transition ทั้งระบบ (globals.css §10) - Backdrop ของ Modal ห้ามใช้
bg-ink/..— ในโหมดมืด--color-inkเป็นสีขาว ฉากหลังกลายเป็นขาว ให้ใช้bg-slate-950/45หรือbg-black/45(บั๊ก U1) - KPI/Dashboard ห้ามตัวเลขสมมติเป็นค่าสำรอง (
?? 98.6,|| 300) ใช้?? 0เสมอ (บั๊ก D1) - animate-in ต้องมีประกาศจริง: คลาส
animate-in fade-in-0 zoom-in-95ถูกใช้ 22 จุดแต่เคยไม่มีปลั๊กอิน จึงประกาศด้วย@utilityใน globals.css §11 (บั๊ก U4)
เพิ่มค่าใน AppearanceSettings ต้องแก้ 3 จุดพร้อมกัน
| จุด | ไฟล์ |
|---|---|
1. ค่าเริ่มต้น DEFAULT_APPEARANCE |
frontend/shared/layout/AppearanceProvider.tsx (เช่น motion: "auto" บรรทัด 124) |
2. applyAttributesToHtml() |
AppearanceProvider.tsx (เช่น data-motion บรรทัด 397) |
3. APPEARANCE_PREPAINT_SCRIPT |
frontend/src/app/layout.tsx:62 สคริปต์อินไลน์ใน <head> |
- สคริปต์ prepaint อ่าน
localStorage.sml_appearance_v2(fallbackv1) แล้วใส่data-theme,data-mode,data-font,data-scale,data-motion,--sml-font-zoom,--custom-widget-bgฯลฯ ลง<html>ก่อนวาดหน้าจอครั้งแรก (<html suppressHydrationWarning>) — ขาดจุดใดจุดหนึ่งหน้าจอจะกะพริบเป็นธีมเริ่มต้นทุกครั้งที่รีเฟรช (บั๊ก U3)
วิธีตรวจงาน (ตาม skill)
npx tsc --noEmit -p .
node --experimental-strip-types --test <ไฟล์ *.test.ts>
# คอมไพล์ CSS ด้วย @tailwindcss/postcss, และ curl หน้าเว็บบน next dev -p 3001
- ไม่รัน Playwright อัตโนมัติเมื่อจบงาน (ลุงจืด 2026-10-24) รอลุงจืดสั่ง; การตรวจเต็มรูปแบบใช้ UAT ดู เฝ้าและตอบใบงาน IssueMate SMLAIACC (wait_for_issue.py, reply-batch, คำถาม PDF)
ที่มา
docs/kms/KMS_PREMIUM_UI_MOTION_STANDARD.mdObjective ข้อ 2–6, Workflow §4, Config, Limitation.agents/skills/premium-ui-motion-system/SKILL.mdWorkflow ข้อ 2–4, 6–9docs/kms/KMS_SECURITY_DATA_INTEGRITY_LESSONS.mdU1, U3–U5, D1
ดูเพิ่ม
สารบัญมาตรฐานและกฎเหล็กของ SML Ai Account (Standards Overview) · UI พรีเมียมและคลาส Motion กลาง (Premium UI, sml-anim, Design Tokens) · Header และ Toolbar 2 แถว ธีมการ์ด และสีพื้นหลัง Widget (EmployeeScreen Standard) · บทเรียนบั๊ก UX/หน้าจอธุรกรรม/Master/แท็บ MDI (Frontend UX Bug Lessons) · ภาพรวม Frontend ของ SML Ai Account (Frontend overview)