unipo-ui 1.2.0 → 1.3.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.
Files changed (173) hide show
  1. package/cli/index.mjs +53 -4
  2. package/dist/admisi-YCOE3DMH.cjs +20 -0
  3. package/dist/admisi-YXCTBECZ.js +11 -0
  4. package/dist/akademik-PJGL6MSP.cjs +20 -0
  5. package/dist/akademik-TPDFEZGF.js +11 -0
  6. package/dist/akses-AUPQD6YN.cjs +20 -0
  7. package/dist/akses-V5XIMBWT.js +11 -0
  8. package/dist/arsip-2T7IEION.cjs +20 -0
  9. package/dist/arsip-LDRV7FYX.js +11 -0
  10. package/dist/cbt-4N6COVIN.js +11 -0
  11. package/dist/cbt-GMQSR7TP.cjs +20 -0
  12. package/dist/chunk-34OKV63Q.js +122 -0
  13. package/dist/chunk-34OKV63Q.js.map +1 -0
  14. package/dist/chunk-3O5ELKBH.cjs +18 -0
  15. package/dist/chunk-3O5ELKBH.cjs.map +1 -0
  16. package/dist/chunk-4BQOABRV.js +462 -0
  17. package/dist/chunk-4BQOABRV.js.map +1 -0
  18. package/dist/{chunk-DEF5CA7C.cjs → chunk-5VNCBW4R.cjs} +282 -1165
  19. package/dist/chunk-5VNCBW4R.cjs.map +1 -0
  20. package/dist/{chunk-SJ4DJOMZ.js → chunk-7AJ4LW5H.js} +163 -1019
  21. package/dist/chunk-7AJ4LW5H.js.map +1 -0
  22. package/dist/chunk-JASW45YF.cjs +510 -0
  23. package/dist/chunk-JASW45YF.cjs.map +1 -0
  24. package/dist/chunk-JSUHAYQ4.js +15 -0
  25. package/dist/chunk-JSUHAYQ4.js.map +1 -0
  26. package/dist/chunk-LN6HZMPI.js +1006 -0
  27. package/dist/chunk-LN6HZMPI.js.map +1 -0
  28. package/dist/chunk-LNJTDEQR.cjs +1937 -0
  29. package/dist/chunk-LNJTDEQR.cjs.map +1 -0
  30. package/dist/chunk-MKQEH7QS.cjs +1058 -0
  31. package/dist/chunk-MKQEH7QS.cjs.map +1 -0
  32. package/dist/chunk-TAKLMRU7.cjs +150 -0
  33. package/dist/chunk-TAKLMRU7.cjs.map +1 -0
  34. package/dist/chunk-TYCRRYCQ.js +1843 -0
  35. package/dist/chunk-TYCRRYCQ.js.map +1 -0
  36. package/dist/crm-C4XGSG6O.js +11 -0
  37. package/dist/crm-LTVCDNMK.cjs +20 -0
  38. package/dist/dasbor-OJLMSFTF.cjs +20 -0
  39. package/dist/dasbor-Y3UPFYFE.js +11 -0
  40. package/dist/edom-3GZUUB7H.cjs +20 -0
  41. package/dist/edom-K4Y2NV4K.js +11 -0
  42. package/dist/fakultas-DJRUVJBV.js +11 -0
  43. package/dist/fakultas-VVAQOPUX.cjs +20 -0
  44. package/dist/filter-D54KALbB.d.cts +436 -0
  45. package/dist/filter-D54KALbB.d.ts +436 -0
  46. package/dist/helpdesk-AWVC7BPE.cjs +20 -0
  47. package/dist/helpdesk-BAOXAU6G.js +11 -0
  48. package/dist/humas-7BMMJ3WF.js +11 -0
  49. package/dist/humas-H56JFUW6.cjs +20 -0
  50. package/dist/ikon.cjs +125 -0
  51. package/dist/ikon.cjs.map +1 -0
  52. package/dist/ikon.d.cts +140 -0
  53. package/dist/ikon.d.ts +140 -0
  54. package/dist/ikon.js +6 -0
  55. package/dist/ikon.js.map +1 -0
  56. package/dist/iku-7JLF2NIH.js +11 -0
  57. package/dist/iku-F47ZLMYJ.cjs +20 -0
  58. package/dist/index.cjs +544 -257
  59. package/dist/index.cjs.map +1 -1
  60. package/dist/index.d.cts +192 -2
  61. package/dist/index.d.ts +192 -2
  62. package/dist/index.js +126 -4
  63. package/dist/index.js.map +1 -1
  64. package/dist/induk-BGTGKRLL.js +11 -0
  65. package/dist/induk-DLYDMZAM.cjs +20 -0
  66. package/dist/integrasi-4VXNGA3V.cjs +20 -0
  67. package/dist/integrasi-IP3WWDO7.js +11 -0
  68. package/dist/kalender-DGQDGJCL.cjs +20 -0
  69. package/dist/kalender-FGGUBYKZ.js +11 -0
  70. package/dist/karier-H3HBFCQQ.js +11 -0
  71. package/dist/karier-QTU2P5YD.cjs +20 -0
  72. package/dist/katalog.cjs +1709 -0
  73. package/dist/katalog.cjs.map +1 -0
  74. package/dist/katalog.d.cts +645 -0
  75. package/dist/katalog.d.ts +645 -0
  76. package/dist/katalog.js +1626 -0
  77. package/dist/katalog.js.map +1 -0
  78. package/dist/kelulusan-BHFQM5N4.cjs +20 -0
  79. package/dist/kelulusan-ZR7CM6I5.js +11 -0
  80. package/dist/kemahasiswaan-EINWXAY7.cjs +20 -0
  81. package/dist/kemahasiswaan-NH2LEDH7.js +11 -0
  82. package/dist/kerjasama-FAOHZCML.js +11 -0
  83. package/dist/kerjasama-TXWJOU4Y.cjs +20 -0
  84. package/dist/keu-4TXF4FEP.cjs +20 -0
  85. package/dist/keu-SD7UOCDB.js +11 -0
  86. package/dist/kurikulum-SRO7TJYI.cjs +20 -0
  87. package/dist/kurikulum-XT7PZJOK.js +11 -0
  88. package/dist/layanan-RQ2AWCQ5.cjs +20 -0
  89. package/dist/layanan-Y6WUCSD2.js +11 -0
  90. package/dist/lms-5JYOSLBI.cjs +20 -0
  91. package/dist/lms-NTXMSHG2.js +11 -0
  92. package/dist/lppm-7DH7PRF3.cjs +20 -0
  93. package/dist/lppm-UXYGIOIF.js +11 -0
  94. package/dist/master-GKTTAKLF.cjs +20 -0
  95. package/dist/master-ZG4SPPDU.js +11 -0
  96. package/dist/mbkm-OGR72BTB.js +11 -0
  97. package/dist/mbkm-URKJHUIQ.cjs +20 -0
  98. package/dist/notifikasi-FMA26M4I.js +11 -0
  99. package/dist/notifikasi-QDCYIX7G.cjs +20 -0
  100. package/dist/pddikti-RJVYY2J4.cjs +20 -0
  101. package/dist/pddikti-VF2PXDKA.js +11 -0
  102. package/dist/{content-DaJPx5LX.d.cts → pemeliharaan-D5S-1lqW.d.ts} +38 -434
  103. package/dist/{content-DaJPx5LX.d.ts → pemeliharaan-Dr0HSxvZ.d.cts} +38 -434
  104. package/dist/perpustakaan-5RL33XG2.js +11 -0
  105. package/dist/perpustakaan-JXZW43MJ.cjs +20 -0
  106. package/dist/pilih-BEes_D3n.d.cts +205 -0
  107. package/dist/pilih-CEKqXMUS.d.ts +205 -0
  108. package/dist/pmb-EGTWW2ZH.cjs +20 -0
  109. package/dist/pmb-G7EAFJ3R.js +11 -0
  110. package/dist/portal-EI7TXN7H.cjs +20 -0
  111. package/dist/portal-MMUYX3RA.js +11 -0
  112. package/dist/portal-api-BJLO6AGI.js +11 -0
  113. package/dist/portal-api-Q6B3X6ZV.cjs +20 -0
  114. package/dist/profil-46FV46VH.cjs +20 -0
  115. package/dist/profil-4BIXIM6D.js +11 -0
  116. package/dist/referensi-HNYOJGNX.js +11 -0
  117. package/dist/referensi-VOT5BRCL.cjs +20 -0
  118. package/dist/registry.json +606 -4
  119. package/dist/repositori-2MJ43NXM.js +11 -0
  120. package/dist/repositori-KFXVJB7B.cjs +20 -0
  121. package/dist/rpl-2ZXHNSPF.js +11 -0
  122. package/dist/rpl-YF5MV2YA.cjs +20 -0
  123. package/dist/sarpras-CQ7QKVUN.js +11 -0
  124. package/dist/sarpras-XGPHHFCG.cjs +20 -0
  125. package/dist/scss/components/_animasi.scss +280 -0
  126. package/dist/scss/components/_ikon.scss +249 -0
  127. package/dist/scss/components/_katalog.scss +662 -0
  128. package/dist/scss/components/_platform.scss +364 -0
  129. package/dist/scss/index.scss +4 -0
  130. package/dist/sdm-N6LE66PP.cjs +20 -0
  131. package/dist/sdm-QKBXH3JF.js +11 -0
  132. package/dist/siakad.cjs +1389 -2915
  133. package/dist/siakad.cjs.map +1 -1
  134. package/dist/siakad.d.cts +31 -196
  135. package/dist/siakad.d.ts +31 -196
  136. package/dist/siakad.js +446 -2194
  137. package/dist/siakad.js.map +1 -1
  138. package/dist/spmi-J37NEYIU.js +11 -0
  139. package/dist/spmi-N6EU7KNC.cjs +20 -0
  140. package/dist/tracer-G6DDXVXC.cjs +20 -0
  141. package/dist/tracer-M3FTNWBG.js +11 -0
  142. package/dist/ui-unipo.css +1650 -0
  143. package/dist/ui-unipo.min.css +1 -1
  144. package/package.json +25 -3
  145. package/src/components/animasi.tsx +186 -0
  146. package/src/components/modal.tsx +113 -0
  147. package/src/components/overlays.tsx +6 -1
  148. package/src/components/pemeliharaan.tsx +152 -0
  149. package/src/components/platform.tsx +94 -0
  150. package/src/ikon/ilustrasi.tsx +283 -0
  151. package/src/ikon/index.ts +7 -0
  152. package/src/ikon/kotak.tsx +30 -0
  153. package/src/ikon/unipo.tsx +326 -0
  154. package/src/index.ts +8 -0
  155. package/src/katalog/aturan.ts +488 -0
  156. package/src/katalog/data/id.ts +749 -0
  157. package/src/katalog/data/indeks.json +1 -0
  158. package/src/katalog/data/muat.ts +47 -0
  159. package/src/katalog/ikon.tsx +11 -0
  160. package/src/katalog/index.ts +13 -0
  161. package/src/katalog/isian.tsx +372 -0
  162. package/src/katalog/katalog.tsx +138 -0
  163. package/src/katalog/kelola.tsx +620 -0
  164. package/src/katalog/modul.tsx +336 -0
  165. package/src/katalog/tampil.tsx +147 -0
  166. package/src/katalog/tipe.ts +141 -0
  167. package/src/katalog/wizard.tsx +155 -0
  168. package/src/lib/platform.ts +91 -0
  169. package/src/siakad/index.ts +1 -0
  170. package/src/siakad/pemeliharaan.tsx +118 -0
  171. package/src/siakad/provider.tsx +2 -0
  172. package/dist/chunk-DEF5CA7C.cjs.map +0 -1
  173. package/dist/chunk-SJ4DJOMZ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/siakad/provider.tsx","../src/siakad/galat.tsx","../src/siakad/negara.tsx","../src/siakad/cari.tsx","../src/siakad/filter-presets.tsx","../src/siakad/akademik.tsx","../src/siakad/tabel.tsx","../src/siakad/status-layanan.tsx","../src/siakad/kalender.tsx","../src/siakad/portal.tsx","../src/siakad/pmb.tsx","../src/siakad/kelengkapan.tsx","../src/siakad/dasbor.tsx","../src/siakad/kurikulum.tsx","../src/siakad/lms.tsx","../src/siakad/cbt.tsx","../src/siakad/navigasi.tsx","../src/siakad/log.tsx","../src/siakad/aplikasi.tsx","../src/siakad/pilih.tsx","../src/siakad/berkas.tsx"],"names":["React","jsx","TooltipProvider","Toaster","n","opsi","requestIdDari","jsxs","Alert","Button","RefreshCw","KodeLaporan","countries","React2","cn","React3","nama","Fragment","PenLine","OptionContent","Combobox","GraduationCap","Avatar","Badge","UserRound","Users","BookOpen","School","Building2","Globe2","MapPin","Select","React4","CircleDot","Briefcase","BadgeCheck","Layers","Calendar","ShieldCheck","Archive","Lock","FolderOpen","Inbox","Flag","Clock","Send","FilterBar","opt","Skeleton","formatNumber","DescriptionList","formatDate","Mail","Phone","Empty","LineChart","React5","SegmentBar","CalendarDays","Tabs","Sheet","fetch","React6","useFilterParams","filterToQuery","Mono","meta","toggle","SegmentedControl","Rows3","LayoutGrid","DataTable","KELAS","CellPrimary","Paperclip","Folder","React7","Globe","Database","KeyRound","Cloud","ServiceStatusPanel","CreditCard","HardDrive","MessageCircle","Video","ServiceList","toISODate","React8","eventsByDay","hariIni","EventCalendar","Download","EventLegend","formatEventRange","AgendaList","list","EVENT_COLORS","Galat","NewsGrid","RankedList","AnnouncementList","EventCard","FormGrid","Field","Input","RadioGroup","DatePicker","parseISODate","Textarea","Check","s","React9","p","ubah","Wizard","WizardReview","IdCard","Home","React10","CircleAlert","label","ArrowRight","Panel","StatGrid","muatDari","React11","StatCard","BookOpenCheck","Progress","UserPlus","UserCheck","TriangleAlert","BarChart","GroupedBarChart","DonutChart","BarList","formatPersen","DashboardGrid","Wallet","formatRupiahRingkas","Receipt","FileClock","PiggyBank","BudgetMeter","ClipboardCheck","FileText","ShieldAlert","CycleSteps","ActionList","FlaskConical","Newspaper","CalendarClock","MessageSquare","ActivityFeed","formatRelative","Funnel","React12","Target","Info","ProgressRing","dataFlag","Network","ListChecks","TableContainer","Table","ClipboardList","ChevronRight","Maximize2","ListTodo","FileQuestion","BellDot","formatTime","React13","MonitorCheck","React14","Timer","daftar","ArrowLeft","ConfirmDialog","CircleCheck","AppLogo","UnipoAppLogo","React15","Navbar","Faq","React16","Activity","CopyButton","Gauge","LogIn","Ban","LogOut","AppWindow","MonitorSmartphone","Settings2","Pagination","React17","Smartphone","Server","Card","InputGroup","Search","List","Plus","Pencil","Dialog","Checkbox","EyeOff","Eye","CodeBlock","teks","Switch","ImagePlus","UsersRound","Landmark","React18","r","React19","Dropzone","FileList"],"mappings":"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","file":"siakad.cjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport type { ApiResult, Meta, Siakad } from 'unipo-siakad-sdk';\nimport { Toaster, TooltipProvider } from '../components/overlays';\nimport { requestIdDari } from '../components/galat';\n\nconst SiakadContext = React.createContext<Siakad | null>(null);\n\nexport interface UnipoProviderProps {\n /**\n * Instans SDK. Di browser: `new Siakad({ baseUrl: '/bff/api', accessToken })`.\n * Jangan menaruh client_secret di kode yang dikirim ke browser.\n */\n siakad?: Siakad | null;\n children: React.ReactNode;\n /** Pasang Toaster + TooltipProvider (bawaan true). */\n withProviders?: boolean;\n}\n\n/** Penyedia konteks UNIPO: instans SDK untuk komponen terhubung, toast, dan tooltip. */\nexport function UnipoProvider({ siakad = null, children, withProviders = true }: UnipoProviderProps) {\n const inner = <SiakadContext.Provider value={siakad}>{children}</SiakadContext.Provider>;\n if (!withProviders) return inner;\n return (\n <TooltipProvider>\n <Toaster>{inner}</Toaster>\n </TooltipProvider>\n );\n}\n\n/** Instans SDK dari <UnipoProvider>. */\nexport function useSiakad(): Siakad {\n const s = React.useContext(SiakadContext);\n if (!s) throw new Error('Komponen ini butuh SDK: bungkus aplikasi dengan <UnipoProvider siakad={new Siakad(...)}>.');\n return s;\n}\nexport function useOptionalSiakad(): Siakad | null {\n return React.useContext(SiakadContext);\n}\n\n// ---------------------------------------------------------------- Query sederhana dengan cache\ntype Entry = { at: number; result: ApiResult<unknown>; promise?: Promise<ApiResult<unknown>> };\nconst caches = new WeakMap<object, Map<string, Entry>>();\nfunction cacheFor(s: object) {\n let c = caches.get(s);\n if (!c) caches.set(s, (c = new Map()));\n return c;\n}\nconst listeners = new Set<(prefix: string) => void>();\n// Permintaan yang sedang berjalan per kunci: beberapa widget dengan kunci sama berbagi satu panggilan API.\nconst inflight = new WeakMap<object, Map<string, Promise<unknown>>>();\nfunction inflightFor(s: object) {\n let m = inflight.get(s);\n if (!m) inflight.set(s, (m = new Map()));\n return m;\n}\n\n/** Buang cache yang kuncinya diawali `prefix` (mis. setelah menyimpan data) dan muat ulang komponen yang memakainya. */\nexport function invalidateSiakad(prefix = '') {\n listeners.forEach((l) => l(prefix));\n}\n\nexport interface QueryState<T> {\n data: T | undefined;\n meta: Meta | undefined;\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\nexport interface QueryOptions {\n /** Lama data dianggap segar (ms). Bawaan 30 detik. */\n staleTime?: number;\n enabled?: boolean;\n}\n\n/**\n * Ambil data dari SDK dengan cache per instans, batal otomatis, dan muat ulang saat kunci berubah.\n * const { data, loading } = useSiakadQuery(['prodi'], (s, signal) => s.referensi.getProdi({}, { signal }));\n */\nexport function useSiakadQuery<T>(key: ReadonlyArray<unknown>, fn: (siakad: Siakad, signal: AbortSignal) => Promise<ApiResult<T>>, opts: QueryOptions = {}): QueryState<T> {\n const siakad = useOptionalSiakad();\n const k = JSON.stringify(key);\n const { staleTime = 30_000, enabled = true } = opts;\n const [state, setState] = React.useState<{ result?: ApiResult<T>; loading: boolean; error: Error | null }>(() => {\n const hit = siakad ? cacheFor(siakad).get(k) : undefined;\n return { result: hit?.result as ApiResult<T> | undefined, loading: enabled && !hit, error: null };\n });\n const [nonce, setNonce] = React.useState(0);\n const fnRef = React.useRef(fn);\n fnRef.current = fn;\n\n React.useEffect(() => {\n const l = (prefix: string) => {\n if (k.startsWith(JSON.stringify(prefix ? [prefix] : []).slice(0, -1))) {\n if (siakad) cacheFor(siakad).delete(k);\n setNonce((n) => n + 1);\n }\n };\n listeners.add(l);\n return () => void listeners.delete(l);\n }, [k, siakad]);\n\n React.useEffect(() => {\n if (!enabled) return void setState((s) => ({ ...s, loading: false }));\n if (!siakad) return void setState({ loading: false, error: new Error('SDK belum dipasang di <UnipoProvider>.') });\n const cache = cacheFor(siakad);\n const hit = cache.get(k);\n if (hit && Date.now() - hit.at < staleTime && nonce === 0) {\n setState({ result: hit.result as ApiResult<T>, loading: false, error: null });\n return;\n }\n const ctrl = new AbortController();\n setState((s) => ({ ...s, loading: true, error: null }));\n const jalan = inflightFor(siakad);\n let p = jalan.get(k) as Promise<ApiResult<T>> | undefined;\n if (!p) {\n // Dibagi ke beberapa pemakai, jadi tidak dibatalkan saat satu pemakai dilepas.\n p = fnRef.current(siakad, new AbortController().signal).then((result) => {\n cache.set(k, { at: Date.now(), result });\n return result;\n });\n jalan.set(k, p);\n const lepas = () => jalan.delete(k);\n p.then(lepas, lepas);\n }\n p\n .then((result) => {\n if (!ctrl.signal.aborted) setState({ result, loading: false, error: null });\n })\n .catch((e: Error) => {\n if (!ctrl.signal.aborted && e?.name !== 'AbortError') setState((s) => ({ ...s, loading: false, error: e }));\n });\n return () => ctrl.abort();\n }, [k, siakad, enabled, staleTime, nonce]);\n\n return {\n data: state.result?.data,\n meta: state.result?.meta,\n loading: state.loading,\n error: state.error,\n refetch: () => {\n if (siakad) cacheFor(siakad).delete(k);\n setNonce((n) => n + 1);\n },\n };\n}\n\n/**\n * Pesan galat ramah dari galat SDK (SiakadError punya .status dan .message). Untuk galat server (5xx) pesan\n * menyertakan kode laporan (request_id); matikan dengan `{ kode: false }` bila kode ditampilkan terpisah\n * dengan <KodeLaporan />.\n */\nexport function pesanGalat(e: unknown, opsi: { kode?: boolean } = {}): string {\n const err = e as { status?: number; message?: string } | null;\n if (!err) return 'Terjadi kesalahan.';\n if (err.status === 401) return 'Sesi Anda berakhir. Silakan masuk lagi.';\n if (err.status === 403) return 'Akun Anda belum punya izin untuk data ini.';\n if (err.status === 404) return 'Data tidak ditemukan.';\n if (err.status === 429) return 'Terlalu banyak permintaan. Coba lagi sebentar lagi.';\n if (err.status && err.status >= 500) {\n // Sertakan kode laporan agar teks ini juga berguna di toast (tempat <KodeLaporan /> tidak bisa dipasang).\n const id = opsi.kode === false ? null : requestIdDari(e);\n return `Server SIAKAD sedang bermasalah. Coba lagi beberapa saat.${id ? ` Kode laporan: ${id}.` : ''}`;\n }\n return err.message || 'Terjadi kesalahan.';\n}\n","'use client';\nimport * as React from 'react';\nimport { RefreshCw } from 'lucide-react';\nimport { Alert } from '../components/display';\nimport { Button } from '../components/actions';\nimport { KodeLaporan } from '../components/galat';\nimport { pesanGalat } from './provider';\n\nexport interface GalatApiProps {\n /** Galat dari SDK/API (SiakadError, SsoAdminError, Error biasa). */\n error: unknown;\n /** Judul kotak. Bawaan \"Data tidak dapat dimuat\". */\n title?: React.ReactNode;\n /** Pesan pengganti; bawaan dari pesanGalat(). */\n message?: React.ReactNode;\n /** Tampilkan tombol \"Coba lagi\". */\n onRetry?: () => void;\n variant?: 'danger' | 'warning';\n className?: string;\n}\n\n/**\n * Kotak galat API standar: judul, pesan ramah, kode laporan (request_id) yang bisa disalin, dan tombol coba lagi.\n * Pakai ini untuk semua galat dari API agar pengguna selalu punya kode yang bisa disebutkan saat melapor.\n *\n * ```tsx\n * if (q.error) return <GalatApi error={q.error} onRetry={q.refetch} />;\n * ```\n */\nexport function GalatApi({ error, title = 'Data tidak dapat dimuat', message, onRetry, variant = 'danger', className }: GalatApiProps) {\n return (\n <Alert\n variant={variant}\n title={title}\n className={className}\n actions={\n onRetry && (\n <Button size=\"sm\" variant=\"outline\" onClick={onRetry}>\n <RefreshCw /> Coba lagi\n </Button>\n )\n }\n >\n {message ?? pesanGalat(error, { kode: false })}\n <KodeLaporan error={error} />\n </Alert>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { countries } from 'country-flag-icons';\nimport { cn } from '../lib/cn';\n\nlet flagUrl = (code: string) => `https://purecatamphetamine.github.io/country-flag-icons/3x2/${code}.svg`;\n\n/**\n * Atur sumber gambar bendera (SVG 3:2). Bawaan: CDN country-flag-icons.\n * Untuk aplikasi tanpa internet luar, salin `node_modules/country-flag-icons/3x2/*.svg` ke folder publik:\n * configureFlags((kode) => `/bendera/${kode}.svg`)\n */\nexport function configureFlags(fn: (code: string) => string) {\n flagUrl = fn;\n}\n\nexport interface Negara {\n /** ISO 3166-1 alpha-2, mis. \"ID\". */\n kode: string;\n /** Nama dalam bahasa Indonesia, mis. \"Indonesia\", \"Malaysia\", \"Arab Saudi\". */\n nama: string;\n}\n\nlet cached: Negara[] | null = null;\n/** Daftar negara (ISO 3166-1) dengan nama Indonesia dari Intl.DisplayNames; Indonesia di urutan pertama. */\nexport function daftarNegara(): Negara[] {\n if (cached) return cached;\n const dn = typeof Intl !== 'undefined' && 'DisplayNames' in Intl ? new Intl.DisplayNames(['id'], { type: 'region' }) : null;\n const list = countries\n .filter((c) => c.length === 2 && !['AC', 'TA', 'XK', 'EU'].includes(c))\n .map((kode) => ({ kode, nama: dn?.of(kode) ?? kode }))\n .sort((a, b) => a.nama.localeCompare(b.nama, 'id'));\n const id = list.findIndex((n) => n.kode === 'ID');\n if (id > 0) list.unshift(...list.splice(id, 1));\n return (cached = list);\n}\n\n/** Gambar bendera negara (rasio 3:2). */\nexport function Bendera({ kode, size = 20, className, title }: { kode: string; size?: number; className?: string; title?: string }) {\n const [gagal, setGagal] = React.useState(false);\n const h = Math.round((size * 2) / 3);\n if (gagal || !kode) return <span className={cn('u-flag', className)} style={{ width: size, height: h }} aria-hidden />;\n return <img className={cn('u-flag', className)} src={flagUrl(kode.toUpperCase())} width={size} height={h} alt={title ?? ''} loading=\"lazy\" onError={() => setGagal(true)} />;\n}\n","'use client';\nimport * as React from 'react';\nimport type { Siakad } from 'unipo-siakad-sdk';\nimport { BookOpen, Building2, Globe2, GraduationCap, MapPin, PenLine, School, UserRound, Users } from 'lucide-react';\nimport { Combobox, OptionContent, Select, type ComboboxProps, type SelectOption } from '../components/select';\nimport { Avatar } from '../components/display';\nimport { Badge } from '../components/actions';\nimport { Bendera, daftarNegara, type Negara } from './negara';\nimport { useOptionalSiakad, useSiakadQuery } from './provider';\n\n/** Props bersama semua komponen Cari*. */\nexport type CariProps<T> = Omit<ComboboxProps<T>, 'items' | 'loadItems' | 'itemToString' | 'itemKey' | 'renderItem'> & {\n /** Ganti sumber data (mis. data contoh atau endpoint lain). */\n load?: (q: string, signal: AbortSignal) => Promise<T[]>;\n /** Jumlah hasil per pencarian. Bawaan 20. */\n limit?: number;\n};\n\nfunction useLoader<T>(defaultLoad: ((s: Siakad, q: string, signal: AbortSignal, limit: number) => Promise<T[]>) | null, custom: CariProps<T>['load'], limit = 20) {\n const siakad = useOptionalSiakad();\n return React.useCallback(\n (q: string, signal: AbortSignal) => {\n if (custom) return custom(q, signal);\n if (!siakad || !defaultLoad) return Promise.reject(new Error('SDK belum dipasang di <UnipoProvider>.'));\n return defaultLoad(siakad, q, signal, limit);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [siakad, custom, limit],\n );\n}\n\n/**\n * Tambahkan butir \"ketik manual\" di akhir hasil bila nama yang diketik tidak ada di daftar\n * (sama seperti formulir PMB). Butir manual punya `manual: true` dan `kode: ''`.\n */\nfunction withManual<T extends { kode: string; nama: string; manual?: boolean }>(load: (q: string, signal: AbortSignal) => Promise<T[]>, enabled: boolean, min = 3) {\n if (!enabled) return load;\n return async (q: string, signal: AbortSignal) => {\n const rows = await load(q, signal).catch((e) => {\n if (e?.name === 'AbortError') throw e;\n return [] as T[];\n });\n const text = q.trim();\n if (text.length < min || rows.some((r) => r.nama.toLowerCase() === text.toLowerCase())) return rows;\n return [...rows, { kode: '', nama: text, manual: true } as T];\n };\n}\nconst ManualItem = ({ nama }: { nama: string }) => (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n <PenLine size={14} />\n </span>\n <OptionContent title={`Pakai \"${nama}\"`} meta=\"Tidak ada di daftar, ketik manual\" />\n </>\n);\n\n// ================================================================ Mahasiswa\nexport interface MahasiswaOption {\n nim: string;\n nama: string;\n nama_prodi?: string | null;\n tahun_masuk?: string | null;\n status_aktif?: string | null;\n status_aktif_label?: string | null;\n foto?: string | null;\n [k: string]: unknown;\n}\nconst STATUS_TONE: Record<string, 'success' | 'warning' | 'danger' | 'info' | 'neutral'> = { A: 'success', C: 'warning', D: 'danger', K: 'danger', L: 'info', N: 'neutral' };\n\nexport interface CariMahasiswaProps extends CariProps<MahasiswaOption> {\n /** Saringan tambahan ke GET /v1/mahasiswa (prodi, angkatan, status, nidn_pa, kelas). */\n filter?: { prodi?: string; angkatan?: string; status?: string; nidn_pa?: string; kelas?: string };\n}\n/** Cari mahasiswa berdasarkan NIM atau nama (SDK: mahasiswa.list). Token dosen otomatis dibatasi ke mahasiswa bimbingannya. */\nexport function CariMahasiswa({ load, limit, filter, placeholder = 'Cari NIM atau nama mahasiswa', ...props }: CariMahasiswaProps) {\n const f = JSON.stringify(filter ?? {});\n const loader = useLoader<MahasiswaOption>(\n async (s, q, signal, per_page) => (await s.mahasiswa.list({ ...JSON.parse(f), q: q || undefined, per_page }, { signal })).data as MahasiswaOption[],\n load,\n limit,\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const keyed = React.useCallback(loader, [loader, f]);\n return (\n <Combobox<MahasiswaOption>\n {...props}\n placeholder={placeholder}\n icon={<GraduationCap />}\n loadItems={keyed}\n itemToString={(m) => `${m.nim} · ${m.nama}`}\n itemKey={(m) => m.nim}\n emptyText=\"Mahasiswa tidak ditemukan.\"\n renderItem={(m) => (\n <>\n <Avatar name={m.nama} src={m.foto} size=\"sm\" />\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{m.nama}</span>\n <span className=\"u-option-meta\">\n <span className=\"u-mono\">{m.nim}</span>\n {m.nama_prodi ? ` · ${m.nama_prodi}` : ''}\n {m.tahun_masuk ? ` · ${m.tahun_masuk}` : ''}\n </span>\n </span>\n {m.status_aktif_label && (\n <Badge variant={STATUS_TONE[m.status_aktif ?? ''] ?? 'neutral'} dot>\n {m.status_aktif_label}\n </Badge>\n )}\n </>\n )}\n />\n );\n}\n\n// ================================================================ Dosen\nexport interface DosenOption {\n nidn: string;\n nama: string;\n nama_lengkap?: string | null;\n nama_prodi?: string | null;\n jabatan_akademik?: string | null;\n foto?: string | null;\n [k: string]: unknown;\n}\n/** Cari dosen berdasarkan NIDN atau nama (SDK: dosen.list). */\nexport function CariDosen({ load, limit, filter, placeholder = 'Cari NIDN atau nama dosen', ...props }: CariProps<DosenOption> & { filter?: { prodi?: string; status?: string } }) {\n const f = JSON.stringify(filter ?? {});\n const loader = useLoader<DosenOption>(async (s, q, signal, per_page) => (await s.dosen.list({ ...JSON.parse(f), q: q || undefined, per_page }, { signal })).data as DosenOption[], load, limit);\n return (\n <Combobox<DosenOption>\n {...props}\n placeholder={placeholder}\n icon={<UserRound />}\n loadItems={loader}\n itemToString={(d) => d.nama_lengkap || d.nama}\n itemKey={(d) => d.nidn}\n emptyText=\"Dosen tidak ditemukan.\"\n renderItem={(d) => (\n <>\n <Avatar name={d.nama} src={d.foto} size=\"sm\" />\n <OptionContent title={d.nama_lengkap || d.nama} meta={[d.nidn && `NIDN ${d.nidn}`, d.jabatan_akademik, d.nama_prodi].filter(Boolean).join(' · ')} />\n </>\n )}\n />\n );\n}\n\n// ================================================================ Pegawai (dosen + tendik)\nexport interface PegawaiOption {\n id: number;\n nama: string;\n nama_lengkap?: string | null;\n jenis?: 'dosen' | 'tendik';\n nidn?: string | null;\n nip?: string | null;\n unit_nama?: string | null;\n foto?: string | null;\n [k: string]: unknown;\n}\n/** Cari pegawai/tendik/dosen dari modul SDM (SDK: sdm.getPegawai). */\nexport function CariPegawai({ load, limit, jenis, placeholder = 'Cari nama, NIP, atau NIDN pegawai', ...props }: CariProps<PegawaiOption> & { jenis?: 'dosen' | 'tendik' }) {\n const loader = useLoader<PegawaiOption>(async (s, q, signal, per_page) => (await s.sdm.getPegawai({ jenis, q: q || undefined, per_page }, { signal })).data as PegawaiOption[], load, limit);\n return (\n <Combobox<PegawaiOption>\n {...props}\n placeholder={placeholder}\n icon={<Users />}\n loadItems={loader}\n itemToString={(p) => p.nama_lengkap || p.nama}\n itemKey={(p) => String(p.id)}\n emptyText=\"Pegawai tidak ditemukan.\"\n renderItem={(p) => (\n <>\n <Avatar name={p.nama} src={p.foto} size=\"sm\" />\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{p.nama_lengkap || p.nama}</span>\n <span className=\"u-option-meta\">{[p.nip && `NIP ${p.nip}`, p.unit_nama].filter(Boolean).join(' · ')}</span>\n </span>\n {p.jenis && <Badge variant={p.jenis === 'dosen' ? 'primary' : 'secondary'}>{p.jenis === 'dosen' ? 'Dosen' : 'Tendik'}</Badge>}\n </>\n )}\n />\n );\n}\n\n// ================================================================ Mata kuliah\nexport interface MataKuliahOption {\n id?: number;\n kode_mk: string;\n nama_mk: string;\n sks_mk?: number | null;\n semester?: string | number | null;\n kode_prodi?: string | null;\n [k: string]: unknown;\n}\n/** Cari mata kuliah berdasarkan kode atau nama (SDK: mataKuliah.list). */\nexport function CariMataKuliah({ load, limit, filter, placeholder = 'Cari kode atau nama mata kuliah', ...props }: CariProps<MataKuliahOption> & { filter?: { prodi?: string; tahun_id?: string; semester?: string } }) {\n const f = JSON.stringify(filter ?? {});\n const loader = useLoader<MataKuliahOption>(async (s, q, signal, per_page) => (await s.mataKuliah.list({ ...JSON.parse(f), q: q || undefined, per_page }, { signal })).data as MataKuliahOption[], load, limit);\n return (\n <Combobox<MataKuliahOption>\n {...props}\n placeholder={placeholder}\n icon={<BookOpen />}\n loadItems={loader}\n itemToString={(m) => `${m.kode_mk} · ${m.nama_mk}`}\n itemKey={(m) => `${m.kode_prodi ?? ''}:${m.kode_mk}`}\n emptyText=\"Mata kuliah tidak ditemukan.\"\n renderItem={(m) => (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n <BookOpen size={14} />\n </span>\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{m.nama_mk}</span>\n <span className=\"u-option-meta\">\n <span className=\"u-mono\">{m.kode_mk}</span>\n {m.semester ? ` · Semester ${m.semester}` : ''}\n </span>\n </span>\n {m.sks_mk != null && <Badge variant=\"primary\" shape=\"square\">{m.sks_mk} SKS</Badge>}\n </>\n )}\n />\n );\n}\n\n// ================================================================ Sekolah asal\nexport interface SekolahOption {\n kode: string;\n nama: string;\n kota?: string | null;\n jenis?: string | null;\n /** true bila nama diketik manual (tidak ada di daftar); kode kosong. */\n manual?: boolean;\n [k: string]: unknown;\n}\n/**\n * Cari sekolah asal (SMA/SMK/MA) seperti formulir PMB (SDK: pmb.getInfoSekolah, publik, minimal 3 huruf).\n * Sekolah yang tidak ada di daftar bisa diketik manual (matikan dengan allowManual={false}).\n */\nexport function CariSekolah({ load, limit, allowManual = true, placeholder = 'Ketik nama sekolah, mis. SMA Negeri 1 Marisa', ...props }: CariProps<SekolahOption> & { allowManual?: boolean }) {\n const base = useLoader<SekolahOption>(async (s, q, signal) => (await s.pmb.getInfoSekolah({ q }, { signal })).data as SekolahOption[], load, limit);\n const loader = React.useMemo(() => withManual(base, allowManual), [base, allowManual]);\n return (\n <Combobox<SekolahOption>\n {...props}\n placeholder={placeholder}\n icon={<School />}\n loadItems={loader}\n minQueryLength={3}\n hintText=\"Ketik minimal 3 huruf nama atau NPSN sekolah.\"\n itemToString={(s) => s.nama}\n itemKey={(s) => (s.manual ? `manual:${s.nama}` : s.kode)}\n emptyText=\"Sekolah tidak ditemukan. Periksa ejaan atau hubungi panitia.\"\n renderItem={(s) =>\n s.manual ? (\n <ManualItem nama={s.nama} />\n ) : (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n <School size={14} />\n </span>\n <OptionContent title={s.nama} meta={[s.jenis, s.kota].filter(Boolean).join(' · ')} />\n </>\n )\n }\n />\n );\n}\n\n// ================================================================ Perguruan tinggi\nexport interface PerguruanTinggiOption {\n kode: string;\n nama: string;\n singkatan?: string | null;\n kota?: string | null;\n logo?: string | null;\n manual?: boolean;\n [k: string]: unknown;\n}\n/**\n * Cari perguruan tinggi asal (mahasiswa pindahan/alih jenjang, studi lanjut dosen) dari referensi SIAKAD\n * `r_perguruan_tinggi` lewat `GET /v1/pmb/info/perguruan-tinggi` (publik, minimal 3 huruf; SDK 1.1:\n * pmb.getInfoPerguruanTinggi). Nama yang tidak ada di daftar bisa diketik manual, seperti formulir PMB.\n */\nexport function CariPerguruanTinggi({ load, limit, allowManual = true, placeholder = 'Cari atau ketik nama perguruan tinggi', ...props }: CariProps<PerguruanTinggiOption> & { allowManual?: boolean }) {\n const base = useLoader<PerguruanTinggiOption>(\n // Lewat request() agar juga jalan dengan SDK 1.0 yang belum punya metode getInfoPerguruanTinggi.\n async (s, q, signal) => (await s.request<PerguruanTinggiOption[]>({ method: 'GET', path: '/v1/pmb/info/perguruan-tinggi', query: { q }, public: true }, { signal })).data,\n load,\n limit,\n );\n const loader = React.useMemo(() => withManual(base, allowManual), [base, allowManual]);\n return (\n <Combobox<PerguruanTinggiOption>\n {...props}\n placeholder={placeholder}\n icon={<Building2 />}\n loadItems={loader}\n itemToString={(p) => p.nama}\n itemKey={(p) => (p.manual ? `manual:${p.nama}` : p.kode)}\n minQueryLength={3}\n hintText=\"Ketik minimal 3 huruf nama, singkatan, atau kode PT.\"\n emptyText=\"Perguruan tinggi tidak ditemukan.\"\n renderItem={(p) =>\n p.manual ? (\n <ManualItem nama={p.nama} />\n ) : (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n {p.logo ? <img src={p.logo} alt=\"\" /> : <Building2 size={14} />}\n </span>\n <OptionContent title={p.nama} meta={[p.singkatan, p.kota].filter(Boolean).join(' · ')} />\n </>\n )\n }\n />\n );\n}\n\n// ================================================================ Negara (data lokal + bendera)\n/** Cari negara dengan bendera (kewarganegaraan, negara asal mahasiswa asing, alamat luar negeri). Tidak butuh API. */\nexport function CariNegara({ placeholder = 'Cari negara', ...props }: Omit<ComboboxProps<Negara>, 'items' | 'loadItems' | 'itemToString' | 'itemKey' | 'renderItem'>) {\n const items = React.useMemo(daftarNegara, []);\n const value = props.value;\n return (\n <Combobox<Negara>\n {...props}\n placeholder={placeholder}\n icon={value ? <Bendera kode={value.kode} size={18} /> : <Globe2 />}\n items={items}\n itemToString={(n) => n.nama}\n itemKey={(n) => n.kode}\n emptyText=\"Negara tidak ditemukan.\"\n renderItem={(n) => (\n <>\n <span className=\"u-option-media\" data-shape=\"flag\">\n <Bendera kode={n.kode} size={22} />\n </span>\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{n.nama}</span>\n </span>\n <span className=\"u-option-meta u-mono\">{n.kode}</span>\n </>\n )}\n />\n );\n}\n\n// ================================================================ Wilayah\nexport interface WilayahOption {\n kode: string;\n nama: string;\n [k: string]: unknown;\n}\n/** Pilih provinsi lalu kabupaten/kota (SDK: tracer.getReferensiWilayah). */\nexport function CariWilayah({ propinsi, placeholder, ...props }: CariProps<WilayahOption> & { /** Kode provinsi: bila diisi, menampilkan kabupaten/kota di provinsi itu. */ propinsi?: string }) {\n const { data, loading } = useSiakadQuery(['wilayah', propinsi ?? ''], (s, signal) => s.tracer.getReferensiWilayah(propinsi ? { propinsi } : {}, { signal }));\n const items = ((data as Array<Record<string, unknown>> | undefined) ?? []).map((w) => ({ kode: String(w.kode ?? w.id), nama: String(w.nama ?? '') }));\n return (\n <Combobox<WilayahOption>\n {...props}\n placeholder={placeholder ?? (propinsi ? 'Cari kabupaten/kota' : 'Cari provinsi')}\n icon={<MapPin />}\n items={items}\n emptyText={loading ? 'Memuat…' : 'Wilayah tidak ditemukan.'}\n itemToString={(w) => w.nama}\n itemKey={(w) => w.kode}\n />\n );\n}\n\n// ================================================================ Pilihan referensi (Select)\ntype PilihProps<V> = { value?: V | null; onValueChange?: (v: V | null) => void; placeholder?: string; className?: string; id?: string; disabled?: boolean; size?: 'sm' | 'md' | 'lg'; 'aria-label'?: string };\n\n/** Pilih program studi, dikelompokkan per fakultas (SDK: referensi.getProdi). */\nexport function PilihProdi({ placeholder = 'Semua program studi', ...props }: PilihProps<string>) {\n const { data } = useSiakadQuery(['referensi', 'prodi'], (s, signal) => s.referensi.getProdi({}, { signal }), { staleTime: 10 * 60_000 });\n const options: SelectOption<string>[] = (data ?? []).map((p) => ({\n value: String(p.kode_prodi),\n label: `${p.kode_jenjang ? p.kode_jenjang + ' ' : ''}${p.nama_prodi}`,\n group: p.nama_fakultas ?? undefined,\n }));\n return <Select<string> {...props} placeholder={placeholder} options={options} />;\n}\n\n/** Pilih tahun akademik/periode (SDK: referensi.getTahunAkademik). */\nexport function PilihTahunAkademik({ placeholder = 'Pilih periode', ...props }: PilihProps<string>) {\n const { data } = useSiakadQuery(['referensi', 'tahun'], (s, signal) => s.referensi.getTahunAkademik({}, { signal }), { staleTime: 10 * 60_000 });\n const options: SelectOption<string>[] = ((data as Array<Record<string, unknown>> | undefined) ?? []).map((t) => ({\n value: String(t.tahun_id),\n label: String(t.nama_tahun ?? t.tahun_id),\n description: t.aktif === true || t.buka === 'Y' ? 'Aktif' : undefined,\n }));\n return <Select<string> {...props} placeholder={placeholder} options={options} />;\n}\n\n","'use client';\nimport * as React from 'react';\nimport { Archive, BadgeCheck, Briefcase, Building2, Calendar, CircleDot, Clock, Flag, FolderOpen, GraduationCap, Inbox, Layers, Lock, Send, ShieldCheck, Users } from 'lucide-react';\nimport { FilterBar, type FilterBarProps, type FilterField, type FilterOption } from '../components/filter';\nimport { useSiakadQuery } from './provider';\n\nconst opt = (pairs: Array<[string, string]>): FilterOption[] => pairs.map(([value, label]) => ({ value, label, text: label }));\n\n/** Opsi program studi dari SDK (referensi.getProdi), untuk dipakai di saringan mana pun. */\nexport function useProdiOptions(): FilterOption[] {\n const { data } = useSiakadQuery(['referensi', 'prodi'], (s, signal) => s.referensi.getProdi({}, { signal }), { staleTime: 10 * 60_000 });\n return React.useMemo(() => (data ?? []).map((p) => ({ value: String(p.kode_prodi), label: `${p.kode_jenjang ?? ''} ${p.nama_prodi ?? ''}`.trim(), text: String(p.nama_prodi ?? '') })), [data]);\n}\n\n/** Opsi tahun akademik dari SDK (referensi.getTahunAkademik). */\nexport function useTahunOptions(enabled = true): FilterOption[] {\n const { data } = useSiakadQuery(['referensi', 'tahun'], (s, signal) => s.referensi.getTahunAkademik({}, { signal }), { staleTime: 10 * 60_000, enabled });\n return React.useMemo(() => ((data as Array<Record<string, unknown>> | undefined) ?? []).map((t) => ({ value: String(t.tahun_id), label: String(t.nama_tahun ?? t.tahun_id) })), [data]);\n}\n\nfunction angkatanOptions(n = 8): FilterOption[] {\n const y = new Date().getFullYear();\n return Array.from({ length: n }, (_, i) => ({ value: String(y - i), label: String(y - i) }));\n}\n\n// ---------------------------------------------------------------- Kode status\nexport const STATUS_MAHASISWA = opt([\n ['A', 'Aktif'],\n ['C', 'Cuti'],\n ['N', 'Non-aktif'],\n ['L', 'Lulus'],\n ['K', 'Keluar'],\n ['D', 'Drop out'],\n]);\nexport const SIFAT_SURAT = opt([\n ['biasa', 'Biasa'],\n ['penting', 'Penting'],\n ['segera', 'Segera'],\n ['sangat_segera', 'Sangat segera'],\n]);\nexport const STATUS_SURAT_MASUK = opt([\n ['baru', 'Baru'],\n ['didisposisi', 'Didisposisi'],\n ['diproses', 'Diproses'],\n ['selesai', 'Selesai'],\n ['diarsipkan', 'Diarsipkan'],\n ['dibatalkan', 'Dibatalkan'],\n]);\nexport const STATUS_SURAT_KELUAR = opt([\n ['draf', 'Draf'],\n ['review', 'Ditinjau'],\n ['revisi', 'Revisi'],\n ['disetujui', 'Disetujui'],\n ['terkirim', 'Terkirim'],\n ['diarsipkan', 'Diarsipkan'],\n ['dibatalkan', 'Dibatalkan'],\n]);\nexport const STATUS_ARSIP = opt([\n ['aktif', 'Aktif'],\n ['inaktif', 'Inaktif'],\n ['permanen', 'Permanen'],\n ['dimusnahkan', 'Dimusnahkan'],\n ['diserahkan', 'Diserahkan'],\n]);\nexport const STATUS_VERIFIKASI = opt([\n ['diajukan', 'Diajukan'],\n ['terverifikasi', 'Terverifikasi'],\n ['ditolak', 'Ditolak'],\n ['tidak_perlu', 'Tidak perlu'],\n]);\nexport const KEAMANAN_SURAT = opt([\n ['biasa', 'Biasa'],\n ['terbatas', 'Terbatas'],\n ['rahasia', 'Rahasia'],\n ['sangat_rahasia', 'Sangat rahasia'],\n]);\nexport const AKSES_ARSIP = opt([\n ['publik', 'Publik'],\n ['internal', 'Internal'],\n ['terbatas', 'Terbatas'],\n ['rahasia', 'Rahasia'],\n]);\nexport const PEMILIK_ARSIP = opt([\n ['universitas', 'Universitas'],\n ['fakultas', 'Fakultas'],\n ['prodi', 'Program studi'],\n ['unit', 'Unit'],\n ['dosen', 'Dosen'],\n ['mahasiswa', 'Mahasiswa'],\n]);\nexport const STATUS_PEGAWAI = opt([\n ['aktif', 'Aktif'],\n ['cuti', 'Cuti'],\n ['tugas_belajar', 'Tugas belajar'],\n ['izin_belajar', 'Izin belajar'],\n ['diperbantukan', 'Diperbantukan'],\n ['nonaktif', 'Non-aktif'],\n ['pensiun', 'Pensiun'],\n ['keluar', 'Keluar'],\n]);\nexport const JABATAN_AKADEMIK = opt([\n ['tenaga_pengajar', 'Tenaga pengajar'],\n ['asisten_ahli', 'Asisten Ahli'],\n ['lektor', 'Lektor'],\n ['lektor_kepala', 'Lektor Kepala'],\n ['guru_besar', 'Guru Besar'],\n]);\n\n// ---------------------------------------------------------------- Definisi saringan per data\n/** Saringan siap pakai: kunci field sama dengan parameter query endpoint SDK terkait. */\nexport function useFilterFields(jenis: FilterPreset): FilterField[] {\n const prodi = useProdiOptions();\n const tahun = useTahunOptions(jenis === 'mata-kuliah');\n return React.useMemo(() => {\n const fProdi: FilterField = { key: 'prodi', label: 'Prodi', type: 'select', options: prodi, icon: <Building2 />, searchable: true };\n switch (jenis) {\n case 'mahasiswa':\n return [\n fProdi,\n { key: 'angkatan', label: 'Angkatan', type: 'select', options: angkatanOptions(), icon: <GraduationCap /> },\n { key: 'status', label: 'Status', type: 'select', options: STATUS_MAHASISWA, icon: <CircleDot /> },\n { key: 'kelas', label: 'Kelas', type: 'select', options: opt([['R', 'Reguler'], ['K', 'Karyawan'], ['D', 'Daring']]), icon: <Users /> },\n ];\n case 'dosen':\n return [\n fProdi,\n { key: 'status', label: 'Status', type: 'select', options: opt([['A', 'Aktif'], ['T', 'Tugas belajar'], ['C', 'Cuti'], ['K', 'Keluar']]), icon: <CircleDot /> },\n ];\n case 'pegawai':\n return [\n { key: 'jenis', label: 'Jenis', type: 'select', options: opt([['dosen', 'Dosen'], ['tendik', 'Tenaga kependidikan']]), icon: <Users /> },\n { key: 'kategori', label: 'Kategori', type: 'select', options: opt([['tetap', 'Tetap'], ['tidak_tetap', 'Tidak tetap']]), icon: <Briefcase /> },\n { key: 'status_aktif', label: 'Status', type: 'select', options: STATUS_PEGAWAI, icon: <CircleDot /> },\n { key: 'kode_prodi', label: 'Prodi', type: 'select', options: prodi, icon: <Building2 />, searchable: true },\n { key: 'serdos', label: 'Bersertifikat dosen', type: 'boolean', icon: <BadgeCheck /> },\n ];\n case 'mata-kuliah':\n return [\n fProdi,\n { key: 'semester', label: 'Semester', type: 'select', options: Array.from({ length: 8 }, (_, i) => ({ value: String(i + 1), label: `Semester ${i + 1}` })), icon: <Layers /> },\n { key: 'tahun_id', label: 'Tahun akademik', type: 'select', options: tahun, icon: <Calendar /> },\n ];\n case 'dokumen':\n return [\n { key: 'pemilik_jenis', label: 'Pemilik', type: 'select', options: PEMILIK_ARSIP, icon: <Users /> },\n { key: 'status_verifikasi', label: 'Verifikasi', type: 'select', options: STATUS_VERIFIKASI, icon: <ShieldCheck /> },\n { key: 'status_arsip', label: 'Status arsip', type: 'select', options: STATUS_ARSIP, icon: <Archive /> },\n { key: 'akses', label: 'Akses', type: 'select', options: AKSES_ARSIP, icon: <Lock /> },\n { key: 'berlaku', label: 'Masa berlaku', type: 'select', options: opt([['berlaku', 'Masih berlaku'], ['akan_habis', 'Akan habis (90 hari)'], ['habis', 'Sudah habis']]), icon: <Calendar /> },\n ];\n case 'berkas':\n return [\n { key: 'status', label: 'Status berkas', type: 'select', options: opt([['terbuka', 'Terbuka'], ['ditutup', 'Ditutup']]), icon: <FolderOpen /> },\n { key: 'status_arsip', label: 'Status arsip', type: 'select', options: STATUS_ARSIP, icon: <Archive /> },\n { key: 'tahun', label: 'Tahun', type: 'select', options: angkatanOptions(10), icon: <Calendar /> },\n ];\n case 'surat-masuk':\n return [\n { key: 'status', label: 'Status', type: 'multi', options: STATUS_SURAT_MASUK, icon: <Inbox /> },\n { key: 'sifat', label: 'Sifat', type: 'multi', options: SIFAT_SURAT, icon: <Flag /> },\n { key: 'keamanan', label: 'Keamanan', type: 'multi', options: KEAMANAN_SURAT, icon: <Lock /> },\n { key: 'tanggal', label: 'Tanggal surat', type: 'date-range', params: ['dari', 'sampai'], icon: <Calendar /> },\n { key: 'perlu_tindakan', label: 'Perlu tindakan saya', type: 'boolean', icon: <BadgeCheck /> },\n { key: 'lewat_batas', label: 'Lewat batas waktu', type: 'boolean', icon: <Clock /> },\n ];\n case 'surat-keluar':\n return [\n { key: 'status', label: 'Status', type: 'multi', options: STATUS_SURAT_KELUAR, icon: <Send /> },\n { key: 'sifat', label: 'Sifat', type: 'multi', options: SIFAT_SURAT, icon: <Flag /> },\n { key: 'keamanan', label: 'Keamanan', type: 'multi', options: KEAMANAN_SURAT, icon: <Lock /> },\n { key: 'tanggal', label: 'Tanggal', type: 'date-range', params: ['dari', 'sampai'], icon: <Calendar /> },\n { key: 'perlu_tindakan', label: 'Menunggu persetujuan saya', type: 'boolean', icon: <BadgeCheck /> },\n ];\n }\n }, [jenis, prodi, tahun]);\n}\n\nexport type FilterPreset = 'mahasiswa' | 'dosen' | 'pegawai' | 'mata-kuliah' | 'dokumen' | 'berkas' | 'surat-masuk' | 'surat-keluar';\n\nconst PLACEHOLDER: Record<FilterPreset, [string, string]> = {\n mahasiswa: ['Cari NIM atau nama', 'mahasiswa'],\n dosen: ['Cari NIDN atau nama', 'dosen'],\n pegawai: ['Cari nama, NIP, NIDN', 'pegawai'],\n 'mata-kuliah': ['Cari kode atau nama MK', 'mata kuliah'],\n dokumen: ['Cari judul atau nomor dokumen', 'dokumen'],\n berkas: ['Cari nomor atau judul berkas', 'berkas'],\n 'surat-masuk': ['Cari nomor, perihal, atau pengirim', 'surat'],\n 'surat-keluar': ['Cari nomor, perihal, atau tujuan', 'surat'],\n};\n\nexport type PresetFilterProps = Omit<FilterBarProps, 'fields'> & {\n /** Tambah atau ganti field bawaan. */\n extraFields?: FilterField[];\n /** Sembunyikan field bawaan berdasarkan key. */\n hide?: string[];\n};\n\nfunction makePreset(jenis: FilterPreset) {\n function Preset({ extraFields = [], hide = [], search, resultLabel, ...props }: PresetFilterProps) {\n const base = useFilterFields(jenis).filter((f) => !hide.includes(f.key));\n const fields = [...base.filter((f) => !extraFields.some((e) => e.key === f.key)), ...extraFields];\n return <FilterBar fields={fields} search={search ?? { placeholder: PLACEHOLDER[jenis][0] }} resultLabel={resultLabel ?? PLACEHOLDER[jenis][1]} {...props} />;\n }\n Preset.displayName = `Filter(${jenis})`;\n return Preset;\n}\n\n/** Saringan mahasiswa: prodi (dari SDK), angkatan, status, kelas → cocok untuk mahasiswa.list(query). */\nexport const FilterMahasiswa = makePreset('mahasiswa');\n/** Saringan dosen: prodi, status → dosen.list(query). Jabatan dan serdos ada di FilterPegawai (sdm.getPegawai). */\nexport const FilterDosen = makePreset('dosen');\n/** Saringan pegawai/tendik: jenis, kategori, status, prodi, serdos → sdm.getPegawai(query). */\nexport const FilterPegawai = makePreset('pegawai');\n/** Saringan mata kuliah: prodi, semester, tahun akademik → mataKuliah.list(query). */\nexport const FilterMataKuliah = makePreset('mata-kuliah');\n/** Saringan dokumen arsip: pemilik, verifikasi, status arsip, akses, masa berlaku → arsip.getDokumen(query). */\nexport const FilterDokumen = makePreset('dokumen');\n/** Saringan berkas arsip: status berkas, status arsip, tahun → arsip.getBerkas(query). */\nexport const FilterBerkas = makePreset('berkas');\n/** Saringan surat masuk: status, sifat, keamanan, tanggal (dari/sampai), perlu tindakan, lewat batas → arsip.getSuratMasuk(query). */\nexport const FilterSuratMasuk = makePreset('surat-masuk');\n/** Saringan surat keluar: status, sifat, keamanan, tanggal (dari/sampai), menunggu persetujuan → arsip.getSuratKeluar(query). */\nexport const FilterSuratKeluar = makePreset('surat-keluar');\n","'use client';\nimport * as React from 'react';\nimport { BookOpen, CalendarDays, GraduationCap, Mail, MapPin, Phone, RefreshCw, Users } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Avatar, DescriptionList, Empty, Tabs } from '../components/display';\nimport { LineChart, SegmentBar } from '../components/charts';\nimport { Sheet } from '../components/overlays';\nimport { pesanGalat, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/*\n * Detail data akademik dari API SIAKAD: profil mahasiswa (biodata, riwayat studi, KRS, KHS, transkrip),\n * profil dosen (jadwal mengajar, mahasiswa bimbingan), dan detail mata kuliah (kelas yang dibuka).\n * Setiap bagian bisa dipakai sendiri; Detail* menyusunnya dalam tab, SheetDetail* membukanya sebagai panel samping.\n */\n\ntype Row = Record<string, any>;\ntype Angka = number | string | null | undefined;\nconst n = (v: Angka) => (v == null || v === '' ? 0 : Number(v) || 0);\nconst ip = (v: Angka) => (v == null || v === '' ? '–' : Number(v).toFixed(2));\n\n// ================================================================ Tipe ringkas\nexport interface MataKuliahNilai {\n kode_mk?: string | null;\n nama_mk?: string | null;\n tahun_id?: string | null;\n semester?: number | null;\n kelas?: string | null;\n sks?: number | null;\n nilai_huruf?: string | null;\n bobot?: number | null;\n mutu?: number | null;\n nilai_ditampilkan?: boolean;\n}\nexport interface KhsPeriode {\n nim?: string;\n tahun_id?: string | null;\n mata_kuliah?: MataKuliahNilai[];\n jumlah_sks?: number | null;\n ips?: { sks?: number | null; nilai?: number | null } | null;\n ipk?: { sks?: number | null; nilai?: number | null } | null;\n}\nexport interface StatusSemesterData {\n nim: string;\n status_semester: Array<{ tahun_id: string; kode_prodi?: string; status: string; total_sks?: Angka; total_ipk?: Angka; tanggal_her?: string | null }>;\n cuti?: Array<{ tahun_id: string; semester?: number; tanggal_mulai?: string; tanggal_akhir?: string; status_cuti?: string; keterangan?: string | null }>;\n}\n\n// ================================================================ Hook\nconst opt = { staleTime: 60_000 };\nexport function useMahasiswa(nim: string | undefined) {\n return useSiakadQuery<Row>(['mhs', nim], (s, signal) => s.mahasiswa.getByNim(nim!, {}, { signal }) as never, { ...opt, enabled: !!nim });\n}\nexport function useStatusSemester(nim: string | undefined) {\n return useSiakadQuery<StatusSemesterData>(['mhs', nim, 'status'], (s, signal) => s.mahasiswa.getByNimStatusSemester(nim!, {}, { signal }) as never, { ...opt, enabled: !!nim });\n}\n/** Semua periode KHS (tanpa tahun_id) atau satu periode. */\nexport function useKhs(nim: string | undefined) {\n return useSiakadQuery<{ nim: string; periode: KhsPeriode[] }>(['mhs', nim, 'khs'], (s, signal) => s.mahasiswa.getByNimKhs(nim!, {}, { signal }) as never, { ...opt, enabled: !!nim });\n}\nexport function useTranskrip(nim: string | undefined) {\n return useSiakadQuery<Row>(['mhs', nim, 'transkrip'], (s, signal) => s.mahasiswa.getByNimTranskrip(nim!, {}, { signal }) as never, { ...opt, enabled: !!nim });\n}\nexport function useKrsMahasiswa(nim: string | undefined, tahunId?: string) {\n return useSiakadQuery<Row>(['mhs', nim, 'krs', tahunId ?? ''], (s, signal) => s.mahasiswa.getByNimKrs(nim!, tahunId ? { tahun_id: tahunId } : {}, { signal }) as never, { ...opt, enabled: !!nim });\n}\nexport function useDosen(nidn: string | undefined) {\n return useSiakadQuery<Row>(['dosen', nidn], (s, signal) => s.dosen.getByNidn(nidn!, {}, { signal }) as never, { ...opt, enabled: !!nidn });\n}\nexport function useJadwalDosen(nidn: string | undefined, tahunId?: string) {\n return useSiakadQuery<Row[]>(\n ['dosen', nidn, 'jadwal', tahunId ?? ''],\n (s, signal) => s.dosen.getByNidnJadwal(nidn!, { per_page: 100, ...(tahunId ? { tahun_id: tahunId } : {}) } as never, { signal }) as never,\n {\n ...opt,\n enabled: !!nidn,\n },\n );\n}\nexport function useBimbinganDosen(nidn: string | undefined, status = 'A') {\n return useSiakadQuery<Row[]>(['dosen', nidn, 'bimbingan', status], (s, signal) => s.dosen.getByNidnMahasiswaBimbingan(nidn!, { status, per_page: 100 } as never, { signal }) as never, {\n ...opt,\n enabled: !!nidn,\n });\n}\nexport function useKelasMataKuliah(kodeMk: string | undefined, q: { prodi?: string; tahun_id?: string } = {}) {\n return useSiakadQuery<Row[]>(['jadwal-mk', kodeMk, q], (s, signal) => s.jadwal.list({ kode_mk: kodeMk, per_page: 50, ...q } as never, { signal }) as never, { ...opt, enabled: !!kodeMk });\n}\n\n// ================================================================ Bantuan\nfunction Galat({ q }: { q: QueryState<unknown> }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(q.error, { kode: false })}<KodeLaporan error={q.error} /></span>\n <Button size=\"sm\" variant=\"ghost\" onClick={q.refetch}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\nconst muatDari = (q: QueryState<unknown>) => q.loading && !q.data;\nconst Mono = ({ children }: { children: React.ReactNode }) => <span className=\"u-mono\">{children}</span>;\n\n/** 20251 → \"Ganjil 2025/2026\". */\nexport function labelTahunAkademik(t?: string | null, pendek = false): string {\n if (!t || t.length !== 5) return t ?? '–';\n const th = Number(t.slice(0, 4));\n const smt = ({ '1': 'Ganjil', '2': 'Genap', '3': 'Pendek' } as Record<string, string>)[t[4]!] ?? 'Semester';\n return pendek ? `${smt} ${String(th).slice(2)}/${String(th + 1).slice(2)}` : `${smt} ${th}/${th + 1}`;\n}\n\nconst STATUS_MHS: Record<string, { label: string; variant: BadgeVariant }> = {\n A: { label: 'Aktif', variant: 'success' },\n C: { label: 'Cuti', variant: 'warning' },\n N: { label: 'Non-aktif', variant: 'neutral' },\n L: { label: 'Lulus', variant: 'info' },\n K: { label: 'Keluar', variant: 'danger' },\n D: { label: 'Drop out', variant: 'danger' },\n M: { label: 'Mutasi', variant: 'neutral' },\n};\nconst KELAS: Record<string, string> = { R: 'Reguler', K: 'Karyawan', D: 'Daring' };\nconst HARI: Record<string, string> = { '1': 'Senin', '2': 'Selasa', '3': 'Rabu', '4': 'Kamis', '5': 'Jumat', '6': 'Sabtu', '7': 'Minggu' };\n\n/** Lencana nilai huruf dengan warna mengikuti mutu (A hijau → E merah). */\nexport function NilaiHuruf({ nilai, className }: { nilai?: string | null; className?: string }) {\n if (!nilai)\n return (\n <span className={cn('u-nilai', className)} data-kosong>\n –\n </span>\n );\n const h = nilai.trim().toUpperCase()[0];\n return (\n <span className={cn('u-nilai', className)} data-huruf={h}>\n {nilai}\n </span>\n );\n}\n\n// ================================================================ Mahasiswa: kartu profil\n/** Kepala profil mahasiswa: foto, nama, NIM, prodi, status, dan angka utama (IPK, SKS, semester). */\nexport function KartuProfilMahasiswa({ nim, aksi, className }: { nim: string; aksi?: React.ReactNode; className?: string }) {\n const q = useMahasiswa(nim);\n const t = useTranskrip(nim);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 148 }} />;\n const m = q.data ?? {};\n const st = STATUS_MHS[m.status_aktif] ?? { label: m.status_aktif_label ?? m.status_aktif ?? '–', variant: 'neutral' as BadgeVariant };\n const ipk = t.data?.ipk?.nilai ?? m.ipk;\n const sks = t.data?.jumlah_sks ?? t.data?.ipk?.sks ?? m.sks_lulus;\n return (\n <section className={cn('u-profil', className)}>\n <div className=\"u-profil-head\">\n <Avatar name={String(m.nama ?? nim)} src={m.foto} size=\"xl\" />\n <div className=\"u-profil-id\">\n <h3>{m.nama ?? nim}</h3>\n <p>\n <Mono>{m.nim ?? nim}</Mono>\n <span>\n {m.kode_jenjang ? `${m.kode_jenjang} ` : ''}\n {m.nama_prodi ?? m.kode_prodi}\n </span>\n </p>\n <div className=\"u-profil-tags\">\n <Badge variant={st.variant} dot>\n {m.status_aktif_label ?? st.label}\n </Badge>\n {m.kelas && <Badge variant=\"outline\">{KELAS[m.kelas] ?? m.kelas}</Badge>}\n {m.konsentrasi && <Badge variant=\"outline\">{m.konsentrasi}</Badge>}\n </div>\n </div>\n {aksi && <div className=\"u-profil-aksi\">{aksi}</div>}\n </div>\n <dl className=\"u-profil-angka\">\n <div>\n <dt>IPK</dt>\n <dd>{ip(ipk)}</dd>\n </div>\n <div>\n <dt>SKS lulus</dt>\n <dd>{sks != null ? formatNumber(n(sks)) : '–'}</dd>\n </div>\n <div>\n <dt>Semester</dt>\n <dd>{m.semester ?? '–'}</dd>\n </div>\n <div>\n <dt>Angkatan</dt>\n <dd>{m.tahun_masuk ?? '–'}</dd>\n </div>\n </dl>\n </section>\n );\n}\n\n/** Biodata dan data akademik mahasiswa. Data pribadi hanya tampil bila token punya scope mahasiswa:pii. */\nexport function DataDiriMahasiswa({ nim, className }: { nim: string; className?: string }) {\n const q = useMahasiswa(nim);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const m = q.data ?? {};\n const p = m.pribadi;\n const a = p?.alamat;\n const alamat = a ? [a.jalan, a.rt && `RT ${a.rt}`, a.rw && `RW ${a.rw}`, a.desa, a.kecamatan].filter(Boolean).join(', ') : null;\n return (\n <div className={cn('u-biodata', className)}>\n <section>\n <h4>Akademik</h4>\n <DescriptionList\n items={[\n { label: 'Program studi', value: `${m.kode_jenjang ? m.kode_jenjang + ' ' : ''}${m.nama_prodi ?? '–'}` },\n { label: 'Status masuk', value: m.status_masuk === 'P' ? 'Pindahan' : m.status_masuk === 'B' ? 'Baru' : (m.status_masuk ?? '–') },\n { label: 'Masuk', value: `${labelTahunAkademik(m.semester_masuk)}${m.tanggal_masuk ? ` · ${formatDate(m.tanggal_masuk, 'medium')}` : ''}` },\n { label: 'Batas studi', value: labelTahunAkademik(m.batas_studi) },\n { label: 'Dosen PA', value: m.nama_pa ?? m.nidn_pa ?? '–' },\n ...(m.tanggal_lulus ? [{ label: 'Lulus', value: `${formatDate(m.tanggal_lulus, 'medium')}${m.no_ijazah ? ` · Ijazah ${m.no_ijazah}` : ''}` }] : []),\n ]}\n />\n </section>\n <section>\n <h4>Pribadi</h4>\n {p ? (\n <DescriptionList\n items={[\n { label: 'Tempat, tgl lahir', value: [p.tempat_lahir, p.tanggal_lahir && formatDate(p.tanggal_lahir, 'long')].filter(Boolean).join(', ') || '–' },\n { label: 'Jenis kelamin', value: m.jenis_kelamin === 'L' ? 'Laki-laki' : m.jenis_kelamin === 'P' ? 'Perempuan' : '–' },\n { label: 'Agama', value: m.agama ?? '–' },\n {\n label: 'Kontak',\n value: (\n <span className=\"u-biodata-kontak\">\n {p.email && (\n <span>\n <Mail aria-hidden /> {p.email}\n </span>\n )}\n {p.hp && (\n <span>\n <Phone aria-hidden /> {p.hp}\n </span>\n )}\n {!p.email && !p.hp && '–'}\n </span>\n ),\n },\n {\n label: 'Alamat',\n value: alamat ? (\n <span className=\"u-biodata-kontak\">\n <span>\n <MapPin aria-hidden /> {alamat}\n </span>\n </span>\n ) : (\n '–'\n ),\n },\n ]}\n />\n ) : (\n <p className=\"u-muted\">Data pribadi butuh izin akses mahasiswa:pii.</p>\n )}\n </section>\n {m.asal && (m.asal.nama_sekolah || m.asal.nama_pt) && (\n <section>\n <h4>Asal</h4>\n <DescriptionList\n items={[\n ...(m.asal.nama_sekolah ? [{ label: 'Sekolah', value: `${m.asal.nama_sekolah}${m.asal.tahun_lulus_sekolah ? ` (${m.asal.tahun_lulus_sekolah})` : ''}` }] : []),\n ...(m.asal.nama_pt ? [{ label: 'PT asal', value: `${m.asal.nama_pt}${m.asal.sks_diakui ? ` · ${m.asal.sks_diakui} SKS diakui` : ''}` }] : []),\n ]}\n />\n </section>\n )}\n </div>\n );\n}\n\n// ================================================================ Riwayat studi\n/** Grafik IPS dan IPK per semester ditambah status tiap semester (aktif, cuti, non-aktif). */\nexport function RiwayatStudi({ nim, className }: { nim: string; className?: string }) {\n const k = useKhs(nim);\n const s = useStatusSemester(nim);\n if (k.error) return <Galat q={k} />;\n if (muatDari(k) || muatDari(s)) return <Skeleton className={className} style={{ height: 320 }} />;\n const periode = (k.data?.periode ?? []).filter((p) => p.tahun_id).sort((a, b) => String(a.tahun_id).localeCompare(String(b.tahun_id)));\n const status = new Map((s.data?.status_semester ?? []).map((x) => [x.tahun_id, x]));\n const semua = [...new Set([...periode.map((p) => p.tahun_id!), ...status.keys()])].sort();\n if (!semua.length) return <Empty icon={<GraduationCap />} title=\"Belum ada riwayat studi\" className={className} />;\n const perTahun = new Map(periode.map((p) => [p.tahun_id!, p]));\n return (\n <div className={cn('u-riwayat', className)}>\n {periode.length > 1 && (\n <LineChart\n labels={periode.map((p) => labelTahunAkademik(p.tahun_id, true))}\n titles={periode.map((p) => labelTahunAkademik(p.tahun_id))}\n series={[\n { label: 'IPS', values: periode.map((p) => n(p.ips?.nilai)) },\n { label: 'IPK', values: periode.map((p) => n(p.ipk?.nilai)) },\n ]}\n format={(v) => v.toFixed(2)}\n area={false}\n height={170}\n max={4}\n legendValue=\"akhir\"\n />\n )}\n <ol className=\"u-riwayat-list\">\n {semua.map((t, i) => {\n const st = status.get(t);\n const p = perTahun.get(t);\n const kode = st?.status ?? (p ? 'A' : 'N');\n const s2 = STATUS_MHS[kode] ?? { label: kode, variant: 'neutral' as BadgeVariant };\n return (\n <li key={t} data-status={kode}>\n <span className=\"u-riwayat-smt\">{i + 1}</span>\n <span className=\"u-riwayat-tahun\">\n <b>{labelTahunAkademik(t)}</b>\n <small>{p ? `${n(p.jumlah_sks ?? p.ips?.sks)} SKS` : kode === 'C' ? 'Cuti akademik' : kode === 'A' && i === semua.length - 1 ? 'Semester berjalan' : 'Tanpa KRS'}</small>\n </span>\n <Badge variant={s2.variant}>{s2.label}</Badge>\n <span className=\"u-riwayat-ip\">\n <span>\n IPS <b>{ip(p?.ips?.nilai)}</b>\n </span>\n <span>\n IPK <b>{ip(p?.ipk?.nilai ?? st?.total_ipk)}</b>\n </span>\n </span>\n </li>\n );\n })}\n </ol>\n </div>\n );\n}\n\n// ================================================================ Tabel nilai bersama\nfunction TabelNilai({ rows, tampilTahun, kosong }: { rows: MataKuliahNilai[]; tampilTahun?: boolean; kosong?: string }) {\n if (!rows.length) return <Empty icon={<BookOpen />} title={kosong ?? 'Belum ada mata kuliah'} />;\n return (\n <div className=\"u-tabel-nilai-wrap\">\n <table className=\"u-tabel-nilai\" data-tetap=\"\">\n <colgroup>\n <col style={{ width: '6.5rem' }} />\n <col />\n {tampilTahun && <col style={{ width: '8rem' }} />}\n <col style={{ width: '4rem' }} />\n <col style={{ width: '6rem' }} />\n <col style={{ width: '5rem' }} />\n <col style={{ width: '5rem' }} />\n </colgroup>\n <thead>\n <tr>\n <th>Kode</th>\n <th>Mata kuliah</th>\n {tampilTahun && <th>Periode</th>}\n <th data-angka>SKS</th>\n <th data-tengah>Nilai</th>\n <th data-angka>Bobot</th>\n <th data-angka>Mutu</th>\n </tr>\n </thead>\n <tbody>\n {rows.map((r, i) => (\n <tr key={`${r.kode_mk}-${r.tahun_id ?? ''}-${i}`}>\n <td>\n <Mono>{r.kode_mk}</Mono>\n </td>\n <td>{r.nama_mk}</td>\n {tampilTahun && <td className=\"u-muted\">{labelTahunAkademik(r.tahun_id, true)}</td>}\n <td data-angka>{r.sks ?? '–'}</td>\n <td data-tengah>{r.nilai_ditampilkan === false ? <span className=\"u-muted\">Belum dirilis</span> : <NilaiHuruf nilai={r.nilai_huruf} />}</td>\n <td data-angka>{r.bobot != null ? Number(r.bobot).toFixed(2) : '–'}</td>\n <td data-angka>{r.mutu != null ? Number(r.mutu).toFixed(2) : '–'}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\n// ================================================================ KHS\n/** KHS per semester dengan pemilih periode, IPS, dan IPK berjalan. */\nexport function KhsMahasiswa({ nim, tahunId, className }: { nim: string; tahunId?: string; className?: string }) {\n const q = useKhs(nim);\n const periode = React.useMemo(() => (q.data?.periode ?? []).filter((p) => p.tahun_id).sort((a, b) => String(b.tahun_id).localeCompare(String(a.tahun_id))), [q.data]);\n const [pilih, setPilih] = React.useState<string | undefined>(tahunId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 320 }} />;\n if (!periode.length) return <Empty icon={<BookOpen />} title=\"Belum ada KHS\" className={className} />;\n const aktif = periode.find((p) => p.tahun_id === pilih) ?? periode[0]!;\n return (\n <div className={cn('u-khs', className)}>\n <div className=\"u-khs-periode\" role=\"tablist\" aria-label=\"Periode\">\n {periode.map((p) => (\n <button key={p.tahun_id} type=\"button\" role=\"tab\" aria-selected={p.tahun_id === aktif.tahun_id} onClick={() => setPilih(p.tahun_id!)}>\n {labelTahunAkademik(p.tahun_id, true)}\n </button>\n ))}\n </div>\n <div className=\"u-khs-ringkas\">\n <div>\n <span>IPS</span>\n <b>{ip(aktif.ips?.nilai)}</b>\n </div>\n <div>\n <span>IPK</span>\n <b>{ip(aktif.ipk?.nilai)}</b>\n </div>\n <div>\n <span>SKS semester</span>\n <b>{n(aktif.jumlah_sks ?? aktif.ips?.sks)}</b>\n </div>\n <div>\n <span>SKS kumulatif</span>\n <b>{aktif.ipk?.sks ?? '–'}</b>\n </div>\n </div>\n <TabelNilai rows={aktif.mata_kuliah ?? []} />\n </div>\n );\n}\n\n// ================================================================ Transkrip\nconst URUT_HURUF = ['A', 'B', 'C', 'D', 'E'];\nconst WARNA_HURUF: Record<string, string> = {\n A: 'var(--u-success)',\n B: 'var(--u-primary)',\n C: 'var(--u-warning)',\n D: 'color-mix(in oklab, var(--u-danger) 70%, var(--u-warning))',\n E: 'var(--u-danger)',\n};\n/** Transkrip: IPK, total SKS dan mutu, sebaran nilai, dan daftar MK per semester. */\nexport function TranskripMahasiswa({ nim, kelompok = 'semester', className }: { nim: string; kelompok?: 'semester' | 'tidak'; className?: string }) {\n const q = useTranskrip(nim);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 360 }} />;\n const t = q.data ?? {};\n const mk: MataKuliahNilai[] = t.mata_kuliah ?? [];\n if (!mk.length) return <Empty icon={<GraduationCap />} title=\"Belum ada nilai\" description=\"Transkrip terisi setelah nilai semester pertama dirilis.\" className={className} />;\n const sebaran = URUT_HURUF.map((h) => ({ label: h, value: mk.filter((m) => (m.nilai_huruf ?? '').toUpperCase().startsWith(h)).length, color: WARNA_HURUF[h] }));\n const grup = new Map<number, MataKuliahNilai[]>();\n for (const m of mk) grup.set(m.semester ?? 0, [...(grup.get(m.semester ?? 0) ?? []), m]);\n return (\n <div className={cn('u-transkrip', className)}>\n <div className=\"u-khs-ringkas\">\n <div>\n <span>IPK</span>\n <b>{ip(t.ipk?.nilai)}</b>\n </div>\n <div>\n <span>Total SKS</span>\n <b>{n(t.jumlah_sks ?? t.ipk?.sks)}</b>\n </div>\n <div>\n <span>Total mutu</span>\n <b>{t.jumlah_mutu != null ? n(t.jumlah_mutu).toFixed(2) : '–'}</b>\n </div>\n <div>\n <span>Mata kuliah</span>\n <b>{mk.length}</b>\n </div>\n </div>\n {mk.length > 0 && <SegmentBar data={sebaran} format={(v) => `${v} MK`} />}\n {kelompok === 'semester' ? (\n [...grup]\n .sort((a, b) => a[0] - b[0])\n .map(([smt, rows]) => (\n <section key={smt} className=\"u-transkrip-smt\">\n <h4>\n {smt ? `Semester ${smt}` : 'Lainnya'}\n <span>{rows.reduce((s, r) => s + n(r.sks), 0)} SKS</span>\n </h4>\n <TabelNilai rows={rows} />\n </section>\n ))\n ) : (\n <TabelNilai rows={mk} tampilTahun />\n )}\n </div>\n );\n}\n\n// ================================================================ KRS\n/** KRS satu periode (bawaan periode aktif) dengan jadwal, ruang, dan status persetujuan PA. */\nexport function KrsMahasiswa({ nim, tahunId, className }: { nim: string; tahunId?: string; className?: string }) {\n const q = useKrsMahasiswa(nim, tahunId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 260 }} />;\n const k = q.data ?? {};\n const mk: Row[] = k.mata_kuliah ?? [];\n const setuju = mk.filter((m) => m.disetujui).length;\n if (!mk.length) return <Empty icon={<CalendarDays />} title=\"Belum mengisi KRS\" description={`Periode ${labelTahunAkademik(k.tahun_id)}`} className={className} />;\n return (\n <div className={cn('u-krs', className)}>\n <div className=\"u-krs-head\">\n <span>\n <b>{labelTahunAkademik(k.tahun_id)}</b> · {n(k.jumlah_sks)} SKS · {mk.length} mata kuliah\n </span>\n <Badge variant={setuju === mk.length ? 'success' : 'warning'} dot>\n {setuju === mk.length ? 'Disetujui PA' : `${mk.length - setuju} menunggu persetujuan`}\n </Badge>\n </div>\n <div className=\"u-tabel-nilai-wrap\">\n <table className=\"u-tabel-nilai\">\n <thead>\n <tr>\n <th>Kode</th>\n <th>Mata kuliah</th>\n <th data-angka>SKS</th>\n <th>Kelas</th>\n <th>Jadwal</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n {mk.map((m) => (\n <tr key={m.idkrs ?? m.kode_mk}>\n <td>\n <Mono>{m.kode_mk}</Mono>\n </td>\n <td>{m.nama_mk}</td>\n <td data-angka>{m.sks}</td>\n <td>{m.kelas ?? '–'}</td>\n <td className=\"u-muted\">\n {m.hari ? `${HARI[m.hari] ?? m.hari}${m.jam_mulai ? `, ${String(m.jam_mulai).slice(0, 5)}` : m.jam_ke ? `, jam ke-${m.jam_ke}` : ''}${m.ruang ? ` · ${m.ruang}` : ''}` : '–'}\n </td>\n <td>{m.disetujui ? <Badge variant=\"success\">Disetujui</Badge> : <Badge variant=\"warning\">Menunggu</Badge>}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n\n// ================================================================ Detail mahasiswa\nexport type TabMahasiswa = 'ringkasan' | 'krs' | 'khs' | 'transkrip';\n/** Profil mahasiswa lengkap dalam tab: ringkasan (biodata + riwayat studi), KRS, KHS, transkrip. */\nexport function DetailMahasiswa({\n nim,\n tab,\n onTabChange,\n tabs = ['ringkasan', 'krs', 'khs', 'transkrip'],\n aksi,\n className,\n}: {\n nim: string;\n tab?: TabMahasiswa;\n onTabChange?: (t: TabMahasiswa) => void;\n tabs?: TabMahasiswa[];\n aksi?: React.ReactNode;\n className?: string;\n}) {\n const label: Record<TabMahasiswa, string> = { ringkasan: 'Ringkasan', krs: 'KRS', khs: 'KHS', transkrip: 'Transkrip' };\n const isi: Record<TabMahasiswa, React.ReactNode> = {\n ringkasan: (\n <div className=\"u-detail-stack\">\n <RiwayatStudi nim={nim} />\n <DataDiriMahasiswa nim={nim} />\n </div>\n ),\n krs: <KrsMahasiswa nim={nim} />,\n khs: <KhsMahasiswa nim={nim} />,\n transkrip: <TranskripMahasiswa nim={nim} />,\n };\n return (\n <div className={cn('u-detail', className)}>\n <KartuProfilMahasiswa nim={nim} aksi={aksi} />\n <Tabs<TabMahasiswa> value={tab} onValueChange={onTabChange} items={tabs.map((t) => ({ value: t, label: label[t], content: isi[t] }))} />\n </div>\n );\n}\n\n/** DetailMahasiswa dalam panel samping. Isi `nim` dan buka; tutup mengosongkan pilihan. */\nexport function SheetDetailMahasiswa({ nim, open, onOpenChange, aksi }: { nim: string | null | undefined; open?: boolean; onOpenChange: (open: boolean) => void; aksi?: React.ReactNode }) {\n return (\n <Sheet open={open ?? !!nim} onOpenChange={onOpenChange} title=\"Detail mahasiswa\" size=\"xl\" className=\"u-sheet-detail\">\n {nim && <DetailMahasiswa nim={nim} aksi={aksi} />}\n </Sheet>\n );\n}\n\n// ================================================================ Dosen\n/** Kepala profil dosen: foto, nama bergelar, NIDN, prodi, jabatan akademik, status. */\nexport function KartuProfilDosen({ nidn, aksi, className }: { nidn: string; aksi?: React.ReactNode; className?: string }) {\n const q = useDosen(nidn);\n const j = useJadwalDosen(nidn);\n const b = useBimbinganDosen(nidn);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 148 }} />;\n const d = q.data ?? {};\n const nama = d.nama_lengkap ?? [d.gelar_depan, d.nama, d.gelar_belakang].filter(Boolean).join(' ');\n const sks = (j.data ?? []).reduce((s, r) => s + n(r.sks), 0);\n return (\n <section className={cn('u-profil', className)}>\n <div className=\"u-profil-head\">\n <Avatar name={String(d.nama ?? nidn)} src={d.foto} size=\"xl\" />\n <div className=\"u-profil-id\">\n <h3>{nama || nidn}</h3>\n <p>\n <Mono>NIDN {d.nidn ?? nidn}</Mono>\n <span>\n {d.kode_jenjang ? `${d.kode_jenjang} ` : ''}\n {d.nama_prodi ?? d.kode_prodi ?? '–'}\n </span>\n </p>\n <div className=\"u-profil-tags\">\n <Badge variant={d.status_aktif === 'A' || d.status === 'A' ? 'success' : 'neutral'} dot>\n {d.status_aktif === 'A' || d.status === 'A' ? 'Aktif' : 'Tidak aktif'}\n </Badge>\n {d.jabatan_akademik && <Badge variant=\"outline\">{d.jabatan_akademik}</Badge>}\n {d.ikatan_kerja && <Badge variant=\"outline\">{d.ikatan_kerja}</Badge>}\n </div>\n </div>\n {aksi && <div className=\"u-profil-aksi\">{aksi}</div>}\n </div>\n <dl className=\"u-profil-angka\">\n <div>\n <dt>Kelas diampu</dt>\n <dd>{j.data ? j.data.length : '–'}</dd>\n </div>\n <div>\n <dt>SKS mengajar</dt>\n <dd>{j.data ? sks : '–'}</dd>\n </div>\n <div>\n <dt>Bimbingan aktif</dt>\n <dd>{b.data ? b.data.length : '–'}</dd>\n </div>\n <div>\n <dt>Pendidikan</dt>\n <dd>{d.pendidikan ?? '–'}</dd>\n </div>\n </dl>\n </section>\n );\n}\n\n/** Jadwal mengajar dosen dikelompokkan per hari. */\nexport function JadwalMengajar({ nidn, tahunId, className }: { nidn: string; tahunId?: string; className?: string }) {\n const q = useJadwalDosen(nidn, tahunId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<CalendarDays />} title=\"Tidak ada jadwal mengajar\" className={className} />;\n const grup = new Map<string, Row[]>();\n for (const r of [...data].sort((a, b) => String(a.hari).localeCompare(String(b.hari)) || String(a.jam_mulai ?? a.jam_ke).localeCompare(String(b.jam_mulai ?? b.jam_ke))))\n grup.set(String(r.hari ?? '-'), [...(grup.get(String(r.hari ?? '-')) ?? []), r]);\n return (\n <div className={cn('u-jadwal-hari', className)}>\n {[...grup].map(([h, rows]) => (\n <section key={h}>\n <h4>{HARI[h] ?? 'Tanpa hari'}</h4>\n <ul>\n {rows.map((r) => (\n <li key={r.idj}>\n <span className=\"u-jadwal-jam\">\n {r.jam_mulai ? String(r.jam_mulai).slice(0, 5) : `Jam ${r.jam_ke ?? '–'}`}\n {r.jam_selesai && <small>{String(r.jam_selesai).slice(0, 5)}</small>}\n </span>\n <span className=\"u-jadwal-mk\">\n <b>{r.nama_mk}</b>\n <small>\n <Mono>{r.kode_mk}</Mono> · Kelas {r.kelas ?? '–'} · {r.sks} SKS\n </small>\n </span>\n <span className=\"u-jadwal-ruang\">{r.nama_ruang ?? r.ruang ?? '–'}</span>\n </li>\n ))}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\n/** Mahasiswa bimbingan akademik (PA) seorang dosen. */\nexport function MahasiswaBimbingan({ nidn, onPilih, className }: { nidn: string; onPilih?: (m: Row) => void; className?: string }) {\n const q = useBimbinganDosen(nidn);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<Users />} title=\"Belum ada mahasiswa bimbingan\" className={className} />;\n return (\n <ul className={cn('u-bimbingan', className)}>\n {data.map((m) => {\n const st = STATUS_MHS[m.status_aktif] ?? { label: m.status_aktif ?? '–', variant: 'neutral' as BadgeVariant };\n const Tag = onPilih ? 'button' : 'div';\n return (\n <li key={m.nim}>\n <Tag className=\"u-bimbingan-row\" {...(onPilih ? { type: 'button' as const, onClick: () => onPilih(m) } : {})}>\n <Avatar name={String(m.nama ?? m.nim)} src={m.foto} size=\"sm\" />\n <span className=\"u-bimbingan-nama\">\n <b>{m.nama}</b>\n <small>\n <Mono>{m.nim}</Mono> · angkatan {m.tahun_masuk ?? '–'}\n </small>\n </span>\n {m.ipk != null && <span className=\"u-bimbingan-ipk\">IPK {ip(m.ipk)}</span>}\n <Badge variant={st.variant}>{m.status_aktif_label ?? st.label}</Badge>\n </Tag>\n </li>\n );\n })}\n </ul>\n );\n}\n\n/** Biodata dosen: kepegawaian dan kontak. */\nexport function DataDiriDosen({ nidn, className }: { nidn: string; className?: string }) {\n const q = useDosen(nidn);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 200 }} />;\n const d = q.data ?? {};\n const p = d.pribadi;\n return (\n <div className={cn('u-biodata', className)}>\n <section>\n <h4>Kepegawaian</h4>\n <DescriptionList\n items={[\n { label: 'NIP', value: d.nip ?? '–' },\n { label: 'Status pegawai', value: d.status_pegawai ?? '–' },\n { label: 'Jabatan akademik', value: d.jabatan_akademik ?? d.jabatan_fungsional ?? '–' },\n { label: 'Pangkat/golongan', value: d.pangkat_golongan ?? '–' },\n { label: 'Jabatan struktural', value: d.jabatan_struktural ?? '–' },\n { label: 'Mulai masuk', value: d.mulai_masuk ? formatDate(d.mulai_masuk, 'medium') : '–' },\n ]}\n />\n </section>\n {p && (\n <section>\n <h4>Kontak</h4>\n <DescriptionList\n items={[\n { label: 'Email', value: p.email ?? '–' },\n { label: 'HP', value: p.hp ?? '–' },\n ]}\n />\n </section>\n )}\n </div>\n );\n}\n\nexport type TabDosen = 'profil' | 'jadwal' | 'bimbingan';\n/** Profil dosen dalam tab: biodata, jadwal mengajar, mahasiswa bimbingan. */\nexport function DetailDosen({\n nidn,\n tab,\n onTabChange,\n onPilihMahasiswa,\n aksi,\n className,\n}: {\n nidn: string;\n tab?: TabDosen;\n onTabChange?: (t: TabDosen) => void;\n onPilihMahasiswa?: (m: Row) => void;\n aksi?: React.ReactNode;\n className?: string;\n}) {\n return (\n <div className={cn('u-detail', className)}>\n <KartuProfilDosen nidn={nidn} aksi={aksi} />\n <Tabs<TabDosen>\n value={tab}\n onValueChange={onTabChange}\n items={[\n { value: 'profil', label: 'Profil', content: <DataDiriDosen nidn={nidn} /> },\n { value: 'jadwal', label: 'Jadwal mengajar', content: <JadwalMengajar nidn={nidn} /> },\n { value: 'bimbingan', label: 'Bimbingan', content: <MahasiswaBimbingan nidn={nidn} onPilih={onPilihMahasiswa} /> },\n ]}\n />\n </div>\n );\n}\nexport function SheetDetailDosen({ nidn, open, onOpenChange, aksi }: { nidn: string | null | undefined; open?: boolean; onOpenChange: (open: boolean) => void; aksi?: React.ReactNode }) {\n return (\n <Sheet open={open ?? !!nidn} onOpenChange={onOpenChange} title=\"Detail dosen\" size=\"xl\" className=\"u-sheet-detail\">\n {nidn && <DetailDosen nidn={nidn} aksi={aksi} />}\n </Sheet>\n );\n}\n\n// ================================================================ Mata kuliah\n/** Detail mata kuliah dari baris tabel (mataKuliah.list) plus kelas yang dibuka (jadwal.list). */\nexport function DetailMataKuliah({ mk, tahunId, className }: { mk: Row; tahunId?: string; className?: string }) {\n const q = useKelasMataKuliah(mk.kode_mk, { ...(mk.kode_prodi ? { prodi: mk.kode_prodi } : {}), ...(tahunId ? { tahun_id: tahunId } : {}) });\n const kelas = q.data ?? [];\n return (\n <div className={cn('u-detail', className)}>\n <section className=\"u-profil\">\n <div className=\"u-profil-head\">\n <span className=\"u-mk-ikon\" aria-hidden>\n <BookOpen />\n </span>\n <div className=\"u-profil-id\">\n <h3>{mk.nama_mk}</h3>\n <p>\n <Mono>{mk.kode_mk}</Mono>\n {mk.nama_mk_en && <span>{mk.nama_mk_en}</span>}\n </p>\n <div className=\"u-profil-tags\">\n <Badge variant={mk.sifat === 'P' ? 'neutral' : 'primary'}>{mk.sifat === 'P' ? 'Pilihan' : 'Wajib'}</Badge>\n {mk.jenis_mk && <Badge variant=\"outline\">{mk.jenis_mk}</Badge>}\n </div>\n </div>\n </div>\n <dl className=\"u-profil-angka\">\n <div>\n <dt>SKS</dt>\n <dd>{mk.sks_mk ?? mk.sks ?? '–'}</dd>\n </div>\n <div>\n <dt>Semester</dt>\n <dd>{mk.semester ?? '–'}</dd>\n </div>\n <div>\n <dt>Kelas dibuka</dt>\n <dd>{q.data ? kelas.length : '–'}</dd>\n </div>\n <div>\n <dt>Peserta</dt>\n <dd>{q.data ? formatNumber(kelas.reduce((s, k) => s + n(k.jumlah_peserta), 0)) : '–'}</dd>\n </div>\n </dl>\n </section>\n {(mk.prasyarat || mk.deskripsi) && (\n <DescriptionList\n items={[\n ...(mk.deskripsi ? [{ label: 'Deskripsi', value: mk.deskripsi }] : []),\n ...(mk.prasyarat ? [{ label: 'Prasyarat', value: Array.isArray(mk.prasyarat) ? mk.prasyarat.join(', ') : String(mk.prasyarat) }] : []),\n ]}\n />\n )}\n <section>\n <h4 className=\"u-detail-h\">Kelas {tahunId ? labelTahunAkademik(tahunId) : 'periode aktif'}</h4>\n {q.error ? (\n <Galat q={q} />\n ) : muatDari(q) ? (\n <Skeleton style={{ height: 120 }} />\n ) : kelas.length ? (\n <ul className=\"u-kelas-mk\">\n {kelas.map((k) => (\n <li key={k.idj}>\n <span className=\"u-kelas-mk-kelas\">{k.kelas ?? '–'}</span>\n <span className=\"u-jadwal-mk\">\n <b>{k.dosen?.nama ?? 'Dosen belum ditentukan'}</b>\n <small>\n {k.hari ? `${HARI[k.hari] ?? k.hari}, ${k.jam_mulai ? String(k.jam_mulai).slice(0, 5) : `jam ke-${k.jam_ke}`}` : 'Jadwal belum diatur'} · {k.nama_ruang ?? k.ruang ?? 'ruang –'}\n </small>\n </span>\n {k.kapasitas != null && (\n <span className=\"u-kelas-mk-isi\">\n {n(k.jumlah_peserta)}/{k.kapasitas}\n </span>\n )}\n </li>\n ))}\n </ul>\n ) : (\n <Empty icon={<CalendarDays />} title=\"Belum ada kelas dibuka\" />\n )}\n </section>\n </div>\n );\n}\nexport function SheetDetailMataKuliah({ mk, open, onOpenChange }: { mk: Row | null | undefined; open?: boolean; onOpenChange: (open: boolean) => void }) {\n return (\n <Sheet open={open ?? !!mk} onOpenChange={onOpenChange} title=\"Detail mata kuliah\" size=\"lg\" className=\"u-sheet-detail\">\n {mk && <DetailMataKuliah mk={mk} />}\n </Sheet>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { BadgeCheck, BookOpen, Clock, Folder, LayoutGrid, Paperclip, Rows3 } from 'lucide-react';\nimport type { ApiResult, Siakad } from 'unipo-siakad-sdk';\nimport { Badge } from '../components/actions';\nimport { Avatar, CellPrimary } from '../components/display';\nimport { DataTable, type DataColumn, type DataTableProps } from '../components/data-table';\nimport { SegmentedControl } from '../components/forms';\nimport { filterToQuery, useFilterParams, type FilterField, type FilterValues } from '../components/filter';\nimport type { MenuEntry } from '../components/overlays';\nimport { formatDate } from '../lib/format';\nimport { useSiakadQuery } from './provider';\nimport { SheetDetailDosen, SheetDetailMahasiswa, SheetDetailMataKuliah } from './akademik';\nimport {\n AKSES_ARSIP,\n FilterBerkas,\n FilterDokumen,\n FilterDosen,\n FilterMahasiswa,\n FilterMataKuliah,\n FilterPegawai,\n FilterSuratKeluar,\n FilterSuratMasuk,\n SIFAT_SURAT,\n STATUS_ARSIP,\n STATUS_PEGAWAI,\n STATUS_SURAT_KELUAR,\n STATUS_SURAT_MASUK,\n STATUS_VERIFIKASI,\n useFilterFields,\n type FilterPreset,\n type PresetFilterProps,\n} from './filter-presets';\n\ntype Row = Record<string, any>;\ntype Tone = 'neutral' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\n// ================================================================ Hook tabel server\nexport interface SiakadTableOptions<T> {\n /** Kunci cache, mis. 'mahasiswa'. */\n key: string;\n /** Panggilan SDK dengan query (saringan + page + per_page). */\n fetch: (siakad: Siakad, query: Record<string, string | number>, signal: AbortSignal) => Promise<ApiResult<T[]>>;\n initialFilter?: FilterValues;\n /** Field saringan, untuk menerjemahkan rentang tanggal ke parameter yang benar. */\n fields?: FilterField[];\n perPage?: number;\n /** Simpan saringan di URL (?status=A). */\n syncUrl?: boolean;\n}\n\n/**\n * Hubungkan DataTable + FilterBar ke endpoint daftar SDK (berhalaman di server).\n * const t = useSiakadTable({ key: 'mhs', fetch: (s, q, signal) => s.mahasiswa.list(q, { signal }) });\n * <DataTable {...t.tableProps} columns={…} rowKey={(r) => r.nim} toolbar={<FilterMahasiswa {...t.filterProps} />} />\n */\nexport function useSiakadTable<T>({ key, fetch, initialFilter = {}, fields, perPage: perPageInit = 20, syncUrl }: SiakadTableOptions<T>) {\n const local = React.useState<FilterValues>(initialFilter);\n const url = useFilterParams(initialFilter);\n const [filter, setFilterRaw] = syncUrl ? url : local;\n const [page, setPage] = React.useState(1);\n const [perPage, setPerPage] = React.useState(perPageInit);\n const query = { ...filterToQuery(filter, fields), page, per_page: perPage };\n const q = useSiakadQuery([key, query], (s, signal) => fetch(s, query, signal), { staleTime: 15_000 });\n const setFilter = (v: FilterValues) => {\n setFilterRaw(v);\n setPage(1);\n };\n const filtered = Object.keys(filter).length > 0;\n return {\n filter,\n setFilter,\n query,\n ...q,\n filterProps: { value: filter, onValueChange: setFilter, resultCount: q.meta?.total ?? undefined },\n tableProps: {\n rows: q.data,\n loading: q.loading,\n error: q.error,\n onRetry: q.refetch,\n page,\n perPage,\n total: q.meta?.total ?? q.data?.length ?? 0,\n onPageChange: setPage,\n onPerPageChange: (n: number) => {\n setPerPage(n);\n setPage(1);\n },\n filtered,\n emptyFiltered: { onReset: () => setFilter({}) },\n } satisfies Partial<DataTableProps<T>>,\n };\n}\n\n// ================================================================ Sel bersama\nconst toneOf = (map: Record<string, Tone>, v: unknown): Tone => map[String(v)] ?? 'neutral';\nconst labelFrom = (opts: Array<{ value: string; text?: string; label: React.ReactNode }>, v: unknown) => String(opts.find((o) => o.value === v)?.text ?? v ?? '–');\n\nfunction StatusBadge({ tone, children }: { tone: Tone; children: React.ReactNode }) {\n return (\n <Badge variant={tone} dot>\n {children}\n </Badge>\n );\n}\nconst Mono = ({ children }: { children: React.ReactNode }) => <span className=\"u-mono\">{children}</span>;\nconst Muted = ({ children }: { children: React.ReactNode }) => <span style={{ color: 'var(--u-muted-foreground)' }}>{children}</span>;\nconst tanggal = (v: unknown) => (v ? formatDate(String(v), 'medium') : '–');\n\n// ================================================================ Kartu untuk tampilan kisi\n/** Isi kartu standar untuk tampilan kisi tabel: media, judul, subjudul, lencana, dan beberapa angka. */\nexport function KartuData({\n media,\n title,\n subtitle,\n badge,\n meta,\n}: {\n media?: React.ReactNode;\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n badge?: React.ReactNode;\n meta?: Array<{ label: string; value: React.ReactNode }>;\n}) {\n return (\n <div className=\"u-kartu-data\">\n <div className=\"u-kartu-data-head\">\n {media}\n <div className=\"u-kartu-data-id\">\n <b>{title}</b>\n {subtitle && <small>{subtitle}</small>}\n </div>\n </div>\n {badge && <div className=\"u-kartu-data-badge\">{badge}</div>}\n {meta && meta.length > 0 && (\n <dl className=\"u-kartu-data-meta\">\n {meta.map((m) => (\n <div key={m.label}>\n <dt>{m.label}</dt>\n <dd>{m.value}</dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n );\n}\n\n// ================================================================ Props bersama tabel turunan\nexport type TampilanTabel = 'tabel' | 'kartu';\nexport interface TabelSiakadProps<T> extends Omit<Partial<DataTableProps<T>>, 'rows' | 'columns' | 'toolbar' | 'grid'> {\n /** Saringan awal, mis. { prodi: '55201', status: 'A' }. */\n initialFilter?: FilterValues;\n syncUrl?: boolean;\n /** Kolom tambahan (di akhir) atau pengganti (key sama). */\n extraColumns?: DataColumn<T>[];\n hideColumns?: string[];\n /** Props tambahan untuk saringan (hide, extraFields). */\n filterProps?: Partial<PresetFilterProps>;\n /** Sembunyikan bilah saringan. */\n noFilter?: boolean;\n rowActions?: (row: T) => MenuEntry[];\n /**\n * 'lengkap' (bawaan): saringan, pilih kolom, kerapatan, CSV.\n * 'ringkas': untuk kartu dasbor atau tab detail. Tanpa saringan dan alat, rapat, 5 baris per halaman.\n */\n varian?: 'lengkap' | 'ringkas';\n /** Tampilan awal: tabel atau kisi kartu (tersedia untuk mahasiswa, dosen, pegawai, mata kuliah). */\n tampilan?: TampilanTabel;\n onTampilanChange?: (t: TampilanTabel) => void;\n /** Tombol ganti tabel/kartu di bilah alat. Bawaan: tampil bila tabel punya tampilan kartu dan varian lengkap. */\n tampilanToggle?: boolean;\n /** Klik baris membuka panel detail (mahasiswa, dosen, mata kuliah). Diabaikan bila onRowClick diisi. */\n detail?: boolean;\n}\n\ntype DetailSheet<T> = React.ComponentType<{ row: T | null; onClose: () => void }>;\n\nfunction makeTabel<T extends Row>(cfg: {\n name: string;\n key: string;\n preset: FilterPreset;\n Filter: React.ComponentType<PresetFilterProps>;\n fetch: SiakadTableOptions<T>['fetch'];\n rowKey: (r: T) => string;\n columns: DataColumn<T>[];\n empty: DataTableProps<T>['empty'];\n csv: string;\n kartu?: (r: T) => React.ReactNode;\n Detail?: DetailSheet<T>;\n}) {\n function Tabel({\n initialFilter,\n syncUrl,\n extraColumns = [],\n hideColumns = [],\n filterProps,\n noFilter,\n perPage,\n varian = 'lengkap',\n tampilan: tampilanProp,\n onTampilanChange,\n tampilanToggle,\n detail,\n onRowClick,\n actions,\n ...rest\n }: TabelSiakadProps<T>) {\n const ringkas = varian === 'ringkas';\n const fields = useFilterFields(cfg.preset);\n const t = useSiakadTable<T>({ key: cfg.key, fetch: cfg.fetch, initialFilter, fields, perPage: perPage ?? (ringkas ? 5 : undefined), syncUrl });\n const columns = [...cfg.columns.filter((c) => !hideColumns.includes(c.key) && !extraColumns.some((e) => e.key === c.key)), ...extraColumns];\n const [tampilanInner, setTampilan] = React.useState<TampilanTabel>(tampilanProp ?? 'tabel');\n const tampilan = cfg.kartu ? (tampilanProp ?? tampilanInner) : 'tabel';\n const [dipilih, setDipilih] = React.useState<T | null>(null);\n const bukaDetail = detail && cfg.Detail && !onRowClick ? setDipilih : undefined;\n const toggle =\n cfg.kartu && (tampilanToggle ?? !ringkas) ? (\n <SegmentedControl<TampilanTabel>\n aria-label=\"Tampilan\"\n value={tampilan}\n onValueChange={(v) => {\n setTampilan(v);\n onTampilanChange?.(v);\n }}\n options={[\n { value: 'tabel', label: '', icon: <Rows3 />, 'aria-label': 'Tabel' },\n { value: 'kartu', label: '', icon: <LayoutGrid />, 'aria-label': 'Kartu' },\n ]}\n />\n ) : null;\n const kisi = tampilan === 'kartu';\n return (\n <>\n <DataTable<T>\n columns={columns}\n rowKey={cfg.rowKey}\n toolbar={noFilter || ringkas ? undefined : <cfg.Filter {...t.filterProps} {...filterProps} />}\n empty={cfg.empty}\n exportCsv={ringkas ? undefined : cfg.csv}\n storageKey={cfg.key}\n columnToggle={!ringkas && !kisi}\n densityToggle={!ringkas && !kisi}\n defaultDensity={ringkas ? 'compact' : undefined}\n grid={kisi ? cfg.kartu : undefined}\n actions={\n toggle || actions ? (\n <>\n {actions}\n {toggle}\n </>\n ) : undefined\n }\n {...t.tableProps}\n onPerPageChange={ringkas ? undefined : t.tableProps.onPerPageChange}\n onRowClick={onRowClick ?? bukaDetail}\n {...rest}\n />\n {bukaDetail && cfg.Detail && <cfg.Detail row={dipilih} onClose={() => setDipilih(null)} />}\n </>\n );\n }\n Tabel.displayName = cfg.name;\n return Tabel;\n}\n\nconst meta = (label: string, value: React.ReactNode) => ({ label, value: value ?? '–' });\n\n// ================================================================ Mahasiswa\nconst TONE_MHS: Record<string, Tone> = { A: 'success', C: 'warning', N: 'neutral', L: 'info', K: 'danger', D: 'danger' };\nconst KELAS: Record<string, string> = { R: 'Reguler', K: 'Karyawan', D: 'Daring' };\n\n/** Tabel mahasiswa (mahasiswa.list) dengan saringan prodi, angkatan, status, kelas. */\nexport const TabelMahasiswa = makeTabel<Row>({\n name: 'TabelMahasiswa',\n key: 'tabel-mahasiswa',\n preset: 'mahasiswa',\n Filter: FilterMahasiswa,\n fetch: (s, q, signal) => s.mahasiswa.list(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.nim),\n csv: 'mahasiswa',\n empty: { title: 'Belum ada mahasiswa', description: 'Data mahasiswa muncul di sini setelah diimpor atau didaftarkan.' },\n Detail: ({ row, onClose }) => <SheetDetailMahasiswa nim={row ? String(row.nim) : null} onOpenChange={(o) => !o && onClose()} />,\n kartu: (r) => (\n <KartuData\n media={<Avatar name={String(r.nama ?? r.nim)} src={r.foto} size=\"lg\" />}\n title={r.nama}\n subtitle={\n <>\n <Mono>{r.nim}</Mono> · {r.kode_jenjang ? r.kode_jenjang + ' ' : ''}\n {r.nama_prodi ?? '–'}\n </>\n }\n badge={<StatusBadge tone={toneOf(TONE_MHS, r.status_aktif)}>{r.status_aktif_label ?? r.status_aktif}</StatusBadge>}\n meta={[meta('Angkatan', r.tahun_masuk), meta('IPK', r.ipk != null ? Number(r.ipk).toFixed(2) : null), meta('Kelas', KELAS[r.kelas] ?? r.kelas)]}\n />\n ),\n columns: [\n {\n key: 'nama',\n header: 'Mahasiswa',\n mobile: 'title',\n value: (r) => r.nama,\n cell: (r) => <CellPrimary media={<Avatar name={String(r.nama ?? r.nim)} src={r.foto} size=\"sm\" />} title={r.nama} subtitle={<Mono>{r.nim}</Mono>} />,\n },\n { key: 'nim', header: 'NIM', defaultHidden: true, mobile: 'hidden' },\n { key: 'nama_prodi', header: 'Program studi', cell: (r) => `${r.kode_jenjang ? r.kode_jenjang + ' ' : ''}${r.nama_prodi ?? '–'}`, value: (r) => r.nama_prodi },\n { key: 'tahun_masuk', header: 'Angkatan', shrink: true },\n { key: 'kelas', header: 'Kelas', shrink: true, cell: (r) => KELAS[r.kelas] ?? r.kelas ?? '–' },\n { key: 'semester', header: 'Smt', align: 'end', shrink: true, defaultHidden: true },\n { key: 'ipk', header: 'IPK', align: 'end', shrink: true, cell: (r) => (r.ipk != null ? Number(r.ipk).toFixed(2) : '–') },\n {\n key: 'status_aktif',\n header: 'Status',\n shrink: true,\n mobile: 'badge',\n value: (r) => r.status_aktif_label ?? r.status_aktif,\n cell: (r) => <StatusBadge tone={toneOf(TONE_MHS, r.status_aktif)}>{r.status_aktif_label ?? r.status_aktif}</StatusBadge>,\n },\n ],\n});\n\n// ================================================================ Dosen\n/** Tabel dosen (dosen.list) dengan saringan prodi dan status. */\nexport const TabelDosen = makeTabel<Row>({\n name: 'TabelDosen',\n key: 'tabel-dosen',\n preset: 'dosen',\n Filter: FilterDosen,\n fetch: (s, q, signal) => s.dosen.list(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.nidn),\n csv: 'dosen',\n empty: { title: 'Belum ada dosen' },\n Detail: ({ row, onClose }) => <SheetDetailDosen nidn={row ? String(row.nidn) : null} onOpenChange={(o) => !o && onClose()} />,\n kartu: (r) => {\n const v = r.status_aktif ?? r.status;\n return (\n <KartuData\n media={<Avatar name={String(r.nama ?? r.nidn)} src={r.foto} size=\"lg\" />}\n title={r.nama_lengkap ?? r.nama}\n subtitle={\n <>\n NIDN <Mono>{r.nidn}</Mono> · {r.nama_prodi ?? '–'}\n </>\n }\n badge={\n <StatusBadge tone={v === 'A' || v === 'aktif' ? 'success' : v === 'T' ? 'info' : 'neutral'}>\n {({ A: 'Aktif', T: 'Tugas belajar', C: 'Cuti', K: 'Keluar' } as Record<string, string>)[v] ?? v}\n </StatusBadge>\n }\n meta={[meta('Jabatan', r.jabatan_akademik ?? 'Belum ada'), meta('Pendidikan', r.pendidikan)]}\n />\n );\n },\n columns: [\n {\n key: 'nama',\n header: 'Dosen',\n mobile: 'title',\n value: (r) => r.nama_lengkap ?? r.nama,\n cell: (r) => (\n <CellPrimary\n media={<Avatar name={String(r.nama ?? r.nidn)} src={r.foto} size=\"sm\" />}\n title={r.nama_lengkap ?? r.nama}\n subtitle={\n <>\n NIDN <Mono>{r.nidn}</Mono>\n </>\n }\n />\n ),\n },\n { key: 'nama_prodi', header: 'Homebase' },\n { key: 'jabatan_akademik', header: 'Jabatan akademik', cell: (r) => r.jabatan_akademik ?? <Muted>Belum ada</Muted> },\n { key: 'pendidikan', header: 'Pendidikan', shrink: true, defaultHidden: true },\n {\n key: 'status',\n header: 'Status',\n shrink: true,\n mobile: 'badge',\n value: (r) => r.status_aktif ?? r.status,\n cell: (r) => {\n const v = r.status_aktif ?? r.status;\n return (\n <StatusBadge tone={v === 'A' || v === 'aktif' ? 'success' : v === 'T' ? 'info' : 'neutral'}>\n {({ A: 'Aktif', T: 'Tugas belajar', C: 'Cuti', K: 'Keluar' } as Record<string, string>)[v] ?? v}\n </StatusBadge>\n );\n },\n },\n ],\n});\n\n// ================================================================ Pegawai / tendik\nconst TONE_PEGAWAI: Record<string, Tone> = {\n aktif: 'success',\n cuti: 'warning',\n tugas_belajar: 'info',\n izin_belajar: 'info',\n diperbantukan: 'info',\n nonaktif: 'neutral',\n pensiun: 'neutral',\n keluar: 'danger',\n};\n\n/** Tabel pegawai, dosen, dan tendik dari modul SDM (sdm.getPegawai). Isi initialFilter={{ jenis: 'tendik' }} untuk tendik saja. */\nexport const TabelPegawai = makeTabel<Row>({\n name: 'TabelPegawai',\n key: 'tabel-pegawai',\n preset: 'pegawai',\n Filter: FilterPegawai,\n fetch: (s, q, signal) => s.sdm.getPegawai(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.id ?? r.uuid ?? r.nip ?? r.nidn),\n csv: 'pegawai',\n empty: { title: 'Belum ada pegawai' },\n kartu: (r) => (\n <KartuData\n media={<Avatar name={String(r.nama ?? '')} src={r.foto} size=\"lg\" />}\n title={r.nama_lengkap ?? r.nama}\n subtitle={r.unit_nama ?? (r.nip ? `NIP ${r.nip}` : undefined)}\n badge={\n <>\n <Badge variant={r.jenis === 'dosen' ? 'primary' : 'secondary'}>{r.jenis === 'dosen' ? 'Dosen' : 'Tendik'}</Badge>\n <StatusBadge tone={toneOf(TONE_PEGAWAI, r.status_aktif)}>{labelFrom(STATUS_PEGAWAI, r.status_aktif)}</StatusBadge>\n </>\n }\n meta={[meta('Kategori', r.kategori === 'tidak_tetap' ? 'Tidak tetap' : r.kategori === 'tetap' ? 'Tetap' : null), meta('Golongan', r.golongan)]}\n />\n ),\n columns: [\n {\n key: 'nama',\n header: 'Pegawai',\n mobile: 'title',\n value: (r) => r.nama_lengkap ?? r.nama,\n cell: (r) => (\n <CellPrimary\n media={<Avatar name={String(r.nama ?? '')} src={r.foto} size=\"sm\" badge={r.serdos ? <BadgeCheck aria-label=\"Bersertifikat dosen\" /> : undefined} />}\n title={r.nama_lengkap ?? r.nama}\n subtitle={\n r.nip ? (\n <>\n NIP <Mono>{r.nip}</Mono>\n </>\n ) : r.nidn ? (\n <>\n NIDN <Mono>{r.nidn}</Mono>\n </>\n ) : undefined\n }\n />\n ),\n },\n { key: 'jenis', header: 'Jenis', shrink: true, cell: (r) => <Badge variant={r.jenis === 'dosen' ? 'primary' : 'secondary'}>{r.jenis === 'dosen' ? 'Dosen' : 'Tendik'}</Badge> },\n { key: 'unit_nama', header: 'Unit kerja' },\n { key: 'kategori', header: 'Kategori', shrink: true, cell: (r) => (r.kategori === 'tidak_tetap' ? 'Tidak tetap' : r.kategori === 'tetap' ? 'Tetap' : '–') },\n { key: 'golongan', header: 'Gol.', shrink: true, defaultHidden: true },\n {\n key: 'status_aktif',\n header: 'Status',\n shrink: true,\n mobile: 'badge',\n cell: (r) => <StatusBadge tone={toneOf(TONE_PEGAWAI, r.status_aktif)}>{labelFrom(STATUS_PEGAWAI, r.status_aktif)}</StatusBadge>,\n },\n ],\n});\n\n// ================================================================ Mata kuliah\n/** Tabel mata kuliah (mataKuliah.list) dengan saringan prodi, semester, tahun akademik. */\nexport const TabelMataKuliah = makeTabel<Row>({\n name: 'TabelMataKuliah',\n key: 'tabel-mk',\n preset: 'mata-kuliah',\n Filter: FilterMataKuliah,\n fetch: (s, q, signal) => s.mataKuliah.list(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.id ?? `${r.kode_prodi}-${r.kode_mk}`),\n csv: 'mata-kuliah',\n empty: { title: 'Belum ada mata kuliah', description: 'Tambahkan mata kuliah di kurikulum program studi.' },\n Detail: ({ row, onClose }) => <SheetDetailMataKuliah mk={row} onOpenChange={(o) => !o && onClose()} />,\n kartu: (r) => (\n <KartuData\n media={\n <span className=\"u-kartu-data-ikon\" aria-hidden>\n <BookOpen />\n </span>\n }\n title={r.nama_mk}\n subtitle={<Mono>{r.kode_mk}</Mono>}\n badge={\n <>\n <Badge variant=\"outline\">{r.sks_mk ?? '–'} SKS</Badge>\n {r.sifat === 'P' ? <Badge>Pilihan</Badge> : r.sifat === 'W' ? <Badge variant=\"primary\">Wajib</Badge> : null}\n </>\n }\n meta={[meta('Semester', r.semester), meta('Prodi', r.kode_prodi)]}\n />\n ),\n columns: [\n { key: 'kode_mk', header: 'Kode', shrink: true, mobile: 'subtitle', cell: (r) => <Mono>{r.kode_mk}</Mono> },\n { key: 'nama_mk', header: 'Mata kuliah', mobile: 'title', cell: (r) => <span style={{ fontWeight: 600 }}>{r.nama_mk}</span> },\n { key: 'sks_mk', header: 'SKS', align: 'end', shrink: true, mobile: 'badge', cell: (r) => <Badge variant=\"outline\">{r.sks_mk ?? '–'} SKS</Badge> },\n { key: 'semester', header: 'Semester', align: 'end', shrink: true },\n { key: 'sifat', header: 'Sifat', shrink: true, cell: (r) => (r.sifat === 'P' ? <Badge>Pilihan</Badge> : r.sifat === 'W' ? <Badge variant=\"primary\">Wajib</Badge> : '–') },\n { key: 'kode_prodi', header: 'Prodi', shrink: true, defaultHidden: true },\n ],\n});\n\n// ================================================================ Surat masuk / keluar\nconst TONE_SURAT: Record<string, Tone> = {\n baru: 'primary',\n didisposisi: 'info',\n diproses: 'warning',\n selesai: 'success',\n diarsipkan: 'neutral',\n dibatalkan: 'danger',\n draf: 'neutral',\n review: 'warning',\n revisi: 'warning',\n disetujui: 'info',\n terkirim: 'success',\n};\nconst TONE_SIFAT: Record<string, Tone> = { biasa: 'neutral', penting: 'info', segera: 'warning', sangat_segera: 'danger' };\n\nfunction BatasWaktu({ v, selesai }: { v?: string | null; selesai?: boolean }) {\n if (!v) return <Muted>–</Muted>;\n const lewat = !selesai && new Date(v + 'T23:59:59') < new Date();\n return (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4, color: lewat ? 'var(--u-danger)' : undefined, fontWeight: lewat ? 600 : undefined }}>\n {lewat && <Clock size={13} aria-hidden />}\n {tanggal(v)}\n </span>\n );\n}\nconst lampiran = (n?: number) =>\n n ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 3, color: 'var(--u-muted-foreground)' }} aria-label={`${n} lampiran`}>\n <Paperclip size={13} aria-hidden />\n {n}\n </span>\n ) : null;\n\n/** Tabel surat masuk (arsip.getSuratMasuk): nomor agenda, perihal, pengirim, sifat, status, batas waktu. */\nexport const TabelSuratMasuk = makeTabel<Row>({\n name: 'TabelSuratMasuk',\n key: 'tabel-surat-masuk',\n preset: 'surat-masuk',\n Filter: FilterSuratMasuk,\n fetch: (s, q, signal) => s.arsip.getSuratMasuk(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.uuid ?? r.id),\n csv: 'surat-masuk',\n empty: { title: 'Kotak surat kosong', description: 'Surat masuk yang dicatat unit Anda akan tampil di sini.' },\n columns: [\n { key: 'nomor_agenda', header: 'Agenda', shrink: true, mobile: 'hidden', cell: (r) => <Mono>{r.nomor_agenda ?? '–'}</Mono> },\n {\n key: 'perihal',\n header: 'Perihal',\n mobile: 'title',\n cell: (r) => (\n <CellPrimary\n title={\n <span style={{ display: 'inline-flex', gap: 6, alignItems: 'center' }}>\n {r.perihal} {lampiran(r.jumlah_file)}\n </span>\n }\n subtitle={[r.pengirim_nama, r.pengirim_instansi].filter(Boolean).join(' · ') || r.nomor_surat}\n />\n ),\n },\n { key: 'nomor_surat', header: 'Nomor surat', defaultHidden: true, cell: (r) => <Mono>{r.nomor_surat ?? '–'}</Mono> },\n { key: 'tanggal_surat', header: 'Tanggal', shrink: true, value: (r) => r.tanggal_surat, cell: (r) => tanggal(r.tanggal_surat) },\n { key: 'sifat', header: 'Sifat', shrink: true, cell: (r) => <Badge variant={toneOf(TONE_SIFAT, r.sifat)}>{labelFrom(SIFAT_SURAT, r.sifat)}</Badge> },\n { key: 'batas_waktu', header: 'Batas', shrink: true, cell: (r) => <BatasWaktu v={r.batas_waktu} selesai={['selesai', 'diarsipkan', 'dibatalkan'].includes(r.status)} /> },\n { key: 'status', header: 'Status', shrink: true, mobile: 'badge', cell: (r) => <StatusBadge tone={toneOf(TONE_SURAT, r.status)}>{labelFrom(STATUS_SURAT_MASUK, r.status)}</StatusBadge> },\n ],\n});\n\n/** Tabel surat keluar (arsip.getSuratKeluar): nomor, perihal, tujuan, sifat, status. */\nexport const TabelSuratKeluar = makeTabel<Row>({\n name: 'TabelSuratKeluar',\n key: 'tabel-surat-keluar',\n preset: 'surat-keluar',\n Filter: FilterSuratKeluar,\n fetch: (s, q, signal) => s.arsip.getSuratKeluar(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.uuid ?? r.id),\n csv: 'surat-keluar',\n empty: { title: 'Belum ada surat keluar', description: 'Buat draf surat, ajukan untuk ditinjau, lalu kirim.' },\n columns: [\n {\n key: 'perihal',\n header: 'Perihal',\n mobile: 'title',\n cell: (r) => (\n <CellPrimary\n title={\n <span style={{ display: 'inline-flex', gap: 6, alignItems: 'center' }}>\n {r.perihal} {lampiran(r.jumlah_file)}\n </span>\n }\n subtitle={r.tujuan_ringkas ? `Kepada: ${r.tujuan_ringkas}` : undefined}\n />\n ),\n },\n { key: 'nomor_surat', header: 'Nomor', cell: (r) => (r.nomor_surat ? <Mono>{r.nomor_surat}</Mono> : <Muted>Belum bernomor</Muted>) },\n { key: 'tanggal_surat', header: 'Tanggal', shrink: true, cell: (r) => tanggal(r.tanggal_surat ?? r.tanggal_kirim) },\n { key: 'sifat', header: 'Sifat', shrink: true, cell: (r) => <Badge variant={toneOf(TONE_SIFAT, r.sifat)}>{labelFrom(SIFAT_SURAT, r.sifat)}</Badge> },\n { key: 'status', header: 'Status', shrink: true, mobile: 'badge', cell: (r) => <StatusBadge tone={toneOf(TONE_SURAT, r.status)}>{labelFrom(STATUS_SURAT_KELUAR, r.status)}</StatusBadge> },\n ],\n});\n\n// ================================================================ Dokumen & berkas arsip\nconst TONE_VERIF: Record<string, Tone> = { diajukan: 'warning', terverifikasi: 'success', ditolak: 'danger', tidak_perlu: 'neutral' };\nconst TONE_ARSIP: Record<string, Tone> = { aktif: 'success', inaktif: 'warning', permanen: 'info', dimusnahkan: 'danger', diserahkan: 'neutral' };\n\nfunction Berlaku({ v }: { v?: string | null }) {\n if (!v) return <Muted>Selamanya</Muted>;\n const d = new Date(v + 'T23:59:59').getTime() - Date.now();\n const hari = Math.ceil(d / 86_400_000);\n if (hari < 0) return <Badge variant=\"danger\">Habis {tanggal(v)}</Badge>;\n if (hari <= 90) return <Badge variant=\"warning\">{hari} hari lagi</Badge>;\n return <span>{tanggal(v)}</span>;\n}\n\n/** Tabel dokumen arsip (arsip.getDokumen): ijazah, SK, sertifikat, kontrak, dengan status verifikasi dan masa berlaku. */\nexport const TabelDokumen = makeTabel<Row>({\n name: 'TabelDokumen',\n key: 'tabel-dokumen',\n preset: 'dokumen',\n Filter: FilterDokumen,\n fetch: (s, q, signal) => s.arsip.getDokumen(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.uuid ?? r.id),\n csv: 'dokumen',\n empty: { title: 'Belum ada dokumen', description: 'Unggah ijazah, SK, sertifikat, atau kontrak agar tersimpan rapi dan mudah dicari.' },\n columns: [\n { key: 'judul', header: 'Dokumen', mobile: 'title', cell: (r) => <CellPrimary title={r.judul} subtitle={[r.jenis_nama, r.nomor].filter(Boolean).join(' · ')} /> },\n { key: 'pemilik_nama', header: 'Pemilik', cell: (r) => r.pemilik_nama ?? r.unit_nama ?? '–' },\n { key: 'tanggal_dokumen', header: 'Tanggal', shrink: true, cell: (r) => tanggal(r.tanggal_dokumen) },\n { key: 'berlaku_sampai', header: 'Berlaku', shrink: true, cell: (r) => <Berlaku v={r.berlaku_sampai} /> },\n { key: 'akses', header: 'Akses', shrink: true, defaultHidden: true, cell: (r) => labelFrom(AKSES_ARSIP, r.akses) },\n {\n key: 'status_verifikasi',\n header: 'Verifikasi',\n shrink: true,\n mobile: 'badge',\n cell: (r) => <StatusBadge tone={toneOf(TONE_VERIF, r.status_verifikasi)}>{labelFrom(STATUS_VERIFIKASI, r.status_verifikasi)}</StatusBadge>,\n },\n ],\n});\n\n/** Tabel berkas arsip (arsip.getBerkas): map berisi surat dan dokumen, dengan status dan retensi. */\nexport const TabelBerkas = makeTabel<Row>({\n name: 'TabelBerkas',\n key: 'tabel-berkas',\n preset: 'berkas',\n Filter: FilterBerkas,\n fetch: (s, q, signal) => s.arsip.getBerkas(q, { signal }) as Promise<ApiResult<Row[]>>,\n rowKey: (r) => String(r.id),\n csv: 'berkas-arsip',\n empty: { icon: <Folder />, title: 'Belum ada berkas', description: 'Berkas mengelompokkan surat dan dokumen satu urusan dalam satu map.' },\n columns: [\n { key: 'nomor_berkas', header: 'Nomor', shrink: true, mobile: 'subtitle', cell: (r) => <Mono>{r.nomor_berkas}</Mono> },\n {\n key: 'judul',\n header: 'Berkas',\n mobile: 'title',\n cell: (r) => (\n <CellPrimary\n media={\n <span className=\"u-dt-file-icon\">\n <Folder />\n </span>\n }\n title={r.judul}\n subtitle={r.uraian ?? undefined}\n />\n ),\n },\n {\n key: 'tahun',\n header: 'Tahun',\n shrink: true,\n value: (r) => r.tahun_awal,\n cell: (r) => (r.tahun_awal ? (r.tahun_akhir && r.tahun_akhir !== r.tahun_awal ? `${r.tahun_awal}–${r.tahun_akhir}` : r.tahun_awal) : '–'),\n },\n {\n key: 'isi',\n header: 'Isi',\n shrink: true,\n align: 'end',\n value: (r) => (r.surat?.length ?? 0) + (r.dokumen?.length ?? 0),\n cell: (r) => `${(r.surat?.length ?? r.jumlah_surat ?? 0) + (r.dokumen?.length ?? r.jumlah_dokumen ?? 0)} item`,\n },\n { key: 'status', header: 'Status', shrink: true, cell: (r) => <Badge variant={r.status === 'terbuka' ? 'primary' : 'neutral'}>{r.status === 'terbuka' ? 'Terbuka' : 'Ditutup'}</Badge> },\n {\n key: 'status_arsip',\n header: 'Arsip',\n shrink: true,\n mobile: 'badge',\n cell: (r) => <StatusBadge tone={toneOf(TONE_ARSIP, r.status_arsip)}>{labelFrom(STATUS_ARSIP, r.status_arsip)}</StatusBadge>,\n },\n ],\n});\n","'use client';\nimport * as React from 'react';\nimport { Cloud, CreditCard, Database, Globe, HardDrive, KeyRound, Mail, MessageCircle, ShieldCheck, Video } from 'lucide-react';\nimport { ServiceList, ServiceStatusPanel, type ServiceCheck, type ServiceInfo } from '../components/status';\nimport { useOptionalSiakad, useSiakadQuery } from './provider';\n\nexport interface StatusLayananProps {\n /** Alamat API yang ditampilkan di baris Gerbang API, mis. \"https://api.unipo.ac.id/v1\". */\n apiLabel?: string;\n /**\n * Layanan tambahan yang diperiksa lewat fetch (mis. SSO). Alamat harus mengizinkan CORS dari aplikasi Anda,\n * atau arahkan ke BFF sendiri (mis. /bff/status).\n */\n extra?: Array<{ key: string; name: string; url: string; description?: string; icon?: React.ReactNode }>;\n /** Sertakan baris SSO (sso.unipo.ac.id) lewat URL ini. Bawaan tidak ada. */\n ssoUrl?: string;\n intervalMs?: number;\n title?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Status layanan UNIPO siap pakai: Gerbang API dan database SIAKAD dari `system.health()` (GET /v1/health, publik),\n * plus layanan lain yang Anda daftarkan (SSO, BFF). Diperiksa ulang tiap menit dan lewat tombol Periksa ulang.\n */\nexport function StatusLayananUnipo({ apiLabel = 'https://api.unipo.ac.id/v1', extra = [], ssoUrl, intervalMs = 60_000, title, className }: StatusLayananProps) {\n const siakad = useOptionalSiakad();\n // Satu panggilan health dipakai dua baris (gerbang + database).\n const health = React.useRef<Promise<Record<string, unknown>> | null>(null);\n const getHealth = (signal: AbortSignal) => {\n if (!health.current) {\n if (!siakad) return Promise.reject(new Error('SDK belum dipasang'));\n health.current = siakad.system.health({}, { signal }).then((r) => r.data as Record<string, unknown>);\n health.current.finally(() => setTimeout(() => (health.current = null), 1000)).catch(() => undefined);\n }\n return health.current;\n };\n const fetchCheck = (url: string) => async (signal: AbortSignal) => {\n const r = await fetch(url, { signal, cache: 'no-store', headers: { Accept: 'application/json' } });\n if (!r.ok) throw Object.assign(new Error(String(r.status)), { status: r.status });\n };\n const checks: ServiceCheck[] = [\n { key: 'api', name: 'Gerbang API', description: apiLabel, icon: <Globe />, check: async (signal) => void (await getHealth(signal)) },\n {\n key: 'db',\n name: 'Database SIAKAD',\n icon: <Database />,\n check: async (signal) => {\n const h = await getHealth(signal);\n return h.database === 'ok' ? { description: 'Terhubung' } : { status: 'down', detail: String(h.database ?? 'gagal') };\n },\n },\n ...(ssoUrl ? [{ key: 'sso', name: 'Login SSO', description: ssoUrl.replace(/\\/\\.well-known.*$/, ''), icon: <KeyRound />, check: fetchCheck(ssoUrl) }] : []),\n ...extra.map((e) => ({ key: e.key, name: e.name, description: e.description ?? e.url, icon: e.icon ?? <Cloud />, check: fetchCheck(e.url) })),\n ];\n return <ServiceStatusPanel checks={checks} intervalMs={intervalMs} title={title} className={className} />;\n}\n\n// ================================================================ Integrasi aktif\nconst INTEGRASI: Record<string, { nama: string; icon: React.ReactNode }> = {\n captcha: { nama: 'Captcha', icon: <ShieldCheck /> },\n pembayaran: { nama: 'Payment gateway', icon: <CreditCard /> },\n penyimpanan: { nama: 'Penyimpanan berkas', icon: <HardDrive /> },\n cache: { nama: 'Cache & antrean', icon: <Database /> },\n email: { nama: 'Email', icon: <Mail /> },\n whatsapp: { nama: 'WhatsApp', icon: <MessageCircle /> },\n rapat: { nama: 'Rapat daring', icon: <Video /> },\n};\n\n/** Daftar integrasi pihak ketiga yang aktif (GET /v1/integrasi/status, publik): captcha, pembayaran, email, dll. */\nexport function IntegrasiAktif({ className }: { className?: string }) {\n const { data, loading } = useSiakadQuery(['integrasi', 'status'], (s, signal) => s.integrasi.getStatus({}, { signal }), { staleTime: 60_000 });\n const d = (data ?? {}) as Record<string, { penyedia?: string; driver?: string; mode?: string } | null>;\n const keys = Object.keys(INTEGRASI).filter((k) => loading || k in d);\n const services: ServiceInfo[] = keys.map((k) => {\n const v = d[k];\n return {\n key: k,\n name: INTEGRASI[k].nama,\n icon: INTEGRASI[k].icon,\n status: loading ? 'checking' : v ? 'ok' : 'off',\n statusLabel: loading ? undefined : v ? 'Aktif' : 'Nonaktif',\n description: loading ? 'Memuat…' : v ? [v.penyedia ?? v.driver, v.mode === 'sandbox' ? 'mode uji' : null].filter(Boolean).join(' · ') : 'Belum diatur di Pustikom',\n };\n });\n return <ServiceList className={className} services={services} />;\n}\n","'use client';\nimport * as React from 'react';\nimport { Download } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { Button } from '../components/actions';\nimport { Calendar, toISODate } from '../components/calendar';\nimport { Alert } from '../components/display';\nimport { AgendaList, EVENT_COLORS, EventCalendar, EventLegend, eventsByDay, formatEventRange, type CalendarEvent } from '../components/schedule';\nimport { pesanGalat, useSiakadQuery } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/** Satu baris dari `GET /v1/kalender/terpadu`. */\nexport interface KegiatanTerpadu {\n sumber: 'kalender' | 'libur' | 'tahun' | 'batas' | 'portal' | 'pmb' | string;\n jenis: string;\n judul: string;\n mulai: string;\n selesai: string | null;\n id?: number;\n libur?: boolean;\n lokasi?: string | null;\n tautan?: string | null;\n warna?: string | null;\n keterangan?: string | null;\n tahun_id?: string | null;\n kode_prodi?: string | null;\n}\n\nexport const JENIS_KEGIATAN: Record<string, string> = {\n akademik: 'Akademik',\n perkuliahan: 'Perkuliahan',\n ujian: 'Ujian',\n krs: 'KRS',\n nilai: 'Nilai',\n libur: 'Libur',\n cuti_bersama: 'Cuti bersama',\n wisuda: 'Wisuda',\n pmb: 'PMB',\n keuangan: 'Keuangan',\n kemahasiswaan: 'Kemahasiswaan',\n rapat: 'Rapat',\n lainnya: 'Lainnya',\n};\n\n/** Ubah baris kalender terpadu menjadi `CalendarEvent`. */\nexport function keEvent(k: KegiatanTerpadu, i = 0): CalendarEvent {\n return {\n id: `${k.sumber}-${k.id ?? i}`,\n title: k.judul,\n start: k.mulai,\n end: k.selesai,\n kind: k.jenis,\n color: k.warna || undefined,\n location: k.lokasi || undefined,\n description: k.keterangan || undefined,\n href: k.tautan || undefined,\n holiday: !!k.libur || k.jenis === 'libur' || k.jenis === 'cuti_bersama',\n };\n}\n\ninterface KalenderQuery {\n kodeProdi?: string;\n tahunId?: string;\n /** Sumber yang diambil, mis. ['kalender','libur','tahun']. Bawaan semua. */\n sumber?: string[];\n}\n\nfunction useKalender(dari: string, sampai: string, { kodeProdi, tahunId, sumber }: KalenderQuery) {\n return useSiakadQuery<KegiatanTerpadu[]>(\n ['kalender-terpadu', dari, sampai, kodeProdi, tahunId, sumber?.join(',')],\n (s, signal) =>\n s.kalender.getTerpadu(\n {\n dari,\n sampai,\n kode_prodi: kodeProdi,\n tahun_id: tahunId,\n sumber: sumber?.join(','),\n },\n { signal },\n ) as never,\n );\n}\n\nconst awalBulan = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst rentangGrid = (m: Date) => {\n const first = awalBulan(m);\n const off = (first.getDay() + 6) % 7;\n return [toISODate(new Date(first.getFullYear(), first.getMonth(), 1 - off)), toISODate(new Date(first.getFullYear(), first.getMonth(), 42 - off))] as const;\n};\n\n// ================================================================ Kalender akademik penuh\nexport interface KalenderAkademikProps extends KalenderQuery {\n /** Bulan awal. Bawaan bulan ini. */\n initialMonth?: Date;\n /** Tautan langganan .ics (mis. `${baseUrl}/v1/kalender/ics`) untuk tombol \"Langganan\". */\n icsUrl?: string;\n /** Klik kegiatan; bawaan membuka panel tanggal itu. */\n onKegiatanClick?: (k: CalendarEvent) => void;\n className?: string;\n}\n\n/**\n * Kalender akademik dari `kalender.getTerpadu`: grid bulan + panel agenda tanggal terpilih,\n * legenda yang bisa dipakai menyaring jenis kegiatan, dan tombol langganan .ics.\n */\nexport function KalenderAkademik({ initialMonth, icsUrl, onKegiatanClick, className, ...q }: KalenderAkademikProps) {\n const [month, setMonth] = React.useState(() => awalBulan(initialMonth ?? new Date()));\n const [selected, setSelected] = React.useState<string>(() => toISODate(new Date()));\n const [hidden, setHidden] = React.useState<string[]>([]);\n const [dari, sampai] = rentangGrid(month);\n const { data, loading, error, refetch } = useKalender(dari, sampai, q);\n\n const events = React.useMemo(() => (data ?? []).map(keEvent), [data]);\n const visible = React.useMemo(() => events.filter((e) => !hidden.includes(e.kind ?? '')), [events, hidden]);\n const kinds = React.useMemo(() => [...new Set(events.map((e) => e.kind ?? 'lainnya'))].sort((a, b) => Object.keys(JENIS_KEGIATAN).indexOf(a) - Object.keys(JENIS_KEGIATAN).indexOf(b)), [events]);\n const byDay = React.useMemo(() => eventsByDay(visible), [visible]);\n const hariIni = byDay.get(selected) ?? [];\n // Mendatang: 5 kegiatan berikutnya setelah tanggal terpilih (untuk panel saat tanggal kosong).\n const mendatang = React.useMemo(() => visible.filter((e) => e.start.slice(0, 10) > selected).slice(0, 5), [visible, selected]);\n\n return (\n <div className={cn('u-kalender-wrap', className)}>\n <div className=\"u-kalender\">\n <div style={{ display: 'grid', gap: '0.75rem', minWidth: 0 }}>\n <EventCalendar\n events={visible}\n month={month}\n onMonthChange={setMonth}\n selected={selected}\n onSelect={(d) => setSelected(d)}\n onEventClick={(e) => (onKegiatanClick ? onKegiatanClick(e) : setSelected(e.start.slice(0, 10) < dari ? dari : e.start.slice(0, 10)))}\n loading={loading && !data}\n toolbar={\n icsUrl ? (\n <Button variant=\"outline\" size=\"sm\" render={<a href={icsUrl} />}>\n <Download /> Langganan .ics\n </Button>\n ) : undefined\n }\n />\n {error && (\n <Alert\n variant=\"danger\"\n title=\"Kalender gagal dimuat\"\n actions={\n <Button size=\"sm\" variant=\"outline\" onClick={refetch}>\n Coba lagi\n </Button>\n }\n >\n {pesanGalat(error, { kode: false })}\n <KodeLaporan error={error} />\n </Alert>\n )}\n {kinds.length > 0 && <EventLegend kinds={kinds} labels={JENIS_KEGIATAN} hidden={hidden} onToggle={(k) => setHidden((h) => (h.includes(k) ? h.filter((x) => x !== k) : [...h, k]))} />}\n </div>\n <aside className=\"u-kalender-side\" aria-label=\"Agenda tanggal terpilih\">\n <h4>{formatEventRange(selected, null, true)}</h4>\n <p>{hariIni.length ? `${hariIni.length} kegiatan` : 'Tidak ada kegiatan di tanggal ini'}</p>\n {hariIni.length > 0 && <AgendaList events={hariIni} onEventClick={onKegiatanClick} compact />}\n <h4 className=\"u-kalender-sub\">Berikutnya</h4>\n <AgendaList events={mendatang} loading={loading && !data} onEventClick={onKegiatanClick} compact empty=\"Belum ada kegiatan terjadwal.\" />\n </aside>\n </div>\n </div>\n );\n}\n\n// ================================================================ Versi sidebar\nexport interface KalenderSidebarProps extends KalenderQuery {\n /** Judul widget. */\n title?: React.ReactNode;\n /** Jumlah kegiatan mendatang yang ditampilkan. Bawaan 4. */\n limit?: number;\n /** Tautan \"Lihat semua\". */\n href?: string;\n onKegiatanClick?: (k: CalendarEvent) => void;\n className?: string;\n}\n\n/**\n * Kalender ringkas untuk sidebar portal/dasbor: kalender kecil dengan titik warna per kegiatan.\n * Klik tanggal untuk melihat kegiatannya; tanpa pilihan, tampil kegiatan mendatang.\n */\nexport function KalenderSidebar({ title = 'Kalender akademik', limit = 4, href, onKegiatanClick, className, ...q }: KalenderSidebarProps) {\n const [month, setMonth] = React.useState(() => awalBulan(new Date()));\n const [selected, setSelected] = React.useState<Date | null>(null);\n const [dari, sampai] = rentangGrid(month);\n const { data, loading } = useKalender(dari, sampai, q);\n const events = React.useMemo(() => (data ?? []).map(keEvent), [data]);\n const byDay = React.useMemo(() => eventsByDay(events, dari, sampai), [events, dari, sampai]);\n const markers = React.useMemo(() => {\n const m: Record<string, { color?: string }[]> = {};\n byDay.forEach(\n (list, k) =>\n (m[k] = list.slice(0, 3).map((e) => ({\n color: e.color ?? EVENT_COLORS[e.kind ?? ''] ?? 'var(--u-primary)',\n }))),\n );\n return m;\n }, [byDay]);\n const today = toISODate(new Date());\n const sel = selected ? toISODate(selected) : null;\n const list = sel ? (byDay.get(sel) ?? []) : events.filter((e) => e.start.slice(0, 10) >= today);\n\n return (\n <section className={cn('u-kalender-mini', className)}>\n <div className=\"u-kalender-mini-head\">\n <h4>{title}</h4>\n {href && (\n <a className=\"u-kalender-link\" href={href}>\n Lihat semua\n </a>\n )}\n </div>\n <Calendar value={selected} onValueChange={(d) => setSelected(sel === toISODate(d) ? null : d)} month={month} onMonthChange={setMonth} markers={markers} cellSize={34} />\n <div className=\"u-kalender-mini-head\">\n <h4\n style={{\n fontSize: 'var(--u-text-xs)',\n color: 'var(--u-muted-foreground)',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n {sel ? formatEventRange(sel, null, true) : 'Mendatang'}\n </h4>\n {sel && (\n <Button variant=\"link\" size=\"xs\" onClick={() => setSelected(null)}>\n Tampilkan mendatang\n </Button>\n )}\n </div>\n <AgendaList events={list} limit={limit} loading={loading && !data} onEventClick={onKegiatanClick} compact empty={sel ? 'Tidak ada kegiatan.' : 'Belum ada kegiatan terjadwal.'} />\n </section>\n );\n}\n","'use client';\nimport { AnnouncementList, EventCard, NewsGrid, RankedList, type AnnouncementItem, type EventCardItem, type NewsGridProps, type NewsItem } from '../components/content';\nimport { Alert } from '../components/display';\nimport { pesanGalat, useSiakadQuery } from './provider';\n\n/** Bentuk ringkas berita/pengumuman/agenda dari `/v1/portal/*` (kolom yang dipakai widget). */\nexport interface KontenPortal {\n id: number;\n slug?: string | null;\n judul: string;\n ringkasan?: string | null;\n jenis?: string | null;\n kategori?: { slug: string; nama: string; warna?: string | null } | null;\n gambar?: { url: string; alt?: string | null } | null;\n sampul?: { url: string } | null;\n penulis_tampil?: string | null;\n dilihat?: number | null;\n terbit_pada?: string | null;\n // pengumuman\n nomor?: string | null;\n prioritas?: string | null;\n berlaku_sampai?: string | null;\n sematkan?: boolean | null;\n // agenda\n mulai?: string;\n selesai?: string | null;\n sepanjang_hari?: boolean | null;\n mode?: string | null;\n lokasi?: string | null;\n penyelenggara?: string | null;\n pendaftaran?: boolean | null;\n}\n\nconst JENIS_BERITA: Record<string, string> = {\n prestasi: 'Prestasi',\n opini: 'Opini',\n liputan: 'Liputan',\n siaran_pers: 'Siaran pers',\n artikel: 'Artikel',\n};\n\n/** Pembentuk URL detail. Bawaan: `/berita/{slug}`, `/pengumuman/{slug}`, `/agenda/{slug}`. */\nexport type HrefKonten = (jenis: 'berita' | 'pengumuman' | 'agenda', k: KontenPortal) => string | undefined;\nconst hrefBawaan: HrefKonten = (jenis, k) => `/${jenis}/${k.slug ?? k.id}`;\n\nexport function keBerita(k: KontenPortal, href: HrefKonten = hrefBawaan): NewsItem {\n return {\n id: k.id,\n title: k.judul,\n href: href('berita', k),\n excerpt: k.ringkasan ?? undefined,\n image: k.gambar?.url ?? null,\n imageAlt: k.gambar?.alt ?? '',\n category: k.kategori ? { name: k.kategori.nama, color: k.kategori.warna } : null,\n author: k.penulis_tampil ?? undefined,\n date: k.terbit_pada ?? null,\n views: k.dilihat ?? null,\n badge: k.jenis && JENIS_BERITA[k.jenis] !== k.kategori?.nama ? JENIS_BERITA[k.jenis] : undefined,\n };\n}\n\ninterface Umum {\n /** Kode situs portal, mis. 'univ' atau kode fakultas. Kosong = semua situs. */\n situs?: string;\n /** Ikutkan situs turunan (fakultas/prodi di bawahnya). */\n turunan?: boolean;\n /** Jumlah item. */\n jumlah?: number;\n href?: HrefKonten;\n className?: string;\n}\n\nfunction Galat({ error, refetch }: { error: Error; refetch: () => void }) {\n return (\n <Alert\n variant=\"danger\"\n title=\"Konten gagal dimuat\"\n actions={\n <button type=\"button\" className=\"u-section-link\" onClick={refetch}>\n Coba lagi\n </button>\n }\n >\n {pesanGalat(error)}\n </Alert>\n );\n}\n\n// ================================================================ Berita\nexport interface BeritaPortalProps extends Umum {\n /** grid / featured (sorotan) / list. */\n layout?: NewsGridProps['layout'];\n kategori?: string;\n /** berita | artikel | opini | prestasi | liputan | siaran_pers */\n jenis?: string;\n unggulan?: boolean;\n urut?: 'terbaru' | 'populer';\n /** Berita yang menyebut mahasiswa/dosen ini (untuk profil). */\n nim?: string;\n nidn?: string;\n minColumn?: number;\n}\n\n/** Berita dari `portal.getBerita` dalam tata letak grid, sorotan, atau daftar. */\nexport function BeritaPortal({ situs, turunan, jumlah = 6, href, className, layout = 'grid', kategori, jenis, unggulan, urut, nim, nidn, minColumn }: BeritaPortalProps) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n kategori,\n jenis,\n unggulan: unggulan ? '1' : undefined,\n urut,\n nim,\n nidn,\n };\n const { data, loading, error, refetch } = useSiakadQuery<KontenPortal[]>(['portal-berita', q], (s, signal) => s.portal.getBerita(q, { signal }) as never, { staleTime: 120_000 });\n if (error) return <Galat error={error} refetch={refetch} />;\n return <NewsGrid className={className} layout={layout} minColumn={minColumn} loading={loading && !data} skeletonCount={jumlah} items={(data ?? []).map((k) => keBerita(k, href))} />;\n}\n\n/** Daftar bernomor berita terpopuler (urut=populer). */\nexport function BeritaTerpopuler({ situs, turunan, jumlah = 5, href, className }: Umum) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n urut: 'populer',\n };\n const { data, loading } = useSiakadQuery<KontenPortal[]>(['portal-berita', q], (s, signal) => s.portal.getBerita(q, { signal }) as never, { staleTime: 300_000 });\n return <RankedList className={className} loading={loading && !data} items={(data ?? []).map((k) => keBerita(k, href))} />;\n}\n\n// ================================================================ Pengumuman\nexport interface PengumumanPortalProps extends Umum {\n /** biasa | penting | darurat */\n prioritas?: string;\n /** Sertakan yang sudah lewat masa berlaku. */\n kedaluwarsa?: boolean;\n}\n\n/** Pengumuman dari `portal.getPengumuman`: tersemat di atas, prioritas berwarna, masa berlaku. */\nexport function PengumumanPortal({ situs, turunan, jumlah = 5, href = hrefBawaan, className, prioritas, kedaluwarsa }: PengumumanPortalProps) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n prioritas,\n kedaluwarsa: kedaluwarsa ? '1' : undefined,\n };\n const { data, loading, error, refetch } = useSiakadQuery<KontenPortal[]>(['portal-pengumuman', q], (s, signal) => s.portal.getPengumuman(q, { signal }) as never, { staleTime: 120_000 });\n if (error) return <Galat error={error} refetch={refetch} />;\n const items: AnnouncementItem[] = (data ?? [])\n .map((k) => ({\n id: k.id,\n title: k.judul,\n href: href('pengumuman', k),\n number: k.nomor,\n priority: k.prioritas ?? undefined,\n date: k.terbit_pada,\n until: k.berlaku_sampai,\n pinned: !!k.sematkan,\n }))\n .sort((a, b) => Number(b.pinned) - Number(a.pinned));\n return <AnnouncementList className={className} loading={loading && !data} items={items} />;\n}\n\n// ================================================================ Agenda\nexport interface AgendaPortalProps extends Umum {\n waktu?: 'mendatang' | 'lalu' | 'semua';\n /** luring | daring | hibrida */\n mode?: string;\n /** row = baris berbingkai; card = kartu dengan gambar. */\n variant?: 'row' | 'card';\n}\n\n/** Agenda dari `portal.getAgenda` (bawaan: mendatang) dengan tile tanggal, jam WITA, mode, dan lokasi. */\nexport function AgendaPortal({ situs, turunan, jumlah = 4, href = hrefBawaan, className, waktu = 'mendatang', mode, variant = 'row' }: AgendaPortalProps) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n waktu,\n mode,\n };\n const { data, loading, error, refetch } = useSiakadQuery<KontenPortal[]>(['portal-agenda', q], (s, signal) => s.portal.getAgenda(q, { signal }) as never, { staleTime: 120_000 });\n if (error) return <Galat error={error} refetch={refetch} />;\n if (loading && !data) return <AnnouncementList loading items={[]} />;\n const items: EventCardItem[] = (data ?? []).map((k) => ({\n id: k.id,\n title: k.judul,\n href: href('agenda', k),\n start: k.mulai ?? '',\n end: k.selesai,\n allDay: !!k.sepanjang_hari,\n mode: k.mode,\n location: k.lokasi ?? undefined,\n organizer: k.penyelenggara ?? undefined,\n image: k.gambar?.url ?? null,\n registration: !!k.pendaftaran,\n }));\n if (!items.length) return <div className=\"u-agenda-empty\">Belum ada agenda {waktu === 'lalu' ? 'yang lalu' : 'mendatang'}.</div>;\n return (\n <div\n className={className}\n style={{\n display: 'grid',\n gap: '0.75rem',\n gridTemplateColumns: variant === 'card' ? 'repeat(auto-fill, minmax(min(100%, 260px), 1fr))' : undefined,\n }}\n >\n {items.map((it) => (\n <EventCard key={it.id} item={it} variant={variant} />\n ))}\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { Check, GraduationCap } from 'lucide-react';\nimport { Alert } from '../components/display';\nimport { DatePicker, parseISODate, toISODate } from '../components/calendar';\nimport { Field, Input, RadioGroup, Textarea } from '../components/forms';\nimport { Select } from '../components/select';\nimport { Skeleton } from '../components/actions';\nimport { FormGrid, Wizard, WizardReview, type ReviewSection, type WizardStep } from '../components/wizard';\nimport { formatDate } from '../lib/format';\nimport { CariPerguruanTinggi, CariSekolah } from './cari';\nimport { invalidateSiakad, pesanGalat, useSiakad, useSiakadQuery } from './provider';\n\n// ================================================================ Tipe formulir (PATCH /v1/pmb/saya/pendaftaran/{id})\ntype Isian = Record<string, string | number | null | undefined>;\nexport interface FormulirPmb {\n pribadi?: Isian;\n alamat?: Isian;\n asal_sekolah?: Isian;\n orang_tua?: { ayah?: Isian; ibu?: Isian; wali?: Isian };\n pilihan?: string[];\n}\nexport type Opsi = { kode: string; nama: string };\n/** Referensi kode dari `GET /v1/pmb/info/referensi-formulir` (tabel r_kode SIAKAD). */\nexport type ReferensiFormulir = Partial<\n Record<'jenis_kelamin' | 'agama' | 'warga_negara' | 'status_sipil' | 'hidup' | 'status_masuk' | 'asal_jenjang' | 'pendidikan' | 'pekerjaan' | 'penghasilan' | 'sumber_informasi', Opsi[]>\n>;\n\n/** Ambil referensi kode formulir (publik, di-cache 1 jam). */\nexport function useReferensiFormulir() {\n return useSiakadQuery<ReferensiFormulir>(['pmb-referensi-formulir'], (s, signal) => s.pmb.getInfoReferensiFormulir({}, { signal }) as never, { staleTime: 3_600_000 });\n}\n\nconst opsi = (xs?: Opsi[]) => (xs ?? []).map((o) => ({ value: o.kode, label: o.nama }));\nconst nama = (xs: Opsi[] | undefined, kode: unknown) => (kode == null || kode === '' ? null : (xs?.find((o) => o.kode === String(kode))?.nama ?? String(kode)));\n\n// ================================================================ Bagian isian (dipakai wizard PMB dan biodata)\ninterface BagianProps {\n value: Isian;\n onChange: (patch: Isian) => void;\n ref_: ReferensiFormulir;\n errors?: Record<string, string>;\n}\nconst teks = (v: unknown) => (v == null ? '' : String(v));\n\nexport function IsianDataDiri({ value: v, onChange, ref_, errors = {} }: BagianProps) {\n const set = (k: string) => (e: React.ChangeEvent<HTMLInputElement>) => onChange({ [k]: e.target.value });\n return (\n <FormGrid>\n <Field label=\"Nama lengkap\" required description=\"Sesuai ijazah. Maksimal 30 karakter (batas kolom SIAKAD).\" error={errors.nama} style={{ gridColumn: '1 / -1' }}>\n <Input value={teks(v.nama)} onChange={set('nama')} maxLength={30} autoComplete=\"name\" />\n </Field>\n <Field label=\"NIK\" required error={errors.no_identitas} description=\"16 digit, sesuai KTP/KK.\">\n <Input value={teks(v.no_identitas)} onChange={(e) => onChange({ no_identitas: e.target.value.replace(/\\D/g, '').slice(0, 16) })} inputMode=\"numeric\" />\n </Field>\n <Field label=\"NISN\" optional error={errors.nisn}>\n <Input value={teks(v.nisn)} onChange={(e) => onChange({ nisn: e.target.value.replace(/\\D/g, '').slice(0, 10) })} inputMode=\"numeric\" />\n </Field>\n <Field label=\"Jenis kelamin\" required error={errors.jenis_kelamin} style={{ gridColumn: '1 / -1' }}>\n <RadioGroup orientation=\"horizontal\" options={opsi(ref_.jenis_kelamin)} value={teks(v.jenis_kelamin) || null} onValueChange={(x) => onChange({ jenis_kelamin: x })} />\n </Field>\n <Field label=\"Tempat lahir\" required error={errors.tempat_lahir}>\n <Input value={teks(v.tempat_lahir)} onChange={set('tempat_lahir')} />\n </Field>\n <Field label=\"Tanggal lahir\" required error={errors.tanggal_lahir}>\n <DatePicker value={v.tanggal_lahir ? parseISODate(String(v.tanggal_lahir)) : null} onValueChange={(d) => onChange({ tanggal_lahir: d ? toISODate(d) : null })} max={new Date()} />\n </Field>\n <Field label=\"Agama\" required error={errors.agama}>\n <Select options={opsi(ref_.agama)} value={teks(v.agama) || null} onValueChange={(x) => onChange({ agama: x })} />\n </Field>\n <Field label=\"Kewarganegaraan\" error={errors.warga_negara}>\n <Select options={opsi(ref_.warga_negara)} value={teks(v.warga_negara) || null} onValueChange={(x) => onChange({ warga_negara: x })} />\n </Field>\n <Field label=\"Nomor HP (WhatsApp)\" required error={errors.hp} description=\"Untuk informasi seleksi dan pembayaran.\">\n <Input value={teks(v.hp)} onChange={(e) => onChange({ hp: e.target.value.replace(/[^\\d+]/g, '') })} inputMode=\"tel\" autoComplete=\"tel\" placeholder=\"08xx\" />\n </Field>\n <Field label=\"Email\" optional error={errors.email}>\n <Input type=\"email\" value={teks(v.email)} onChange={set('email')} autoComplete=\"email\" />\n </Field>\n </FormGrid>\n );\n}\n\nexport function IsianAlamat({ value: v, onChange, errors = {} }: Omit<BagianProps, 'ref_'> & { ref_?: ReferensiFormulir }) {\n const set = (k: string) => (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange({ [k]: e.target.value });\n return (\n <FormGrid columns={3}>\n <Field label=\"Alamat\" required error={errors.alamat} description=\"Nama jalan, nomor rumah, atau patokan.\" style={{ gridColumn: '1 / -1' }}>\n <Textarea rows={2} value={teks(v.alamat)} onChange={set('alamat')} autoComplete=\"street-address\" />\n </Field>\n <Field label=\"RT\" optional>\n <Input value={teks(v.rt)} onChange={set('rt')} inputMode=\"numeric\" maxLength={3} />\n </Field>\n <Field label=\"RW\" optional>\n <Input value={teks(v.rw)} onChange={set('rw')} inputMode=\"numeric\" maxLength={3} />\n </Field>\n <Field label=\"Kode pos\" optional>\n <Input value={teks(v.kode_pos)} onChange={set('kode_pos')} inputMode=\"numeric\" maxLength={5} autoComplete=\"postal-code\" />\n </Field>\n <Field label=\"Dusun/lingkungan\" optional>\n <Input value={teks(v.dusun)} onChange={set('dusun')} />\n </Field>\n <Field label=\"Desa/kelurahan\" required error={errors.desa}>\n <Input value={teks(v.desa)} onChange={set('desa')} />\n </Field>\n <Field label=\"Kecamatan\" required error={errors.kecamatan}>\n <Input value={teks(v.kecamatan)} onChange={set('kecamatan')} />\n </Field>\n </FormGrid>\n );\n}\n\nexport function IsianAsalSekolah({ value: v, onChange, ref_, errors = {} }: BagianProps) {\n const pindahan = ['P', 'pindahan', '2'].includes(teks(v.status_masuk));\n const tahun = new Date().getFullYear();\n return (\n <FormGrid>\n <Field label=\"Status masuk\" required style={{ gridColumn: '1 / -1' }}>\n <RadioGroup\n variant=\"card\"\n options={(ref_.status_masuk?.length\n ? ref_.status_masuk\n : [\n { kode: 'B', nama: 'Mahasiswa baru' },\n { kode: 'P', nama: 'Pindahan' },\n ]\n ).map((o) => ({\n value: o.kode,\n label: o.nama,\n description: ['P', 'pindahan', '2'].includes(o.kode) ? 'Dari perguruan tinggi lain, dengan pengakuan SKS' : 'Lulusan SMA/SMK/MA atau sederajat',\n }))}\n value={teks(v.status_masuk) || null}\n onValueChange={(x) => onChange({ status_masuk: x })}\n />\n </Field>\n {!pindahan ? (\n <>\n <Field label=\"Asal sekolah\" required error={errors.nama_sekolah} description=\"Cari nama atau NPSN. Tidak ketemu? Ketik namanya lalu pilih “Pakai …”.\" style={{ gridColumn: '1 / -1' }}>\n <CariSekolah\n value={v.nama_sekolah ? { kode: teks(v.kode_sekolah), nama: teks(v.nama_sekolah) } : null}\n onValueChange={(s) => onChange({ kode_sekolah: s?.kode || null, nama_sekolah: s?.nama ?? null })}\n />\n </Field>\n <Field label=\"Tahun lulus\" required error={errors.tahun_lulus}>\n <Select\n options={Array.from({ length: 8 }, (_, i) => ({ value: String(tahun - i + 1), label: String(tahun - i + 1) }))}\n value={v.tahun_lulus ? String(v.tahun_lulus) : null}\n onValueChange={(x) => onChange({ tahun_lulus: x ? Number(x) : null })}\n />\n </Field>\n <Field label=\"Nilai rata-rata ijazah\" optional>\n <Input value={teks(v.nilai_un)} onChange={(e) => onChange({ nilai_un: e.target.value.replace(/[^\\d.,]/g, '') })} inputMode=\"decimal\" placeholder=\"mis. 85,40\" />\n </Field>\n </>\n ) : (\n <>\n <Field label=\"Perguruan tinggi asal\" required error={errors.nama_asal_pt} style={{ gridColumn: '1 / -1' }}>\n <CariPerguruanTinggi\n value={v.nama_asal_pt ? { kode: teks(v.kode_asal_pt), nama: teks(v.nama_asal_pt) } : null}\n onValueChange={(p) => onChange({ kode_asal_pt: p?.kode || null, nama_asal_pt: p?.nama ?? null })}\n />\n </Field>\n <Field label=\"Jenjang asal\">\n <Select options={opsi(ref_.asal_jenjang)} value={teks(v.asal_jenjang) || null} onValueChange={(x) => onChange({ asal_jenjang: x })} />\n </Field>\n <Field label=\"Program studi asal\" required error={errors.nama_asal_prodi}>\n <Input value={teks(v.nama_asal_prodi)} onChange={(e) => onChange({ nama_asal_prodi: e.target.value })} />\n </Field>\n <Field label=\"NIM asal\" optional>\n <Input value={teks(v.nim_asal)} onChange={(e) => onChange({ nim_asal: e.target.value })} />\n </Field>\n <Field label=\"SKS yang sudah ditempuh\" optional description=\"Diakui setelah verifikasi prodi.\">\n <Input value={teks(v.sks_diakui)} onChange={(e) => onChange({ sks_diakui: e.target.value.replace(/\\D/g, '') ? Number(e.target.value.replace(/\\D/g, '')) : null })} inputMode=\"numeric\" />\n </Field>\n </>\n )}\n </FormGrid>\n );\n}\n\nfunction IsianSatuOrtu({ label, value: v, onChange, ref_ }: BagianProps & { label: string }) {\n return (\n <>\n <p className=\"u-form-section-title\">{label}</p>\n <Field label={`Nama ${label.toLowerCase()}`} required style={{ gridColumn: '1 / -1' }}>\n <Input value={teks(v.nama)} onChange={(e) => onChange({ nama: e.target.value })} />\n </Field>\n <Field label=\"Pendidikan terakhir\">\n <Select options={opsi(ref_.pendidikan)} value={teks(v.pendidikan) || null} onValueChange={(x) => onChange({ pendidikan: x })} />\n </Field>\n <Field label=\"Pekerjaan\">\n <Select options={opsi(ref_.pekerjaan)} value={teks(v.pekerjaan) || null} onValueChange={(x) => onChange({ pekerjaan: x })} />\n </Field>\n <Field label=\"Penghasilan per bulan\">\n <Select options={opsi(ref_.penghasilan)} value={teks(v.penghasilan) || null} onValueChange={(x) => onChange({ penghasilan: x })} />\n </Field>\n <Field label=\"Nomor HP\" optional>\n <Input value={teks(v.hp)} onChange={(e) => onChange({ hp: e.target.value.replace(/[^\\d+]/g, '') })} inputMode=\"tel\" />\n </Field>\n </>\n );\n}\n\nexport function IsianOrangTua({ value, onChange, ref_ }: { value: NonNullable<FormulirPmb['orang_tua']>; onChange: (v: NonNullable<FormulirPmb['orang_tua']>) => void; ref_: ReferensiFormulir }) {\n return (\n <FormGrid>\n {(['ayah', 'ibu'] as const).map((h) => (\n <IsianSatuOrtu key={h} label={h === 'ayah' ? 'Ayah' : 'Ibu'} value={value[h] ?? {}} ref_={ref_} onChange={(p) => onChange({ ...value, [h]: { ...(value[h] ?? {}), ...p } })} />\n ))}\n </FormGrid>\n );\n}\n\n// ================================================================ Pilihan prodi\nexport interface ProdiGelombang {\n kode_prodi: string;\n nama_prodi: string;\n jenjang?: string | null;\n kode_fakultas?: string | null;\n kuota?: number | null;\n jumlah_peminat?: number | null;\n}\n\n/** Pilih program studi sesuai urutan prioritas (pilihan 1, 2, …) dengan kuota dan jumlah peminat. */\nexport function PilihanProdi({ prodi, value, onChange, maks = 2 }: { prodi: ProdiGelombang[]; value: string[]; onChange: (v: string[]) => void; maks?: number }) {\n const toggle = (k: string) => (value.includes(k) ? onChange(value.filter((x) => x !== k)) : value.length < maks ? onChange([...value, k]) : onChange([...value.slice(0, maks - 1), k]));\n return (\n <div className=\"u-prodi-pick\">\n <p className=\"u-prodi-pick-hint\">\n Pilih hingga <b>{maks}</b> program studi. Urutan klik menjadi urutan prioritas.\n </p>\n <ul>\n {prodi.map((p) => {\n const i = value.indexOf(p.kode_prodi);\n const rasio = p.kuota ? (p.jumlah_peminat ?? 0) / p.kuota : 0;\n return (\n <li key={p.kode_prodi}>\n <button type=\"button\" className=\"u-prodi-opt\" aria-pressed={i >= 0} onClick={() => toggle(p.kode_prodi)}>\n <span className=\"u-prodi-rank\" aria-hidden>\n {i >= 0 ? i + 1 : <GraduationCap />}\n </span>\n <span className=\"u-prodi-text\">\n <span className=\"u-prodi-name\">\n {p.jenjang ? `${p.jenjang} ` : ''}\n {p.nama_prodi}\n </span>\n <span className=\"u-prodi-meta\">\n {p.kode_fakultas}\n {p.kuota ? ` · kuota ${p.kuota}` : ''}\n {p.jumlah_peminat != null ? ` · ${p.jumlah_peminat} peminat` : ''}\n </span>\n </span>\n {p.kuota ? (\n <span className=\"u-prodi-meter\" data-level={rasio > 1.5 ? 'tinggi' : rasio > 0.8 ? 'sedang' : 'rendah'} title=\"Perbandingan peminat dan kuota\">\n {rasio > 1.5 ? 'Persaingan tinggi' : rasio > 0.8 ? 'Sedang' : 'Peluang besar'}\n </span>\n ) : null}\n {i >= 0 && <Check className=\"u-prodi-check\" aria-hidden />}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Wizard pendaftaran PMB\nexport interface WizardPendaftaranPmbProps {\n /** UUID pendaftaran (dari `POST /v1/pmb/saya/pendaftaran`). */\n id: string;\n /** Dipanggil setelah pendaftaran diajukan. */\n onDiajukan?: (hasil: { no_pmb?: string | null; status?: string }) => void;\n /** Kontak panitia di bawah daftar langkah. */\n kontak?: React.ReactNode;\n className?: string;\n}\n\ninterface Pendaftaran {\n id: string;\n no_pmb: string | null;\n status: string;\n gelombang: { id: number; nama: string; jalur?: string | null };\n formulir: FormulirPmb;\n pilihan: Array<{ urut: number; kode_prodi: string; nama_prodi?: string | null }>;\n kelengkapan: Record<string, string> | [];\n}\n\n/**\n * Wizard formulir PMB yang tersambung ke SIAKAD: memuat draf `pmb.getSayaPendaftaranById`, menyimpan tiap langkah\n * dengan `pmb.patchSayaPendaftaranById` (hanya bagian langkah itu), lalu `pmb.postSayaPendaftaranByIdAjukan`.\n * Galat validasi server ditampilkan di field terkait.\n */\nexport function WizardPendaftaranPmb({ id, onDiajukan, kontak, className }: WizardPendaftaranPmbProps) {\n const siakad = useSiakad();\n const det = useSiakadQuery<Pendaftaran>(['pmb-pendaftaran', id], (s, signal) => s.pmb.getSayaPendaftaranById(id, {}, { signal }) as never, { staleTime: 0 });\n const ref = useReferensiFormulir();\n const gelId = det.data?.gelombang.id;\n const gel = useSiakadQuery<{ maks_pilihan?: number; prodi: ProdiGelombang[] }>(['pmb-gelombang', gelId], (s, signal) => s.pmb.getInfoGelombangById(gelId!, {}, { signal }) as never, {\n enabled: !!gelId,\n staleTime: 600_000,\n });\n\n const [f, setF] = React.useState<FormulirPmb | null>(null);\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n const [step, setStep] = React.useState(0);\n const [savedAt, setSavedAt] = React.useState<Date | null>(null);\n const [selesai, setSelesai] = React.useState<string | null>(null);\n React.useEffect(() => {\n if (det.data && !f) setF({ ...det.data.formulir, pilihan: det.data.formulir.pilihan ?? det.data.pilihan.map((p) => p.kode_prodi) });\n }, [det.data, f]);\n\n if (det.error)\n return (\n <Alert variant=\"danger\" title=\"Formulir tidak bisa dimuat\">\n {pesanGalat(det.error)}\n </Alert>\n );\n if (!f || !ref.data)\n return (\n <div className=\"u-wizard\" aria-busy>\n <Skeleton style={{ height: 420, borderRadius: 16 }} />\n </div>\n );\n if (selesai)\n return (\n <Alert variant=\"success\" title=\"Pendaftaran berhasil diajukan\">\n Nomor pendaftaran Anda <b>{selesai}</b>. Panitia akan memverifikasi data; pantau status di dasbor.\n </Alert>\n );\n\n const r = ref.data;\n const ubah = <K extends keyof FormulirPmb>(k: K, patch: Partial<NonNullable<FormulirPmb[K]>>) => {\n setF((x) => ({ ...x, [k]: Array.isArray(patch) ? patch : { ...((x?.[k] as object) ?? {}), ...patch } }));\n setErrors((e) => {\n const n = { ...e };\n for (const key of Object.keys(patch)) delete n[key];\n return n;\n });\n };\n const simpan = (bagian: keyof FormulirPmb) => async () => {\n try {\n await siakad.pmb.patchSayaPendaftaranById(id, { [bagian]: f[bagian] } as never);\n setSavedAt(new Date());\n setErrors({});\n } catch (e) {\n const err = e as { status?: number; details?: Record<string, unknown> };\n const fields = err.status === 422 && err.details && Object.keys(err.details).length ? err.details : null;\n if (fields) {\n setErrors(Object.fromEntries(Object.entries(fields).map(([k, v]) => [k.split('.').pop()!, String(v)])));\n return 'Periksa kembali isian yang ditandai.';\n }\n return pesanGalat(e);\n }\n };\n\n const p = f.pribadi ?? {};\n const a = f.alamat ?? {};\n const s = f.asal_sekolah ?? {};\n const o = f.orang_tua ?? {};\n const prodi = gel.data?.prodi ?? [];\n const wajib = (obj: Isian, keys: string[]) => keys.filter((k) => obj[k] == null || obj[k] === '');\n const kurang = {\n pilihan: (f.pilihan ?? []).length ? null : 'Pilih minimal satu program studi.',\n pribadi: wajib(p, ['nama', 'no_identitas', 'jenis_kelamin', 'tempat_lahir', 'tanggal_lahir', 'agama', 'hp']).length ? 'Data diri belum lengkap.' : null,\n alamat: wajib(a, ['alamat', 'desa', 'kecamatan']).length ? 'Alamat belum lengkap.' : null,\n asal_sekolah: !(s.nama_sekolah || s.nama_asal_pt) ? 'Asal sekolah belum diisi.' : null,\n orang_tua: !(o.ayah?.nama || o.ibu?.nama) ? 'Isi minimal nama ayah atau ibu.' : null,\n };\n\n const steps: WizardStep[] = [\n {\n id: 'prodi',\n title: 'Program studi',\n description: det.data!.gelombang.nama + (det.data!.gelombang.jalur ? ` · ${det.data!.gelombang.jalur}` : ''),\n content: gel.loading ? (\n <Skeleton style={{ height: 240 }} />\n ) : (\n <PilihanProdi prodi={prodi} value={f.pilihan ?? []} maks={gel.data?.maks_pilihan ?? 2} onChange={(v) => setF((x) => ({ ...x, pilihan: v }))} />\n ),\n onNext: async () => kurang.pilihan ?? (await simpan('pilihan')()),\n error: !!errors.pilihan,\n },\n {\n id: 'pribadi',\n title: 'Data diri',\n description: 'Sesuai KTP/KK dan ijazah',\n content: <IsianDataDiri value={p} ref_={r} errors={errors} onChange={(x) => ubah('pribadi', x)} />,\n onNext: simpan('pribadi'),\n },\n { id: 'alamat', title: 'Alamat', description: 'Domisili saat ini', content: <IsianAlamat value={a} errors={errors} onChange={(x) => ubah('alamat', x)} />, onNext: simpan('alamat') },\n {\n id: 'asal',\n title: 'Asal sekolah',\n description: 'Sekolah atau kampus asal',\n content: <IsianAsalSekolah value={s} ref_={r} errors={errors} onChange={(x) => ubah('asal_sekolah', x)} />,\n onNext: simpan('asal_sekolah'),\n },\n {\n id: 'ortu',\n title: 'Orang tua',\n description: 'Data ayah dan ibu',\n content: <IsianOrangTua value={o} ref_={r} onChange={(x) => setF((y) => ({ ...y, orang_tua: x }))} />,\n onNext: simpan('orang_tua'),\n },\n {\n id: 'tinjau',\n title: 'Tinjau & ajukan',\n description: 'Pastikan semua benar',\n content: <PmbReview f={f} r={r} prodi={prodi} kurang={kurang} server={Array.isArray(det.data!.kelengkapan) ? {} : det.data!.kelengkapan} go={setStep} />,\n },\n ];\n\n return (\n <Wizard\n className={className}\n steps={steps}\n step={step}\n onStepChange={setStep}\n savedAt={savedAt}\n title=\"Formulir pendaftaran\"\n description=\"Isian tersimpan otomatis tiap langkah. Anda bisa melanjutkan kapan saja.\"\n aside={kontak}\n finishLabel=\"Ajukan pendaftaran\"\n onFinish={async () => {\n const k = Object.values(kurang).find(Boolean);\n if (k) return k;\n try {\n const res = await siakad.pmb.postSayaPendaftaranByIdAjukan(id);\n const d = res.data as { no_pmb?: string | null; status?: string };\n invalidateSiakad('pmb');\n setSelesai(d.no_pmb ?? '-');\n onDiajukan?.(d);\n } catch (e) {\n return pesanGalat(e);\n }\n }}\n />\n );\n}\n\nfunction PmbReview({\n f,\n r,\n prodi,\n kurang,\n server,\n go,\n}: {\n f: FormulirPmb;\n r: ReferensiFormulir;\n prodi: ProdiGelombang[];\n kurang: Record<string, string | null>;\n server: Record<string, string>;\n go: (n: number) => void;\n}) {\n const p = f.pribadi ?? {};\n const a = f.alamat ?? {};\n const s = f.asal_sekolah ?? {};\n const o = f.orang_tua ?? {};\n const sections: ReviewSection[] = [\n {\n title: 'Program studi',\n onEdit: () => go(0),\n missing: kurang.pilihan,\n items: (f.pilihan ?? []).map((k, i) => ({ label: `Pilihan ${i + 1}`, value: prodi.find((x) => x.kode_prodi === k)?.nama_prodi ?? k })),\n },\n {\n title: 'Data diri',\n onEdit: () => go(1),\n missing: kurang.pribadi,\n items: [\n { label: 'Nama', value: p.nama },\n { label: 'NIK', value: p.no_identitas },\n { label: 'Jenis kelamin', value: nama(r.jenis_kelamin, p.jenis_kelamin) },\n { label: 'Tempat, tanggal lahir', value: p.tempat_lahir || p.tanggal_lahir ? `${p.tempat_lahir ?? '…'}, ${p.tanggal_lahir ? formatDate(String(p.tanggal_lahir), 'long') : '…'}` : null },\n { label: 'Agama', value: nama(r.agama, p.agama) },\n { label: 'Nomor HP', value: p.hp },\n ],\n },\n {\n title: 'Alamat',\n onEdit: () => go(2),\n missing: kurang.alamat,\n items: [\n { label: 'Alamat', value: [a.alamat, a.rt && `RT ${a.rt}`, a.rw && `RW ${a.rw}`].filter(Boolean).join(', ') },\n { label: 'Desa/kelurahan', value: a.desa },\n { label: 'Kecamatan', value: a.kecamatan },\n ],\n },\n {\n title: 'Asal sekolah',\n onEdit: () => go(3),\n missing: kurang.asal_sekolah,\n items: [\n { label: 'Sekolah/PT asal', value: s.nama_sekolah ?? s.nama_asal_pt },\n { label: 'Tahun lulus', value: s.tahun_lulus },\n ],\n },\n {\n title: 'Orang tua',\n onEdit: () => go(4),\n missing: kurang.orang_tua,\n items: [\n { label: 'Ayah', value: o.ayah?.nama },\n { label: 'Ibu', value: o.ibu?.nama },\n { label: 'Pekerjaan ayah', value: nama(r.pekerjaan, o.ayah?.pekerjaan) },\n { label: 'Pekerjaan ibu', value: nama(r.pekerjaan, o.ibu?.pekerjaan) },\n ],\n },\n ];\n const lain = Object.entries(server).filter(([k]) => k.startsWith('berkas') || k === 'rapor' || k === 'prestasi' || k.startsWith('akun'));\n return (\n <div style={{ display: 'grid', gap: '1rem' }}>\n {lain.length > 0 && (\n <Alert variant=\"warning\" title=\"Masih ada yang perlu dilengkapi di luar formulir\">\n <ul style={{ margin: 0, paddingLeft: '1.1rem' }}>\n {lain.map(([k, v]) => (\n <li key={k}>\n {k.replace('berkas.', 'Berkas ').replace('akun.', 'Akun ')}: {v}\n </li>\n ))}\n </ul>\n </Alert>\n )}\n <WizardReview sections={sections} />\n </div>\n );\n}\n\n// ================================================================ Wizard biodata mahasiswa\nexport interface BiodataMahasiswa {\n pribadi: Isian;\n alamat: Isian;\n asal_sekolah: Isian;\n orang_tua: NonNullable<FormulirPmb['orang_tua']>;\n}\nexport interface WizardBiodataProps {\n /** Nilai awal, mis. dari `mahasiswa.getByNim`. */\n nilaiAwal?: Partial<BiodataMahasiswa>;\n /**\n * Simpan biodata. SIAKAD belum menyediakan endpoint ubah biodata mahasiswa untuk umum,\n * jadi aplikasi yang menentukan tujuannya (mis. pengajuan perubahan data ke BAAK).\n */\n onSimpan: (data: BiodataMahasiswa, bagian: keyof BiodataMahasiswa | 'semua') => void | string | Promise<void | string | null | undefined>;\n className?: string;\n}\n\n/** Wizard pemutakhiran biodata mahasiswa (data diri, alamat, riwayat pendidikan, orang tua) memakai referensi kode SIAKAD. */\nexport function WizardBiodata({ nilaiAwal, onSimpan, className }: WizardBiodataProps) {\n const ref = useReferensiFormulir();\n const [d, setD] = React.useState<BiodataMahasiswa>(() => ({ pribadi: {}, alamat: {}, asal_sekolah: { status_masuk: 'B' }, orang_tua: {}, ...nilaiAwal }));\n const [step, setStep] = React.useState(0);\n const [savedAt, setSavedAt] = React.useState<Date | null>(null);\n const [ok, setOk] = React.useState(false);\n if (!ref.data) return <Skeleton style={{ height: 420, borderRadius: 16 }} />;\n const r = ref.data;\n const set = (k: keyof BiodataMahasiswa) => (patch: Isian) => setD((x) => ({ ...x, [k]: { ...x[k], ...patch } }));\n const save = (k: keyof BiodataMahasiswa) => async () => {\n const res = await onSimpan(d, k);\n if (typeof res === 'string') return res;\n setSavedAt(new Date());\n };\n if (ok)\n return (\n <Alert variant=\"success\" title=\"Biodata tersimpan\">\n Terima kasih, data Anda sudah diperbarui.\n </Alert>\n );\n return (\n <Wizard\n className={className}\n title=\"Pemutakhiran biodata\"\n description=\"Data ini dipakai untuk ijazah, PDDikti, dan surat keterangan.\"\n step={step}\n onStepChange={setStep}\n savedAt={savedAt}\n finishLabel=\"Simpan biodata\"\n steps={[\n { id: 'pribadi', title: 'Data diri', content: <IsianDataDiri value={d.pribadi} ref_={r} onChange={set('pribadi')} />, onNext: save('pribadi') },\n { id: 'alamat', title: 'Alamat', content: <IsianAlamat value={d.alamat} onChange={set('alamat')} />, onNext: save('alamat') },\n { id: 'riwayat', title: 'Riwayat pendidikan', content: <IsianAsalSekolah value={d.asal_sekolah} ref_={r} onChange={set('asal_sekolah')} />, onNext: save('asal_sekolah') },\n { id: 'ortu', title: 'Orang tua', content: <IsianOrangTua value={d.orang_tua} ref_={r} onChange={(x) => setD((y) => ({ ...y, orang_tua: x }))} />, onNext: save('orang_tua') },\n {\n id: 'tinjau',\n title: 'Tinjau',\n content: (\n <WizardReview\n sections={[\n {\n title: 'Data diri',\n onEdit: () => setStep(0),\n items: [\n { label: 'Nama', value: d.pribadi.nama },\n { label: 'NIK', value: d.pribadi.no_identitas },\n { label: 'Agama', value: nama(r.agama, d.pribadi.agama) },\n { label: 'Nomor HP', value: d.pribadi.hp },\n ],\n },\n {\n title: 'Alamat',\n onEdit: () => setStep(1),\n items: [\n { label: 'Alamat', value: d.alamat.alamat },\n { label: 'Desa', value: d.alamat.desa },\n { label: 'Kecamatan', value: d.alamat.kecamatan },\n ],\n },\n {\n title: 'Riwayat pendidikan',\n onEdit: () => setStep(2),\n items: [\n { label: 'Asal', value: d.asal_sekolah.nama_sekolah ?? d.asal_sekolah.nama_asal_pt },\n { label: 'Tahun lulus', value: d.asal_sekolah.tahun_lulus },\n ],\n },\n {\n title: 'Orang tua',\n onEdit: () => setStep(3),\n items: [\n { label: 'Ayah', value: d.orang_tua.ayah?.nama },\n { label: 'Ibu', value: d.orang_tua.ibu?.nama },\n ],\n },\n ]}\n />\n ),\n },\n ]}\n onFinish={async () => {\n const res = await onSimpan(d, 'semua');\n if (typeof res === 'string') return res;\n setOk(true);\n }}\n />\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { ArrowRight, BadgeCheck, CircleAlert, Home, IdCard, Lock, Phone, Users } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { Button, Skeleton } from '../components/actions';\nimport { Alert, Avatar } from '../components/display';\nimport { Field, Input, Textarea } from '../components/forms';\nimport { Combobox, Select } from '../components/select';\nimport { FormGrid, Wizard, WizardReview, type WizardStep } from '../components/wizard';\nimport { invalidateSiakad, pesanGalat, useSiakad, useSiakadQuery } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n// ================================================================ Tipe (GET /v1/kelengkapan/saya)\nexport interface IsianKurang {\n kolom: string;\n label: string;\n wajib: boolean;\n /** kosong | tidak_sah | ganda */\n alasan: 'kosong' | 'tidak_sah' | 'ganda' | string;\n bisa_diisi_sendiri: boolean;\n}\nexport interface KelengkapanSaya {\n entitas: 'mahasiswa' | 'dosen' | string;\n /** NIM atau NIDN. */\n kunci: string;\n nama: string;\n kode_prodi?: string | null;\n lengkap: boolean;\n perlu_wizard: boolean;\n persen_wajib: number;\n kurang: IsianKurang[];\n isian_sendiri: string[];\n diperiksa_pada?: string;\n}\n\n/** Data tampilan pengguna untuk kartu profil. Foto biasanya dari SSO (`picture` di userinfo). */\nexport interface PenggunaKelengkapan {\n nama?: string;\n foto?: string | null;\n /** Baris kedua, mis. \"S1 Informatika · Angkatan 2023\". */\n keterangan?: React.ReactNode;\n}\n\nconst PATH = '/v1/kelengkapan/saya';\n\n/** Ambil kelengkapan data pengguna yang login (token pengguna, scope `kelengkapan:saya`). */\nexport function useKelengkapanSaya(opts: { enabled?: boolean } = {}) {\n return useSiakadQuery<KelengkapanSaya>(['kelengkapan-saya'], (s, signal) => s.request<KelengkapanSaya>({ method: 'GET', path: PATH }, { signal }), { staleTime: 60_000, ...opts });\n}\n\n// ================================================================ Kelompok isian\ntype Kelompok = 'identitas' | 'keluarga' | 'alamat' | 'kontak';\nconst KELOMPOK: Record<Kelompok, { title: string; description: string; icon: React.ReactNode; kolom: string[] }> = {\n identitas: { title: 'Identitas', description: 'NIK, NISN, NPWP', icon: <IdCard />, kolom: ['nik', 'nik_dosen', 'nisn', 'npwp'] },\n keluarga: { title: 'Keluarga', description: 'Nama orang tua', icon: <Users />, kolom: ['nama_ibu_kandung', 'nama_ibu', 'nama_ayah'] },\n alamat: { title: 'Alamat', description: 'Tempat tinggal saat ini', icon: <Home />, kolom: ['alamat', 'dusun', 'rt', 'rw', 'desa', 'kecamatan', 'kode_pos', 'jenis_tinggal'] },\n kontak: { title: 'Kontak', description: 'Nomor HP dan email', icon: <Phone />, kolom: ['hp', 'email'] },\n};\nconst kelompokDari = (kolom: string): Kelompok => (Object.keys(KELOMPOK) as Kelompok[]).find((k) => KELOMPOK[k].kolom.includes(kolom)) ?? 'identitas';\n\nconst ALASAN: Record<string, string> = { kosong: 'Belum diisi', tidak_sah: 'Format belum sesuai', ganda: 'Sama dengan data orang lain' };\n\nconst PETUNJUK: Record<\n string,\n {\n description?: string;\n placeholder?: string;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n maxLength?: number;\n filter?: (v: string) => string;\n span?: boolean;\n multiline?: boolean;\n type?: string;\n }\n> = {\n nik: { description: '16 digit sesuai KTP/KK.', inputMode: 'numeric', maxLength: 16, filter: (v) => v.replace(/\\D/g, '') },\n nik_dosen: { description: '16 digit sesuai KTP.', inputMode: 'numeric', maxLength: 16, filter: (v) => v.replace(/\\D/g, '') },\n nisn: { description: '10 digit, lihat di ijazah atau nisn.data.kemdikbud.go.id.', inputMode: 'numeric', maxLength: 10, filter: (v) => v.replace(/\\D/g, '') },\n npwp: { description: '15 atau 16 digit.', inputMode: 'numeric', maxLength: 16, filter: (v) => v.replace(/\\D/g, '') },\n nama_ibu_kandung: { description: 'Sesuai akta kelahiran/KK. Dipakai untuk verifikasi ijazah di PDDikti.', span: true },\n nama_ibu: { description: 'Sesuai akta kelahiran/KK.', span: true },\n nama_ayah: { span: true },\n alamat: { description: 'Nama jalan, nomor rumah, atau patokan.', span: true, multiline: true },\n rt: { inputMode: 'numeric', maxLength: 3, filter: (v) => v.replace(/\\D/g, '') },\n rw: { inputMode: 'numeric', maxLength: 3, filter: (v) => v.replace(/\\D/g, '') },\n kode_pos: { inputMode: 'numeric', maxLength: 5, filter: (v) => v.replace(/\\D/g, '') },\n hp: { description: 'Nomor aktif, sebaiknya WhatsApp.', inputMode: 'tel', placeholder: '08xx', filter: (v) => v.replace(/[^\\d+]/g, '') },\n email: { type: 'email', placeholder: 'nama@contoh.com' },\n kecamatan: { span: true },\n};\n\ninterface Wilayah {\n kode: string;\n nama: string;\n kabupaten?: string;\n}\n\nfunction IsianKelengkapan({\n isian,\n value,\n onChange,\n error,\n jenisTinggal,\n}: {\n isian: IsianKurang;\n value: string;\n onChange: (v: string, label?: string) => void;\n error?: string;\n jenisTinggal: Array<{ value: string; label: string }>;\n}) {\n const siakad = useSiakad();\n const p = PETUNJUK[isian.kolom] ?? {};\n const [wil, setWil] = React.useState<Wilayah | null>(null);\n const loadWil = React.useCallback(\n async (q: string, signal: AbortSignal) => (await siakad.request<Wilayah[]>({ method: 'GET', path: '/v1/kelengkapan/referensi/wilayah', query: { q }, public: true }, { signal })).data,\n [siakad],\n );\n const desc = (\n <>\n {isian.alasan !== 'kosong' && <span className=\"u-kl-alasan\">{ALASAN[isian.alasan] ?? isian.alasan}. </span>}\n {p.description}\n </>\n );\n let control: React.ReactNode;\n if (isian.kolom === 'kecamatan')\n control = (\n <Combobox<Wilayah>\n loadItems={loadWil}\n minQueryLength={3}\n hintText=\"Ketik minimal 3 huruf nama kecamatan atau kabupaten.\"\n placeholder=\"Cari kecamatan\"\n value={wil}\n itemToString={(w) => w.nama}\n itemKey={(w) => w.kode}\n renderItem={(w) => (\n <span style={{ display: 'grid' }}>\n <span>{w.nama}</span>\n <span style={{ fontSize: 12, color: 'var(--u-muted-foreground)' }}>{w.kabupaten}</span>\n </span>\n )}\n onValueChange={(w) => {\n setWil(w);\n onChange(w?.kode ?? '', w ? `${w.nama}${w.kabupaten ? `, ${w.kabupaten}` : ''}` : undefined);\n }}\n />\n );\n else if (isian.kolom === 'jenis_tinggal') control = <Select options={jenisTinggal} value={value || null} onValueChange={(v) => onChange(v ?? '', jenisTinggal.find((o) => o.value === v)?.label)} />;\n else if (p.multiline) control = <Textarea rows={2} value={value} onChange={(e) => onChange(e.target.value)} />;\n else\n control = (\n <Input value={value} type={p.type} inputMode={p.inputMode} maxLength={p.maxLength} placeholder={p.placeholder} onChange={(e) => onChange(p.filter ? p.filter(e.target.value) : e.target.value)} />\n );\n return (\n <Field label={isian.label} required={isian.wajib} optional={!isian.wajib} description={desc} error={error} style={p.span ? { gridColumn: '1 / -1' } : undefined}>\n {control}\n </Field>\n );\n}\n\n// ================================================================ Kartu profil\nfunction RingFoto({ nama, foto, persen, size = 88 }: { nama: string; foto?: string | null; persen: number; size?: number }) {\n const t = 4;\n const r = (size - t) / 2;\n const c = 2 * Math.PI * r;\n const tone = persen >= 100 ? 'var(--u-success)' : persen >= 70 ? 'var(--u-primary)' : 'var(--u-warning)';\n return (\n <span className=\"u-kl-ring\" style={{ width: size, height: size }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} aria-hidden>\n <circle cx={size / 2} cy={size / 2} r={r} fill=\"none\" stroke=\"var(--u-border)\" strokeWidth={t} />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={tone}\n strokeWidth={t}\n strokeLinecap=\"round\"\n strokeDasharray={`${(c * Math.min(100, persen)) / 100} ${c}`}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n />\n </svg>\n <Avatar name={nama} src={foto} size=\"xl\" className=\"u-kl-avatar\" />\n <span className=\"u-kl-pct\" style={{ background: tone }}>\n {persen}%\n </span>\n </span>\n );\n}\n\nexport interface KartuProfilKelengkapanProps {\n data: KelengkapanSaya;\n pengguna?: PenggunaKelengkapan;\n /** Tombol aksi, mis. \"Lengkapi data\". */\n action?: React.ReactNode;\n className?: string;\n}\n\n/** Kartu profil: foto dengan cincin persen kelengkapan, nama, NIM/NIDN, dan ringkasan isian yang kurang. */\nexport function KartuProfilKelengkapan({ data, pengguna, action, className }: KartuProfilKelengkapanProps) {\n const nama = pengguna?.nama ?? data.nama;\n const wajib = data.kurang.filter((k) => k.wajib).length;\n return (\n <div className={cn('u-kl-card', className)} data-lengkap={data.lengkap ? '' : undefined}>\n <RingFoto nama={nama} foto={pengguna?.foto} persen={data.persen_wajib} />\n <div className=\"u-kl-who\">\n <p className=\"u-kl-name\">\n {nama}\n {data.lengkap && <BadgeCheck aria-label=\"Data lengkap\" />}\n </p>\n <p className=\"u-kl-sub\">\n <span className=\"u-kl-id\">\n {data.entitas === 'dosen' ? 'NIDN' : 'NIM'} {data.kunci}\n </span>\n {pengguna?.keterangan ?? (data.kode_prodi ? <span>Prodi {data.kode_prodi}</span> : null)}\n </p>\n <p className=\"u-kl-status\">\n {data.lengkap ? (\n 'Data wajib PDDikti sudah lengkap.'\n ) : (\n <>\n <CircleAlert aria-hidden /> {wajib} isian wajib belum lengkap\n </>\n )}\n </p>\n </div>\n {action && <div className=\"u-kl-action\">{action}</div>}\n </div>\n );\n}\n\n// ================================================================ Wizard\nexport interface WizardKelengkapanProps {\n pengguna?: PenggunaKelengkapan;\n /** Setelah semua isian tersimpan. */\n onSelesai?: (data: KelengkapanSaya) => void;\n /** Tombol \"Nanti saja\" di layar sambutan. */\n onLewati?: () => void;\n /** Kontak BAK/SDM untuk isian yang tidak bisa diubah sendiri. */\n kontakPetugas?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Wizard kelengkapan data dari `GET /v1/kelengkapan/saya`: kartu profil berfoto dengan persen kelengkapan,\n * langkah dibentuk otomatis dari isian yang kurang (identitas, keluarga, alamat, kontak), lalu semua isian\n * dikirim sekaligus ke `POST /v1/kelengkapan/saya`. Galat 422 kembali ke langkah dan isian yang salah.\n */\nexport function WizardKelengkapan({ pengguna, onSelesai, onLewati, kontakPetugas, className }: WizardKelengkapanProps) {\n const siakad = useSiakad();\n const q = useKelengkapanSaya();\n const ref = useSiakadQuery<{ jenis_tinggal: Record<string, string> }>(\n ['kelengkapan-referensi'],\n (s, signal) => s.request({ method: 'GET', path: '/v1/kelengkapan/referensi', public: true }, { signal }),\n { staleTime: 3_600_000 },\n );\n const [mulai, setMulai] = React.useState(false);\n const [step, setStep] = React.useState(0);\n const [nilai, setNilai] = React.useState<Record<string, string>>({});\n const [label, setLabel] = React.useState<Record<string, string>>({});\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n const [hasil, setHasil] = React.useState<KelengkapanSaya | null>(null);\n\n if (q.error)\n return (\n <Alert variant=\"danger\" title=\"Kelengkapan data tidak bisa diperiksa\">\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n );\n if (!q.data)\n return (\n <div className={cn('u-kl', className)} aria-busy>\n <div className=\"u-kl-card\">\n <Skeleton shape=\"circle\" style={{ width: 88, height: 88 }} />\n <div style={{ flex: 1, display: 'grid', gap: 8 }}>\n <Skeleton style={{ height: 18, width: '50%' }} />\n <Skeleton style={{ height: 14, width: '35%' }} />\n </div>\n </div>\n </div>\n );\n\n const data = hasil ?? q.data;\n const sendiri = data.kurang.filter((k) => k.bisa_diisi_sendiri);\n const petugas = data.kurang.filter((k) => !k.bisa_diisi_sendiri);\n const jenisTinggal = Object.entries(ref.data?.jenis_tinggal ?? {}).map(([value, label]) => ({ value, label }));\n const grup = (Object.keys(KELOMPOK) as Kelompok[]).map((k) => ({ k, isian: sendiri.filter((i) => kelompokDari(i.kolom) === k) })).filter((g) => g.isian.length);\n\n const PanelPetugas = petugas.length > 0 && (\n <div className=\"u-kl-petugas\">\n <p>\n <Lock aria-hidden /> Perlu diubah petugas {data.entitas === 'dosen' ? 'SDM' : 'BAK'} dengan dokumen\n </p>\n <ul>\n {petugas.map((k) => (\n <li key={k.kolom}>\n {k.label}\n <span>{ALASAN[k.alasan] ?? k.alasan}</span>\n </li>\n ))}\n </ul>\n {kontakPetugas && <div className=\"u-kl-kontak\">{kontakPetugas}</div>}\n </div>\n );\n\n // ---- selesai / sudah lengkap\n if (hasil || !data.perlu_wizard || !sendiri.length) {\n return (\n <div className={cn('u-kl', className)}>\n <KartuProfilKelengkapan data={data} pengguna={pengguna} />\n {hasil && (\n <Alert variant=\"success\" title=\"Terima kasih, data Anda tersimpan\">\n Perubahan langsung tercatat di SIAKAD dan ikut dilaporkan ke PDDikti pada sinkronisasi berikutnya.\n </Alert>\n )}\n {PanelPetugas}\n </div>\n );\n }\n\n // ---- sambutan\n if (!mulai) {\n return (\n <div className={cn('u-kl', className)}>\n <KartuProfilKelengkapan\n data={data}\n pengguna={pengguna}\n action={\n <>\n {onLewati && (\n <Button variant=\"ghost\" onClick={onLewati}>\n Nanti saja\n </Button>\n )}\n <Button onClick={() => setMulai(true)}>\n Lengkapi sekarang <ArrowRight />\n </Button>\n </>\n }\n />\n <div className=\"u-kl-groups\">\n {grup.map((g) => (\n <div key={g.k} className=\"u-kl-group\">\n <span className=\"u-kl-group-icon\">{KELOMPOK[g.k].icon}</span>\n <div>\n <p>{KELOMPOK[g.k].title}</p>\n <span>{g.isian.map((i) => i.label).join(', ')}</span>\n </div>\n </div>\n ))}\n </div>\n {PanelPetugas}\n </div>\n );\n }\n\n const ubah = (kolom: string) => (v: string, l?: string) => {\n setNilai((x) => ({ ...x, [kolom]: v }));\n if (l !== undefined) setLabel((x) => ({ ...x, [kolom]: l }));\n setErrors((e) => {\n const n = { ...e };\n delete n[kolom];\n return n;\n });\n };\n const cekLangkah = (isian: IsianKurang[]) => () => {\n const kosong = isian.filter((i) => i.wajib && !(nilai[i.kolom] ?? '').trim());\n if (kosong.length) {\n setErrors((e) => ({ ...e, ...Object.fromEntries(kosong.map((i) => [i.kolom, 'Wajib diisi.'])) }));\n return `Lengkapi ${kosong.map((i) => i.label).join(', ')}.`;\n }\n };\n\n const steps: WizardStep[] = [\n ...grup.map((g) => ({\n id: g.k,\n title: KELOMPOK[g.k].title,\n description: g.isian.map((i) => i.label).join(', '),\n error: g.isian.some((i) => errors[i.kolom] && errors[i.kolom] !== 'Wajib diisi.'),\n content: (\n <FormGrid>\n {g.isian.map((i) => (\n <IsianKelengkapan key={i.kolom} isian={i} value={nilai[i.kolom] ?? ''} onChange={ubah(i.kolom)} error={errors[i.kolom]} jenisTinggal={jenisTinggal} />\n ))}\n </FormGrid>\n ),\n onNext: cekLangkah(g.isian),\n })),\n {\n id: 'tinjau',\n title: 'Tinjau & simpan',\n description: 'Periksa sebelum disimpan',\n content: (\n <WizardReview\n sections={grup.map((g, idx) => ({\n title: KELOMPOK[g.k].title,\n onEdit: () => setStep(idx),\n items: g.isian.map((i) => ({ label: i.label, value: label[i.kolom] ?? nilai[i.kolom] })),\n }))}\n />\n ),\n },\n ];\n\n return (\n <div className={cn('u-kl', className)}>\n <KartuProfilKelengkapan data={data} pengguna={pengguna} />\n <Wizard\n steps={steps}\n step={step}\n onStepChange={setStep}\n title=\"Lengkapi data\"\n description=\"Isian ini wajib dilaporkan ke PDDikti. Hanya isian yang kurang yang ditanyakan.\"\n aside={petugas.length ? PanelPetugas : undefined}\n finishLabel=\"Simpan data\"\n onFinish={async () => {\n const body = Object.fromEntries(Object.entries(nilai).filter(([, v]) => v.trim() !== ''));\n if (!Object.keys(body).length) return 'Belum ada isian yang diisi.';\n try {\n const res = await siakad.request<KelengkapanSaya>({ method: 'POST', path: PATH, body });\n invalidateSiakad('kelengkapan');\n setHasil(res.data);\n onSelesai?.(res.data);\n } catch (e) {\n const err = e as { status?: number; details?: Record<string, unknown> };\n if (err.status === 422 && err.details && Object.keys(err.details).length) {\n setErrors(Object.fromEntries(Object.entries(err.details).map(([k, v]) => [k, String(v)])));\n const idx = grup.findIndex((g) => g.isian.some((i) => i.kolom in err.details!));\n if (idx >= 0) setStep(idx);\n return 'Ada isian yang belum sesuai. Periksa yang ditandai merah.';\n }\n return pesanGalat(e);\n }\n }}\n />\n </div>\n );\n}\n\n/** Pengingat ringkas untuk dasbor: tampil hanya bila `perlu_wizard`. */\nexport function PengingatKelengkapan({ pengguna, href, onBuka, className }: { pengguna?: PenggunaKelengkapan; href?: string; onBuka?: () => void; className?: string }) {\n const { data } = useKelengkapanSaya();\n if (!data || !data.perlu_wizard) return null;\n return (\n <KartuProfilKelengkapan\n className={cn('u-kl-reminder', className)}\n data={data}\n pengguna={pengguna}\n action={\n <Button size=\"sm\" onClick={onBuka} render={href ? <a href={href} /> : undefined}>\n Lengkapi data <ArrowRight />\n </Button>\n }\n />\n );\n}\n","'use client';\nimport * as React from 'react';\nimport {\n Archive,\n BadgeCheck,\n BookOpenCheck,\n Briefcase,\n CalendarClock,\n ClipboardCheck,\n FileClock,\n FileText,\n FlaskConical,\n GraduationCap,\n Inbox,\n Mail,\n MessageSquare,\n Newspaper,\n PiggyBank,\n Receipt,\n RefreshCw,\n Send,\n ShieldAlert,\n TriangleAlert,\n UserCheck,\n UserPlus,\n Users,\n Wallet,\n} from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen, formatRelative, formatRupiahRingkas } from '../lib/format';\nimport { Button } from '../components/actions';\nimport { Alert, Progress } from '../components/display';\nimport {\n ActionList,\n ActivityFeed,\n BarChart,\n BarList,\n BudgetMeter,\n CycleSteps,\n DashboardGrid,\n DonutChart,\n Funnel,\n GroupedBarChart,\n LineChart,\n Panel,\n SegmentBar,\n StatCard,\n StatGrid,\n} from '../components/charts';\nimport { pesanGalat, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/*\n * Widget per fitur untuk tiap unit kerja (BAAK, keuangan, kepegawaian, SPMI, LPPM, arsip, humas, PMB, tracer).\n * Tiap modul punya: hook data (mis. useStatistikPmb), kartu ringkasan (RingkasanPmb), widget panel kecil\n * (CorongPmb, PendaftarHarianPmb, …), dan dasbor utuh (DasborPmb) yang hanya menyusun widget-widget itu.\n * Widget dengan kueri yang sama berbagi satu panggilan API.\n */\n\n// ================================================================ Bantuan bersama\ntype Angka = number | string | null | undefined;\nconst n = (v: Angka) => (v == null || v === '' ? 0 : Number(v) || 0);\n/** Peta {kunci: jumlah} dari API (PHP mengirim [] untuk peta kosong). */\nconst peta = (m: unknown): Array<[string, number]> => (m && typeof m === 'object' && !Array.isArray(m) ? Object.entries(m as Record<string, Angka>).map(([k, v]) => [k, n(v)]) : []);\nconst judulKunci = (k: string) => (k === 'belum_diisi' || k === '' ? 'Belum diisi' : k.length <= 3 ? k.toUpperCase() : (k.charAt(0).toUpperCase() + k.slice(1)).replace(/_/g, ' '));\nconst ubah = (cur: number, prev: number | undefined) => (prev ? ((cur - prev) / prev) * 100 : null);\n\n/** \"20241\" → \"2024/2025 Ganjil\"; pendek: \"24/25 Gj\". */\nexport function labelSemester(id: string | number, pendek = false): string {\n const s = String(id);\n const y = Number(s.slice(0, 4));\n const k = s.slice(4);\n if (!y) return s;\n const nama = k === '1' ? 'Ganjil' : k === '2' ? 'Genap' : k === '3' ? 'Pendek' : '';\n return pendek ? `${String(y).slice(2)}/${String(y + 1).slice(2)} ${({ Ganjil: 'Gj', Genap: 'Gn', Pendek: 'Pd' } as Record<string, string>)[nama] ?? ''}`.trim() : `${y}/${y + 1} ${nama}`.trim();\n}\n\nconst BULAN = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agu', 'Sep', 'Okt', 'Nov', 'Des'];\nconst tglPendek = (iso: string) => {\n const d = new Date(iso.length <= 10 ? `${iso}T00:00:00` : iso);\n return Number.isNaN(d.getTime()) ? iso : `${d.getDate()} ${BULAN[d.getMonth()]}`;\n};\n\nexport interface DasborBaseProps {\n /** Judul dasbor. Isi `null` untuk menyembunyikan kepala. */\n title?: React.ReactNode;\n description?: React.ReactNode;\n /** Kontrol di kanan kepala, mis. pilihan periode/unit. */\n actions?: React.ReactNode;\n className?: string;\n}\n\n/** Kerangka dasbor: kepala (judul, keterangan, aksi), galat dengan tombol muat ulang, lalu isi. */\nexport function KerangkaDasbor({ title, description, actions, error, onRetry, children, className }: DasborBaseProps & { error?: Error | null; onRetry?: () => void; children: React.ReactNode }) {\n return (\n <div className={cn('u-dasbor', className)}>\n {(title || actions) && (\n <header className=\"u-dasbor-head\">\n <div>\n {title && <h2>{title}</h2>}\n {description && <p>{description}</p>}\n </div>\n {actions && <div className=\"u-dasbor-actions\">{actions}</div>}\n </header>\n )}\n {error ? (\n <Alert\n variant=\"danger\"\n title=\"Data dasbor gagal dimuat\"\n actions={\n onRetry && (\n <Button size=\"sm\" variant=\"outline\" onClick={onRetry}>\n <RefreshCw /> Muat ulang\n </Button>\n )\n }\n >\n {pesanGalat(error, { kode: false })}\n <KodeLaporan error={error} />\n </Alert>\n ) : (\n children\n )}\n </div>\n );\n}\n\nconst galatDari = (...qs: Array<QueryState<unknown>>) => qs.find((q) => q.error)?.error ?? null;\nconst ulangSemua =\n (...qs: Array<QueryState<unknown>>) =>\n () =>\n qs.forEach((q) => q.refetch());\n\n// ================================================================ Pabrik widget\nexport interface WidgetProps {\n /** Ganti judul bawaan panel. */\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n /** Lebar kolom di DashboardGrid. */\n span?: 1 | 2 | 3 | 'full';\n className?: string;\n}\n\nfunction GalatWidget({ error, onRetry }: { error: Error; onRetry: () => void }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(error, { kode: false })}<KodeLaporan error={error} /></span>\n <Button size=\"sm\" variant=\"ghost\" onClick={onRetry}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\n\n/**\n * Membuat widget panel kecil dari satu hook data. Widget yang memakai hook dan kueri yang sama berbagi satu panggilan API,\n * jadi memasang beberapa widget di satu halaman tidak menambah beban server.\n */\nfunction buatWidget<Q extends object, D>(\n nama: string,\n useData: (q: Q) => QueryState<D>,\n bawaan: { title: string; description?: string; span?: WidgetProps['span'] },\n isi: (d: D | undefined, muat: boolean, q: Q) => React.ReactNode,\n) {\n function Widget(props: Q & WidgetProps) {\n const r = useData(props);\n return (\n <Panel title={props.title ?? bawaan.title} description={props.description ?? bawaan.description} actions={props.actions} span={props.span ?? bawaan.span} className={props.className}>\n {r.error ? <GalatWidget error={r.error} onRetry={r.refetch} /> : isi(r.data, r.loading && !r.data, props)}\n </Panel>\n );\n }\n Widget.displayName = nama;\n return Widget;\n}\n\n/** Bungkus kartu ringkasan: galat ringkas atau grid kartu. */\nfunction KartuRingkas({ q, min = 190, className, children }: { q: Array<QueryState<unknown>>; min?: number; className?: string; children: React.ReactNode }) {\n const e = galatDari(...q);\n if (e) return <GalatWidget error={e} onRetry={ulangSemua(...q)} />;\n return (\n <StatGrid min={min} className={className}>\n {children}\n </StatGrid>\n );\n}\nconst muatDari = (r: QueryState<unknown>) => r.loading && !r.data;\n\n// ================================================================ BAAK / akademik\nexport interface RingkasAkademik {\n tahun_id: string;\n total: Partial<Record<'mahasiswa_aktif' | 'status_aktif_semester' | 'cuti' | 'nonaktif' | 'mengisi_krs' | 'mahasiswa_baru' | 'lulusan' | 'dosen' | 'ews_tinggi', Angka>>;\n per_prodi: Array<{\n kode_prodi: string;\n nama_prodi: string;\n jenjang?: string;\n mahasiswa_aktif: Angka;\n mengisi_krs?: Angka;\n dosen?: Angka;\n rasio_dosen_mahasiswa?: Angka;\n persen_krs?: Angka;\n rata_ipk_lulusan?: Angka;\n rata_sks_krs?: Angka;\n ews_tinggi?: Angka;\n }>;\n}\nexport interface TrenAkademik {\n tahun_id: string;\n mengisi_krs: Angka;\n mahasiswa_baru: Angka;\n lulusan: Angka;\n rata_ips: Angka;\n}\nexport interface KueriAkademik {\n /** Semester, mis. \"20261\". Bawaan semester aktif. */\n tahunId?: string;\n kodeProdi?: string;\n /** Jumlah semester untuk tren (2–20). Bawaan 8. */\n semester?: number;\n}\n/** GET /v1/dasbor/ringkas. */\nexport function useRingkasAkademik({ tahunId, kodeProdi }: KueriAkademik) {\n const q = { tahun_id: tahunId, kode_prodi: kodeProdi };\n return useSiakadQuery<RingkasAkademik>(['dasbor-ringkas', q], (s, signal) => s.dasbor.getRingkas(q, { signal }) as never, { staleTime: 300_000 });\n}\n/** GET /v1/dasbor/tren, diurutkan dari semester terlama. */\nexport function useTrenAkademik({ semester = 8, kodeProdi }: KueriAkademik) {\n const r = useSiakadQuery<TrenAkademik[]>(['dasbor-tren', semester, kodeProdi], (s, signal) => s.dasbor.getTren({ semester, kode_prodi: kodeProdi }, { signal }) as never, { staleTime: 300_000 });\n const data = React.useMemo(() => (r.data ? [...r.data].sort((a, b) => String(a.tahun_id).localeCompare(String(b.tahun_id))) : undefined), [r.data]);\n return { ...r, data };\n}\n\n/** Kartu angka BAAK: mahasiswa aktif, pengisi KRS, mahasiswa baru, lulusan, dosen, EWS. */\nexport function RingkasanAkademik({ hrefEws, className, ...k }: KueriAkademik & { hrefEws?: string; className?: string }) {\n const ringkas = useRingkasAkademik(k);\n const tren = useTrenAkademik(k);\n const t = ringkas.data?.total ?? {};\n const seri = tren.data ?? [];\n const muat = muatDari(ringkas);\n const akhir = seri[seri.length - 1];\n // Bandingkan dengan semester sejenis tahun lalu (ganjil dengan ganjil).\n const lalu = akhir ? [...seri].reverse().find((r) => r !== akhir && String(r.tahun_id).slice(4) === String(akhir.tahun_id).slice(4)) : undefined;\n const banding = (key: keyof TrenAkademik) => (akhir && lalu ? ubah(n(akhir[key]), n(lalu[key])) : null);\n const labelLalu = lalu ? `dari ${labelSemester(lalu.tahun_id)}` : undefined;\n const aktif = n(t.mahasiswa_aktif);\n const dosen = n(t.dosen);\n return (\n <KartuRingkas q={[ringkas, tren]} className={className}>\n <StatCard label=\"Mahasiswa aktif\" icon={<Users />} loading={muat} value={formatNumber(aktif)} hint={`${formatNumber(n(t.status_aktif_semester))} aktif semester ini`} />\n <StatCard\n label=\"Mengisi KRS\"\n icon={<BookOpenCheck />}\n loading={muat}\n value={formatNumber(n(t.mengisi_krs))}\n delta={banding('mengisi_krs')}\n deltaLabel={labelLalu}\n trend={seri.map((r) => n(r.mengisi_krs))}\n footer={!muat && aktif > 0 ? <Progress value={Math.min(100, (n(t.mengisi_krs) / aktif) * 100)} size=\"sm\" /> : undefined}\n />\n <StatCard label=\"Mahasiswa baru\" icon={<UserPlus />} loading={muat} value={formatNumber(n(t.mahasiswa_baru))} delta={banding('mahasiswa_baru')} deltaLabel={labelLalu} tone=\"info\" />\n <StatCard label=\"Lulusan\" icon={<GraduationCap />} loading={muat} value={formatNumber(n(t.lulusan))} delta={banding('lulusan')} deltaLabel={labelLalu} tone=\"success\" />\n <StatCard\n label=\"Dosen\"\n icon={<UserCheck />}\n loading={muat}\n value={formatNumber(dosen)}\n hint={dosen ? `Rasio 1 : ${formatNumber(aktif / dosen, { maximumFractionDigits: 0 })}` : 'Belum ada data dosen'}\n tone=\"neutral\"\n />\n <StatCard\n label=\"Risiko tinggi (EWS)\"\n icon={<TriangleAlert />}\n loading={muat}\n value={formatNumber(n(t.ews_tinggi))}\n hint=\"mahasiswa perlu pendampingan\"\n tone={n(t.ews_tinggi) > 0 ? 'danger' : 'neutral'}\n href={hrefEws}\n />\n </KartuRingkas>\n );\n}\n\n/** Pengisi KRS per semester (batang, semester berjalan ditandai). */\nexport const KrsPerSemester = buatWidget('KrsPerSemester', useTrenAkademik, { title: 'Pengisi KRS per semester', description: 'Semester terakhir', span: 2 }, (seri, muat) => (\n <BarChart loading={muat} highlightLast data={(seri ?? []).map((r) => ({ label: labelSemester(r.tahun_id, true), title: labelSemester(r.tahun_id), value: n(r.mengisi_krs) }))} />\n));\n\n/** Mahasiswa baru dan lulusan per semester (batang berkelompok). */\nexport const MabaLulusanPerSemester = buatWidget('MabaLulusanPerSemester', useTrenAkademik, { title: 'Mahasiswa baru & lulusan', span: 2 }, (seri, muat) => (\n <GroupedBarChart\n loading={muat}\n labels={(seri ?? []).map((r) => labelSemester(r.tahun_id, true))}\n titles={(seri ?? []).map((r) => labelSemester(r.tahun_id))}\n series={[\n { label: 'Mahasiswa baru', values: (seri ?? []).map((r) => n(r.mahasiswa_baru)) },\n { label: 'Lulusan', values: (seri ?? []).map((r) => n(r.lulusan)) },\n ]}\n />\n));\n\n/** Rata-rata IPS per semester. */\nexport const IpsPerSemester = buatWidget('IpsPerSemester', useTrenAkademik, { title: 'Rata-rata IPS', description: 'Per semester' }, (seri, muat) => (\n <BarChart\n loading={muat}\n height={150}\n format={(v) => formatNumber(v, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n data={(seri ?? []).map((r) => ({ label: labelSemester(r.tahun_id, true), title: labelSemester(r.tahun_id), value: n(r.rata_ips) }))}\n />\n));\n\n/** Komposisi aktif, cuti, nonaktif semester berjalan. */\nexport const StatusMahasiswa = buatWidget('StatusMahasiswa', useRingkasAkademik, { title: 'Status mahasiswa', description: 'Semester berjalan' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={132}\n centerLabel=\"mahasiswa\"\n data={[\n { label: 'Aktif', value: n(d?.total.status_aktif_semester) },\n { label: 'Cuti', value: n(d?.total.cuti) },\n { label: 'Nonaktif', value: n(d?.total.nonaktif) },\n ]}\n />\n));\n\n/** Mahasiswa aktif per prodi dengan persen pengisian KRS. */\nexport const MahasiswaPerProdi = buatWidget('MahasiswaPerProdi', useRingkasAkademik, { title: 'Mahasiswa aktif per prodi', description: 'Persentase pengisian KRS di kanan', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n items={[...(d?.per_prodi ?? [])]\n .sort((a, b) => n(b.mahasiswa_aktif) - n(a.mahasiswa_aktif))\n .map((p) => ({\n label: `${p.jenjang ? p.jenjang + ' ' : ''}${p.nama_prodi}`,\n value: n(p.mahasiswa_aktif),\n secondary: p.persen_krs != null ? `KRS ${formatPersen(n(p.persen_krs), 0)}` : undefined,\n }))}\n />\n));\n\n/** Rasio dosen : mahasiswa per prodi (makin kecil makin baik). */\nexport const RasioDosenPerProdi = buatWidget('RasioDosenPerProdi', useRingkasAkademik, { title: 'Mahasiswa per dosen', description: 'Per prodi, makin kecil makin baik' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n format={(v) => `1 : ${formatNumber(v, { maximumFractionDigits: 0 })}`}\n items={(d?.per_prodi ?? [])\n .filter((p) => n(p.dosen) > 0)\n .map((p) => ({ label: p.nama_prodi, value: n(p.mahasiswa_aktif) / n(p.dosen), secondary: `${formatNumber(n(p.dosen))} dosen` }))\n .sort((a, b) => b.value - a.value)}\n />\n));\n\n/** Dasbor BAAK lengkap. Semua bagian juga tersedia sebagai widget terpisah. */\nexport function DasborAkademik({\n tahunId,\n kodeProdi,\n semester = 8,\n hrefEws,\n title = 'Dasbor akademik',\n description,\n actions,\n className,\n}: DasborBaseProps & KueriAkademik & { /** Tautan daftar mahasiswa berisiko (EWS). */ hrefEws?: string }) {\n const k = { tahunId, kodeProdi, semester };\n const ringkas = useRingkasAkademik(k);\n return (\n <KerangkaDasbor\n title={title}\n description={description ?? (ringkas.data ? `Tahun akademik ${labelSemester(ringkas.data.tahun_id)}` : undefined)}\n actions={actions}\n error={ringkas.error}\n onRetry={ringkas.refetch}\n className={className}\n >\n <RingkasanAkademik {...k} hrefEws={hrefEws} />\n <DashboardGrid>\n <KrsPerSemester {...k} description={`${semester} semester terakhir`} />\n <StatusMahasiswa {...k} />\n <MahasiswaPerProdi {...k} />\n <IpsPerSemester {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Keuangan\nexport interface SerapanAnggaran {\n periode?: { id: number; kode?: string; nama?: string; mulai?: string; selesai?: string; status?: string } | null;\n anggaran: Angka;\n realisasi: Angka;\n persen: Angka;\n penerimaan_lain?: Angka;\n per_unit: Array<{ unit_id: number; unit: string | null; anggaran: Angka; realisasi: Angka; dalam_proses: Angka; sisa: Angka; persen: Angka }>;\n per_akun: Array<{ akun_id: number; akun_kode?: string | null; akun_nama?: string | null; anggaran: Angka; realisasi: Angka; dalam_proses: Angka; sisa: Angka; persen: Angka }>;\n}\nexport interface KueriKeuangan {\n periodeId?: number;\n unitId?: number;\n}\n/** GET /v1/keu/serapan. */\nexport function useSerapanAnggaran({ periodeId, unitId }: KueriKeuangan) {\n const q = { periode_id: periodeId, unit_id: unitId };\n return useSiakadQuery<SerapanAnggaran>(['keu-serapan', q], (s, signal) => s.keu.getSerapan(q, { signal }) as never, { staleTime: 120_000 });\n}\nconst prosesDari = (d?: SerapanAnggaran) => (d?.per_unit ?? []).reduce((a, u) => a + n(u.dalam_proses), 0);\n\n/** Kartu angka keuangan: pagu, realisasi, dalam proses, sisa, penerimaan lain. */\nexport function RingkasanKeuangan({ className, ...k }: KueriKeuangan & { className?: string }) {\n const r = useSerapanAnggaran(k);\n const d = r.data;\n const muat = muatDari(r);\n const proses = prosesDari(d);\n const sisa = n(d?.anggaran) - n(d?.realisasi) - proses;\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Pagu anggaran\" icon={<Wallet />} loading={muat} value={formatRupiahRingkas(n(d?.anggaran))} hint=\"RKA disetujui\" tone=\"neutral\" />\n <StatCard\n label=\"Realisasi\"\n icon={<Receipt />}\n loading={muat}\n value={formatRupiahRingkas(n(d?.realisasi))}\n hint={`${formatPersen(n(d?.persen))} dari pagu`}\n footer={!muat ? <Progress value={Math.min(100, n(d?.persen))} size=\"sm\" /> : undefined}\n />\n <StatCard label=\"Dalam proses\" icon={<FileClock />} loading={muat} value={formatRupiahRingkas(proses)} hint=\"diajukan, belum disetujui\" tone=\"warning\" />\n <StatCard\n label=\"Sisa anggaran\"\n icon={<PiggyBank />}\n loading={muat}\n value={formatRupiahRingkas(sisa)}\n tone={sisa < 0 ? 'danger' : 'success'}\n hint={sisa < 0 ? 'melebihi pagu' : 'belum terpakai'}\n />\n {d?.penerimaan_lain != null && <StatCard label=\"Penerimaan lain\" icon={<Inbox />} value={formatRupiahRingkas(n(d.penerimaan_lain))} tone=\"info\" hint=\"di luar UKT\" />}\n </KartuRingkas>\n );\n}\n\n/** Meter pagu: terpakai, dalam proses, sisa. */\nexport const PosisiAnggaran = buatWidget('PosisiAnggaran', useSerapanAnggaran, { title: 'Posisi anggaran' }, (d, muat) =>\n muat ? <Progress value={null} /> : <BudgetMeter target={n(d?.anggaran)} used={n(d?.realisasi)} pending={prosesDari(d)} format={formatRupiahRingkas} label={d?.periode?.nama ?? 'Pagu periode'} />,\n);\n\n/** Persen serapan per unit kerja. */\nexport const SerapanPerUnit = buatWidget('SerapanPerUnit', useSerapanAnggaran, { title: 'Serapan per unit', description: 'Persen realisasi terhadap pagu unit', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n max={100}\n format={(v) => formatPersen(v, 0)}\n items={[...(d?.per_unit ?? [])]\n .sort((a, b) => n(b.persen) - n(a.persen))\n .map((u) => ({ label: u.unit ?? `Unit ${u.unit_id}`, value: n(u.persen), secondary: `${formatRupiahRingkas(n(u.realisasi))} dari ${formatRupiahRingkas(n(u.anggaran))}` }))}\n />\n));\n\n/** Realisasi per akun belanja (delapan terbesar). */\nexport const RealisasiPerAkun = buatWidget('RealisasiPerAkun', useSerapanAnggaran, { title: 'Realisasi per akun', description: 'Delapan akun terbesar', span: 'full' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n format={formatRupiahRingkas}\n items={[...(d?.per_akun ?? [])]\n .sort((a, b) => n(b.realisasi) - n(a.realisasi))\n .map((a) => ({ label: a.akun_nama ?? a.akun_kode ?? '-', value: n(a.realisasi), secondary: [a.akun_kode, a.persen != null ? formatPersen(n(a.persen), 0) : null].filter(Boolean).join(' · ') }))}\n />\n));\n\n/** Dasbor keuangan lengkap. */\nexport function DasborKeuangan({ periodeId, unitId, title = 'Serapan anggaran', description, actions, className }: DasborBaseProps & KueriKeuangan) {\n const k = { periodeId, unitId };\n const r = useSerapanAnggaran(k);\n const per = r.data?.periode;\n return (\n <KerangkaDasbor\n title={title}\n description={description ?? (per ? `${per.nama ?? per.kode}${per.mulai && per.selesai ? ` · ${formatDate(per.mulai)} – ${formatDate(per.selesai)}` : ''}` : undefined)}\n actions={actions}\n error={r.error}\n onRetry={r.refetch}\n className={className}\n >\n <RingkasanKeuangan {...k} />\n <DashboardGrid>\n <PosisiAnggaran {...k} />\n <SerapanPerUnit {...k} />\n <RealisasiPerAkun {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Kepegawaian\nexport interface DataSdm {\n total: Angka;\n per_jenis?: Record<string, Angka>;\n per_status_kepegawaian?: Record<string, Angka>;\n per_jenis_kelamin?: Record<string, Angka>;\n per_pendidikan?: Record<string, Angka>;\n per_golongan?: Record<string, Angka>;\n per_kelompok_usia?: Record<string, Angka>;\n dosen?: { per_jabatan_akademik?: Record<string, Angka>; per_pendidikan?: Record<string, Angka>; serdos?: Record<string, Angka>; per_prodi?: Record<string, Angka> };\n tendik?: { per_jenis_tendik?: Record<string, Angka> };\n catatan?: string;\n}\nexport interface KueriSdm {\n unitId?: number | string;\n}\n/** GET /v1/sdm/laporan/ringkasan. */\nexport function useRingkasanSdm({ unitId }: KueriSdm) {\n const q = { unit_id: unitId == null ? undefined : String(unitId) };\n return useSiakadQuery<DataSdm>(['sdm-ringkasan', q], (s, signal) => s.sdm.getLaporanRingkasan(q, { signal }) as never, { staleTime: 300_000 });\n}\nconst URUT_JAD = ['Guru Besar', 'Lektor Kepala', 'Lektor', 'Asisten Ahli', 'Tenaga Pengajar'];\nconst URUT_DIDIK = ['S3', 'S2', 'Sp-2', 'Sp-1', 'Profesi', 'S1', 'D4', 'D3', 'D2', 'D1', 'SMA', 'SMK', 'SMP', 'SD'];\nconst URUT_USIA = ['<30', '30-39', '40-49', '50-59', '60+'];\nconst urutMenurut = (urut: string[]) => (a: [string, number], b: [string, number]) => {\n const i = (x: string) => (urut.indexOf(x) < 0 ? 99 : urut.indexOf(x));\n return i(a[0]) - i(b[0]) || b[1] - a[1];\n};\n\n/** Kartu angka kepegawaian: pegawai, dosen, tendik, dosen tetap bersertifikat. */\nexport function RingkasanKepegawaian({ className, ...k }: KueriSdm & { className?: string }) {\n const r = useRingkasanSdm(k);\n const d = r.data;\n const muat = muatDari(r);\n const jenis = Object.fromEntries(peta(d?.per_jenis));\n const serdos = Object.fromEntries(peta(d?.dosen?.serdos));\n const tetap = n(serdos.sudah) + n(serdos.belum);\n const didik = Object.fromEntries(peta(d?.dosen?.per_pendidikan));\n const jk = Object.fromEntries(peta(d?.per_jenis_kelamin));\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Pegawai\" icon={<Users />} loading={muat} value={formatNumber(n(d?.total))} tone=\"neutral\" hint={`${formatNumber(n(jk.L))} laki-laki · ${formatNumber(n(jk.P))} perempuan`} />\n <StatCard label=\"Dosen\" icon={<GraduationCap />} loading={muat} value={formatNumber(n(jenis.dosen))} hint={`${formatNumber(n(didik.S3))} bergelar doktor`} />\n <StatCard label=\"Tenaga kependidikan\" icon={<Briefcase />} loading={muat} value={formatNumber(n(jenis.tendik))} tone=\"info\" />\n <StatCard\n label=\"Dosen tetap bersertifikat\"\n icon={<BadgeCheck />}\n loading={muat}\n value={tetap ? formatPersen((n(serdos.sudah) / tetap) * 100, 0) : '–'}\n hint={`${formatNumber(n(serdos.sudah))} dari ${formatNumber(tetap)} dosen tetap`}\n tone=\"success\"\n footer={!muat && tetap ? <Progress value={(n(serdos.sudah) / tetap) * 100} size=\"sm\" tone=\"success\" /> : undefined}\n />\n </KartuRingkas>\n );\n}\n\n/** Jabatan akademik dosen, urut dari Guru Besar. */\nexport const JabatanAkademikDosen = buatWidget('JabatanAkademikDosen', useRingkasanSdm, { title: 'Jabatan akademik dosen', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n items={peta(d?.dosen?.per_jabatan_akademik)\n .sort(urutMenurut(URUT_JAD))\n .map(([k, v]) => ({ label: k === 'belum_diisi' ? 'Belum punya jabatan' : k, value: v }))}\n />\n));\n/** Status kepegawaian (tetap, kontrak, honorer, …). */\nexport const StatusKepegawaian = buatWidget('StatusKepegawaian', useRingkasanSdm, { title: 'Status kepegawaian' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={128}\n centerLabel=\"pegawai\"\n data={peta(d?.per_status_kepegawaian)\n .sort((a, b) => b[1] - a[1])\n .map(([k, v]) => ({ label: judulKunci(k), value: v }))}\n />\n));\n/** Pendidikan tertinggi semua pegawai. */\nexport const PendidikanPegawai = buatWidget('PendidikanPegawai', useRingkasanSdm, { title: 'Pendidikan tertinggi', description: 'Semua pegawai' }, (d, muat) =>\n muat ? (\n <Progress value={null} />\n ) : (\n <SegmentBar\n data={peta(d?.per_pendidikan)\n .sort(urutMenurut(URUT_DIDIK))\n .map(([k, v]) => ({ label: judulKunci(k), value: v }))}\n />\n ),\n);\n/** Sebaran kelompok usia pegawai. */\nexport const UsiaPegawai = buatWidget('UsiaPegawai', useRingkasanSdm, { title: 'Kelompok usia' }, (d, muat) => (\n <BarChart\n loading={muat}\n height={140}\n data={peta(d?.per_kelompok_usia)\n .filter(([k]) => k !== 'belum_diisi')\n .sort(urutMenurut(URUT_USIA))\n .map(([k, v]) => ({ label: k, title: `Usia ${k}`, value: v }))}\n />\n));\n/** Tenaga kependidikan per jenis tugas. */\nexport const TendikPerJenis = buatWidget('TendikPerJenis', useRingkasanSdm, { title: 'Tenaga kependidikan per jenis' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={6}\n items={peta(d?.tendik?.per_jenis_tendik)\n .sort((a, b) => b[1] - a[1])\n .map(([k, v]) => ({ label: judulKunci(k), value: v }))}\n />\n));\n/** Pegawai per golongan. */\nexport const GolonganPegawai = buatWidget('GolonganPegawai', useRingkasanSdm, { title: 'Golongan', span: 'full' }, (d, muat) => (\n <BarChart\n loading={muat}\n height={140}\n data={peta(d?.per_golongan)\n .filter(([k]) => k !== 'belum_diisi')\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([k, v]) => ({ label: k, title: `Golongan ${k}`, value: v }))}\n />\n));\n\n/** Dasbor kepegawaian lengkap. */\nexport function DasborKepegawaian({ unitId, title = 'Dasbor kepegawaian', description, actions, className }: DasborBaseProps & KueriSdm) {\n const k = { unitId };\n const r = useRingkasanSdm(k);\n return (\n <KerangkaDasbor title={title} description={description ?? r.data?.catatan} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanKepegawaian {...k} />\n <DashboardGrid>\n <JabatanAkademikDosen {...k} />\n <StatusKepegawaian {...k} />\n <PendidikanPegawai {...k} />\n <UsiaPegawai {...k} />\n <TendikPerJenis {...k} />\n <GolonganPegawai {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ SPMI\ninterface RekapCapaian {\n kunci: string;\n total: Angka;\n tercapai: Angka;\n melampaui: Angka;\n tidak_tercapai: Angka;\n belum: Angka;\n terisi: Angka;\n persen_terpenuhi: Angka;\n persen_terisi: Angka;\n}\nexport interface DasborSpmiData {\n periode?: { id: number; nama?: string; tahun?: number | string } | null;\n ppepp: Record<'penetapan' | 'pelaksanaan' | 'evaluasi' | 'pengendalian' | 'peningkatan', { terpenuhi: boolean; bukti: Record<string, unknown> }>;\n capaian: RekapCapaian | null;\n capaian_per_bidang: RekapCapaian[];\n ami: Array<{ status: string; n: Angka }>;\n temuan: Partial<Record<'total' | 'terbuka' | 'kts_mayor' | 'kts_minor' | 'observasi' | 'terlambat' | 'ditutup', Angka>>;\n survei?: Array<{ status: string; n: Angka }>;\n risiko_tinggi_terbuka?: Angka;\n akreditasi?: Partial<Record<'kedaluwarsa' | 'segera_ajukan' | 'belum_ada_data' | 'aman', Angka>>;\n pelaporan?: { butir: Angka; dilaporkan: Angka; valid: Angka } | null;\n}\nexport interface KueriSpmi {\n periodeId?: number;\n unitId?: number;\n}\n/** GET /v1/spmi/dasbor. */\nexport function useDasborSpmi({ periodeId, unitId }: KueriSpmi) {\n const q = { periode_id: periodeId, unit_id: unitId };\n return useSiakadQuery<DasborSpmiData>(['spmi-dasbor', q], (s, signal) => s.spmi.getDasbor(q, { signal }) as never, { staleTime: 120_000 });\n}\n\n/** Kartu angka SPMI: indikator terpenuhi, capaian terisi, temuan terbuka, akreditasi. */\nexport function RingkasanSpmi({ className, ...k }: KueriSpmi & { className?: string }) {\n const r = useDasborSpmi(k);\n const d = r.data;\n const muat = muatDari(r);\n const c = d?.capaian;\n const tm = d?.temuan ?? {};\n const ak = d?.akreditasi ?? {};\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard\n label=\"Indikator terpenuhi\"\n icon={<ClipboardCheck />}\n loading={muat}\n value={c?.persen_terpenuhi != null ? formatPersen(n(c.persen_terpenuhi), 0) : '–'}\n hint={`${formatNumber(n(c?.tercapai) + n(c?.melampaui))} tercapai/melampaui`}\n tone=\"success\"\n />\n <StatCard\n label=\"Capaian terisi\"\n icon={<FileText />}\n loading={muat}\n value={c?.persen_terisi != null ? formatPersen(n(c.persen_terisi), 0) : '–'}\n hint={`${formatNumber(n(c?.terisi))} dari ${formatNumber(n(c?.total))} indikator`}\n footer={!muat ? <Progress value={n(c?.persen_terisi)} size=\"sm\" /> : undefined}\n />\n <StatCard\n label=\"Temuan terbuka\"\n icon={<ShieldAlert />}\n loading={muat}\n value={formatNumber(n(tm.terbuka))}\n hint={`${formatNumber(n(tm.terlambat))} lewat batas waktu`}\n tone={n(tm.terlambat) > 0 ? 'danger' : n(tm.terbuka) > 0 ? 'warning' : 'neutral'}\n />\n <StatCard\n label=\"Akreditasi perlu diurus\"\n icon={<BadgeCheck />}\n loading={muat}\n value={formatNumber(n(ak.kedaluwarsa) + n(ak.segera_ajukan))}\n hint={`${formatNumber(n(ak.kedaluwarsa))} kedaluwarsa · ${formatNumber(n(ak.aman))} aman`}\n tone={n(ak.kedaluwarsa) > 0 ? 'danger' : 'neutral'}\n />\n </KartuRingkas>\n );\n}\n\n/** Lima tahap PPEPP dengan bukti singkat. */\nexport const SiklusPpepp = buatWidget('SiklusPpepp', useDasborSpmi, { title: 'Siklus PPEPP', description: 'Penetapan, pelaksanaan, evaluasi, pengendalian, peningkatan', span: 'full' }, (d, muat) => {\n if (muat || !d?.ppepp) return <Progress value={null} />;\n const b = (key: keyof DasborSpmiData['ppepp'], f: string) => n(d.ppepp[key]?.bukti?.[f] as Angka);\n return (\n <CycleSteps\n steps={[\n { label: 'Penetapan', done: !!d.ppepp.penetapan?.terpenuhi, detail: `${b('penetapan', 'standar_berlaku')} standar berlaku` },\n { label: 'Pelaksanaan', done: !!d.ppepp.pelaksanaan?.terpenuhi, detail: `${formatPersen(b('pelaksanaan', 'capaian_terisi_persen'), 0)} capaian terisi` },\n { label: 'Evaluasi', done: !!d.ppepp.evaluasi?.terpenuhi, detail: `${b('evaluasi', 'auditee_ami_selesai')} auditee AMI selesai` },\n { label: 'Pengendalian', done: !!d.ppepp.pengendalian?.terpenuhi, detail: `${b('pengendalian', 'temuan_ditutup')} temuan ditutup` },\n { label: 'Peningkatan', done: !!d.ppepp.peningkatan?.terpenuhi, detail: `${b('peningkatan', 'keputusan_peningkatan_standar')} keputusan peningkatan` },\n ]}\n />\n );\n});\n/** Persen indikator terpenuhi per bidang standar. */\nexport const CapaianPerBidang = buatWidget(\n 'CapaianPerBidang',\n useDasborSpmi,\n { title: 'Capaian per bidang', description: 'Persen indikator terpenuhi dari yang sudah dinilai', span: 2 },\n (d, muat) => (\n <BarList\n loading={muat}\n max={100}\n format={(v) => formatPersen(v, 0)}\n items={(d?.capaian_per_bidang ?? []).map((x) => ({\n label: judulKunci(String(x.kunci)),\n value: n(x.persen_terpenuhi),\n secondary: `${formatNumber(n(x.terisi))}/${formatNumber(n(x.total))} terisi`,\n }))}\n />\n ),\n);\n/** Melampaui, tercapai, tidak tercapai, belum dinilai. */\nexport const PemenuhanIndikator = buatWidget('PemenuhanIndikator', useDasborSpmi, { title: 'Pemenuhan indikator' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={128}\n centerLabel=\"indikator\"\n data={[\n { label: 'Melampaui', value: n(d?.capaian?.melampaui) },\n { label: 'Tercapai', value: n(d?.capaian?.tercapai) },\n { label: 'Tidak tercapai', value: n(d?.capaian?.tidak_tercapai) },\n { label: 'Belum dinilai', value: n(d?.capaian?.belum) },\n ]}\n />\n));\n/** Temuan AMI per kategori dan yang sudah ditutup. */\nexport const TemuanAmi = buatWidget('TemuanAmi', useDasborSpmi, { title: 'Temuan audit' }, (d, muat) => {\n if (muat) return <Progress value={null} />;\n const tm = d?.temuan ?? {};\n return (\n <div style={{ display: 'grid', gap: '1.25rem' }}>\n <SegmentBar\n data={[\n { label: 'KTS mayor', value: n(tm.kts_mayor) },\n { label: 'KTS minor', value: n(tm.kts_minor) },\n { label: 'Observasi', value: n(tm.observasi) },\n ]}\n />\n <Progress label=\"Temuan ditutup\" value={n(tm.ditutup)} max={Math.max(1, n(tm.total))} tone=\"success\" format={(v, m) => `${v} dari ${m}`} />\n </div>\n );\n});\n/** Antrean SPMI yang perlu ditangani. */\nexport const TindakanSpmi = buatWidget('TindakanSpmi', useDasborSpmi, { title: 'Perlu tindakan' }, (d, muat) => (\n <ActionList\n loading={muat}\n items={[\n { label: 'Temuan lewat batas waktu', count: n(d?.temuan?.terlambat), tone: 'danger', icon: <TriangleAlert /> },\n { label: 'Risiko tinggi terbuka', count: n(d?.risiko_tinggi_terbuka), tone: 'danger', icon: <ShieldAlert /> },\n { label: 'Akreditasi segera diajukan', count: n(d?.akreditasi?.segera_ajukan), icon: <BadgeCheck /> },\n { label: 'Unit belum punya data akreditasi', count: n(d?.akreditasi?.belum_ada_data), tone: 'info', icon: <FileText /> },\n ]}\n />\n));\n/** Butir pelaporan PDDikti: dilaporkan dan valid. */\nexport const PelaporanPddikti = buatWidget('PelaporanPddikti', useDasborSpmi, { title: 'Pelaporan PDDikti' }, (d, muat) => {\n const pl = d?.pelaporan;\n if (muat) return <Progress value={null} />;\n if (!pl || !n(pl.butir)) return <p className=\"u-chart-empty\">Belum ada butir pelaporan periode ini.</p>;\n return (\n <div style={{ display: 'grid', gap: '0.875rem' }}>\n <Progress label=\"Dilaporkan\" value={n(pl.dilaporkan)} max={n(pl.butir)} format={(v, m) => `${v}/${m}`} />\n <Progress label=\"Dinyatakan valid\" value={n(pl.valid)} max={n(pl.butir)} tone=\"success\" format={(v, m) => `${v}/${m}`} />\n </div>\n );\n});\n\n/** Dasbor SPMI lengkap. */\nexport function DasborSpmi({ periodeId, unitId, title = 'Penjaminan mutu internal', description, actions, className }: DasborBaseProps & KueriSpmi) {\n const k = { periodeId, unitId };\n const r = useDasborSpmi(k);\n const p = r.data?.periode;\n return (\n <KerangkaDasbor title={title} description={description ?? (p ? `Periode ${p.nama ?? p.tahun}` : undefined)} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanSpmi {...k} />\n <DashboardGrid>\n <SiklusPpepp {...k} />\n <CapaianPerBidang {...k} />\n <PemenuhanIndikator {...k} />\n <TemuanAmi {...k} />\n <TindakanSpmi {...k} />\n <PelaporanPddikti {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ LPPM\nexport interface RekapLppm {\n tahun?: string | null;\n kegiatan_per_status: Array<{ jenis: string; status: string; jumlah: Angka; dana_usulan?: Angka; dana_disetujui?: Angka }>;\n kegiatan_per_sumber_dana: Array<{ jenis: string; sumber_dana: string | null; jumlah: Angka; dana: Angka }>;\n kegiatan_per_skema: Array<{ kode?: string; nama: string; jenis: string; jumlah: Angka; didanai: Angka }>;\n luaran_per_jenis: Array<{ kategori?: string; kode?: string; nama: string; jumlah: Angka; terverifikasi: Angka }>;\n dosen_terlibat: Angka;\n mahasiswa_terlibat: Angka;\n tugas_pengelola?: Partial<Record<'usulan_menunggu_review' | 'usulan_menunggu_penetapan' | 'laporan_menunggu' | 'luaran_menunggu_verifikasi' | 'pencairan_diajukan', Angka>> | null;\n}\nexport interface KueriLppm {\n tahun?: string | number;\n kodeProdi?: string;\n}\n/** GET /v1/lppm/rekap/dasbor. */\nexport function useRekapLppm({ tahun, kodeProdi }: KueriLppm) {\n const q = { tahun: tahun == null ? undefined : String(tahun), kode_prodi: kodeProdi };\n return useSiakadQuery<RekapLppm>(['lppm-rekap', q], (s, signal) => s.lppm.getRekapDasbor(q, { signal }) as never, { staleTime: 120_000 });\n}\nconst JENIS_LPPM: Record<string, string> = { penelitian: 'Penelitian', pkm: 'PkM', pengabdian: 'PkM' };\nconst jumlahJenis = (d: RekapLppm | undefined, j: string) => (d?.kegiatan_per_status ?? []).filter((x) => (JENIS_LPPM[x.jenis] ?? x.jenis) === j).reduce((a, x) => a + n(x.jumlah), 0);\n\n/** Kartu angka LPPM: penelitian, PkM, dana disetujui, dosen terlibat. */\nexport function RingkasanLppm({ className, ...k }: KueriLppm & { className?: string }) {\n const r = useRekapLppm(k);\n const d = r.data;\n const muat = muatDari(r);\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Penelitian\" icon={<FlaskConical />} loading={muat} value={formatNumber(jumlahJenis(d, 'Penelitian'))} hint=\"kegiatan\" />\n <StatCard label=\"Pengabdian (PkM)\" icon={<Users />} loading={muat} value={formatNumber(jumlahJenis(d, 'PkM'))} hint=\"kegiatan\" tone=\"info\" />\n <StatCard label=\"Dana disetujui\" icon={<Wallet />} loading={muat} value={formatRupiahRingkas((d?.kegiatan_per_status ?? []).reduce((a, x) => a + n(x.dana_disetujui), 0))} tone=\"success\" />\n <StatCard\n label=\"Dosen terlibat\"\n icon={<UserCheck />}\n loading={muat}\n value={formatNumber(n(d?.dosen_terlibat))}\n hint={`${formatNumber(n(d?.mahasiswa_terlibat))} mahasiswa terlibat`}\n tone=\"neutral\"\n />\n </KartuRingkas>\n );\n}\n\nconst TUGAS_LPPM: Array<[keyof NonNullable<RekapLppm['tugas_pengelola']>, string]> = [\n ['usulan_menunggu_review', 'Usulan menunggu review'],\n ['usulan_menunggu_penetapan', 'Usulan menunggu penetapan'],\n ['laporan_menunggu', 'Laporan menunggu diperiksa'],\n ['luaran_menunggu_verifikasi', 'Luaran menunggu verifikasi'],\n ['pencairan_diajukan', 'Pencairan dana diajukan'],\n];\n/** Antrean pengelola LPPM. Hanya berisi bila token milik pengelola. */\nexport const AntreanLppm = buatWidget(\n 'AntreanLppm',\n (q: KueriLppm & { hrefTugas?: Partial<Record<string, string>> }) => useRekapLppm(q),\n { title: 'Perlu tindakan', description: 'Antrean pengelola LPPM' },\n (d, muat, q) =>\n !muat && !d?.tugas_pengelola ? (\n <p className=\"u-chart-empty\">Antrean hanya tampil untuk pengelola LPPM.</p>\n ) : (\n <ActionList loading={muat} items={TUGAS_LPPM.map(([key, label]) => ({ key, label, count: n(d?.tugas_pengelola?.[key]), href: q.hrefTugas?.[key] }))} />\n ),\n);\n/** Kegiatan per status, dirinci penelitian/PkM. */\nexport const KegiatanLppmPerStatus = buatWidget('KegiatanLppmPerStatus', useRekapLppm, { title: 'Kegiatan per status', span: 2 }, (d, muat) => {\n const gab = new Map<string, Record<string, number>>();\n (d?.kegiatan_per_status ?? []).forEach((x) => {\n const m = gab.get(x.status) ?? {};\n const j = JENIS_LPPM[x.jenis] ?? x.jenis;\n m[j] = (m[j] ?? 0) + n(x.jumlah);\n gab.set(x.status, m);\n });\n return (\n <BarList\n loading={muat}\n items={[...gab]\n .map(([s, m]) => ({\n label: judulKunci(s),\n value: Object.values(m).reduce((a, b) => a + b, 0),\n secondary: Object.entries(m)\n .map(([j, v]) => `${v} ${j}`)\n .join(' · '),\n }))\n .sort((a, b) => b.value - a.value)}\n />\n );\n});\n/** Dana kegiatan per sumber pendanaan. */\nexport const DanaLppmPerSumber = buatWidget('DanaLppmPerSumber', useRekapLppm, { title: 'Dana per sumber' }, (d, muat) => {\n const sumber = new Map<string, number>();\n (d?.kegiatan_per_sumber_dana ?? []).forEach((x) => sumber.set(x.sumber_dana ?? 'belum_diisi', (sumber.get(x.sumber_dana ?? 'belum_diisi') ?? 0) + n(x.dana)));\n return (\n <DonutChart loading={muat} size={136} format={formatRupiahRingkas} centerLabel=\"total dana\" data={[...sumber].sort((a, b) => b[1] - a[1]).map(([k, v]) => ({ label: judulKunci(k), value: v }))} />\n );\n});\n/** Usulan per skema hibah dan yang didanai. */\nexport const SkemaHibah = buatWidget('SkemaHibah', useRekapLppm, { title: 'Skema hibah', description: 'Jumlah usulan dan yang didanai', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n items={[...(d?.kegiatan_per_skema ?? [])].sort((a, b) => n(b.jumlah) - n(a.jumlah)).map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: `${formatNumber(n(x.didanai))} didanai` }))}\n />\n));\n/** Luaran penelitian/PkM per jenis. */\nexport const LuaranLppm = buatWidget('LuaranLppm', useRekapLppm, { title: 'Luaran', description: 'Publikasi, HKI, dan luaran lain', span: 'full' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={10}\n items={[...(d?.luaran_per_jenis ?? [])]\n .sort((a, b) => n(b.jumlah) - n(a.jumlah))\n .map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: `${formatNumber(n(x.terverifikasi))} terverifikasi` }))}\n />\n));\n\n/** Dasbor LPPM lengkap. */\nexport function DasborLppm({\n tahun,\n kodeProdi,\n hrefTugas,\n title = 'Penelitian & pengabdian',\n description,\n actions,\n className,\n}: DasborBaseProps & KueriLppm & { /** Tautan per antrean pengelola, mis. { usulan_menunggu_review: '/lppm/review' }. */ hrefTugas?: Partial<Record<string, string>> }) {\n const k = { tahun, kodeProdi };\n const r = useRekapLppm(k);\n const pengelola = !!r.data?.tugas_pengelola;\n return (\n <KerangkaDasbor title={title} description={description ?? (r.data?.tahun ? `Tahun ${r.data.tahun}` : 'Semua tahun')} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanLppm {...k} />\n <DashboardGrid>\n {pengelola && <AntreanLppm {...k} hrefTugas={hrefTugas} />}\n <DanaLppmPerSumber {...k} />\n <KegiatanLppmPerStatus {...k} span={pengelola ? 'full' : 2} />\n <SkemaHibah {...k} />\n <LuaranLppm {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Arsip\nexport interface LaporanArsip {\n tahun: number | string;\n surat_per_bulan: Array<{ bulan: number; masuk: Angka; keluar: Angka }>;\n surat_per_status: Array<{ arah: string; status: string; jumlah: Angka }>;\n surat_per_klasifikasi: Array<{ kode: string; nama: string; jumlah: Angka }>;\n disposisi?: Partial<Record<'total' | 'aktif' | 'lewat_batas' | 'selesai' | 'rata_jam_selesai', Angka>> | null;\n dokumen?: Partial<Record<'total' | 'kedaluwarsa' | 'akan_kedaluwarsa_90_hari', Angka>> | null;\n retensi_jatuh_tempo?: { pemindahan: Angka; pemusnahan_penyerahan: Angka };\n peminjaman_aktif?: Angka;\n}\nexport interface KueriArsip {\n unitId?: number | string;\n tahun?: number | string;\n /** Sertakan unit turunan. */\n turunan?: boolean;\n}\n/** GET /v1/arsip/laporan/ringkasan. */\nexport function useLaporanArsip({ unitId, tahun, turunan }: KueriArsip) {\n const q = { unit_id: unitId == null ? undefined : String(unitId), tahun: tahun == null ? undefined : String(tahun), turunan: turunan ? '1' : undefined };\n return useSiakadQuery<LaporanArsip>(['arsip-ringkasan', q], (s, signal) => s.arsip.getLaporanRingkasan(q, { signal }) as never, { staleTime: 120_000 });\n}\n\n/** Kartu angka arsip: surat masuk/keluar, disposisi aktif, dokumen kedaluwarsa. */\nexport function RingkasanArsip({ className, ...k }: KueriArsip & { className?: string }) {\n const r = useLaporanArsip(k);\n const d = r.data;\n const muat = muatDari(r);\n const bln = d?.surat_per_bulan ?? [];\n const ds = d?.disposisi ?? {};\n const dk = d?.dokumen ?? {};\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Surat masuk\" icon={<Mail />} loading={muat} value={formatNumber(bln.reduce((a, x) => a + n(x.masuk), 0))} trend={bln.map((x) => n(x.masuk))} />\n <StatCard label=\"Surat keluar\" icon={<Send />} loading={muat} value={formatNumber(bln.reduce((a, x) => a + n(x.keluar), 0))} trend={bln.map((x) => n(x.keluar))} tone=\"info\" />\n <StatCard\n label=\"Disposisi aktif\"\n icon={<Inbox />}\n loading={muat}\n value={formatNumber(n(ds.aktif))}\n hint={ds.rata_jam_selesai != null ? `rata-rata selesai ${formatNumber(n(ds.rata_jam_selesai))} jam` : undefined}\n tone={n(ds.lewat_batas) > 0 ? 'warning' : 'neutral'}\n />\n <StatCard\n label=\"Dokumen kedaluwarsa\"\n icon={<FileClock />}\n loading={muat}\n value={formatNumber(n(dk.kedaluwarsa))}\n hint={`${formatNumber(n(dk.akan_kedaluwarsa_90_hari))} lagi dalam 90 hari`}\n tone={n(dk.kedaluwarsa) > 0 ? 'danger' : 'neutral'}\n />\n </KartuRingkas>\n );\n}\n/** Surat masuk vs keluar per bulan. */\nexport const SuratPerBulan = buatWidget('SuratPerBulan', useLaporanArsip, { title: 'Surat per bulan', span: 2 }, (d, muat) => {\n const bln = d?.surat_per_bulan ?? [];\n return (\n <GroupedBarChart\n loading={muat}\n labels={bln.map((x) => BULAN[x.bulan - 1] ?? String(x.bulan))}\n series={[\n { label: 'Masuk', values: bln.map((x) => n(x.masuk)) },\n { label: 'Keluar', values: bln.map((x) => n(x.keluar)) },\n ]}\n />\n );\n});\n/** Disposisi lewat batas, retensi jatuh tempo, peminjaman. */\nexport const TindakanArsip = buatWidget('TindakanArsip', useLaporanArsip, { title: 'Perlu tindakan' }, (d, muat) => (\n <ActionList\n loading={muat}\n items={[\n { label: 'Disposisi lewat batas waktu', count: n(d?.disposisi?.lewat_batas), tone: 'danger', icon: <TriangleAlert /> },\n { label: 'Jatuh tempo pindah ke inaktif', count: n(d?.retensi_jatuh_tempo?.pemindahan), icon: <Archive /> },\n { label: 'Jatuh tempo musnah/serah', count: n(d?.retensi_jatuh_tempo?.pemusnahan_penyerahan), icon: <Archive /> },\n { label: 'Peminjaman arsip aktif', count: n(d?.peminjaman_aktif), tone: 'info', icon: <BookOpenCheck /> },\n ]}\n />\n));\n/** Klasifikasi surat terbanyak tahun ini. */\nexport const KlasifikasiSurat = buatWidget('KlasifikasiSurat', useLaporanArsip, { title: 'Klasifikasi terbanyak', span: 2 }, (d, muat) => (\n <BarList loading={muat} limit={8} items={(d?.surat_per_klasifikasi ?? []).map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: x.kode }))} />\n));\n/** Surat per status (masuk dan keluar digabung). */\nexport const StatusSurat = buatWidget('StatusSurat', useLaporanArsip, { title: 'Status surat' }, (d, muat) => {\n const m = new Map<string, number>();\n (d?.surat_per_status ?? []).forEach((x) => m.set(x.status, (m.get(x.status) ?? 0) + n(x.jumlah)));\n return <DonutChart loading={muat} size={128} centerLabel=\"surat\" data={[...m].sort((a, b) => b[1] - a[1]).map(([k, v]) => ({ label: judulKunci(k), value: v }))} />;\n});\n\n/** Dasbor arsip lengkap. */\nexport function DasborArsip({ unitId, tahun, turunan, title = 'Arsip & persuratan', description, actions, className }: DasborBaseProps & KueriArsip) {\n const k = { unitId, tahun, turunan };\n const r = useLaporanArsip(k);\n return (\n <KerangkaDasbor title={title} description={description ?? (r.data ? `Tahun ${r.data.tahun}` : undefined)} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanArsip {...k} />\n <DashboardGrid>\n <SuratPerBulan {...k} />\n <TindakanArsip {...k} />\n <KlasifikasiSurat {...k} />\n <StatusSurat {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Humas\ninterface KontenRingkas {\n jenis: string;\n id: number;\n judul: string;\n situs?: string | null;\n updated_at?: string;\n terbit_pada?: string;\n tayang?: number;\n aksi?: string;\n username?: string;\n waktu?: string;\n}\nexport interface DataHumas {\n jumlah: Record<string, Partial<Record<'draf' | 'review' | 'terbit' | 'arsip', Angka>>>;\n terjadwal: Angka;\n pesan_baru: Angka;\n antrean_review: KontenRingkas[];\n terjadwal_daftar: KontenRingkas[];\n tayang_harian: Array<{ tanggal: string; tayang: Angka }>;\n tayang_total: Angka;\n populer: KontenRingkas[];\n aktivitas: KontenRingkas[];\n topik?: Array<{ kode: string; nama: string; warna?: string | null; jumlah: Angka }>;\n}\nexport interface KueriHumas {\n situs?: string;\n /** Rentang tayangan (7–90 hari). Bawaan 30. */\n hari?: number;\n /** Tautan ke editor konten. */\n hrefKonten?: (k: { jenis: string; id: number }) => string;\n}\n/** GET /v1/humas/ringkasan. */\nexport function useRingkasanHumas({ situs, hari = 30 }: KueriHumas) {\n const q = { situs, hari: String(hari) };\n return useSiakadQuery<DataHumas>(['humas-ringkasan', q], (s, signal) => s.humas.getRingkasan(q, { signal }) as never, { staleTime: 60_000 });\n}\nconst AKSI_HUMAS: Record<string, string> = { buat: 'membuat', ubah: 'mengubah', terbit: 'menerbitkan', review: 'mengajukan review', arsip: 'mengarsipkan', hapus: 'menghapus', pulihkan: 'memulihkan' };\nconst totalHumas = (d: DataHumas | undefined, key: 'draf' | 'review' | 'terbit') => Object.values(d?.jumlah ?? {}).reduce((a, x) => a + n(x[key]), 0);\n\n/** Kartu angka redaksi: tayangan, terbit, review, terjadwal, pesan baru. */\nexport function RingkasanHumas({ className, ...k }: KueriHumas & { className?: string }) {\n const r = useRingkasanHumas(k);\n const d = r.data;\n const muat = muatDari(r);\n const hari = k.hari ?? 30;\n return (\n <KartuRingkas q={[r]} min={180} className={className}>\n <StatCard label=\"Tayangan\" icon={<Newspaper />} loading={muat} value={formatNumber(n(d?.tayang_total))} hint={`${hari} hari terakhir`} trend={(d?.tayang_harian ?? []).map((x) => n(x.tayang))} />\n <StatCard label=\"Konten terbit\" icon={<BadgeCheck />} loading={muat} value={formatNumber(totalHumas(d, 'terbit'))} tone=\"success\" />\n <StatCard\n label=\"Menunggu review\"\n icon={<ClipboardCheck />}\n loading={muat}\n value={formatNumber(totalHumas(d, 'review'))}\n tone={totalHumas(d, 'review') > 0 ? 'warning' : 'neutral'}\n hint={`${formatNumber(totalHumas(d, 'draf'))} draf`}\n />\n <StatCard label=\"Terjadwal\" icon={<CalendarClock />} loading={muat} value={formatNumber(n(d?.terjadwal))} tone=\"info\" />\n <StatCard label=\"Pesan baru\" icon={<MessageSquare />} loading={muat} value={formatNumber(n(d?.pesan_baru))} tone={n(d?.pesan_baru) > 0 ? 'warning' : 'neutral'} />\n </KartuRingkas>\n );\n}\n/** Tayangan portal per hari. */\nexport const TayanganHarian = buatWidget('TayanganHarian', useRingkasanHumas, { title: 'Tayangan harian', span: 2 }, (d, muat) => {\n const seri = d?.tayang_harian ?? [];\n return (\n <LineChart\n loading={muat}\n labels={seri.map((x) => tglPendek(x.tanggal))}\n titles={seri.map((x) => formatDate(x.tanggal, 'long'))}\n series={[{ label: 'Tayangan', values: seri.map((x) => n(x.tayang)) }]}\n />\n );\n});\n/** Konten paling banyak dibaca dalam rentang hari. */\nexport const KontenTerpopuler = buatWidget('KontenTerpopuler', useRingkasanHumas, { title: 'Terpopuler' }, (d, muat, q) => (\n <BarList loading={muat} limit={6} items={(d?.populer ?? []).map((k) => ({ label: k.judul, value: n(k.tayang), secondary: judulKunci(k.jenis), href: q.hrefKonten?.(k) }))} />\n));\n/** Konten yang menunggu review redaktur. */\nexport const AntreanReview = buatWidget('AntreanReview', useRingkasanHumas, { title: 'Antrean review' }, (d, muat, q) => (\n <ActivityFeed\n loading={muat}\n empty=\"Tidak ada konten yang menunggu review.\"\n items={(d?.antrean_review ?? [])\n .slice(0, 6)\n .map((k) => ({\n id: `${k.jenis}-${k.id}`,\n title: k.judul,\n href: q.hrefKonten?.(k),\n icon: <ClipboardCheck />,\n meta: [judulKunci(k.jenis), k.situs].filter(Boolean).join(' · '),\n time: k.updated_at ? formatRelative(k.updated_at) : undefined,\n }))}\n />\n));\n/** Konten terjadwal terbit. */\nexport const JadwalTerbit = buatWidget('JadwalTerbit', useRingkasanHumas, { title: 'Jadwal terbit' }, (d, muat, q) => (\n <ActivityFeed\n loading={muat}\n empty=\"Belum ada konten terjadwal.\"\n items={(d?.terjadwal_daftar ?? [])\n .slice(0, 6)\n .map((k) => ({\n id: `${k.jenis}-${k.id}`,\n title: k.judul,\n href: q.hrefKonten?.(k),\n icon: <CalendarClock />,\n meta: judulKunci(k.jenis),\n time: k.terbit_pada ? formatDate(k.terbit_pada, 'medium') : undefined,\n }))}\n />\n));\n/** Riwayat perubahan konten terbaru. */\nexport const AktivitasRedaksi = buatWidget('AktivitasRedaksi', useRingkasanHumas, { title: 'Aktivitas terbaru' }, (d, muat, q) => (\n <ActivityFeed\n loading={muat}\n items={(d?.aktivitas ?? [])\n .slice(0, 6)\n .map((k, i) => ({\n id: `${k.jenis}-${k.id}-${i}`,\n title: k.judul,\n href: q.hrefKonten?.(k),\n meta: `${k.username ?? 'Seseorang'} ${AKSI_HUMAS[k.aksi ?? ''] ?? k.aksi ?? ''}`,\n time: k.waktu ? formatRelative(k.waktu) : undefined,\n }))}\n />\n));\n\n/** Dasbor ruang redaksi lengkap. */\nexport function DasborHumas({ situs, hari = 30, hrefKonten, title = 'Ruang redaksi', description, actions, className }: DasborBaseProps & KueriHumas) {\n const k = { situs, hari, hrefKonten };\n const r = useRingkasanHumas(k);\n return (\n <KerangkaDasbor title={title} description={description ?? `Tayangan ${hari} hari terakhir`} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanHumas {...k} />\n <DashboardGrid>\n <TayanganHarian {...k} />\n <KontenTerpopuler {...k} />\n <AntreanReview {...k} />\n <JadwalTerbit {...k} />\n <AktivitasRedaksi {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ PMB\nexport interface StatistikPmb {\n akun_terdaftar: Angka;\n corong: Partial<Record<'pendaftaran' | 'draf' | 'diajukan' | 'perlu_perbaikan' | 'terverifikasi' | 'ditolak' | 'mengundurkan_diri' | 'bayar_formulir' | 'lulus' | 'daftar_ulang', Angka>>;\n per_prodi: Array<{ kode_prodi: string; nama_prodi: string | null; peminat: Angka; pilihan_pertama: Angka; lulus?: Angka; daftar_ulang?: Angka }>;\n per_sumber_informasi: Array<{ sumber: string; jumlah: Angka; diajukan?: Angka }>;\n per_referal?: Array<{ kode: string; nama: string; jenis?: string; jumlah: Angka; diajukan?: Angka }>;\n harian_30_hari: Array<{ tanggal: string; akun_mulai: Angka; diajukan: Angka }>;\n}\nexport interface KueriPmb {\n gelombangId?: number | string;\n}\n/** GET /v1/pmb/admin/statistik. */\nexport function useStatistikPmb({ gelombangId }: KueriPmb) {\n const q = { gelombang_id: gelombangId == null ? undefined : String(gelombangId) };\n return useSiakadQuery<StatistikPmb>(['pmb-statistik', q], (s, signal) => s.pmb.getAdminStatistik(q, { signal }) as never, { staleTime: 60_000 });\n}\n\n/** Kartu angka PMB: akun, formulir diajukan (7 hari vs 7 hari sebelumnya), perlu perbaikan, lulus, daftar ulang. */\nexport function RingkasanPmb({ className, ...k }: KueriPmb & { className?: string }) {\n const r = useStatistikPmb(k);\n const d = r.data;\n const muat = muatDari(r);\n const c = d?.corong ?? {};\n const h = d?.harian_30_hari ?? [];\n const tujuh = (key: 'akun_mulai' | 'diajukan', dari: number) => h.slice(Math.max(0, h.length - dari - 7), h.length - dari).reduce((a, x) => a + n(x[key]), 0);\n return (\n <KartuRingkas q={[r]} min={180} className={className}>\n <StatCard\n label=\"Akun terdaftar\"\n icon={<UserPlus />}\n loading={muat}\n value={formatNumber(n(d?.akun_terdaftar))}\n trend={h.map((x) => n(x.akun_mulai))}\n delta={ubah(tujuh('akun_mulai', 0), tujuh('akun_mulai', 7))}\n deltaLabel=\"7 hari terakhir\"\n />\n <StatCard\n label=\"Formulir diajukan\"\n icon={<Send />}\n loading={muat}\n value={formatNumber(n(c.diajukan))}\n trend={h.map((x) => n(x.diajukan))}\n delta={ubah(tujuh('diajukan', 0), tujuh('diajukan', 7))}\n deltaLabel=\"7 hari terakhir\"\n tone=\"info\"\n />\n <StatCard\n label=\"Perlu perbaikan\"\n icon={<TriangleAlert />}\n loading={muat}\n value={formatNumber(n(c.perlu_perbaikan))}\n tone={n(c.perlu_perbaikan) > 0 ? 'warning' : 'neutral'}\n hint=\"menunggu pendaftar\"\n />\n <StatCard\n label=\"Lulus seleksi\"\n icon={<BadgeCheck />}\n loading={muat}\n value={formatNumber(n(c.lulus))}\n tone=\"success\"\n hint={n(c.terverifikasi) ? `dari ${formatNumber(n(c.terverifikasi))} terverifikasi` : undefined}\n />\n <StatCard\n label=\"Daftar ulang\"\n icon={<GraduationCap />}\n loading={muat}\n value={formatNumber(n(c.daftar_ulang))}\n hint={n(c.lulus) ? `${formatPersen((n(c.daftar_ulang) / n(c.lulus)) * 100, 0)} dari yang lulus` : undefined}\n tone=\"success\"\n />\n </KartuRingkas>\n );\n}\n/** Corong akun → diajukan → terverifikasi → lulus → daftar ulang. */\nexport const CorongPmb = buatWidget('CorongPmb', useStatistikPmb, { title: 'Corong pendaftaran', description: 'Persentase konversi dari tahap sebelumnya' }, (d, muat) => (\n <Funnel\n loading={muat}\n stages={[\n { label: 'Akun dibuat', value: n(d?.akun_terdaftar) },\n { label: 'Formulir diajukan', value: n(d?.corong.diajukan) },\n { label: 'Terverifikasi', value: n(d?.corong.terverifikasi) },\n { label: 'Lulus seleksi', value: n(d?.corong.lulus) },\n { label: 'Daftar ulang', value: n(d?.corong.daftar_ulang) },\n ]}\n />\n));\n/** Akun baru dan formulir diajukan per hari (30 hari). */\nexport const PendaftarHarianPmb = buatWidget('PendaftarHarianPmb', useStatistikPmb, { title: 'Pendaftar harian', description: '30 hari terakhir', span: 2 }, (d, muat) => {\n const h = d?.harian_30_hari ?? [];\n return (\n <LineChart\n loading={muat}\n labels={h.map((x) => tglPendek(x.tanggal))}\n titles={h.map((x) => formatDate(x.tanggal, 'long'))}\n series={[\n { label: 'Akun baru', values: h.map((x) => n(x.akun_mulai)) },\n { label: 'Formulir diajukan', values: h.map((x) => n(x.diajukan)) },\n ]}\n />\n );\n});\n/** Peminat per prodi dan pilihan pertama. */\nexport const PeminatPerProdi = buatWidget('PeminatPerProdi', useStatistikPmb, { title: 'Peminat per prodi', description: 'Semua pilihan; pilihan pertama di kanan', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n limit={10}\n items={[...(d?.per_prodi ?? [])]\n .sort((a, b) => n(b.peminat) - n(a.peminat))\n .map((p) => ({ label: p.nama_prodi ?? p.kode_prodi, value: n(p.peminat), secondary: `${formatNumber(n(p.pilihan_pertama))} pilihan 1` }))}\n />\n));\n/** Dari mana pendaftar mengenal UNIPO. */\nexport const SumberInformasiPmb = buatWidget('SumberInformasiPmb', useStatistikPmb, { title: 'Sumber informasi' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={128}\n centerLabel=\"pendaftar\"\n data={[...(d?.per_sumber_informasi ?? [])].sort((a, b) => n(b.jumlah) - n(a.jumlah)).map((x) => ({ label: x.sumber, value: n(x.jumlah) }))}\n />\n));\n/** Kode referal teratas (sekolah, alumni, mitra). */\nexport const ReferalPmb = buatWidget('ReferalPmb', useStatistikPmb, { title: 'Referal teratas', span: 'full' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n empty=\"Belum ada pendaftar lewat referal.\"\n items={[...(d?.per_referal ?? [])].sort((a, b) => n(b.jumlah) - n(a.jumlah)).map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: `${x.kode} · ${formatNumber(n(x.diajukan))} diajukan` }))}\n />\n));\n\n/** Dasbor panitia PMB lengkap. */\nexport function DasborPmb({ gelombangId, title = 'Penerimaan mahasiswa baru', description, actions, className }: DasborBaseProps & KueriPmb) {\n const k = { gelombangId };\n const r = useStatistikPmb(k);\n return (\n <KerangkaDasbor title={title} description={description} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanPmb {...k} />\n <DashboardGrid>\n <CorongPmb {...k} />\n <SumberInformasiPmb {...k} />\n <PendaftarHarianPmb {...k} span=\"full\" />\n <PeminatPerProdi {...k} />\n {!!r.data?.per_referal?.length && <ReferalPmb {...k} span={1} />}\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Tracer study\nexport interface StatistikTracer {\n alumni: Angka;\n terlacak: Angka;\n persen_terlacak: Angka;\n per_status: Array<{ status: string | null; label: string; jumlah: Angka }>;\n per_tahun_lulus: Array<{ tahun: number; jumlah: Angka; terlacak: Angka }>;\n per_prodi: Array<{ kode_prodi: string; nama_prodi: string | null; jumlah: Angka; terlacak: Angka; bekerja_wirausaha_studi: Angka }>;\n instansi_teratas: Array<{ instansi: string; jumlah: Angka }>;\n lowongan_aktif?: Angka;\n}\nexport interface KueriTracer {\n /** Kode prodi. */\n prodi?: string;\n}\n/** GET /v1/tracer/statistik. */\nexport function useStatistikTracer({ prodi }: KueriTracer) {\n const q = { prodi };\n return useSiakadQuery<StatistikTracer>(['tracer-statistik', q], (s, signal) => s.tracer.getStatistik(q, { signal }) as never, { staleTime: 300_000 });\n}\nconst positifTracer = (d?: StatistikTracer) => (d?.per_status ?? []).filter((x) => x.status != null && ['1', '3', '4'].includes(String(x.status))).reduce((a, x) => a + n(x.jumlah), 0);\n\n/** Kartu angka tracer: alumni, terlacak, bekerja/wirausaha/studi, lowongan. */\nexport function RingkasanTracer({ className, ...k }: KueriTracer & { className?: string }) {\n const r = useStatistikTracer(k);\n const d = r.data;\n const muat = muatDari(r);\n const terlacak = n(d?.terlacak);\n const positif = positifTracer(d);\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Alumni\" icon={<GraduationCap />} loading={muat} value={formatNumber(n(d?.alumni))} tone=\"neutral\" />\n <StatCard\n label=\"Terlacak\"\n icon={<UserCheck />}\n loading={muat}\n value={formatPersen(n(d?.persen_terlacak), 0)}\n hint={`${formatNumber(terlacak)} alumni mengisi`}\n footer={!muat ? <Progress value={n(d?.persen_terlacak)} size=\"sm\" /> : undefined}\n />\n <StatCard\n label=\"Bekerja, wirausaha, atau studi\"\n icon={<Briefcase />}\n loading={muat}\n value={terlacak ? formatPersen((positif / terlacak) * 100, 0) : '–'}\n hint={`${formatNumber(positif)} dari yang terlacak`}\n tone=\"success\"\n />\n <StatCard label=\"Lowongan aktif\" icon={<Inbox />} loading={muat} value={formatNumber(n(d?.lowongan_aktif))} tone=\"info\" />\n </KartuRingkas>\n );\n}\n/** Status alumni terlacak (bekerja, wiraswasta, studi, mencari kerja, …). */\nexport const StatusAlumni = buatWidget('StatusAlumni', useStatistikTracer, { title: 'Status alumni terlacak' }, (d, muat) => (\n <DonutChart loading={muat} size={128} centerLabel=\"terlacak\" data={(d?.per_status ?? []).filter((x) => x.status != null).map((x) => ({ label: x.label, value: n(x.jumlah) }))} />\n));\n/** Alumni dan yang terlacak per tahun lulus. */\nexport const AlumniPerTahunLulus = buatWidget('AlumniPerTahunLulus', useStatistikTracer, { title: 'Per tahun lulus', description: 'Jumlah alumni dan yang terlacak', span: 2 }, (d, muat) => {\n const thn = [...(d?.per_tahun_lulus ?? [])].sort((a, b) => a.tahun - b.tahun).slice(-8);\n return (\n <GroupedBarChart\n loading={muat}\n labels={thn.map((x) => String(x.tahun))}\n series={[\n { label: 'Alumni', values: thn.map((x) => n(x.jumlah)) },\n { label: 'Terlacak', values: thn.map((x) => n(x.terlacak)), color: 'var(--u-chart-3)' },\n ]}\n />\n );\n});\n/** Persen alumni terlacak per prodi. */\nexport const KeterlacakanPerProdi = buatWidget('KeterlacakanPerProdi', useStatistikTracer, { title: 'Keterlacakan per prodi', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n max={100}\n format={(v) => formatPersen(v, 0)}\n items={(d?.per_prodi ?? [])\n .map((p) => ({ label: p.nama_prodi ?? p.kode_prodi, value: n(p.jumlah) ? (n(p.terlacak) / n(p.jumlah)) * 100 : 0, secondary: `${formatNumber(n(p.terlacak))}/${formatNumber(n(p.jumlah))}` }))\n .sort((a, b) => b.value - a.value)}\n />\n));\n/** Instansi tempat alumni paling banyak bekerja. */\nexport const InstansiAlumni = buatWidget('InstansiAlumni', useStatistikTracer, { title: 'Instansi teratas' }, (d, muat) => (\n <BarList loading={muat} limit={8} items={(d?.instansi_teratas ?? []).map((x) => ({ label: x.instansi, value: n(x.jumlah) }))} />\n));\n\n/** Dasbor tracer study lengkap. */\nexport function DasborTracer({ prodi, title = 'Tracer study alumni', description, actions, className }: DasborBaseProps & KueriTracer) {\n const k = { prodi };\n const r = useStatistikTracer(k);\n return (\n <KerangkaDasbor title={title} description={description} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanTracer {...k} />\n <DashboardGrid>\n <StatusAlumni {...k} />\n <AlumniPerTahunLulus {...k} />\n <KeterlacakanPerProdi {...k} />\n <InstansiAlumni {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { BookOpen, Check, ChevronRight, Maximize2, CircleAlert, ClipboardList, FileText, GraduationCap, Info, Layers, ListChecks, Network, RefreshCw, Target, TriangleAlert } from 'lucide-react';\nimport { cn, dataFlag } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Alert, Empty, Progress, ProgressRing, Table, TableContainer } from '../components/display';\nimport { ActivityFeed, Panel, SegmentBar, StatCard, StatGrid } from '../components/charts';\nimport { Sheet } from '../components/overlays';\nimport { invalidateSiakad, pesanGalat, useOptionalSiakad, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/*\n * Widget Kurikulum OBE (/v1/kurikulum-obe, Permendiktisaintek 39/2025): daftar kurikulum, ringkasan & alur status,\n * validasi SN Dikti, profil lulusan, CPL per ranah, matriks pemetaan (profil–CPL, CPL–BK, CPL–MK, BK–MK) yang bisa diubah,\n * struktur MK per semester dengan batas SKS, CPMK & sub-CPMK, RPS, capaian CPL (prodi dan per mahasiswa),\n * status migrasi dari kurikulum lama, ekuivalensi MK, dan catatan peninjauan.\n */\n\n// ================================================================ Tipe\ntype Angka = number | string | null | undefined;\nconst n = (v: Angka) => (v == null || v === '' ? 0 : Number(v) || 0);\nconst daftar = (v: unknown): string[] =>\n Array.isArray(v)\n ? v.map((x) => (typeof x === 'object' && x ? String((x as { kode_mk?: string; kode?: string }).kode_mk ?? (x as { kode?: string }).kode ?? '') : String(x)))\n : typeof v === 'string' && v\n ? v.split(',')\n : [];\n\nexport type StatusKurikulum = 'draf' | 'diajukan' | 'disahkan' | 'berlaku' | 'arsip';\nexport interface Kurikulum {\n id: number;\n kode_prodi: string;\n nama_prodi?: string | null;\n kode_jenjang?: string | null;\n kode: string;\n nama: string;\n status: StatusKurikulum;\n versi?: number;\n sumber?: 'baru' | 'migrasi' | 'salinan';\n tahun_berlaku?: number | null;\n tahun_id_mulai?: string | null;\n regulasi?: string | null;\n no_sk?: string | null;\n tanggal_sk?: string | null;\n masa_tempuh?: number | null;\n sks_lulus?: Angka;\n sks_wajib?: Angka;\n sks_pilihan?: Angka;\n ipk_min_lulus?: Angka;\n jumlah_mk?: Angka;\n total_sks_mk?: Angka;\n jumlah_cpl?: Angka;\n jenjang?: { nama?: string; sks_min?: number | null; masa_tempuh?: number | null; batas_semester?: boolean } | null;\n ringkasan?: Partial<Record<'profil_lulusan' | 'cpl' | 'bahan_kajian' | 'mata_kuliah' | 'sks_wajib_mk' | 'sks_pilihan_mk' | 'cpmk' | 'mk_dengan_rps_disahkan', Angka>>;\n angkatan?: number[];\n transisi_status?: StatusKurikulum[];\n disahkan_at?: string | null;\n updated_at?: string | null;\n}\nexport interface MkKurikulum {\n id: number;\n kode_mk: string;\n nama: string;\n semester: number | null;\n sks: Angka;\n jenis: 'A' | 'B' | 'C' | 'D' | 'S' | 'W' | string;\n jumlah_cpmk?: Angka;\n cpl?: string[] | string | null;\n prasyarat?: unknown;\n status_rps?: string | null;\n modalitas?: string | null;\n deskripsi?: string | null;\n cpmk?: Cpmk[];\n}\nexport interface Cpmk {\n id: number;\n kode: string;\n deskripsi: string;\n target?: Angka;\n cpl?: Array<{ cpl_id: number; kode: string; bobot?: Angka }>;\n sub_cpmk?: Array<{ id: number; kode: string; deskripsi: string; indikator?: string | null }>;\n}\nexport type RanahCpl = 'sikap' | 'pengetahuan' | 'keterampilan_umum' | 'keterampilan_khusus';\nexport interface Cpl {\n id: number;\n kode: string;\n ranah: RanahCpl;\n kelompok_sn?: string | null;\n deskripsi: string;\n sumber?: string | null;\n target?: Angka;\n mata_kuliah?: Array<{ mk_id: number; kode_mk: string; nama: string; bobot?: Angka }>;\n}\nexport interface ProfilLulusan {\n id: number;\n kode: string;\n nama: string;\n deskripsi?: string | null;\n}\nexport interface BahanKajian {\n id: number;\n kode: string;\n nama: string;\n deskripsi?: string | null;\n}\nexport type NamaMatriks = 'profil-cpl' | 'cpl-bk' | 'cpl-mk' | 'bk-mk';\nexport type MatriksKurikulumData = Record<NamaMatriks, Array<Record<string, number>>>;\nexport interface ValidasiKurikulumData {\n ringkasan: {\n galat: number;\n peringatan: number;\n info: number;\n regulasi?: string;\n jenjang?: string;\n sks_wajib_mk?: Angka;\n sks_pilihan_mk?: Angka;\n jumlah_mk?: Angka;\n jumlah_cpl?: Angka;\n kelengkapan_persen?: Angka;\n siap_disahkan?: boolean;\n };\n temuan: Array<{ tingkat: 'galat' | 'peringatan' | 'info'; kode: string; pesan: string; pasal?: string | null }>;\n}\nexport interface CapaianCplData {\n angkatan?: number | null;\n sampai_tahun_id?: string | null;\n metode?: string | null;\n cpl: Array<{ cpl_id: number; kode: string; ranah: string; deskripsi: string; target: Angka; jumlah_mk: Angka; jumlah_mahasiswa: Angka; rata_rata: Angka; persen_tercapai: Angka }>;\n}\nexport interface CapaianMahasiswaData {\n mahasiswa: { nim: string; nama: string; kode_prodi: string; angkatan: number };\n kurikulum: { id: number; kode: string; nama: string; status: string };\n cpl: Array<{\n cpl_id: number;\n kode: string;\n ranah: string;\n deskripsi: string;\n target: Angka;\n nilai: Angka;\n tercapai: boolean | null;\n mk_sudah_dinilai: number;\n mk_total: number;\n mata_kuliah: Array<{ mk_id: number; kode_mk: string; nama: string; bobot: Angka; nilai: Angka }>;\n }>;\n}\nexport interface Rps {\n id: number;\n versi: number;\n status: 'draf' | 'disahkan' | 'arsip';\n tahun_id?: string | null;\n deskripsi?: string | null;\n materi_pokok?: string | null;\n pustaka_utama?: string[];\n pustaka_pendukung?: string[];\n dosen_pengampu?: string[];\n disahkan_at?: string | null;\n mata_kuliah?: { kode_mk?: string; nama?: string; sks?: Angka; semester?: number | null };\n cpl?: Array<{ kode: string; deskripsi: string }>;\n cpmk?: Cpmk[];\n pertemuan: Array<{\n pertemuan_ke: number;\n sampai_ke?: number | null;\n sub_cpmk_id?: number | null;\n materi?: string | null;\n indikator?: string | null;\n metode?: string | null;\n modalitas?: string | null;\n waktu_menit?: number | null;\n penugasan?: string | null;\n bobot?: Angka;\n ujian?: boolean;\n }>;\n evaluasi: Array<{ jenis_evaluasi: number; nama: string; bobot: Angka; komponen_siakad?: string | null; cpmk?: Array<{ cpmk_id: number; bobot: Angka }> }>;\n total_bobot_evaluasi?: Angka;\n}\nexport interface StatusMigrasiProdi {\n kode_prodi: string;\n nama_prodi: string;\n jenjang?: string;\n tahap: '1_belum' | '2_dilengkapi' | '3_disahkan' | '4_diterbitkan';\n lama?: { jumlah_semester: number; semester_terakhir?: string | null; mk_semester_terakhir?: number };\n impor_terakhir?: { tahun_id: string; waktu: string } | null;\n terbit_terakhir?: { tahun_id: string; waktu: string } | null;\n}\nexport interface Ekuivalensi {\n id: number;\n kode_mk_lama: string;\n nama_mk_lama?: string | null;\n sks_lama?: Angka;\n kode_mk?: string | null;\n nama_mk?: string | null;\n sks_mk?: Angka;\n jenis: 'setara' | 'gabung' | 'pecah' | 'dihapus';\n catatan?: string | null;\n}\nexport interface Peninjauan {\n id: number;\n jenis: string;\n judul: string;\n tanggal?: string | null;\n pelaksana?: string | null;\n ringkasan?: string | null;\n status?: 'rencana' | 'berjalan' | 'selesai';\n}\n\n// ================================================================ Label & warna\nexport const STATUS_KURIKULUM: Record<StatusKurikulum, { label: string; variant: BadgeVariant }> = {\n draf: { label: 'Draf', variant: 'neutral' },\n diajukan: { label: 'Diajukan', variant: 'warning' },\n disahkan: { label: 'Disahkan', variant: 'info' },\n berlaku: { label: 'Berlaku', variant: 'success' },\n arsip: { label: 'Arsip', variant: 'outline' },\n};\nexport const RANAH_CPL: Record<RanahCpl, string> = { sikap: 'Sikap', pengetahuan: 'Pengetahuan', keterampilan_umum: 'Keterampilan umum', keterampilan_khusus: 'Keterampilan khusus' };\nexport const JENIS_MK: Record<string, string> = { A: 'Wajib', B: 'Pilihan', C: 'Wajib peminatan', D: 'Pilihan peminatan', S: 'Tugas akhir', W: 'Wajib nasional' };\nconst JENIS_EVALUASI: Record<number, string> = { 1: 'Aktivitas partisipatif', 2: 'Hasil proyek', 3: 'Kognitif: tugas', 4: 'Kognitif: ujian' };\nconst AKSI_STATUS: Record<StatusKurikulum, string> = { draf: 'Kembalikan ke draf', diajukan: 'Ajukan', disahkan: 'Sahkan', berlaku: 'Berlakukan', arsip: 'Arsipkan' };\n/** Batas SKS per semester (Pasal 17–18): 20 untuk semester 1–2, 24 sesudahnya. */\nexport const maksSksSemester = (s: number) => (s <= 2 ? 20 : 24);\n\nexport function StatusKurikulumBadge({ status }: { status: StatusKurikulum | string }) {\n const s = STATUS_KURIKULUM[status as StatusKurikulum] ?? { label: status, variant: 'neutral' as const };\n return (\n <Badge variant={s.variant} dot>\n {s.label}\n </Badge>\n );\n}\n\nfunction Galat({ q }: { q: QueryState<unknown> }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(q.error, { kode: false })}<KodeLaporan error={q.error} /></span>\n <Button size=\"sm\" variant=\"ghost\" onClick={q.refetch}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\nconst muatDari = (q: QueryState<unknown>) => q.loading && !q.data;\n\n// ================================================================ Hook data\nconst P = '/v1/kurikulum-obe';\nconst opt = { staleTime: 60_000 };\nexport function useDaftarKurikulum(q: { prodi?: string; status?: StatusKurikulum; q?: string } = {}) {\n return useSiakadQuery<Kurikulum[]>(['kur-daftar', q], (s, signal) => s.kurikulumObe.getKurikulum({ ...q, per_page: 100 } as never, { signal }) as never, opt);\n}\nexport function useKurikulum(id: number | string | undefined) {\n return useSiakadQuery<Kurikulum>(['kur', String(id)], (s, signal) => s.kurikulumObe.getKurikulumById(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useMkKurikulum(id: number | string | undefined, q: { semester?: string; jenis?: string } = {}) {\n return useSiakadQuery<MkKurikulum[]>(['kur', String(id), 'mk', q], (s, signal) => s.kurikulumObe.getKurikulumByIdMk(id!, q, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useCplKurikulum(id: number | string | undefined) {\n return useSiakadQuery<Cpl[]>(['kur', String(id), 'cpl'], (s, signal) => s.kurikulumObe.getKurikulumByIdCpl(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useProfilLulusan(id: number | string | undefined) {\n return useSiakadQuery<ProfilLulusan[]>(['kur', String(id), 'profil'], (s, signal) => s.kurikulumObe.getKurikulumByIdProfilLulusan(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useBahanKajian(id: number | string | undefined) {\n return useSiakadQuery<BahanKajian[]>(['kur', String(id), 'bk'], (s, signal) => s.kurikulumObe.getKurikulumByIdBahanKajian(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useMatriksKurikulum(id: number | string | undefined) {\n return useSiakadQuery<MatriksKurikulumData>(['kur', String(id), 'matriks'], (s, signal) => s.kurikulumObe.getKurikulumByIdMatriks(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useValidasiKurikulum(id: number | string | undefined) {\n return useSiakadQuery<ValidasiKurikulumData>(['kur', String(id), 'validasi'], (s, signal) => s.kurikulumObe.getKurikulumByIdValidasi(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useCapaianCpl(id: number | string | undefined, q: { angkatan?: number; sampai?: string } = {}) {\n return useSiakadQuery<CapaianCplData>(['kur', String(id), 'capaian', q], (s, signal) => s.kurikulumObe.getKurikulumByIdCapaian(id!, q, { signal }) as never, {\n staleTime: 300_000,\n enabled: id != null,\n });\n}\nexport function useCapaianCplMahasiswa(nim: string | undefined, kurikulumId?: number) {\n return useSiakadQuery<CapaianMahasiswaData>(['kur-capaian-mhs', nim, kurikulumId], (s, signal) => s.kurikulumObe.getCapaianMahasiswaByNim(nim!, { kurikulum_id: kurikulumId }, { signal }) as never, {\n staleTime: 300_000,\n enabled: !!nim,\n });\n}\nexport function useMataKuliahObe(mkId: number | string | undefined) {\n return useSiakadQuery<MkKurikulum>(['kur-mk', String(mkId)], (s, signal) => s.kurikulumObe.getMkByMk(mkId!, {}, { signal }) as never, { ...opt, enabled: mkId != null });\n}\nexport function useRps(rpsId: number | string | undefined) {\n return useSiakadQuery<Rps>(['kur-rps', String(rpsId)], (s, signal) => s.kurikulumObe.getRpsByRps(rpsId!, {}, { signal }) as never, { ...opt, enabled: rpsId != null });\n}\nexport function useStatusMigrasiKurikulum() {\n return useSiakadQuery<StatusMigrasiProdi[]>(['kur-migrasi-status'], (s, signal) => s.kurikulumObe.getMigrasiStatus({}, { signal }) as never, opt);\n}\nexport function useEkuivalensi(id: number | string | undefined) {\n return useSiakadQuery<Ekuivalensi[]>(['kur', String(id), 'ekuivalensi'], (s, signal) => s.kurikulumObe.getKurikulumByIdEkuivalensi(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function usePeninjauan(id: number | string | undefined) {\n return useSiakadQuery<Peninjauan[]>(['kur', String(id), 'peninjauan'], (s, signal) => s.kurikulumObe.getKurikulumByIdPeninjauan(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\n\n// ================================================================ Daftar kurikulum\n/** Kartu satu kurikulum: kode, nama, prodi, status, versi, MK, SKS, CPL. */\nexport function KartuKurikulum({ data, href, onClick, className }: { data: Kurikulum; href?: string; onClick?: () => void; className?: string }) {\n const Tag = href ? 'a' : onClick ? 'button' : 'div';\n return (\n <Tag className={cn('u-kur-card', className)} {...(href ? { href } : onClick ? { type: 'button' as const, onClick } : {})}>\n <div className=\"u-kur-card-top\">\n <span className=\"u-kur-code\">{data.kode}</span>\n <StatusKurikulumBadge status={data.status} />\n </div>\n <p className=\"u-kur-card-title\">{data.nama}</p>\n <p className=\"u-kur-card-sub\">\n {[data.nama_prodi ?? data.kode_prodi, data.tahun_berlaku ? `berlaku ${data.tahun_berlaku}` : null, data.versi && data.versi > 1 ? `versi ${data.versi}` : null].filter(Boolean).join(' · ')}\n </p>\n <dl className=\"u-kur-card-stats\">\n <div>\n <dt>MK</dt>\n <dd>{formatNumber(n(data.jumlah_mk))}</dd>\n </div>\n <div>\n <dt>SKS</dt>\n <dd>\n {formatNumber(n(data.total_sks_mk))}\n {data.sks_lulus ? <small>/{formatNumber(n(data.sks_lulus))}</small> : null}\n </dd>\n </div>\n <div>\n <dt>CPL</dt>\n <dd>{formatNumber(n(data.jumlah_cpl))}</dd>\n </div>\n </dl>\n </Tag>\n );\n}\n\n/** Daftar kurikulum OBE per prodi (kartu). */\nexport function DaftarKurikulum({\n prodi,\n status,\n href,\n onPilih,\n className,\n}: {\n prodi?: string;\n status?: StatusKurikulum;\n /** Tautan per kurikulum. */ href?: (k: Kurikulum) => string;\n onPilih?: (k: Kurikulum) => void;\n className?: string;\n}) {\n const q = useDaftarKurikulum({ prodi, status });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q))\n return (\n <div className={cn('u-kur-grid', className)}>\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} style={{ height: 156 }} />\n ))}\n </div>\n );\n if (!q.data?.length) return <Empty icon={<BookOpen />} title=\"Belum ada kurikulum OBE\" description=\"Buat kurikulum baru atau impor dari kurikulum lama lewat menu migrasi.\" bordered />;\n return (\n <div className={cn('u-kur-grid', className)}>\n {q.data.map((k) => (\n <KartuKurikulum key={k.id} data={k} href={href?.(k)} onClick={onPilih ? () => onPilih(k) : undefined} />\n ))}\n </div>\n );\n}\n\n// ================================================================ Ringkasan & alur status\n/** Kepala kurikulum: identitas, status, SKS terhadap syarat lulus, kelengkapan OBE, dan tombol alur status. */\nexport function RingkasanKurikulum({\n kurikulumId,\n bolehUbahStatus,\n onStatusBerubah,\n className,\n}: {\n kurikulumId: number | string;\n /** Tampilkan tombol transisi status (butuh scope kurikulum:write). */ bolehUbahStatus?: boolean;\n onStatusBerubah?: (k: Kurikulum) => void;\n className?: string;\n}) {\n const q = useKurikulum(kurikulumId);\n const siakad = useOptionalSiakad();\n const [sibuk, setSibuk] = React.useState<string | null>(null);\n const [galat, setGalat] = React.useState<string | null>(null);\n if (q.error) return <Galat q={q} />;\n const k = q.data;\n const r = k?.ringkasan ?? {};\n const muat = muatDari(q);\n const sksMk = n(r.sks_wajib_mk) + n(r.sks_pilihan_mk);\n const syarat = n(k?.sks_lulus) || n(k?.jenjang?.sks_min);\n const rpsPersen = n(r.mata_kuliah) ? (n(r.mk_dengan_rps_disahkan) / n(r.mata_kuliah)) * 100 : 0;\n const ubah = async (status: StatusKurikulum) => {\n if (!siakad || !k) return;\n setSibuk(status);\n setGalat(null);\n try {\n const res = await siakad.kurikulumObe.postKurikulumByIdStatus(k.id, { status } as never);\n invalidateSiakad('kur');\n onStatusBerubah?.(res.data as unknown as Kurikulum);\n } catch (e) {\n setGalat(pesanGalat(e));\n } finally {\n setSibuk(null);\n }\n };\n return (\n <section className={cn('u-kur-head', className)}>\n <div className=\"u-kur-head-main\">\n {muat ? (\n <Skeleton style={{ height: 64, width: '60%' }} />\n ) : (\n <>\n <div className=\"u-kur-head-meta\">\n <span className=\"u-kur-code\">{k?.kode}</span>\n <StatusKurikulumBadge status={k!.status} />\n {k?.sumber === 'migrasi' && <Badge variant=\"outline\">Dari kurikulum lama</Badge>}\n </div>\n <h2 className=\"u-kur-head-title\">{k?.nama}</h2>\n <p className=\"u-kur-head-sub\">{[k?.nama_prodi, k?.jenjang?.nama, k?.tahun_berlaku ? `Berlaku ${k.tahun_berlaku}` : null, k?.no_sk ? `SK ${k.no_sk}` : null].filter(Boolean).join(' · ')}</p>\n {!!k?.angkatan?.length && <p className=\"u-kur-head-sub\">Dipakai angkatan {k.angkatan.join(', ')}</p>}\n </>\n )}\n {bolehUbahStatus && !!k?.transisi_status?.length && (\n <div className=\"u-kur-head-actions\">\n {k.transisi_status.map((t) => (\n <Button key={t} size=\"sm\" variant={t === 'draf' || t === 'arsip' ? 'outline' : 'primary'} loading={sibuk === t} disabled={!!sibuk} onClick={() => void ubah(t)}>\n {AKSI_STATUS[t] ?? t}\n </Button>\n ))}\n </div>\n )}\n {galat && (\n <p className=\"u-kur-error\" role=\"alert\">\n <CircleAlert aria-hidden /> {galat}\n </p>\n )}\n </div>\n <StatGrid min={150}>\n <StatCard\n label=\"SKS mata kuliah\"\n icon={<Layers />}\n loading={muat}\n value={formatNumber(sksMk)}\n hint={syarat ? `syarat lulus ${formatNumber(syarat)} SKS` : `${formatNumber(n(r.sks_wajib_mk))} wajib · ${formatNumber(n(r.sks_pilihan_mk))} pilihan`}\n tone={syarat && sksMk < syarat ? 'warning' : 'primary'}\n footer={!muat && syarat ? <Progress value={Math.min(100, (sksMk / syarat) * 100)} size=\"sm\" tone={sksMk < syarat ? 'warning' : 'success'} /> : undefined}\n />\n <StatCard label=\"Mata kuliah\" icon={<BookOpen />} loading={muat} value={formatNumber(n(r.mata_kuliah))} hint={`${formatNumber(n(r.cpmk))} CPMK`} tone=\"neutral\" />\n <StatCard\n label=\"CPL\"\n icon={<Target />}\n loading={muat}\n value={formatNumber(n(r.cpl))}\n hint={`${formatNumber(n(r.profil_lulusan))} profil lulusan · ${formatNumber(n(r.bahan_kajian))} bahan kajian`}\n tone=\"info\"\n />\n <StatCard\n label=\"RPS disahkan\"\n icon={<FileText />}\n loading={muat}\n value={formatPersen(rpsPersen, 0)}\n hint={`${formatNumber(n(r.mk_dengan_rps_disahkan))} dari ${formatNumber(n(r.mata_kuliah))} MK`}\n tone={rpsPersen >= 100 ? 'success' : 'warning'}\n footer={!muat ? <Progress value={rpsPersen} size=\"sm\" /> : undefined}\n />\n </StatGrid>\n </section>\n );\n}\n\n// ================================================================ Validasi\nconst IKON_TINGKAT = { galat: <CircleAlert />, peringatan: <TriangleAlert />, info: <Info /> };\n/** Validasi kurikulum terhadap SN Dikti dan kelengkapan OBE: persen kelengkapan, galat, peringatan, info beserta pasal. */\nexport function ValidasiKurikulum({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = useValidasiKurikulum(kurikulumId);\n const [tingkat, setTingkat] = React.useState<'semua' | 'galat' | 'peringatan' | 'info'>('semua');\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const d = q.data!;\n const r = d.ringkasan;\n const persen = n(r.kelengkapan_persen);\n const temuan = d.temuan.filter((t) => tingkat === 'semua' || t.tingkat === tingkat);\n return (\n <section className={cn('u-kur-validasi', className)}>\n <div className=\"u-kur-validasi-top\">\n <ProgressRing value={persen} size={84} thickness={8} tone={r.galat > 0 ? 'danger' : persen >= 100 ? 'success' : 'warning'} label={<b>{formatPersen(persen, 0)}</b>} />\n <div>\n <p className=\"u-kur-validasi-title\">{r.siap_disahkan ? 'Siap disahkan' : r.galat > 0 ? `${r.galat} galat perlu diperbaiki` : 'Belum lengkap'}</p>\n <p className=\"u-kur-validasi-sub\">{r.regulasi ?? 'Permendiktisaintek 39/2025'}</p>\n <div className=\"u-kur-filter\" role=\"group\" aria-label=\"Saring temuan\">\n {(['semua', 'galat', 'peringatan', 'info'] as const).map((t) => (\n <button key={t} type=\"button\" data-active={dataFlag(tingkat === t)} data-tingkat={t} onClick={() => setTingkat(t)}>\n {t === 'semua' ? 'Semua' : t.charAt(0).toUpperCase() + t.slice(1)}\n <span>{t === 'semua' ? d.temuan.length : n(r[t])}</span>\n </button>\n ))}\n </div>\n </div>\n </div>\n {temuan.length ? (\n <ul className=\"u-kur-temuan\">\n {temuan.map((t, i) => (\n <li key={i} data-tingkat={t.tingkat}>\n <span className=\"u-kur-temuan-icon\" aria-hidden>\n {IKON_TINGKAT[t.tingkat]}\n </span>\n <span className=\"u-kur-temuan-text\">\n {t.pesan}\n {t.pasal && <small>{t.pasal}</small>}\n </span>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"u-chart-empty\">\n <Check aria-hidden /> Tidak ada temuan.\n </p>\n )}\n </section>\n );\n}\n\n// ================================================================ Profil lulusan & CPL\n/** Profil lulusan sebagai kartu bernomor. */\nexport function DaftarProfilLulusan({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = useProfilLulusan(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 120 }} />;\n if (!q.data?.length) return <Empty icon={<GraduationCap />} title=\"Profil lulusan belum diisi\" bordered />;\n return (\n <ul className={cn('u-kur-profil', className)}>\n {q.data.map((p) => (\n <li key={p.id}>\n <span className=\"u-kur-code\">{p.kode}</span>\n <b>{p.nama}</b>\n {p.deskripsi && <p>{p.deskripsi}</p>}\n </li>\n ))}\n </ul>\n );\n}\n\n/** CPL dikelompokkan per ranah (sikap, pengetahuan, keterampilan umum, keterampilan khusus) dengan jumlah MK pendukung. */\nexport function DaftarCpl({ kurikulumId, onPilih, className }: { kurikulumId: number | string; onPilih?: (c: Cpl) => void; className?: string }) {\n const q = useCplKurikulum(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n if (!q.data?.length) return <Empty icon={<Target />} title=\"CPL belum diisi\" bordered />;\n return (\n <div className={cn('u-kur-cpl', className)}>\n {(Object.keys(RANAH_CPL) as RanahCpl[]).map((ranah) => {\n const isi = q.data!.filter((c) => c.ranah === ranah);\n if (!isi.length) return null;\n return (\n <section key={ranah} data-ranah={ranah}>\n <h4>\n {RANAH_CPL[ranah]} <span>{isi.length}</span>\n </h4>\n <ul>\n {isi.map((c) => {\n const mk = c.mata_kuliah?.length ?? 0;\n const Tag = onPilih ? 'button' : 'div';\n return (\n <li key={c.id}>\n <Tag className=\"u-kur-cpl-row\" {...(onPilih ? { type: 'button' as const, onClick: () => onPilih(c) } : {})}>\n <span className=\"u-kur-code\">{c.kode}</span>\n <span className=\"u-kur-cpl-desc\">{c.deskripsi}</span>\n <span className=\"u-kur-cpl-meta\" data-kosong={dataFlag(mk === 0)}>\n {mk === 0 ? 'Belum ada MK' : `${mk} MK`}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </section>\n );\n })}\n </div>\n );\n}\n\n// ================================================================ Matriks pemetaan\nconst MATRIKS: Record<NamaMatriks, { baris: 'profil' | 'cpl' | 'bk' | 'mk'; kolom: 'profil' | 'cpl' | 'bk' | 'mk'; kunciBaris: string; kunciKolom: string; judul: string }> = {\n 'profil-cpl': { baris: 'cpl', kolom: 'profil', kunciBaris: 'cpl_id', kunciKolom: 'profil_id', judul: 'CPL × profil lulusan' },\n 'cpl-bk': { baris: 'cpl', kolom: 'bk', kunciBaris: 'cpl_id', kunciKolom: 'bk_id', judul: 'CPL × bahan kajian' },\n 'cpl-mk': { baris: 'mk', kolom: 'cpl', kunciBaris: 'mk_id', kunciKolom: 'cpl_id', judul: 'Mata kuliah × CPL' },\n 'bk-mk': { baris: 'mk', kolom: 'bk', kunciBaris: 'mk_id', kunciKolom: 'bk_id', judul: 'Mata kuliah × bahan kajian' },\n};\n\n/**\n * Matriks pemetaan OBE sebagai tabel centang. Baris/kolom tanpa pasangan ditandai (mis. CPL yang belum didukung MK).\n * Dengan `editable`, klik sel menyimpan langsung lewat PUT /matriks/{nama} (tambah/hapus satu pasangan).\n */\nexport function MatriksKurikulum({ kurikulumId, jenis = 'cpl-mk', editable, className }: { kurikulumId: number | string; jenis?: NamaMatriks; editable?: boolean; className?: string }) {\n const m = useMatriksKurikulum(kurikulumId);\n const cpl = useCplKurikulum(kurikulumId);\n const profil = useProfilLulusan(kurikulumId);\n const bk = useBahanKajian(kurikulumId);\n const mk = useMkKurikulum(kurikulumId);\n const siakad = useOptionalSiakad();\n const [lokal, setLokal] = React.useState<Record<string, boolean>>({});\n const [galat, setGalat] = React.useState<string | null>(null);\n const def = MATRIKS[jenis];\n const sumber = { cpl, profil, bk, mk } as const;\n const semua = [m, sumber[def.baris], sumber[def.kolom]] as Array<QueryState<unknown>>;\n const err = semua.find((x) => x.error);\n React.useEffect(() => setLokal({}), [m.data]);\n if (err) return <Galat q={err} />;\n if (semua.some(muatDari)) return <Skeleton className={className} style={{ height: 260 }} />;\n const label = (x: { kode?: string; kode_mk?: string; nama?: string; deskripsi?: string }) => ({ kode: x.kode_mk ?? x.kode ?? '', nama: x.nama ?? x.deskripsi ?? '' });\n const baris = ((sumber[def.baris].data as Array<{ id: number }>) ?? []).map((x) => ({ id: x.id, ...label(x as never) }));\n const kolom = ((sumber[def.kolom].data as Array<{ id: number }>) ?? []).map((x) => ({ id: x.id, ...label(x as never) }));\n const ada = new Set((m.data?.[jenis] ?? []).map((p) => `${p[def.kunciBaris]}:${p[def.kunciKolom]}`));\n const cek = (b: number, k: number) => lokal[`${b}:${k}`] ?? ada.has(`${b}:${k}`);\n const jumlahBaris = (b: number) => kolom.filter((k) => cek(b, k.id)).length;\n const jumlahKolom = (k: number) => baris.filter((b) => cek(b.id, k)).length;\n const ganti = async (b: number, k: number) => {\n if (!siakad || !editable) return;\n const kunci = `${b}:${k}`;\n const baru = !cek(b, k);\n setLokal((l) => ({ ...l, [kunci]: baru }));\n setGalat(null);\n // Pasangan selalu ditulis dengan nama kolom API (kiri = kunci pertama nama matriks).\n const pasangan = { [def.kunciBaris]: b, [def.kunciKolom]: k };\n try {\n await siakad.request({ method: 'PUT', path: `${P}/kurikulum/${kurikulumId}/matriks/${jenis}`, body: baru ? { tambah: [pasangan] } : { hapus: [pasangan] } });\n invalidateSiakad('kur');\n } catch (e) {\n setLokal((l) => ({ ...l, [kunci]: !baru }));\n setGalat(pesanGalat(e));\n }\n };\n if (!baris.length || !kolom.length) return <Empty icon={<Network />} title=\"Matriks belum bisa diisi\" description=\"Isi dulu kedua sisi matriks (mis. CPL dan mata kuliah).\" bordered />;\n return (\n <div className={cn('u-matriks', className)}>\n {galat && (\n <Alert variant=\"danger\" title=\"Pemetaan gagal disimpan\">\n {galat}\n </Alert>\n )}\n <div className=\"u-matriks-scroll\" tabIndex={0} role=\"region\" aria-label={def.judul}>\n <table>\n <thead>\n <tr>\n <th scope=\"col\" className=\"u-matriks-corner\">\n {def.judul}\n </th>\n {kolom.map((k) => (\n <th key={k.id} scope=\"col\" title={k.nama} data-kosong={dataFlag(jumlahKolom(k.id) === 0)}>\n <span>{k.kode}</span>\n </th>\n ))}\n <th scope=\"col\" className=\"u-matriks-sum\">\n Σ\n </th>\n </tr>\n </thead>\n <tbody>\n {baris.map((b) => (\n <tr key={b.id} data-kosong={dataFlag(jumlahBaris(b.id) === 0)}>\n <th scope=\"row\" title={b.nama}>\n <span className=\"u-kur-code\">{b.kode}</span>\n <span className=\"u-matriks-nama\">{b.nama}</span>\n </th>\n {kolom.map((k) => {\n const on = cek(b.id, k.id);\n return (\n <td key={k.id}>\n {editable ? (\n <button type=\"button\" className=\"u-matriks-cell\" aria-pressed={on} aria-label={`${b.kode} – ${k.kode}`} onClick={() => void ganti(b.id, k.id)}>\n {on && <Check aria-hidden />}\n </button>\n ) : (\n <span className=\"u-matriks-cell\" data-on={dataFlag(on)} aria-label={on ? `${b.kode} – ${k.kode}` : undefined}>\n {on && <Check aria-hidden />}\n </span>\n )}\n </td>\n );\n })}\n <td className=\"u-matriks-sum\">{jumlahBaris(b.id)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <p className=\"u-dasbor-note\">Baris dan kolom bergaris kuning belum punya pasangan. {editable ? 'Klik sel untuk memetakan atau melepas.' : ''}</p>\n </div>\n );\n}\n\n// ================================================================ Struktur MK per semester\n/** Sebaran mata kuliah per semester dengan total SKS terhadap batas per semester, jenis MK, CPL, dan status RPS. */\nexport function StrukturKurikulum({ kurikulumId, onPilihMk, className }: { kurikulumId: number | string; onPilihMk?: (mk: MkKurikulum) => void; className?: string }) {\n const q = useMkKurikulum(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q))\n return (\n <div className={cn('u-struktur', className)}>\n {[0, 1, 2, 3].map((i) => (\n <Skeleton key={i} style={{ height: 280 }} />\n ))}\n </div>\n );\n const mk = q.data ?? [];\n if (!mk.length) return <Empty icon={<BookOpen />} title=\"Belum ada mata kuliah\" bordered />;\n const semester = [...new Set(mk.map((m) => m.semester ?? 0))].sort((a, b) => (a || 99) - (b || 99));\n return (\n <div className={cn('u-struktur-wrap', className)}>\n <div className=\"u-struktur\">\n {semester.map((s) => {\n const isi = mk.filter((m) => (m.semester ?? 0) === s);\n const sks = isi.reduce((a, m) => a + (m.jenis === 'B' || m.jenis === 'D' ? 0 : n(m.sks)), 0);\n const pilihan = isi.reduce((a, m) => a + (m.jenis === 'B' || m.jenis === 'D' ? n(m.sks) : 0), 0);\n const maks = s ? maksSksSemester(s) : 0;\n return (\n <section key={s} className=\"u-struktur-col\" data-lebih={dataFlag(!!maks && sks > maks)}>\n <header>\n <b>{s ? `Semester ${s}` : 'Pilihan bebas'}</b>\n <span>\n {formatNumber(sks)}\n {maks ? `/${maks}` : ''} SKS{pilihan ? ` + ${formatNumber(pilihan)} pilihan` : ''}\n </span>\n {!!maks && <Progress value={Math.min(100, (sks / maks) * 100)} size=\"sm\" tone={sks > maks ? 'danger' : 'primary'} />}\n </header>\n <ul>\n {isi.map((m) => {\n const cpl = daftar(m.cpl);\n const Tag = onPilihMk ? 'button' : 'div';\n return (\n <li key={m.id}>\n <Tag className=\"u-mk-card\" data-jenis={m.jenis} {...(onPilihMk ? { type: 'button' as const, onClick: () => onPilihMk(m) } : {})}>\n <span className=\"u-mk-card-top\">\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n <span className=\"u-mk-sks\">{formatNumber(n(m.sks))} SKS</span>\n </span>\n <span className=\"u-mk-card-title\">{m.nama}</span>\n <span className=\"u-mk-card-foot\">\n <span className=\"u-mk-jenis\">{JENIS_MK[m.jenis] ?? m.jenis}</span>\n {cpl.length > 0 ? <span title={cpl.join(', ')}>{cpl.length} CPL</span> : <span data-warn=\"\">tanpa CPL</span>}\n {m.status_rps === 'disahkan' ? (\n <span data-ok=\"\">RPS</span>\n ) : (\n <span data-warn=\"\" title={m.status_rps ? `RPS ${m.status_rps}` : 'RPS belum dibuat'}>\n RPS {m.status_rps ?? 'belum'}\n </span>\n )}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </section>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ================================================================ CPMK\n/** Satu mata kuliah: CPMK, sub-CPMK, dan CPL yang didukung beserta bobot. */\nexport function CpmkMataKuliah({ mkId, className }: { mkId: number | string; className?: string }) {\n const q = useMataKuliahObe(mkId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const m = q.data!;\n return (\n <section className={cn('u-cpmk', className)}>\n <header className=\"u-cpmk-head\">\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n <h3>{m.nama}</h3>\n <p>{[`${formatNumber(n(m.sks))} SKS`, m.semester ? `Semester ${m.semester}` : 'Pilihan bebas', JENIS_MK[m.jenis] ?? m.jenis, m.modalitas].filter(Boolean).join(' · ')}</p>\n {m.deskripsi && <p className=\"u-cpmk-desc\">{m.deskripsi}</p>}\n </header>\n {!m.cpmk?.length ? (\n <Empty icon={<ListChecks />} title=\"CPMK belum diisi\" />\n ) : (\n <ol className=\"u-cpmk-list\">\n {m.cpmk.map((c) => (\n <li key={c.id}>\n <div className=\"u-cpmk-row\">\n <span className=\"u-kur-code\">{c.kode}</span>\n <p>{c.deskripsi}</p>\n <span className=\"u-cpmk-cpl\">\n {(c.cpl ?? []).map((x) => (\n <Badge key={x.cpl_id} variant=\"secondary\" title={x.bobot != null ? `bobot ${x.bobot}` : undefined}>\n {x.kode}\n </Badge>\n ))}\n </span>\n </div>\n {!!c.sub_cpmk?.length && (\n <ul className=\"u-cpmk-sub\">\n {c.sub_cpmk.map((s) => (\n <li key={s.id}>\n <span className=\"u-kur-code\">{s.kode}</span>\n <span>\n {s.deskripsi}\n {s.indikator && <small>Indikator: {s.indikator}</small>}\n </span>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ol>\n )}\n </section>\n );\n}\n\n// ================================================================ RPS\n/** RPS lengkap: identitas, CPL & CPMK, rencana pertemuan per minggu, dan bobot evaluasi. */\nexport function RpsMataKuliah({ rpsId, className }: { rpsId: number | string; className?: string }) {\n const q = useRps(rpsId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 360 }} />;\n const r = q.data!;\n const mk = r.mata_kuliah ?? {};\n const subKode = new Map((r.cpmk ?? []).flatMap((c) => (c.sub_cpmk ?? []).map((s) => [s.id, s.kode] as const)));\n const totalEval = r.evaluasi.reduce((a, e) => a + n(e.bobot), 0);\n return (\n <article className={cn('u-rps', className)}>\n <header className=\"u-rps-head\">\n <div>\n <span className=\"u-kur-code\">{mk.kode_mk}</span>\n <h3>{mk.nama}</h3>\n <p>\n {[\n mk.sks != null ? `${formatNumber(n(mk.sks))} SKS` : null,\n mk.semester ? `Semester ${mk.semester}` : null,\n `Versi ${r.versi}`,\n r.dosen_pengampu?.length ? `Pengampu: ${r.dosen_pengampu.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' · ')}\n </p>\n </div>\n <Badge variant={r.status === 'disahkan' ? 'success' : r.status === 'draf' ? 'warning' : 'outline'} dot>\n {r.status === 'disahkan' ? `Disahkan${r.disahkan_at ? ' ' + formatDate(r.disahkan_at) : ''}` : r.status === 'draf' ? 'Draf' : 'Arsip'}\n </Badge>\n </header>\n {r.deskripsi && <p className=\"u-rps-desc\">{r.deskripsi}</p>}\n <div className=\"u-rps-grid\">\n <Panel title=\"CPMK\">\n <ol className=\"u-rps-cpmk\">\n {(r.cpmk ?? []).map((c) => (\n <li key={c.id}>\n <span className=\"u-kur-code\">{c.kode}</span>\n <span>{c.deskripsi}</span>\n </li>\n ))}\n </ol>\n </Panel>\n <Panel title=\"Bobot evaluasi\" description={totalEval !== 100 ? `Total ${formatNumber(totalEval)}%, seharusnya 100%` : 'Total 100%'}>\n <SegmentBar format={(v) => `${formatNumber(v)}%`} data={r.evaluasi.map((e) => ({ label: e.nama || JENIS_EVALUASI[e.jenis_evaluasi] || '-', value: n(e.bobot) }))} />\n </Panel>\n </div>\n <TableContainer>\n <Table density=\"compact\">\n <thead>\n <tr>\n <th style={{ width: 64 }}>Minggu</th>\n <th style={{ width: 96 }}>Sub-CPMK</th>\n <th>Materi & indikator</th>\n <th>Metode</th>\n <th style={{ width: 72, textAlign: 'right' }}>Bobot</th>\n </tr>\n </thead>\n <tbody>\n {r.pertemuan.map((p) => (\n <tr key={p.pertemuan_ke} data-ujian={dataFlag(p.ujian)}>\n <td>{p.sampai_ke && p.sampai_ke !== p.pertemuan_ke ? `${p.pertemuan_ke}–${p.sampai_ke}` : p.pertemuan_ke}</td>\n <td>{p.sub_cpmk_id ? <span className=\"u-kur-code\">{subKode.get(p.sub_cpmk_id) ?? p.sub_cpmk_id}</span> : '–'}</td>\n <td>\n {p.ujian ? <b>{p.materi ?? 'Ujian'}</b> : p.materi}\n {p.indikator && <small className=\"u-rps-ind\">{p.indikator}</small>}\n </td>\n <td>\n {p.metode}\n {p.modalitas && <small className=\"u-rps-ind\">{p.modalitas}</small>}\n </td>\n <td style={{ textAlign: 'right' }}>{p.bobot != null && n(p.bobot) > 0 ? `${formatNumber(n(p.bobot))}%` : ''}</td>\n </tr>\n ))}\n </tbody>\n </Table>\n </TableContainer>\n {!!r.pustaka_utama?.length && (\n <div className=\"u-rps-pustaka\">\n <h4>Pustaka utama</h4>\n <ol>\n {r.pustaka_utama.map((p, i) => (\n <li key={i}>{p}</li>\n ))}\n </ol>\n </div>\n )}\n </article>\n );\n}\n\n// ================================================================ Capaian CPL\nfunction BarisCpl({\n kode,\n deskripsi,\n nilai,\n target,\n kanan,\n status,\n}: {\n kode: string;\n deskripsi: string;\n nilai: number | null;\n target: number;\n kanan: React.ReactNode;\n status: 'tercapai' | 'belum' | 'kosong';\n}) {\n return (\n <li className=\"u-cpl-bar\" data-status={status}>\n <span className=\"u-kur-code\">{kode}</span>\n <span className=\"u-cpl-bar-main\">\n <span className=\"u-cpl-bar-desc\" title={deskripsi}>\n {deskripsi}\n </span>\n <span className=\"u-cpl-bar-track\" role=\"img\" aria-label={`${kode}: ${nilai == null ? 'belum ada nilai' : formatNumber(nilai, { maximumFractionDigits: 1 })} dari target ${target}`}>\n <span className=\"u-cpl-bar-fill\" style={{ width: `${Math.min(100, nilai ?? 0)}%` }} />\n <span className=\"u-cpl-bar-target\" style={{ left: `${Math.min(100, target)}%` }} />\n </span>\n </span>\n <span className=\"u-cpl-bar-val\">{kanan}</span>\n </li>\n );\n}\n\n/** Capaian CPL prodi per angkatan: rata-rata skor tiap CPL terhadap target dan persen mahasiswa yang mencapainya. */\nexport function CapaianCplKurikulum({ kurikulumId, angkatan, sampai, className }: { kurikulumId: number | string; angkatan?: number; sampai?: string; className?: string }) {\n const q = useCapaianCpl(kurikulumId, { angkatan, sampai });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 260 }} />;\n const d = q.data!;\n if (!d.cpl.length) return <Empty icon={<Target />} title=\"Belum ada capaian CPL\" description=\"Capaian muncul setelah nilai MK yang dipetakan ke CPL masuk.\" />;\n const tercapai = d.cpl.filter((c) => n(c.rata_rata) >= n(c.target)).length;\n return (\n <div className={cn('u-cpl-capaian', className)}>\n <p className=\"u-cpl-capaian-sum\">\n <b>{tercapai}</b> dari {d.cpl.length} CPL rata-ratanya mencapai target\n {d.angkatan ? ` · angkatan ${d.angkatan}` : ''}\n {d.cpl[0] ? ` · ${formatNumber(n(d.cpl[0].jumlah_mahasiswa))} mahasiswa` : ''}\n </p>\n <ul className=\"u-cpl-bars\">\n {d.cpl.map((c) => (\n <BarisCpl\n key={c.cpl_id}\n kode={c.kode}\n deskripsi={c.deskripsi}\n nilai={c.rata_rata == null ? null : n(c.rata_rata)}\n target={n(c.target)}\n status={c.rata_rata == null ? 'kosong' : n(c.rata_rata) >= n(c.target) ? 'tercapai' : 'belum'}\n kanan={\n <>\n <b>{c.rata_rata == null ? '–' : formatNumber(n(c.rata_rata), { maximumFractionDigits: 1 })}</b>\n <small>{formatPersen(n(c.persen_tercapai), 0)} mhs tercapai</small>\n </>\n }\n />\n ))}\n </ul>\n <p className=\"u-dasbor-note\">Garis tegak = target CPL. Skor 0–100 dihitung dari nilai MK yang dipetakan ke CPL, sesuai bobot pemetaan.</p>\n </div>\n );\n}\n\n/** Capaian CPL satu mahasiswa (untuk profil mahasiswa, dosen PA, atau SKPI). */\nexport function CapaianCplMahasiswa({ nim, kurikulumId, className }: { nim: string; kurikulumId?: number; className?: string }) {\n const q = useCapaianCplMahasiswa(nim, kurikulumId);\n const [buka, setBuka] = React.useState<number | null>(null);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 260 }} />;\n const d = q.data!;\n const dinilai = d.cpl.filter((c) => c.tercapai != null);\n const ok = d.cpl.filter((c) => c.tercapai).length;\n return (\n <div className={cn('u-cpl-capaian', className)}>\n <div className=\"u-cpl-mhs-head\">\n <ProgressRing value={d.cpl.length ? (ok / d.cpl.length) * 100 : 0} size={72} thickness={7} tone=\"success\" label={<b>{`${ok}/${d.cpl.length}`}</b>} />\n <div>\n <p className=\"u-kur-validasi-title\">{d.mahasiswa.nama}</p>\n <p className=\"u-kur-validasi-sub\">\n {d.mahasiswa.nim} · angkatan {d.mahasiswa.angkatan} · {d.kurikulum.nama}\n </p>\n <p className=\"u-kur-validasi-sub\">\n {ok} CPL tercapai, {dinilai.length - ok} belum, {d.cpl.length - dinilai.length} belum ada nilai\n </p>\n </div>\n </div>\n <ul className=\"u-cpl-bars\">\n {d.cpl.map((c) => (\n <React.Fragment key={c.cpl_id}>\n <BarisCpl\n kode={c.kode}\n deskripsi={c.deskripsi}\n nilai={c.nilai == null ? null : n(c.nilai)}\n target={n(c.target)}\n status={c.tercapai == null ? 'kosong' : c.tercapai ? 'tercapai' : 'belum'}\n kanan={\n <button type=\"button\" className=\"u-cpl-bar-more\" aria-expanded={buka === c.cpl_id} onClick={() => setBuka((b) => (b === c.cpl_id ? null : c.cpl_id))}>\n <b>{c.nilai == null ? '–' : formatNumber(n(c.nilai), { maximumFractionDigits: 1 })}</b>\n <small>\n {c.mk_sudah_dinilai}/{c.mk_total} MK\n </small>\n </button>\n }\n />\n {buka === c.cpl_id && (\n <li className=\"u-cpl-mk\">\n <ul>\n {c.mata_kuliah.map((m) => (\n <li key={m.mk_id}>\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n <span>{m.nama}</span>\n <b>{m.nilai == null ? 'belum dinilai' : formatNumber(n(m.nilai), { maximumFractionDigits: 1 })}</b>\n </li>\n ))}\n </ul>\n </li>\n )}\n </React.Fragment>\n ))}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Migrasi\nconst TAHAP = ['1_belum', '2_dilengkapi', '3_disahkan', '4_diterbitkan'] as const;\nconst LABEL_TAHAP = ['Belum mulai', 'Dilengkapi', 'Disahkan', 'Diterbitkan'];\n// Tahap berurutan: abu-abu → biru makin pekat → hijau saat sudah terbit.\nconst WARNA_TAHAP = ['color-mix(in oklab, var(--u-muted-foreground) 45%, var(--u-muted))', 'color-mix(in oklab, var(--u-primary) 45%, var(--u-card))', 'var(--u-primary)', 'var(--u-success)'];\n/** Kemajuan migrasi kurikulum lama ke OBE per prodi: belum → dilengkapi → disahkan → diterbitkan ke SIAKAD lama. */\nexport function StatusMigrasiKurikulum({ onPilihProdi, className }: { onPilihProdi?: (p: StatusMigrasiProdi) => void; className?: string }) {\n const q = useStatusMigrasiKurikulum();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n const data = q.data ?? [];\n const per = TAHAP.map((t) => data.filter((p) => p.tahap === t).length);\n return (\n <div className={cn('u-migrasi', className)}>\n <SegmentBar data={LABEL_TAHAP.map((l, i) => ({ label: l, value: per[i]!, color: WARNA_TAHAP[i] }))} format={(v) => `${v} prodi`} />\n <ul className=\"u-migrasi-list\">\n {data.map((p) => {\n const idx = TAHAP.indexOf(p.tahap);\n const Tag = onPilihProdi ? 'button' : 'div';\n return (\n <li key={p.kode_prodi}>\n <Tag className=\"u-migrasi-row\" {...(onPilihProdi ? { type: 'button' as const, onClick: () => onPilihProdi(p) } : {})}>\n <span className=\"u-migrasi-prodi\">\n <b>{p.nama_prodi}</b>\n <small>\n {[\n p.jenjang,\n p.lama?.jumlah_semester ? `${p.lama.jumlah_semester} semester data lama` : null,\n p.terbit_terakhir ? `terbit ${p.terbit_terakhir.tahun_id}` : p.impor_terakhir ? `impor ${p.impor_terakhir.tahun_id}` : null,\n ]\n .filter(Boolean)\n .join(' · ')}\n </small>\n </span>\n <span className=\"u-migrasi-steps\" aria-label={`Tahap: ${LABEL_TAHAP[idx]}`}>\n {LABEL_TAHAP.map((l, i) => (\n <span key={l} data-state={i <= idx ? 'done' : 'todo'} title={l} style={i <= idx ? { background: WARNA_TAHAP[idx] } : undefined} />\n ))}\n </span>\n <span className=\"u-migrasi-label\" data-tahap={p.tahap}>\n {LABEL_TAHAP[idx]}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Ekuivalensi & peninjauan\nconst JENIS_EKUIVALENSI: Record<Ekuivalensi['jenis'], { label: string; variant: BadgeVariant }> = {\n setara: { label: 'Setara', variant: 'success' },\n gabung: { label: 'Digabung', variant: 'info' },\n pecah: { label: 'Dipecah', variant: 'warning' },\n dihapus: { label: 'Dihapus', variant: 'danger' },\n};\n/** Tabel ekuivalensi MK kurikulum lama ke MK kurikulum baru (untuk konversi nilai mahasiswa lama). */\nexport function EkuivalensiKurikulum({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = useEkuivalensi(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 200 }} />;\n if (!q.data?.length) return <Empty icon={<ClipboardList />} title=\"Belum ada ekuivalensi\" description=\"Buat otomatis dari kecocokan kode dan nama MK, lalu periksa satu per satu.\" bordered />;\n return (\n <TableContainer className={className}>\n <Table density=\"compact\">\n <thead>\n <tr>\n <th>MK lama</th>\n <th style={{ width: 56, textAlign: 'right' }}>SKS</th>\n <th style={{ width: 112 }}>Hubungan</th>\n <th>MK baru</th>\n <th style={{ width: 56, textAlign: 'right' }}>SKS</th>\n </tr>\n </thead>\n <tbody>\n {q.data.map((e) => (\n <tr key={e.id}>\n <td>\n <span className=\"u-kur-code\">{e.kode_mk_lama}</span> {e.nama_mk_lama}\n </td>\n <td style={{ textAlign: 'right' }}>{e.sks_lama != null ? formatNumber(n(e.sks_lama)) : '–'}</td>\n <td>\n <Badge variant={JENIS_EKUIVALENSI[e.jenis]?.variant ?? 'neutral'}>{JENIS_EKUIVALENSI[e.jenis]?.label ?? e.jenis}</Badge>\n </td>\n <td>\n {e.kode_mk ? (\n <>\n <span className=\"u-kur-code\">{e.kode_mk}</span> {e.nama_mk}\n </>\n ) : (\n <span className=\"u-muted\">Tidak ada padanan</span>\n )}\n </td>\n <td style={{ textAlign: 'right' }}>{e.sks_mk != null ? formatNumber(n(e.sks_mk)) : '–'}</td>\n </tr>\n ))}\n </tbody>\n </Table>\n </TableContainer>\n );\n}\n\nconst JENIS_PENINJAUAN: Record<string, string> = {\n evaluasi_tahunan: 'Evaluasi tahunan',\n peninjauan: 'Peninjauan kurikulum',\n audit_mutu: 'Audit mutu',\n masukan_pemangku: 'Masukan pemangku kepentingan',\n lainnya: 'Lainnya',\n};\n/** Linimasa evaluasi dan peninjauan kurikulum (bahan akreditasi dan siklus PPEPP). */\nexport function PeninjauanKurikulum({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = usePeninjauan(kurikulumId);\n if (q.error) return <Galat q={q} />;\n return (\n <ActivityFeed\n className={className}\n loading={muatDari(q)}\n empty=\"Belum ada catatan peninjauan.\"\n items={(q.data ?? []).map((p) => ({\n id: p.id,\n title: p.judul,\n icon: p.status === 'selesai' ? <Check /> : p.status === 'berjalan' ? <RefreshCw /> : <ClipboardList />,\n meta: [JENIS_PENINJAUAN[p.jenis] ?? p.jenis, p.pelaksana, p.status === 'selesai' ? null : p.status].filter(Boolean).join(' · '),\n time: p.tanggal ? formatDate(p.tanggal) : undefined,\n }))}\n />\n );\n}\n\n// ================================================================ Tabel struktur per semester\n/** Detail satu MK kurikulum: ringkasan, prasyarat, CPL, lalu CPMK & sub-CPMK. Dipakai di baris terbuka dan popup. */\nexport function DetailMkKurikulum({ mk, judul, className }: { mk: MkKurikulum; judul?: boolean; className?: string }) {\n const cpl = daftar(mk.cpl);\n const prasyarat = daftar(mk.prasyarat);\n return (\n <div className={cn('u-tsk-detail', className)}>\n {judul && (\n <header className=\"u-tsk-detail-head\">\n <span className=\"u-kur-code\">{mk.kode_mk}</span>\n <h3>{mk.nama}</h3>\n <p>{[`${formatNumber(n(mk.sks))} SKS`, mk.semester ? `Semester ${mk.semester}` : 'Pilihan bebas'].join(' · ')}</p>\n {mk.deskripsi && <p className=\"u-tsk-detail-desc\">{mk.deskripsi}</p>}\n </header>\n )}\n {!judul && mk.deskripsi && <p className=\"u-tsk-detail-desc\">{mk.deskripsi}</p>}\n <dl className=\"u-tsk-detail-info\">\n <div>\n <dt>Jenis</dt>\n <dd>{JENIS_MK[mk.jenis] ?? mk.jenis}</dd>\n </div>\n <div>\n <dt>Modalitas</dt>\n <dd>{mk.modalitas ?? '–'}</dd>\n </div>\n <div>\n <dt>Prasyarat</dt>\n <dd>\n {prasyarat.length\n ? prasyarat.map((p) => (\n <span key={p} className=\"u-kur-code\">\n {p}\n </span>\n ))\n : 'Tidak ada'}\n </dd>\n </div>\n <div>\n <dt>CPL didukung</dt>\n <dd>\n {cpl.length ? (\n cpl.map((c) => (\n <Badge key={c} variant=\"secondary\">\n {c}\n </Badge>\n ))\n ) : (\n <span data-warn=\"\">Belum dipetakan</span>\n )}\n </dd>\n </div>\n </dl>\n <CpmkMataKuliah mkId={mk.id} />\n </div>\n );\n}\n\n/** DetailMkKurikulum dalam panel samping. */\nexport function SheetMkKurikulum({ mk, onOpenChange }: { mk: MkKurikulum | null | undefined; onOpenChange: (open: boolean) => void }) {\n return (\n <Sheet open={!!mk} onOpenChange={onOpenChange} title=\"Detail mata kuliah\" size=\"lg\" className=\"u-sheet-detail\">\n {mk && <DetailMkKurikulum mk={mk} judul />}\n </Sheet>\n );\n}\n\nexport interface TabelStrukturKurikulumProps {\n kurikulumId: number | string;\n /** Cara membuka detail MK: 'baris' (lipat di dalam tabel, bawaan), 'popup' (panel samping), atau 'keduanya'. */\n detail?: 'baris' | 'popup' | 'keduanya';\n /** Ganti perilaku klik MK sepenuhnya, mis. pindah ke halaman MK. */\n onPilihMk?: (mk: MkKurikulum) => void;\n /** Semester yang terbuka di awal (bawaan semua). */\n semesterTerbuka?: number[];\n /** ID MK yang detailnya terbuka di awal (mode baris). */\n mkTerbuka?: number[];\n /** Kotak cari kode/nama MK (bawaan true). */\n cari?: boolean;\n className?: string;\n}\n\n/**\n * Struktur kurikulum sebagai tabel dikelompokkan per semester: kepala semester bisa dilipat, total SKS terhadap batas,\n * dan detail tiap MK (CPMK, sub-CPMK, CPL, prasyarat) dibuka di baris atau di panel samping.\n */\nexport function TabelStrukturKurikulum({ kurikulumId, detail = 'baris', onPilihMk, semesterTerbuka, mkTerbuka, cari = true, className }: TabelStrukturKurikulumProps) {\n const q = useMkKurikulum(kurikulumId);\n const [tutup, setTutup] = React.useState<Set<number>>(new Set());\n const [buka, setBuka] = React.useState<Set<number>>(() => new Set(mkTerbuka));\n const [popup, setPopup] = React.useState<MkKurikulum | null>(null);\n const [kata, setKata] = React.useState('');\n const awal = React.useRef(false);\n const mk = q.data ?? [];\n const semester = [...new Set(mk.map((m) => m.semester ?? 0))].sort((a, b) => (a || 99) - (b || 99));\n React.useEffect(() => {\n if (awal.current || !semesterTerbuka || !semester.length) return;\n awal.current = true;\n setTutup(new Set(semester.filter((s) => !semesterTerbuka.includes(s))));\n }, [semester.join(','), semesterTerbuka]); // eslint-disable-line react-hooks/exhaustive-deps\n\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 420 }} />;\n if (!mk.length) return <Empty icon={<BookOpen />} title=\"Belum ada mata kuliah\" bordered />;\n\n const k = kata.trim().toLowerCase();\n const cocok = (m: MkKurikulum) => !k || m.kode_mk.toLowerCase().includes(k) || m.nama.toLowerCase().includes(k);\n const wajib = (m: MkKurikulum) => !(m.jenis === 'B' || m.jenis === 'D');\n const totalWajib = mk.filter(wajib).reduce((a, m) => a + n(m.sks), 0);\n const totalPilihan = mk.filter((m) => !wajib(m)).reduce((a, m) => a + n(m.sks), 0);\n const baris = detail === 'baris' || detail === 'keduanya';\n const pakaiPopup = detail === 'popup' || detail === 'keduanya';\n const klik = (m: MkKurikulum) => (onPilihMk ? onPilihMk(m) : baris ? setBuka((s) => toggle(s, m.id)) : setPopup(m));\n const semuaTutup = tutup.size === semester.length;\n\n return (\n <div className={cn('u-tsk', className)}>\n <div className=\"u-tsk-toolbar\">\n {cari && <input className=\"u-input\" data-size=\"sm\" type=\"search\" placeholder=\"Cari kode atau nama MK\" value={kata} onChange={(e) => setKata(e.target.value)} aria-label=\"Cari mata kuliah\" />}\n <span className=\"u-tsk-total\">\n {mk.length} MK · <b>{formatNumber(totalWajib)}</b> SKS wajib{totalPilihan ? ` · ${formatNumber(totalPilihan)} SKS pilihan` : ''}\n </span>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setTutup(semuaTutup ? new Set() : new Set(semester))}>\n <Layers /> {semuaTutup ? 'Buka semua' : 'Lipat semua'}\n </Button>\n </div>\n <div className=\"u-tabel-nilai-wrap\">\n <table className=\"u-tabel-nilai u-tsk-table\">\n <thead>\n <tr>\n <th aria-label=\"Buka\" />\n <th>Kode</th>\n <th>Mata kuliah</th>\n <th data-angka>SKS</th>\n <th>Jenis</th>\n <th>CPL</th>\n <th>RPS</th>\n {pakaiPopup && baris && <th aria-label=\"Aksi\" />}\n </tr>\n </thead>\n {semester.map((s) => {\n const isi = mk.filter((m) => (m.semester ?? 0) === s);\n const tampil = isi.filter(cocok);\n if (k && !tampil.length) return null;\n const sks = isi.filter(wajib).reduce((a, m) => a + n(m.sks), 0);\n const pilihan = isi.filter((m) => !wajib(m)).reduce((a, m) => a + n(m.sks), 0);\n const maks = s ? maksSksSemester(s) : 0;\n const terlipat = tutup.has(s) && !k;\n const kolom = pakaiPopup && baris ? 8 : 7;\n return (\n <tbody key={s} className=\"u-tsk-group\" data-terlipat={dataFlag(terlipat)}>\n <tr className=\"u-tsk-head\" data-lebih={dataFlag(!!maks && sks > maks)}>\n <td colSpan={kolom}>\n <button type=\"button\" aria-expanded={!terlipat} onClick={() => setTutup((t) => toggle(t, s))}>\n <ChevronRight className=\"u-tsk-chevron\" aria-hidden />\n <b>{s ? `Semester ${s}` : 'Pilihan bebas'}</b>\n <span className=\"u-tsk-head-meta\">\n {isi.length} MK · {formatNumber(sks)}\n {maks ? `/${maks}` : ''} SKS{pilihan ? ` + ${formatNumber(pilihan)} pilihan` : ''}\n </span>\n {!!maks && <Progress value={Math.min(100, (sks / maks) * 100)} size=\"sm\" tone={sks > maks ? 'danger' : 'primary'} className=\"u-tsk-progress\" />}\n </button>\n </td>\n </tr>\n {!terlipat &&\n tampil.map((m) => {\n const cpl = daftar(m.cpl);\n const terbuka = buka.has(m.id);\n return (\n <React.Fragment key={m.id}>\n <tr\n className=\"u-tsk-row\"\n data-terbuka={dataFlag(terbuka)}\n data-jenis={m.jenis}\n tabIndex={0}\n onClick={() => klik(m)}\n onKeyDown={(e) => (e.key === 'Enter' || e.key === ' ') && e.target === e.currentTarget && (e.preventDefault(), klik(m))}\n aria-expanded={baris && !onPilihMk ? terbuka : undefined}\n >\n <td data-tengah>{baris && !onPilihMk ? <ChevronRight className=\"u-tsk-chevron\" aria-hidden /> : null}</td>\n <td>\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n </td>\n <td>\n <span className=\"u-tsk-nama\">{m.nama}</span>\n </td>\n <td data-angka>{formatNumber(n(m.sks))}</td>\n <td>\n <span className=\"u-mk-jenis\" data-jenis={m.jenis}>\n {JENIS_MK[m.jenis] ?? m.jenis}\n </span>\n </td>\n <td>{cpl.length ? <span title={cpl.join(', ')}>{cpl.length} CPL</span> : <span className=\"u-tsk-warn\">belum</span>}</td>\n <td>\n {m.status_rps === 'disahkan' ? (\n <Badge variant=\"success\">Disahkan</Badge>\n ) : (\n <Badge variant=\"warning\">{m.status_rps ? m.status_rps[0]!.toUpperCase() + m.status_rps.slice(1) : 'Belum'}</Badge>\n )}\n </td>\n {pakaiPopup && baris && (\n <td data-tengah onClick={(e) => e.stopPropagation()}>\n <Button variant=\"ghost\" size=\"sm\" iconOnly aria-label={`Detail ${m.nama}`} onClick={() => setPopup(m)}>\n <Maximize2 />\n </Button>\n </td>\n )}\n </tr>\n {baris && terbuka && !onPilihMk && (\n <tr className=\"u-tsk-expand\">\n <td colSpan={kolom}>\n <DetailMkKurikulum mk={m} />\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n })}\n </tbody>\n );\n })}\n </table>\n </div>\n {pakaiPopup && <SheetMkKurikulum mk={popup} onOpenChange={(o) => !o && setPopup(null)} />}\n </div>\n );\n}\nfunction toggle<T>(s: Set<T>, v: T): Set<T> {\n const x = new Set(s);\n if (x.has(v)) x.delete(v);\n else x.add(v);\n return x;\n}\n","'use client';\nimport * as React from 'react';\nimport { BellDot, BookOpen, CalendarClock, ClipboardCheck, FileQuestion, ListTodo, RefreshCw, UserCheck, Video } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen, formatTime } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Empty, Progress, ProgressRing } from '../components/display';\nimport { StatCard, StatGrid } from '../components/charts';\nimport { pesanGalat, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/*\n * Widget LMS (/v1/lms) untuk e-learning: ringkasan beranda, kartu kelas dengan sampul abstrak dan progres,\n * tugas mendatang dengan hitung mundur tenggat, kuis yang sedang dibuka, agenda (tugas, kuis, kelas daring, presensi),\n * dan progres penyelesaian per mahasiswa untuk pengajar.\n */\n\n// ================================================================ Tipe\ntype Angka = number | string | null | undefined;\nconst n = (v: Angka) => (v == null || v === '' ? 0 : Number(v) || 0);\n\nexport type PeranKelas = 'pengajar' | 'asisten' | 'mahasiswa' | 'pengamat' | 'pengelola' | string;\nexport interface KelasLms {\n id: number;\n idj?: number | null;\n tahun_id?: string | null;\n kode_prodi?: string | null;\n kode_mk?: string | null;\n kelas?: string | null;\n judul: string;\n ringkasan?: string | null;\n format?: 'mingguan' | 'topik';\n status: 'draf' | 'aktif' | 'selesai' | 'arsip';\n mulai?: string | null;\n selesai?: string | null;\n sampul_url?: string | null;\n peran?: PeranKelas | null;\n pengajar?: string | null;\n jumlah_peserta?: Angka;\n}\nexport interface TugasMendatangItem {\n id: number;\n kelas_id: number;\n kelas: string;\n judul: string;\n tenggat: string;\n status_jawaban?: 'draf' | 'dikumpulkan' | 'dinilai' | 'dikembalikan' | null;\n}\nexport interface KuisTerbukaItem {\n id: number;\n kelas_id: number;\n kelas: string;\n judul: string;\n mulai?: string | null;\n selesai?: string | null;\n}\nexport interface LmsSayaData {\n pengguna?: { username?: string; nama?: string; level?: string };\n jumlah_kelas?: number;\n notifikasi_belum_dibaca?: number;\n tugas_mendatang?: TugasMendatangItem[];\n kuis_terbuka?: KuisTerbukaItem[];\n /** Hanya pengajar: jawaban tugas yang menunggu dinilai dan kuis yang perlu dikoreksi. */\n perlu_dinilai?: { tugas?: number; kuis?: number } | null;\n}\nexport interface ProgresMahasiswa {\n nim: string;\n nama?: string | null;\n materi_selesai: number;\n tugas_dikumpulkan: number;\n kuis_dikerjakan: number;\n selesai: number;\n total: number;\n persen: number | null;\n}\nexport interface ProgresKelasData {\n total_aktivitas: { materi_wajib: number; tugas: number; kuis: number };\n mahasiswa: ProgresMahasiswa[];\n}\nexport type JenisAgendaLms = 'tugas' | 'kuis' | 'konferensi' | 'presensi';\nexport interface AgendaLmsItem {\n jenis: JenisAgendaLms;\n id: number;\n kelas_id: number;\n kelas: string;\n judul: string;\n waktu: string;\n selesai?: string | null;\n tautan?: string;\n}\n\n// ================================================================ Hook data\nconst opt = { staleTime: 60_000 };\nexport function useLmsSaya() {\n return useSiakadQuery<LmsSayaData>(['lms-saya'], (s, signal) => s.lms.getSaya({}, { signal }) as never, opt);\n}\nexport function useKelasLms(q: { status?: KelasLms['status']; tahun_id?: string; q?: string } = {}) {\n return useSiakadQuery<KelasLms[]>(['lms-kelas', q], (s, signal) => s.lms.getKelas({ per_page: 50, ...q } as never, { signal }) as never, opt);\n}\nexport function useProgresKelas(kelasId: number | string | undefined) {\n return useSiakadQuery<ProgresKelasData>(['lms-progres', String(kelasId)], (s, signal) => s.lms.getKelasByIdProgres(kelasId!, {}, { signal }) as never, { ...opt, enabled: kelasId != null });\n}\nexport function useAnggotaKelas(kelasId: number | string | undefined, aktif = true) {\n return useSiakadQuery<Array<{ username: string; nama?: string | null; peran: PeranKelas }>>(\n ['lms-peserta', String(kelasId)],\n (s, signal) => s.lms.getKelasByIdPeserta(kelasId!, {}, { signal }) as never,\n {\n ...opt,\n enabled: kelasId != null && aktif,\n },\n );\n}\nexport function useKalenderLms(q: { dari?: string; sampai?: string; kelas_id?: number } = {}) {\n return useSiakadQuery<AgendaLmsItem[]>(['lms-kalender', q], (s, signal) => s.lms.getKalender(q as never, { signal }) as never, opt);\n}\n\n// ================================================================ Bantuan\nfunction Galat({ q }: { q: QueryState<unknown> }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(q.error, { kode: false })}<KodeLaporan error={q.error} /></span>\n <Button size=\"sm\" variant=\"ghost\" onClick={q.refetch}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\nconst muatDari = (q: QueryState<unknown>) => q.loading && !q.data;\nconst tglIso = (d: Date) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n\n/** Sisa waktu ke tenggat dalam bahasa sehari-hari, plus nada warna untuk lencana. */\nexport function sisaTenggat(tenggat: string | Date, now: Date = new Date()): { teks: string; tone: BadgeVariant; lewat: boolean } {\n const t = new Date(typeof tenggat === 'string' ? tenggat.replace(' ', 'T') : tenggat).getTime();\n const menit = Math.round((t - now.getTime()) / 60_000);\n if (menit < 0) return { teks: 'Lewat tenggat', tone: 'danger', lewat: true };\n if (menit < 60) return { teks: `${Math.max(1, menit)} menit lagi`, tone: 'danger', lewat: false };\n const jam = Math.floor(menit / 60);\n if (jam < 24) return { teks: `${jam} jam lagi`, tone: 'danger', lewat: false };\n const hari = Math.floor(jam / 24);\n if (hari === 1) return { teks: 'Besok', tone: 'warning', lewat: false };\n return { teks: `${hari} hari lagi`, tone: hari <= 3 ? 'warning' : 'neutral', lewat: false };\n}\n\n/** 20251 → \"Ganjil 2025/2026\". */\nconst labelTahun = (t: string) =>\n t.length === 5 ? `${({ '1': 'Ganjil', '2': 'Genap', '3': 'Pendek' } as Record<string, string>)[t[4]!] ?? 'Semester'} ${t.slice(0, 4)}/${Number(t.slice(0, 4)) + 1}` : t;\nconst STATUS_JAWABAN: Record<string, { label: string; variant: BadgeVariant }> = {\n draf: { label: 'Draf', variant: 'neutral' },\n dikumpulkan: { label: 'Dikumpulkan', variant: 'info' },\n dinilai: { label: 'Dinilai', variant: 'success' },\n dikembalikan: { label: 'Perlu revisi', variant: 'warning' },\n};\nconst LABEL_PERAN: Record<string, string> = { pengajar: 'Pengajar', asisten: 'Asisten', mahasiswa: 'Mahasiswa', pengamat: 'Pengamat', pengelola: 'Pengelola' };\n\n// ================================================================ Sampul abstrak\nfunction acak(seed: number) {\n // mulberry32: seed berurutan (ID kelas) tetap menghasilkan pola yang berbeda jauh.\n let a = (Math.imul(seed ^ 0x9e3779b9, 0x85ebca6b) ^ 0xc2b2ae35) >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n/** Sampul kelas berupa pola geometris yang ditentukan dari ID kelas: tiap kelas punya warna dan bentuk tetap, tanpa foto. */\nexport function SampulKelas({ seed, className }: { seed: number; className?: string }) {\n const r = acak(seed + 7);\n const hue = Math.floor(r() * 8) + 1;\n const hue2 = ((hue + 2) % 8) + 1;\n const pola = Math.floor(r() * 3);\n const bentuk = Array.from({ length: 5 }, () => ({ x: r() * 320, y: r() * 120, s: 30 + r() * 70 }));\n return (\n <svg className={cn('u-lms-sampul', className)} viewBox=\"0 0 320 120\" preserveAspectRatio=\"xMidYMid slice\" aria-hidden>\n <rect width=\"320\" height=\"120\" fill={`color-mix(in oklab, var(--u-chart-${hue}) 16%, var(--u-card))`} />\n {pola === 0 && bentuk.map((b, i) => <circle key={i} cx={b.x} cy={b.y} r={b.s / 2} fill={`var(--u-chart-${i % 2 ? hue2 : hue})`} opacity={0.18 + i * 0.06} />)}\n {pola === 1 &&\n bentuk.map((b, i) => (\n <rect\n key={i}\n x={b.x - b.s / 2}\n y={b.y - b.s / 2}\n width={b.s}\n height={b.s}\n rx={10}\n transform={`rotate(${i * 17} ${b.x} ${b.y})`}\n fill={`var(--u-chart-${i % 2 ? hue2 : hue})`}\n opacity={0.16 + i * 0.06}\n />\n ))}\n {pola === 2 &&\n Array.from({ length: 9 }, (_, i) => (\n <path key={i} d={`M ${-40 + i * 44} 130 Q ${i * 44} ${40 + r() * 40} ${40 + i * 44} 130`} fill=\"none\" stroke={`var(--u-chart-${i % 3 ? hue : hue2})`} strokeWidth={10} opacity={0.22} />\n ))}\n </svg>\n );\n}\n\n// ================================================================ Ringkasan beranda\n/** Kartu angka beranda LMS: kelas, tugas 14 hari ke depan, kuis dibuka, dan notifikasi (atau antrean penilaian untuk pengajar). */\nexport function RingkasanLms({ className }: { className?: string }) {\n const q = useLmsSaya();\n if (q.error) return <Galat q={q} />;\n const d = q.data;\n const muat = muatDari(q);\n const belum = (d?.tugas_mendatang ?? []).filter((t) => !t.status_jawaban || t.status_jawaban === 'draf' || t.status_jawaban === 'dikembalikan').length;\n const pengajar = d?.perlu_dinilai != null;\n return (\n <StatGrid className={className}>\n <StatCard label=\"Kelas\" value={formatNumber(d?.jumlah_kelas ?? 0)} icon={<BookOpen />} loading={muat} />\n {pengajar ? (\n <StatCard\n label=\"Perlu dinilai\"\n value={formatNumber(n(d?.perlu_dinilai?.tugas) + n(d?.perlu_dinilai?.kuis))}\n hint={`${n(d?.perlu_dinilai?.tugas)} tugas · ${n(d?.perlu_dinilai?.kuis)} kuis`}\n icon={<ClipboardCheck />}\n loading={muat}\n />\n ) : (\n <StatCard label=\"Tugas belum dikumpulkan\" value={formatNumber(belum)} hint=\"tenggat 14 hari ke depan\" icon={<ListTodo />} loading={muat} />\n )}\n <StatCard label=\"Kuis dibuka\" value={formatNumber(d?.kuis_terbuka?.length ?? 0)} icon={<FileQuestion />} loading={muat} />\n <StatCard label=\"Notifikasi baru\" value={formatNumber(d?.notifikasi_belum_dibaca ?? 0)} icon={<BellDot />} loading={muat} />\n </StatGrid>\n );\n}\n\n// ================================================================ Kelas\nexport interface KartuKelasProps {\n kelas: KelasLms;\n /** Persen penyelesaian (0–100). Kosongkan untuk menyembunyikan bilah progres. */\n progres?: number | null;\n href?: string;\n onPilih?: (k: KelasLms) => void;\n className?: string;\n}\n/** Satu kartu kelas: sampul abstrak, kode MK, judul, pengajar, peran, dan progres. */\nexport function KartuKelas({ kelas: k, progres, href, onPilih, className }: KartuKelasProps) {\n const isi = (\n <>\n <span className=\"u-lms-kelas-sampul\">\n {k.sampul_url ? <img src={k.sampul_url} alt=\"\" loading=\"lazy\" /> : <SampulKelas seed={k.id} />}\n {k.status !== 'aktif' && <Badge variant={k.status === 'draf' ? 'warning' : 'neutral'}>{k.status === 'draf' ? 'Draf' : k.status === 'selesai' ? 'Selesai' : 'Arsip'}</Badge>}\n </span>\n <span className=\"u-lms-kelas-body\">\n <span className=\"u-lms-kelas-meta\">\n {k.kode_mk && <span className=\"u-kur-code\">{k.kode_mk}</span>}\n {k.kelas && <span>Kelas {k.kelas}</span>}\n {k.peran && k.peran !== 'mahasiswa' && <span className=\"u-lms-peran\">{LABEL_PERAN[k.peran] ?? k.peran}</span>}\n </span>\n <span className=\"u-lms-kelas-judul\">{k.judul}</span>\n {(k.pengajar || k.tahun_id) && <span className=\"u-lms-kelas-pengajar\">{k.pengajar ?? labelTahun(k.tahun_id!)}</span>}\n {progres != null && (\n <span className=\"u-lms-kelas-progres\">\n <Progress value={progres} size=\"sm\" tone={progres >= 100 ? 'success' : 'primary'} />\n <small>{progres >= 100 ? 'Tuntas' : `${formatPersen(progres, 0)} selesai`}</small>\n </span>\n )}\n </span>\n </>\n );\n if (href)\n return (\n <a className={cn('u-lms-kelas', className)} href={href}>\n {isi}\n </a>\n );\n if (onPilih)\n return (\n <button type=\"button\" className={cn('u-lms-kelas', className)} onClick={() => onPilih(k)}>\n {isi}\n </button>\n );\n return <div className={cn('u-lms-kelas', className)}>{isi}</div>;\n}\n\nfunction KartuKelasDenganProgres(p: KartuKelasProps) {\n const q = useProgresKelas(p.kelas.peran === 'mahasiswa' ? p.kelas.id : undefined);\n const saya = q.data?.mahasiswa?.[0];\n return <KartuKelas {...p} progres={saya?.persen ?? (p.kelas.peran === 'mahasiswa' && q.data ? 0 : null)} />;\n}\n\n/** Kelas milik pengguna. Mahasiswa melihat progres penyelesaiannya di tiap kartu. */\nexport function DaftarKelasLms({\n status = 'aktif',\n href,\n onPilih,\n tampilProgres = true,\n className,\n}: {\n status?: KelasLms['status'];\n href?: (k: KelasLms) => string;\n onPilih?: (k: KelasLms) => void;\n tampilProgres?: boolean;\n className?: string;\n}) {\n const q = useKelasLms({ status });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q))\n return (\n <div className={cn('u-lms-kelas-grid', className)}>\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} style={{ height: 236 }} />\n ))}\n </div>\n );\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<BookOpen />} title=\"Belum ada kelas\" description=\"Kelas muncul di sini setelah KRS disetujui atau dosen menambahkan Anda.\" bordered className={className} />;\n const Kartu = tampilProgres ? KartuKelasDenganProgres : KartuKelas;\n return (\n <div className={cn('u-lms-kelas-grid', className)}>\n {data.map((k) => (\n <Kartu key={k.id} kelas={k} href={href?.(k)} onPilih={onPilih} />\n ))}\n </div>\n );\n}\n\n// ================================================================ Tugas & kuis\n/** Tugas dengan tenggat terdekat dan status pengumpulan. Tenggat < 24 jam ditandai merah. */\nexport function TugasMendatang({ batas = 6, href, className }: { batas?: number; href?: (t: TugasMendatangItem) => string; className?: string }) {\n const q = useLmsSaya();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const data = [...(q.data?.tugas_mendatang ?? [])].sort((a, b) => a.tenggat.localeCompare(b.tenggat)).slice(0, batas);\n if (!data.length) return <Empty icon={<ListTodo />} title=\"Tidak ada tugas mendekati tenggat\" description=\"Tugas dengan tenggat 14 hari ke depan akan muncul di sini.\" className={className} />;\n return (\n <ul className={cn('u-lms-tugas', className)}>\n {data.map((t) => {\n const s = sisaTenggat(t.tenggat);\n const st = t.status_jawaban ? STATUS_JAWABAN[t.status_jawaban] : null;\n const selesai = t.status_jawaban === 'dikumpulkan' || t.status_jawaban === 'dinilai';\n const Tag = href ? 'a' : 'div';\n return (\n <li key={t.id}>\n <Tag className=\"u-lms-tugas-row\" data-selesai={selesai || undefined} {...(href ? { href: href(t) } : {})}>\n <span className=\"u-lms-tugas-tgl\" aria-hidden>\n <b>{new Date(t.tenggat.replace(' ', 'T')).getDate()}</b>\n <small>{new Date(t.tenggat.replace(' ', 'T')).toLocaleDateString('id-ID', { month: 'short' })}</small>\n </span>\n <span className=\"u-lms-tugas-main\">\n <span className=\"u-lms-tugas-judul\">{t.judul}</span>\n <span className=\"u-lms-tugas-kelas\">\n {t.kelas} · {formatTime(t.tenggat)}\n </span>\n </span>\n <span className=\"u-lms-tugas-status\">\n {selesai ? (\n <Badge variant={st!.variant} dot>\n {st!.label}\n </Badge>\n ) : (\n <Badge variant={s.tone}>{s.teks}</Badge>\n )}\n {!selesai && st && <small>{st.label}</small>}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n );\n}\n\n/** Kuis yang sedang dibuka di kelas pengguna, dengan waktu tutup. */\nexport function KuisTerbuka({ href, className }: { href?: (k: KuisTerbukaItem) => string; className?: string }) {\n const q = useLmsSaya();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 140 }} />;\n const data = q.data?.kuis_terbuka ?? [];\n if (!data.length) return <Empty icon={<FileQuestion />} title=\"Tidak ada kuis yang dibuka\" className={className} />;\n return (\n <ul className={cn('u-lms-kuis', className)}>\n {data.map((k) => {\n const s = k.selesai ? sisaTenggat(k.selesai) : null;\n return (\n <li key={k.id} className=\"u-lms-kuis-row\">\n <span className=\"u-lms-ikon\" data-jenis=\"kuis\">\n <FileQuestion />\n </span>\n <span className=\"u-lms-tugas-main\">\n <span className=\"u-lms-tugas-judul\">{k.judul}</span>\n <span className=\"u-lms-tugas-kelas\">\n {k.kelas}\n {s && ` · ditutup ${s.teks.toLowerCase()}`}\n </span>\n </span>\n {href && (\n <Button size=\"sm\" render={<a href={href(k)} />}>\n Kerjakan\n </Button>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\n// ================================================================ Agenda\nconst IKON_AGENDA: Record<JenisAgendaLms, React.ReactNode> = { tugas: <ListTodo />, kuis: <FileQuestion />, konferensi: <Video />, presensi: <UserCheck /> };\nconst LABEL_AGENDA: Record<JenisAgendaLms, string> = { tugas: 'Tenggat tugas', kuis: 'Kuis', konferensi: 'Kelas daring', presensi: 'Presensi' };\n\n/** Agenda pembelajaran beberapa hari ke depan, dikelompokkan per tanggal. */\nexport function AgendaLms({ hari = 14, kelasId, onPilih, className }: { hari?: number; kelasId?: number; onPilih?: (a: AgendaLmsItem) => void; className?: string }) {\n const [rentang] = React.useState(() => {\n const d = new Date();\n const s = new Date(d.getTime() + hari * 86_400_000);\n return { dari: tglIso(d), sampai: tglIso(s) };\n });\n const q = useKalenderLms({ ...rentang, ...(kelasId ? { kelas_id: kelasId } : {}) });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 260 }} />;\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<CalendarClock />} title=\"Agenda kosong\" description={`Tidak ada kegiatan ${hari} hari ke depan.`} className={className} />;\n const grup = new Map<string, AgendaLmsItem[]>();\n for (const a of data) {\n const k = a.waktu.slice(0, 10);\n grup.set(k, [...(grup.get(k) ?? []), a]);\n }\n const hariIni = tglIso(new Date());\n return (\n <div className={cn('u-lms-agenda', className)}>\n {[...grup].map(([tgl, isi]) => (\n <section key={tgl}>\n <h4>\n {tgl === hariIni ? 'Hari ini' : formatDate(tgl, 'full').replace(/ \\d{4}$/, '')}\n <span>{isi.length}</span>\n </h4>\n <ul>\n {isi.map((a) => {\n const Tag = onPilih ? 'button' : 'div';\n return (\n <li key={`${a.jenis}-${a.id}`}>\n <Tag className=\"u-lms-agenda-row\" {...(onPilih ? { type: 'button' as const, onClick: () => onPilih(a) } : {})}>\n <span className=\"u-lms-agenda-jam\">{a.waktu.slice(11, 16) === '00:00' ? 'Sehari' : a.waktu.slice(11, 16)}</span>\n <span className=\"u-lms-ikon\" data-jenis={a.jenis}>\n {IKON_AGENDA[a.jenis]}\n </span>\n <span className=\"u-lms-tugas-main\">\n <span className=\"u-lms-tugas-judul\">{a.judul}</span>\n <span className=\"u-lms-tugas-kelas\">\n {LABEL_AGENDA[a.jenis]} · {a.kelas}\n </span>\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\n// ================================================================ Progres kelas\n/**\n * Progres penyelesaian kelas. Untuk mahasiswa tampil cincin progres dirinya; untuk pengajar tampil semua peserta,\n * diurutkan dari yang paling tertinggal agar mudah ditindaklanjuti.\n */\nexport function ProgresKelas({ kelasId, ambang = 50, className }: { kelasId: number; ambang?: number; className?: string }) {\n const q = useProgresKelas(kelasId);\n // Progres hanya memuat NIM; nama diambil dari daftar peserta (hanya untuk tampilan pengajar).\n const banyak = (q.data?.mahasiswa.length ?? 0) > 1;\n const pq = useAnggotaKelas(kelasId, banyak);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const d = q.data;\n if (!d) return null;\n const nama = new Map((pq.data ?? []).map((a) => [a.username, a.nama]));\n const tot = d.total_aktivitas;\n const rincian = (m: ProgresMahasiswa) => [\n { label: 'Materi wajib', v: m.materi_selesai, t: tot.materi_wajib },\n { label: 'Tugas', v: m.tugas_dikumpulkan, t: tot.tugas },\n { label: 'Kuis', v: m.kuis_dikerjakan, t: tot.kuis },\n ];\n if (d.mahasiswa.length === 1) {\n const m = d.mahasiswa[0]!;\n return (\n <div className={cn('u-lms-progres-saya', className)}>\n <ProgressRing value={m.persen ?? 0} size={96} thickness={8} tone={(m.persen ?? 0) >= 100 ? 'success' : 'primary'} label={<b>{formatPersen(m.persen ?? 0, 0)}</b>} />\n <ul>\n {rincian(m).map((r) => (\n <li key={r.label}>\n <span>{r.label}</span>\n <Progress value={r.t ? (r.v / r.t) * 100 : 0} size=\"sm\" />\n <b>\n {r.v}/{r.t}\n </b>\n </li>\n ))}\n </ul>\n </div>\n );\n }\n const urut = d.mahasiswa.map((m) => ({ ...m, nama: m.nama ?? nama.get(m.nim) ?? null })).sort((a, b) => (a.persen ?? 0) - (b.persen ?? 0));\n const rata = urut.length ? urut.reduce((s, m) => s + (m.persen ?? 0), 0) / urut.length : 0;\n const tertinggal = urut.filter((m) => (m.persen ?? 0) < ambang).length;\n return (\n <div className={cn('u-lms-progres', className)}>\n <div className=\"u-lms-progres-head\">\n <span>\n <b>{formatPersen(rata, 0)}</b> rata-rata penyelesaian\n </span>\n <span>\n {tot.materi_wajib} materi wajib · {tot.tugas} tugas · {tot.kuis} kuis\n </span>\n {tertinggal > 0 && (\n <Badge variant=\"warning\">\n {tertinggal} mahasiswa di bawah {ambang}%\n </Badge>\n )}\n </div>\n <ul className=\"u-lms-progres-list\">\n {urut.map((m) => (\n <li key={m.nim} data-tertinggal={(m.persen ?? 0) < ambang || undefined}>\n <span className=\"u-lms-progres-nama\">\n <span>{m.nama ?? m.nim}</span>\n {m.nama && <small>{m.nim}</small>}\n </span>\n <Progress value={m.persen ?? 0} size=\"sm\" tone={(m.persen ?? 0) < ambang ? 'warning' : (m.persen ?? 0) >= 100 ? 'success' : 'primary'} />\n <span className=\"u-lms-progres-angka\">\n <b>{formatPersen(m.persen ?? 0, 0)}</b>\n <small>\n {m.selesai}/{m.total}\n </small>\n </span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { ArrowLeft, ArrowRight, CalendarClock, CircleCheck, Clock, Flag, KeyRound, LayoutGrid, MonitorCheck, RefreshCw, Send, Timer } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatTime } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Alert, Empty, ProgressRing } from '../components/display';\nimport { Input, Textarea } from '../components/forms';\nimport { ConfirmDialog } from '../components/overlays';\nimport { invalidateSiakad, pesanGalat, useOptionalSiakad, useSiakadQuery, type QueryState } from './provider';\n\n/*\n * Widget CBT (/v1/cbt) untuk peserta ujian: daftar ujian saya dengan masuk token, lembar ujian lengkap\n * (soal per jenis, navigasi nomor, ragu-ragu, hitung mundur, simpan otomatis), dan hasil.\n * Semua panggilan /kerjakan membawa header X-Perangkat (ID acak per peramban) karena ujian bisa dikunci ke satu perangkat.\n */\n\n// ================================================================ Tipe\nexport type JenisSoalCbt = 'pilihan_ganda' | 'pilihan_ganda_banyak' | 'benar_salah' | 'isian_singkat' | 'esai' | 'menjodohkan';\nexport type StatusPesertaCbt = 'terdaftar' | 'mengerjakan' | 'selesai' | 'diskualifikasi' | 'tidak_hadir';\nexport interface UjianSaya {\n id: number;\n status: StatusPesertaCbt;\n nomor_peserta?: string | null;\n mulai_pada?: string | null;\n batas_waktu?: string | null;\n selesai_pada?: string | null;\n ujian_id: number;\n kode?: string | null;\n ujian: string;\n jenis: string;\n kode_mk?: string | null;\n durasi_menit: number;\n petunjuk?: string | null;\n ujian_status: 'siap' | 'selesai';\n sesi_id: number;\n sesi?: string | null;\n mulai: string;\n selesai: string;\n ruang_id?: string | null;\n sesi_status: 'terjadwal' | 'dibuka' | 'ditutup';\n sisa_detik?: number | null;\n bisa_mulai: boolean;\n}\nexport interface OpsiSoal {\n id: string;\n teks: string;\n}\nexport type JawabanCbt = string | string[] | boolean | Record<string, string> | null;\nexport interface SoalCbtData {\n nomor: number;\n soal_id: number;\n jenis: JenisSoalCbt;\n /** HTML yang sudah disaring server. */\n pertanyaan: string;\n opsi: OpsiSoal[] | { kiri: OpsiSoal[]; kanan: OpsiSoal[] } | null;\n poin: number;\n jawaban: JawabanCbt;\n ragu: boolean;\n}\nexport interface LembarUjianData {\n peserta_id: number;\n ujian: { id: number; kode?: string | null; nama: string; jenis: string; petunjuk?: string | null; durasi_menit: number; tampil_hasil?: number | boolean };\n status: StatusPesertaCbt;\n mulai_pada?: string | null;\n batas_waktu?: string | null;\n sisa_detik: number;\n soal?: SoalCbtData[];\n terjawab?: number;\n hasil?: { skor: number | null; skor_maks: number | null; nilai: number | null; lulus: boolean | null; perlu_koreksi: boolean };\n}\n\n// ================================================================ Perangkat & API\nconst KUNCI_PERANGKAT = 'unipo-cbt-perangkat';\nlet perangkatMemori: string | null = null;\n/** ID perangkat acak yang disimpan di peramban. Server mencocokkannya (bersama User-Agent) bila ujian dikunci ke satu perangkat. */\nexport function idPerangkatCbt(): string {\n try {\n const ada = localStorage.getItem(KUNCI_PERANGKAT);\n if (ada) return ada;\n } catch {\n /* penyimpanan diblokir: pakai ID di memori */\n }\n perangkatMemori ??= typeof crypto !== 'undefined' && 'randomUUID' in crypto ? crypto.randomUUID() : `p-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n try {\n localStorage.setItem(KUNCI_PERANGKAT, perangkatMemori);\n } catch {\n /* abaikan */\n }\n return perangkatMemori;\n}\nconst hdr = () => ({ headers: { 'X-Perangkat': idPerangkatCbt() } });\nconst C = '/v1/cbt';\n\nexport function useUjianSaya() {\n return useSiakadQuery<UjianSaya[]>(['cbt-saya'], (s, signal) => s.cbt.getSaya({}, { signal }) as never, { staleTime: 15_000 });\n}\nexport function useLembarUjian(pesertaId: number | undefined) {\n return useSiakadQuery<LembarUjianData>(['cbt-lembar', String(pesertaId)], (s, signal) => s.request({ method: 'GET', path: `${C}/kerjakan/${pesertaId}` }, { ...hdr(), signal }) as never, {\n enabled: pesertaId != null,\n staleTime: Infinity,\n });\n}\n\n// ================================================================ Bantuan\nfunction Galat({ q }: { q: QueryState<unknown> }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(q.error)}</span>\n <Button size=\"sm\" variant=\"ghost\" onClick={q.refetch}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\nconst muatDari = (q: QueryState<unknown>) => q.loading && !q.data;\nconst JENIS_UJIAN: Record<string, string> = { uts: 'UTS', uas: 'UAS', kuis: 'Kuis', pmb: 'Tes PMB', komprehensif: 'Komprehensif', bahasa: 'Tes bahasa', sertifikasi: 'Sertifikasi', lainnya: 'Ujian' };\nconst STATUS_PESERTA: Record<StatusPesertaCbt, { label: string; variant: BadgeVariant }> = {\n terdaftar: { label: 'Terdaftar', variant: 'neutral' },\n mengerjakan: { label: 'Sedang dikerjakan', variant: 'warning' },\n selesai: { label: 'Selesai', variant: 'success' },\n diskualifikasi: { label: 'Didiskualifikasi', variant: 'danger' },\n tidak_hadir: { label: 'Tidak hadir', variant: 'neutral' },\n};\nconst jamMenit = (d: number) => {\n const j = Math.floor(d / 3600);\n const m = Math.floor((d % 3600) / 60);\n const s = d % 60;\n return `${j > 0 ? `${j}:` : ''}${String(m).padStart(j > 0 ? 2 : 1, '0')}:${String(s).padStart(2, '0')}`;\n};\nexport function terjawab(j: JawabanCbt): boolean {\n if (j == null) return false;\n if (typeof j === 'string') return j.trim() !== '';\n if (Array.isArray(j)) return j.length > 0;\n if (typeof j === 'object') return Object.keys(j).length > 0;\n return true;\n}\n\n// ================================================================ Daftar ujian\n/** Ujian tempat pengguna terdaftar. Tombol masuk aktif saat sesi dibuka; peserta memasukkan token dari pengawas. */\nexport function DaftarUjianSaya({ onMulai, className }: { onMulai: (pesertaId: number, lembar: LembarUjianData) => void; className?: string }) {\n const q = useUjianSaya();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<MonitorCheck />} title=\"Belum ada ujian\" description=\"Ujian berbasis komputer yang Anda ikuti akan muncul di sini.\" bordered className={className} />;\n return (\n <div className={cn('u-cbt-ujian-grid', className)}>\n {data.map((u) => (\n <KartuUjian key={u.id} u={u} onMulai={onMulai} />\n ))}\n </div>\n );\n}\n\nfunction KartuUjian({ u, onMulai }: { u: UjianSaya; onMulai: (pesertaId: number, lembar: LembarUjianData) => void }) {\n const siakad = useOptionalSiakad();\n const [token, setToken] = React.useState('');\n const [sibuk, setSibuk] = React.useState(false);\n const [galat, setGalat] = React.useState<string | null>(null);\n const lanjut = u.status === 'mengerjakan';\n const st = STATUS_PESERTA[u.status];\n const mulai = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!siakad) return;\n setSibuk(true);\n setGalat(null);\n try {\n const r = await siakad.request<LembarUjianData>({ method: 'POST', path: `${C}/kerjakan/${u.id}/mulai`, body: lanjut ? {} : { token: token.trim().toUpperCase() } }, hdr());\n invalidateSiakad('cbt-saya');\n onMulai(u.id, r.data);\n } catch (err) {\n setGalat(pesanGalat(err));\n } finally {\n setSibuk(false);\n }\n };\n return (\n <article className=\"u-cbt-ujian\" data-status={u.status}>\n <header>\n <span className=\"u-cbt-ujian-jenis\">{JENIS_UJIAN[u.jenis] ?? u.jenis}</span>\n <Badge variant={st.variant} dot>\n {st.label}\n </Badge>\n </header>\n <h3>{u.ujian}</h3>\n <p className=\"u-cbt-ujian-sub\">{[u.kode_mk, u.sesi, u.nomor_peserta && `No. ${u.nomor_peserta}`].filter(Boolean).join(' · ')}</p>\n <dl className=\"u-cbt-ujian-info\">\n <div>\n <dt>\n <CalendarClock /> Jadwal\n </dt>\n <dd>\n {formatDate(u.mulai, 'medium')}, {formatTime(u.mulai)}–{formatTime(u.selesai)}\n </dd>\n </div>\n <div>\n <dt>\n <Timer /> Durasi\n </dt>\n <dd>{lanjut && u.sisa_detik != null ? `sisa ${jamMenit(u.sisa_detik)}` : `${u.durasi_menit} menit`}</dd>\n </div>\n </dl>\n {u.bisa_mulai ? (\n <form className=\"u-cbt-token\" onSubmit={mulai}>\n {!lanjut && (\n <label className=\"u-cbt-token-input\">\n <KeyRound aria-hidden />\n <Input\n value={token}\n onChange={(e) => setToken(e.target.value.toUpperCase())}\n placeholder=\"Token\"\n aria-label=\"Token ujian dari pengawas\"\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={12}\n />\n </label>\n )}\n <Button type=\"submit\" loading={sibuk} disabled={!lanjut && token.trim().length < 4} fullWidth={lanjut}>\n {lanjut ? 'Lanjutkan ujian' : 'Mulai ujian'}\n </Button>\n </form>\n ) : (\n <p className=\"u-cbt-ujian-note\">\n {u.status === 'selesai'\n ? `Dikumpulkan ${u.selesai_pada ? `${formatDate(u.selesai_pada, 'medium')} ${formatTime(u.selesai_pada)}` : ''}`\n : u.sesi_status === 'terjadwal'\n ? 'Tombol masuk aktif saat pengawas membuka sesi.'\n : u.sesi_status === 'ditutup'\n ? 'Sesi sudah ditutup.'\n : 'Tidak bisa dimulai.'}\n </p>\n )}\n {galat && <p className=\"u-cbt-galat\">{galat}</p>}\n </article>\n );\n}\n\n// ================================================================ Timer\n/** Hitung mundur ujian. Sinkron ulang setiap kali `sisaDetik` dari server berubah; berubah kuning < 10 menit, merah < 5 menit. */\nexport function TimerUjian({ sisaDetik, onHabis, className }: { sisaDetik: number; onHabis?: () => void; className?: string }) {\n const [akhir, setAkhir] = React.useState(() => Date.now() + sisaDetik * 1000);\n const [sisa, setSisa] = React.useState(sisaDetik);\n const habisRef = React.useRef(onHabis);\n habisRef.current = onHabis;\n React.useEffect(() => {\n setAkhir(Date.now() + sisaDetik * 1000);\n setSisa(sisaDetik);\n }, [sisaDetik]);\n React.useEffect(() => {\n let sudah = false;\n const t = setInterval(() => {\n const s = Math.max(0, Math.round((akhir - Date.now()) / 1000));\n setSisa(s);\n if (s === 0 && !sudah) {\n sudah = true;\n habisRef.current?.();\n }\n }, 1000);\n return () => clearInterval(t);\n }, [akhir]);\n const nada = sisa <= 300 ? 'danger' : sisa <= 600 ? 'warning' : undefined;\n return (\n <div\n className={cn('u-cbt-timer', className)}\n data-tone={nada}\n role=\"timer\"\n aria-live={sisa <= 300 && sisa % 60 === 0 ? 'assertive' : 'off'}\n aria-label={`Sisa waktu ${Math.ceil(sisa / 60)} menit`}\n >\n <Clock aria-hidden />\n <span>{jamMenit(sisa)}</span>\n </div>\n );\n}\n\n// ================================================================ Navigasi\n/** Kisi nomor soal: terjawab, ragu-ragu, belum, dan soal aktif. */\nexport function NavigasiSoal({\n soal,\n aktif,\n onPilih,\n className,\n}: {\n soal: Array<Pick<SoalCbtData, 'nomor' | 'jawaban' | 'ragu'>>;\n aktif: number;\n onPilih: (nomor: number) => void;\n className?: string;\n}) {\n const sudah = soal.filter((s) => terjawab(s.jawaban)).length;\n const ragu = soal.filter((s) => s.ragu).length;\n return (\n <nav className={cn('u-cbt-nav', className)} aria-label=\"Nomor soal\">\n <div className=\"u-cbt-nav-grid\">\n {soal.map((s) => (\n <button\n key={s.nomor}\n type=\"button\"\n onClick={() => onPilih(s.nomor)}\n data-state={s.ragu ? 'ragu' : terjawab(s.jawaban) ? 'terjawab' : 'kosong'}\n data-aktif={s.nomor === aktif || undefined}\n aria-current={s.nomor === aktif ? 'step' : undefined}\n aria-label={`Soal ${s.nomor}${s.ragu ? ', ragu-ragu' : terjawab(s.jawaban) ? ', terjawab' : ', belum dijawab'}`}\n >\n {s.nomor}\n </button>\n ))}\n </div>\n <ul className=\"u-cbt-nav-legend\">\n <li data-state=\"terjawab\">Terjawab {sudah}</li>\n <li data-state=\"ragu\">Ragu-ragu {ragu}</li>\n <li data-state=\"kosong\">Belum {soal.length - sudah}</li>\n </ul>\n </nav>\n );\n}\n\n// ================================================================ Soal\nconst HURUF = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n/** Satu soal sesuai jenisnya: pilihan ganda, pilihan ganda banyak, benar/salah, isian singkat, esai, atau menjodohkan. */\nexport function SoalCbt({ soal, onJawab, disabled, className }: { soal: SoalCbtData; onJawab: (jawaban: JawabanCbt) => void; disabled?: boolean; className?: string }) {\n const s = soal;\n const opsi = Array.isArray(s.opsi) ? s.opsi : [];\n const petunjuk: Record<JenisSoalCbt, string> = {\n pilihan_ganda: 'Pilih satu jawaban.',\n pilihan_ganda_banyak: 'Pilih semua jawaban yang benar.',\n benar_salah: 'Tentukan benar atau salah.',\n isian_singkat: 'Ketik jawaban singkat.',\n esai: 'Tulis jawaban Anda. Tersimpan otomatis.',\n menjodohkan: 'Pasangkan tiap pernyataan dengan jawaban yang sesuai.',\n };\n return (\n <section className={cn('u-cbt-soal', className)} aria-labelledby={`soal-${s.soal_id}`}>\n <header>\n <span id={`soal-${s.soal_id}`}>Soal {s.nomor}</span>\n <small>\n {petunjuk[s.jenis]} · {formatNumber(s.poin)} poin\n </small>\n </header>\n <div className=\"u-cbt-pertanyaan\" dangerouslySetInnerHTML={{ __html: s.pertanyaan }} />\n {(s.jenis === 'pilihan_ganda' || s.jenis === 'pilihan_ganda_banyak') && (\n <div className=\"u-cbt-opsi\" role={s.jenis === 'pilihan_ganda' ? 'radiogroup' : 'group'}>\n {opsi.map((o, i) => {\n const banyak = s.jenis === 'pilihan_ganda_banyak';\n const pilih = banyak ? (Array.isArray(s.jawaban) ? (s.jawaban as string[]) : []) : [];\n const aktif = banyak ? pilih.includes(o.id) : s.jawaban === o.id;\n return (\n <button\n key={o.id}\n type=\"button\"\n role={banyak ? 'checkbox' : 'radio'}\n aria-checked={aktif}\n disabled={disabled}\n data-banyak={banyak || undefined}\n onClick={() => onJawab(banyak ? (aktif ? pilih.filter((x) => x !== o.id) : [...pilih, o.id]) : aktif ? null : o.id)}\n >\n <span className=\"u-cbt-huruf\">{HURUF[i]}</span>\n <span dangerouslySetInnerHTML={{ __html: o.teks }} />\n </button>\n );\n })}\n </div>\n )}\n {s.jenis === 'benar_salah' && (\n <div className=\"u-cbt-opsi\" data-dua role=\"radiogroup\">\n {[\n [true, 'Benar'],\n [false, 'Salah'],\n ].map(([v, l]) => (\n <button key={String(v)} type=\"button\" role=\"radio\" aria-checked={s.jawaban === v} disabled={disabled} onClick={() => onJawab(s.jawaban === v ? null : (v as boolean))}>\n <span className=\"u-cbt-huruf\">{v ? 'B' : 'S'}</span>\n <span>{l as string}</span>\n </button>\n ))}\n </div>\n )}\n {s.jenis === 'isian_singkat' && <IsianTeks key={s.soal_id} nilai={(s.jawaban as string) ?? ''} onJawab={onJawab} disabled={disabled} />}\n {s.jenis === 'esai' && <IsianTeks key={s.soal_id} nilai={(s.jawaban as string) ?? ''} onJawab={onJawab} disabled={disabled} panjang />}\n {s.jenis === 'menjodohkan' && s.opsi && !Array.isArray(s.opsi) && <Menjodohkan opsi={s.opsi} nilai={(s.jawaban as Record<string, string>) ?? {}} onJawab={onJawab} disabled={disabled} />}\n </section>\n );\n}\n\nfunction IsianTeks({ nilai, onJawab, disabled, panjang }: { nilai: string; onJawab: (j: JawabanCbt) => void; disabled?: boolean; panjang?: boolean }) {\n const [v, setV] = React.useState(nilai);\n const t = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n const kirim = (x: string) => {\n clearTimeout(t.current);\n t.current = setTimeout(() => onJawab(x.trim() === '' ? null : x), 800);\n };\n React.useEffect(() => () => clearTimeout(t.current), []);\n const ubah = (x: string) => {\n setV(x);\n kirim(x);\n };\n return panjang ? (\n <div className=\"u-cbt-esai\">\n <Textarea value={v} onChange={(e) => ubah(e.target.value)} rows={8} disabled={disabled} aria-label=\"Jawaban esai\" />\n <small>{v.trim() ? v.trim().split(/\\s+/).length : 0} kata</small>\n </div>\n ) : (\n <Input value={v} onChange={(e) => ubah(e.target.value)} disabled={disabled} maxLength={500} aria-label=\"Jawaban singkat\" className=\"u-cbt-isian\" />\n );\n}\n\nfunction Menjodohkan({ opsi, nilai, onJawab, disabled }: { opsi: { kiri: OpsiSoal[]; kanan: OpsiSoal[] }; nilai: Record<string, string>; onJawab: (j: JawabanCbt) => void; disabled?: boolean }) {\n return (\n <ol className=\"u-cbt-jodoh\">\n {opsi.kiri.map((k) => (\n <li key={k.id}>\n <span dangerouslySetInnerHTML={{ __html: k.teks }} />\n <select\n value={nilai[k.id] ?? ''}\n disabled={disabled}\n aria-label={`Pasangan untuk ${k.teks.replace(/<[^>]+>/g, '')}`}\n onChange={(e) => {\n const baru = { ...nilai };\n if (e.target.value) baru[k.id] = e.target.value;\n else delete baru[k.id];\n onJawab(Object.keys(baru).length ? baru : null);\n }}\n >\n <option value=\"\">Pilih pasangan…</option>\n {opsi.kanan.map((r) => (\n <option key={r.id} value={r.id}>\n {r.teks.replace(/<[^>]+>/g, '')}\n </option>\n ))}\n </select>\n </li>\n ))}\n </ol>\n );\n}\n\n// ================================================================ Lembar ujian\ntype StatusSimpan = 'tersimpan' | 'menyimpan' | 'gagal';\n\n/**\n * Lembar ujian lengkap: kepala (nama ujian, jumlah terjawab, hitung mundur), satu soal per layar, tombol ragu-ragu,\n * navigasi nomor, dan kumpulkan. Jawaban dikirim saat dipilih (teks: 0,8 detik setelah berhenti mengetik).\n * Jika waktu habis, lembar dikumpulkan otomatis.\n */\nexport function LembarUjian({ pesertaId, awal, onSelesai, className }: { pesertaId: number; awal?: LembarUjianData; onSelesai?: (hasil: LembarUjianData) => void; className?: string }) {\n const siakad = useOptionalSiakad();\n const q = useLembarUjian(awal ? undefined : pesertaId);\n const [lembar, setLembar] = React.useState<LembarUjianData | undefined>(awal);\n const [nomor, setNomor] = React.useState(1);\n const [simpan, setSimpan] = React.useState<StatusSimpan>('tersimpan');\n const [galat, setGalat] = React.useState<string | null>(null);\n const [konfirmasi, setKonfirmasi] = React.useState(false);\n React.useEffect(() => {\n if (q.data && !lembar) setLembar(q.data);\n }, [q.data, lembar]);\n\n const kirim = React.useCallback(\n async (s: SoalCbtData, perubahan: Partial<Pick<SoalCbtData, 'jawaban' | 'ragu'>>) => {\n const baru = { ...s, ...perubahan };\n setLembar((l) => (l ? { ...l, soal: l.soal?.map((x) => (x.soal_id === s.soal_id ? baru : x)) } : l));\n if (!siakad) return;\n setSimpan('menyimpan');\n try {\n const r = await siakad.request<{ sisa_detik: number }>(\n { method: 'POST', path: `${C}/kerjakan/${pesertaId}/jawab`, body: { soal_id: s.soal_id, jawaban: baru.jawaban, ragu: baru.ragu } },\n hdr(),\n );\n setSimpan('tersimpan');\n setGalat(null);\n if (r.data?.sisa_detik != null) setLembar((l) => (l && Math.abs(l.sisa_detik - r.data.sisa_detik) > 5 ? { ...l, sisa_detik: r.data.sisa_detik } : l));\n } catch (e) {\n setSimpan('gagal');\n setGalat(pesanGalat(e));\n }\n },\n [siakad, pesertaId],\n );\n\n const kumpulkan = React.useCallback(async () => {\n if (!siakad) return;\n try {\n const r = await siakad.request<LembarUjianData>({ method: 'POST', path: `${C}/kerjakan/${pesertaId}/selesai`, body: {} }, hdr());\n setLembar(r.data);\n invalidateSiakad('cbt-saya');\n onSelesai?.(r.data);\n } catch (e) {\n setGalat(pesanGalat(e));\n }\n }, [siakad, pesertaId, onSelesai]);\n\n if (!lembar) {\n if (q.error) return <Galat q={q} />;\n return <Skeleton className={className} style={{ height: 420 }} />;\n }\n if (lembar.status !== 'mengerjakan') return <HasilUjian lembar={lembar} className={className} />;\n const daftar = lembar.soal ?? [];\n const s = daftar.find((x) => x.nomor === nomor) ?? daftar[0];\n const sudah = daftar.filter((x) => terjawab(x.jawaban)).length;\n const ragu = daftar.filter((x) => x.ragu).length;\n if (!s) return <Empty title=\"Soal tidak tersedia\" />;\n\n return (\n <div className={cn('u-cbt-lembar', className)}>\n <header className=\"u-cbt-lembar-head\">\n <div className=\"u-cbt-lembar-judul\">\n <span className=\"u-cbt-ujian-jenis\">{JENIS_UJIAN[lembar.ujian.jenis] ?? lembar.ujian.jenis}</span>\n <h2>{lembar.ujian.nama}</h2>\n </div>\n <span className=\"u-cbt-simpan\" data-status={simpan} aria-live=\"polite\">\n {simpan === 'menyimpan' ? 'Menyimpan…' : simpan === 'gagal' ? 'Gagal menyimpan' : 'Tersimpan'}\n </span>\n <span className=\"u-cbt-hitung\">\n <b>{sudah}</b>/{daftar.length} terjawab\n </span>\n <TimerUjian sisaDetik={lembar.sisa_detik} onHabis={kumpulkan} />\n </header>\n {galat && (\n <Alert variant=\"danger\" title=\"Jawaban terakhir belum tersimpan\">\n {galat} Periksa koneksi; jawaban dikirim lagi saat Anda memilih ulang.\n </Alert>\n )}\n <div className=\"u-cbt-lembar-body\">\n <div className=\"u-cbt-lembar-main\">\n <SoalCbt soal={s} onJawab={(j) => kirim(s, { jawaban: j })} />\n <footer className=\"u-cbt-lembar-foot\">\n <Button variant=\"outline\" onClick={() => setNomor(Math.max(1, s.nomor - 1))} disabled={s.nomor <= 1}>\n <ArrowLeft /> Sebelumnya\n </Button>\n <Button variant={s.ragu ? 'secondary' : 'ghost'} onClick={() => kirim(s, { ragu: !s.ragu })} aria-pressed={s.ragu} className=\"u-cbt-ragu\">\n <Flag /> Ragu-ragu\n </Button>\n {s.nomor < daftar.length ? (\n <Button onClick={() => setNomor(s.nomor + 1)}>\n Berikutnya <ArrowRight />\n </Button>\n ) : (\n <Button onClick={() => setKonfirmasi(true)}>\n <Send /> Kumpulkan\n </Button>\n )}\n </footer>\n </div>\n <aside className=\"u-cbt-lembar-side\">\n <h3>\n <LayoutGrid aria-hidden /> Nomor soal\n </h3>\n <NavigasiSoal soal={daftar} aktif={s.nomor} onPilih={setNomor} />\n <Button variant=\"outline\" fullWidth onClick={() => setKonfirmasi(true)}>\n Kumpulkan jawaban\n </Button>\n </aside>\n </div>\n <ConfirmDialog\n open={konfirmasi}\n onOpenChange={setKonfirmasi}\n tone=\"primary\"\n icon={<Send />}\n title=\"Kumpulkan jawaban sekarang?\"\n description={\n sudah < daftar.length || ragu > 0\n ? `Masih ada ${daftar.length - sudah} soal belum dijawab${ragu ? ` dan ${ragu} ditandai ragu-ragu` : ''}. Setelah dikumpulkan, jawaban tidak bisa diubah.`\n : 'Semua soal sudah dijawab. Setelah dikumpulkan, jawaban tidak bisa diubah.'\n }\n confirmLabel=\"Kumpulkan jawaban\"\n cancelLabel=\"Periksa lagi\"\n onConfirm={kumpulkan}\n />\n </div>\n );\n}\n\n// ================================================================ Hasil\n/** Layar setelah ujian dikumpulkan. Nilai hanya tampil bila pengelola mengizinkan (`tampil_hasil`). */\nexport function HasilUjian({ lembar, className }: { lembar: LembarUjianData; className?: string }) {\n const h = lembar.hasil;\n return (\n <div className={cn('u-cbt-hasil', className)}>\n {h && h.nilai != null ? (\n <ProgressRing value={h.nilai} size={120} thickness={9} tone={h.lulus === false ? 'warning' : 'success'} label={<b>{formatNumber(h.nilai, { maximumFractionDigits: 1 })}</b>} />\n ) : (\n <span className=\"u-cbt-hasil-ikon\">\n <CircleCheck />\n </span>\n )}\n <h2>{lembar.status === 'diskualifikasi' ? 'Anda didiskualifikasi' : 'Jawaban sudah dikumpulkan'}</h2>\n <p>{lembar.ujian.nama}</p>\n {h ? (\n <dl>\n <div>\n <dt>Skor</dt>\n <dd>\n {formatNumber(h.skor ?? 0, { maximumFractionDigits: 1 })} / {formatNumber(h.skor_maks ?? 0)}\n </dd>\n </div>\n {h.lulus != null && (\n <div>\n <dt>Status</dt>\n <dd>\n <Badge variant={h.lulus ? 'success' : 'warning'} dot>\n {h.lulus ? 'Lulus' : 'Belum lulus'}\n </Badge>\n </dd>\n </div>\n )}\n </dl>\n ) : (\n <small>Nilai diumumkan oleh pengelola ujian.</small>\n )}\n {h?.perlu_koreksi && <small>Sebagian soal esai masih dikoreksi; nilai bisa berubah.</small>}\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { AppLogo, UnipoAppLogo, type AppLogoProps, type UnipoApp } from '../components/identity';\nimport { Navbar, type NavbarMenu, type NavbarProps, type NavbarLink } from '../components/navbar';\nimport { Faq, type FaqProps } from '../components/faq';\nimport { useSiakadQuery } from './provider';\n\ntype Row = Record<string, any>;\n\n// ================================================================ Logo situs\nexport interface LogoSitusProps extends Omit<AppLogoProps, 'src' | 'name'> {\n /** Kode situs portal, mis. 'univ', 'fti', 'pmb'. */\n situs: string;\n /** Logo cadangan bila situs belum punya logo atau API belum menjawab. */\n app?: UnipoApp;\n /** Nama pengganti (bawaan: nama situs dari API). */\n name?: React.ReactNode;\n}\n\n/**\n * Logo dari pengaturan situs portal (`/v1/portal/situs/{kode}`): pakai logo unggahan bila ada,\n * bila tidak pakai logo aplikasi UNIPO (`app`). Nama dan tagline mengikuti data situs.\n */\nexport function LogoSitus({ situs, app, name, tagline, ...props }: LogoSitusProps) {\n const q = useSiakadQuery<Row>(['portal-situs', situs], (s, signal) => s.portal.getSitusByKode(situs, {}, { signal }) as never, { staleTime: 10 * 60_000 });\n const d = q.data;\n const nama = name ?? d?.singkatan ?? d?.nama;\n const sub = tagline ?? (d ? (d.tagline ?? (d.jenis === 'universitas' ? undefined : 'Universitas Pohuwato')) : undefined);\n const src = d?.logo?.url as string | undefined;\n if (src) return <AppLogo src={src} name={nama} tagline={sub} {...props} />;\n if (app) return <UnipoAppLogo app={app} {...(nama ? { name: nama } : {})} {...(sub !== undefined ? { tagline: sub } : {})} {...props} />;\n return <AppLogo name={nama ?? 'UNIPO'} tagline={sub} {...props} />;\n}\n\n// ================================================================ Navbar dari menu portal\n/** Item menu `/v1/portal/situs/{kode}/menu` (tabel portal_menu). */\nexport interface MenuPortal {\n id: number;\n label: string;\n label_en?: string | null;\n tipe?: 'halaman' | 'kategori' | 'url' | 'modul';\n ref_id?: number | null;\n url?: string | null;\n tab_baru?: boolean | number;\n anak?: MenuPortal[];\n [k: string]: any;\n}\n\n/** Bawaan: url apa adanya; modul → /{nama-modul}; halaman → /halaman/{id}; kategori → /kategori/{id}. */\nexport function hrefMenuPortal(m: MenuPortal): string | undefined {\n if (m.tipe === 'modul') return `/${String(m.url ?? '').replace(/^\\//, '')}`;\n if (m.tipe === 'halaman' && m.ref_id) return `/halaman/${m.ref_id}`;\n if (m.tipe === 'kategori' && m.ref_id) return `/kategori/${m.ref_id}`;\n return m.url || undefined;\n}\n\n/**\n * Ubah pohon menu portal ke NavbarMenu. Tiga tingkat (induk → judul kolom → tautan) menjadi mega menu;\n * dua tingkat menjadi dropdown biasa.\n */\nexport function keNavbarMenu(items: MenuPortal[], opts: { href?: (m: MenuPortal) => string | undefined; bahasa?: 'id' | 'en'; ekstra?: (m: MenuPortal) => Partial<NavbarMenu> } = {}): NavbarMenu[] {\n const href = opts.href ?? hrefMenuPortal;\n const lbl = (m: MenuPortal) => (opts.bahasa === 'en' && m.label_en) || m.label;\n const link = (m: MenuPortal): NavbarLink => ({ key: String(m.id), label: lbl(m), href: href(m), external: Boolean(Number(m.tab_baru)), description: m.deskripsi ?? undefined });\n return items.map((m) => {\n const anak = m.anak ?? [];\n const base: NavbarMenu = { key: String(m.id), label: lbl(m), href: anak.length ? undefined : href(m), external: Boolean(Number(m.tab_baru)) };\n if (!anak.length) return { ...base, ...opts.ekstra?.(m) };\n const mega = anak.some((a) => a.anak?.length);\n return {\n ...base,\n ...(mega ? { columns: anak.map((a) => ({ title: lbl(a), items: a.anak?.length ? a.anak.map(link) : [link(a)] })) } : { items: anak.map(link) }),\n ...opts.ekstra?.(m),\n };\n });\n}\n\nexport interface NavbarPortalProps extends Omit<NavbarProps, 'menus' | 'brand'> {\n /** Kode situs portal. */\n situs: string;\n /** Lokasi menu (bawaan 'utama'). */\n lokasi?: 'utama' | 'atas' | 'footer' | 'sidebar';\n /** Logo; bawaan <LogoSitus situs={situs} app={app} />. */\n brand?: React.ReactNode;\n app?: UnipoApp;\n /** Pemetaan tautan menu ke URL aplikasi Anda. */\n href?: (m: MenuPortal) => string | undefined;\n bahasa?: 'id' | 'en';\n /** Tambahkan ikon, deskripsi, atau kartu sorotan ke menu tertentu, mis. (m) => m.label === 'Akademik' ? { featured: … } : {}. */\n ekstra?: (m: MenuPortal) => Partial<NavbarMenu>;\n /** Menu tambahan di ujung (mis. tautan aplikasi) atau saat API belum menjawab. */\n menuTambahan?: NavbarMenu[];\n}\n\n/** Navbar portal yang menunya diambil dari pengaturan situs (`/v1/portal/situs/{kode}/menu`), lengkap dengan mega menu. */\nexport function NavbarPortal({ situs, lokasi = 'utama', brand, app, href, bahasa, ekstra, menuTambahan = [], variant = 'portal', ...rest }: NavbarPortalProps) {\n const q = useSiakadQuery<Record<string, MenuPortal[]>>(['portal-menu', situs, lokasi], (s, signal) => s.portal.getSitusByKodeMenu(situs, { lokasi }, { signal }) as never, { staleTime: 5 * 60_000 });\n const menus = React.useMemo(() => [...keNavbarMenu(q.data?.[lokasi] ?? [], { href, bahasa, ekstra }), ...menuTambahan], [q.data, lokasi, href, bahasa, ekstra, menuTambahan]);\n return <Navbar brand={brand ?? <LogoSitus situs={situs} app={app} />} menus={menus} variant={variant} {...rest} />;\n}\n\n// ================================================================ FAQ portal\nexport interface FaqPortalProps extends Omit<FaqProps, 'items' | 'loading' | 'onSearch'> {\n /** Kode situs; kosong = semua situs. */\n situs?: string;\n /** ID atau slug kategori FAQ. */\n kategori?: string;\n /** Sertakan FAQ situs turunan (fakultas, prodi). */\n turunan?: boolean;\n bahasa?: 'id' | 'en';\n /** Maksimal pertanyaan (bawaan 100). */\n jumlah?: number;\n}\n\n/** FAQ dari portal (`/v1/portal/faq`), dikelompokkan per kategori dengan pencarian. */\nexport function FaqPortal({ situs, kategori, turunan, bahasa, jumlah = 100, ...rest }: FaqPortalProps) {\n const query = { ...(situs ? { situs } : {}), ...(kategori ? { kategori } : {}), ...(turunan ? { turunan: '1' } : {}), per_page: jumlah };\n const q = useSiakadQuery<Row[]>(['portal-faq', query], (s, signal) => s.portal.getFaq(query, { signal }) as never, { staleTime: 5 * 60_000 });\n const items = (q.data ?? []).map((f) => ({\n id: f.id,\n question: String((bahasa === 'en' && f.pertanyaan_en) || f.pertanyaan || f.judul || ''),\n answer: String((bahasa === 'en' && f.jawaban_en) || f.jawaban || ''),\n category: f.kategori?.nama ?? undefined,\n }));\n if (q.error && !q.data) return <Faq {...rest} items={[]} />;\n return <Faq {...rest} items={items} loading={q.loading && !q.data} />;\n}\n","'use client';\nimport * as React from 'react';\nimport { Activity, AppWindow, Ban, Gauge, KeyRound, LogIn, LogOut, MonitorSmartphone, Settings2, ShieldAlert, ShieldCheck, TriangleAlert, Users } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen, formatRelative, formatTime } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Alert, DescriptionList, Empty, Pagination } from '../components/display';\nimport { BarList, LineChart, Panel, SegmentBar, StatCard, StatGrid } from '../components/charts';\nimport { CopyButton } from '../components/code';\nimport { FilterBar, type FilterValues, type DateRangeValue } from '../components/filter';\nimport { SegmentedControl } from '../components/forms';\nimport { ConfirmDialog, Sheet } from '../components/overlays';\nimport { DataTable, type DataColumn } from '../components/data-table';\nimport { pesanGalat, useSiakadQuery } from './provider';\nimport { KodeLaporan } from '../components/galat';\nimport { invalidateSso, useSsoAdmin, useSsoQuery } from './aplikasi';\n\n/*\n * Log untuk admin: permintaan API SIAKAD (/v1/rbac/log-api, dari storage/logs/api-*.log), ringkasan grafiknya,\n * log aktivitas SSO (/api/admin/audit: login, gagal login, logout, perubahan admin), dan keamanan akun satu pengguna\n * (sesi aktif + riwayat login, keluarkan dari semua perangkat).\n */\n\nconst hariIni = () => new Date().toISOString().slice(0, 10);\nconst mundur = (hari: number) => new Date(Date.now() - (hari - 1) * 86_400_000).toISOString().slice(0, 10);\n\n// ================================================================ Log API\nexport interface BarisLogApi {\n waktu: string;\n request_id?: string | null;\n method: string;\n path: string;\n query?: string | null;\n status: number;\n ms: number;\n client_id?: string | null;\n username?: string | null;\n level?: string | null;\n lingkungan?: string | null;\n ip?: string | null;\n}\n\nexport const nadaStatus = (st: number): BadgeVariant => (st >= 500 ? 'danger' : st >= 400 ? 'warning' : st >= 300 ? 'info' : 'success');\nconst nadaMs = (ms: number) => (ms >= 2000 ? 'danger' : ms >= 800 ? 'warning' : undefined);\n\nexport function LencanaMetode({ method }: { method: string }) {\n return (\n <span className=\"u-http-method\" data-method={method.toUpperCase()}>\n {method.toUpperCase()}\n </span>\n );\n}\n\nexport interface LogApiProps {\n /** Batasi ke satu aplikasi (klien API). */\n clientId?: string;\n username?: string;\n /** Rentang awal dalam hari (bawaan 1 = hari ini, maks 31). */\n hari?: number;\n perPage?: number;\n /** Tampilkan bilah saringan (bawaan true). */\n saringan?: boolean;\n className?: string;\n}\n\n/**\n * Tabel permintaan API terbaru dulu: metode, path, status, durasi, aplikasi, pengguna. Saring status, metode, tanggal,\n * dan path; klik baris untuk rincian (request ID, IP, query, database).\n */\nexport function LogApi({ clientId, username, hari = 1, perPage: pp = 50, saringan = true, className }: LogApiProps) {\n const [f, setF] = React.useState<FilterValues>({});\n const [page, setPage] = React.useState(1);\n const [perPage, setPerPage] = React.useState(pp);\n const [pilih, setPilih] = React.useState<BarisLogApi | null>(null);\n const tgl = (f.tanggal ?? {}) as DateRangeValue;\n const query = {\n dari: tgl.from || (tgl.to ? undefined : mundur(hari)),\n sampai: tgl.to || (tgl.from ? undefined : hariIni()),\n client_id: clientId ?? ((f.client_id as string) || undefined),\n username: username ?? ((f.username as string) || undefined),\n status: (f.status as string) || undefined,\n method: (f.method as string) || undefined,\n path: (f.path as string)?.trim() || undefined,\n page,\n per_page: perPage,\n };\n const q = useSiakadQuery<BarisLogApi[]>(['rbac', 'log-api', query], (s, signal) => s.request({ method: 'GET', path: '/v1/rbac/log-api', query }, { signal }), { staleTime: 15_000 });\n const kolom: DataColumn<BarisLogApi>[] = [\n {\n key: 'waktu',\n header: 'Waktu',\n shrink: true,\n cell: (r) => (\n <time dateTime={r.waktu} title={formatDate(r.waktu, 'long')} className=\"u-log-time\">\n {query.dari !== query.sampai && <small>{formatDate(r.waktu, 'short')}</small>}\n {formatTime(r.waktu)}\n </time>\n ),\n mobile: 'subtitle',\n },\n {\n key: 'path',\n header: 'Endpoint',\n cell: (r) => (\n <span className=\"u-log-path\">\n <LencanaMetode method={r.method} />\n <code>{r.path}</code>\n </span>\n ),\n mobile: 'title',\n },\n {\n key: 'status',\n header: 'Status',\n shrink: true,\n cell: (r) => (\n <Badge variant={nadaStatus(r.status)} shape=\"square\">\n {r.status}\n </Badge>\n ),\n mobile: 'badge',\n },\n {\n key: 'ms',\n header: 'Durasi',\n align: 'end',\n shrink: true,\n cell: (r) => (\n <span className=\"u-log-ms\" data-tone={nadaMs(r.ms)}>\n {formatNumber(r.ms)} ms\n </span>\n ),\n },\n ...(clientId ? [] : [{ key: 'client_id', header: 'Aplikasi', cell: (r: BarisLogApi) => (r.client_id ? <code>{r.client_id}</code> : '–') }]),\n ...(username ? [] : [{ key: 'username', header: 'Pengguna', cell: (r: BarisLogApi) => r.username || <span className=\"u-app-muted\">token aplikasi</span> }]),\n ];\n const ubah = (v: FilterValues) => {\n setF(v);\n setPage(1);\n };\n return (\n <div className={cn('u-log', className)}>\n <DataTable\n columns={kolom}\n rows={q.data}\n rowKey={(r) => `${r.request_id ?? ''}${r.waktu}${r.path}`}\n loading={q.loading}\n error={q.error}\n onRetry={q.refetch}\n page={page}\n perPage={perPage}\n total={Number(q.meta?.total ?? q.data?.length ?? 0)}\n onPageChange={setPage}\n onPerPageChange={(n) => (setPerPage(n), setPage(1))}\n perPageOptions={[25, 50, 100, 200]}\n onRowClick={setPilih}\n defaultDensity=\"compact\"\n columnToggle={false}\n exportCsv=\"log-api\"\n filtered={Object.values(f).some(Boolean)}\n emptyFiltered={{ onReset: () => ubah({}) }}\n empty={{ icon: <Activity />, title: 'Belum ada permintaan', description: 'Tidak ada permintaan API pada rentang tanggal ini.' }}\n toolbar={\n saringan ? (\n <FilterBar\n value={f}\n onValueChange={ubah}\n search={{ placeholder: 'Cari path, mis. /v1/krs', key: 'path' }}\n fields={[\n { key: 'tanggal', label: 'Tanggal', type: 'date-range' },\n {\n key: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { value: 'sukses', label: 'Berhasil (< 400)' },\n { value: 'galat', label: 'Galat (≥ 400)' },\n { value: '4xx', label: '4xx' },\n { value: '5xx', label: '5xx' },\n ],\n },\n { key: 'method', label: 'Metode', type: 'select', options: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].map((m) => ({ value: m, label: m })) },\n ]}\n />\n ) : undefined\n }\n />\n {q.meta?.terpotong ? <Alert variant=\"warning\">Log terlalu besar untuk dibaca sekaligus; persempit rentang tanggal atau saringan.</Alert> : null}\n <Sheet open={pilih != null} onOpenChange={(o) => !o && setPilih(null)} title=\"Rincian permintaan\" size=\"md\">\n {pilih && <RincianLogApi baris={pilih} />}\n </Sheet>\n </div>\n );\n}\n\nexport function RincianLogApi({ baris: r }: { baris: BarisLogApi }) {\n return (\n <div className=\"u-log-detail\">\n <p className=\"u-log-path u-log-path-lg\">\n <LencanaMetode method={r.method} />\n <code>\n {r.path}\n {r.query ? `?${r.query}` : ''}\n </code>\n </p>\n <DescriptionList\n items={[\n { label: 'Waktu', value: `${formatDate(r.waktu, 'long')} ${formatTime(r.waktu)}` },\n { label: 'Status', value: <Badge variant={nadaStatus(r.status)}>{r.status}</Badge> },\n { label: 'Durasi', value: `${formatNumber(r.ms)} ms` },\n {\n label: 'Request ID',\n value: r.request_id ? (\n <span className=\"u-app-id\">\n <code>{r.request_id}</code>\n <CopyButton text={r.request_id} label=\"Salin request ID\" />\n </span>\n ) : null,\n },\n { label: 'Aplikasi', value: r.client_id ? <code>{r.client_id}</code> : null },\n { label: 'Pengguna', value: r.username ? `${r.username}${r.level ? ` (${r.level})` : ''}` : 'Token aplikasi' },\n { label: 'Database', value: r.lingkungan ? (r.lingkungan === 'live' ? 'Live' : 'Development') : null },\n { label: 'IP', value: r.ip ? <code>{r.ip}</code> : null },\n ]}\n />\n <p className=\"u-app-muted\">Log tidak menyimpan token, password, maupun isi permintaan.</p>\n </div>\n );\n}\n\n// ================================================================ Ringkasan log API\nexport interface RingkasanLogApiData {\n dari: string;\n sampai: string;\n per: 'jam' | 'hari';\n jumlah: number;\n galat_4xx: number;\n galat_5xx: number;\n tingkat_galat: number;\n ms_rata: number;\n ms_p50: number;\n ms_p95: number;\n pengguna_unik: number;\n seri: Array<{ waktu: string; jumlah: number; galat: number }>;\n status: Array<{ status: number; jumlah: number }>;\n endpoint_teratas: Array<{ endpoint: string; jumlah: number; galat: number; ms_rata: number }>;\n klien_teratas: Array<{ client_id: string; jumlah: number; galat: number }>;\n terpotong: boolean;\n}\n\nexport interface RingkasanLogApiProps {\n clientId?: string;\n /** Rentang awal: 1, 7, atau 30 hari (bawaan 7). */\n hari?: 1 | 7 | 30;\n /** Hanya kartu angka + grafik (untuk tab detail aplikasi). */\n ringkas?: boolean;\n className?: string;\n}\n\n/** Dasbor log API: angka (permintaan, tingkat galat, p95, pengguna), grafik per jam/hari, sebaran status, endpoint dan aplikasi teratas. */\nexport function RingkasanLogApi({ clientId, hari: awal = 7, ringkas, className }: RingkasanLogApiProps) {\n const [hari, setHari] = React.useState<1 | 7 | 30>(awal);\n const query = { dari: mundur(hari), sampai: hariIni(), client_id: clientId };\n const q = useSiakadQuery<RingkasanLogApiData>(['rbac', 'log-api-ringkasan', query], (s, signal) => s.request({ method: 'GET', path: '/v1/rbac/log-api/ringkasan', query }, { signal }), {\n staleTime: 30_000,\n });\n const d = q.data;\n const muat = q.loading && !d;\n if (q.error && !d)\n return (\n <Alert variant=\"danger\" title=\"Ringkasan log gagal dimuat\">\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n );\n const label = (w: string) => (d?.per === 'jam' ? w.slice(11, 16) : new Date(`${w}T00:00:00`).toLocaleDateString('id-ID', { day: 'numeric', month: 'short' }));\n const statusKel = [2, 3, 4, 5].map((k) => ({ label: `${k}xx`, value: (d?.status ?? []).filter((s) => Math.floor(s.status / 100) === k).reduce((n, s) => n + s.jumlah, 0) }));\n const warna: Record<string, string> = { '2xx': 'var(--u-success)', '3xx': 'var(--u-info)', '4xx': 'var(--u-warning)', '5xx': 'var(--u-danger)' };\n return (\n <div className={cn('u-log-summary', className)}>\n <div className=\"u-log-summary-bar\">\n <SegmentedControl<'1' | '7' | '30'>\n value={String(hari) as '1' | '7' | '30'}\n onValueChange={(v) => setHari(Number(v) as 1 | 7 | 30)}\n options={[\n { value: '1', label: 'Hari ini' },\n { value: '7', label: '7 hari' },\n { value: '30', label: '30 hari' },\n ]}\n aria-label=\"Rentang waktu\"\n />\n {d?.terpotong && <Badge variant=\"warning\">Sebagian log tidak terbaca</Badge>}\n </div>\n <StatGrid>\n <StatCard label=\"Permintaan\" value={formatNumber(d?.jumlah)} icon={<Activity />} loading={muat} trend={d?.seri.map((s) => s.jumlah)} />\n <StatCard\n label=\"Tingkat galat\"\n value={formatPersen((d?.tingkat_galat ?? 0) * 100)}\n hint={d ? `${formatNumber(d.galat_4xx)} 4xx · ${formatNumber(d.galat_5xx)} 5xx` : undefined}\n icon={<TriangleAlert />}\n tone={d && d.tingkat_galat > 0.05 ? 'danger' : 'neutral'}\n loading={muat}\n />\n <StatCard\n label=\"Waktu tanggap p95\"\n value={`${formatNumber(d?.ms_p95)} ms`}\n hint={d ? `median ${formatNumber(d.ms_p50)} ms` : undefined}\n icon={<Gauge />}\n tone={d && d.ms_p95 > 1500 ? 'warning' : 'info'}\n loading={muat}\n />\n <StatCard label=\"Pengguna unik\" value={formatNumber(d?.pengguna_unik)} icon={<Users />} tone=\"neutral\" loading={muat} />\n </StatGrid>\n <Panel title={d?.per === 'jam' ? 'Permintaan per jam' : 'Permintaan per hari'}>\n <LineChart\n labels={(d?.seri ?? []).map((s) => label(s.waktu))}\n series={[\n { label: 'Permintaan', values: (d?.seri ?? []).map((s) => s.jumlah) },\n { label: 'Galat', values: (d?.seri ?? []).map((s) => s.galat), color: 'var(--u-danger)' },\n ]}\n loading={muat}\n height={200}\n />\n </Panel>\n {!ringkas && (\n <div className=\"u-log-summary-grid\">\n <Panel title=\"Endpoint teratas\" description=\"Path dengan ID digabung, mis. /v1/mahasiswa/{id}\">\n <BarList\n loading={muat}\n items={(d?.endpoint_teratas ?? []).map((e) => ({\n label: <code className=\"u-log-endpoint\">{e.endpoint}</code>,\n value: e.jumlah,\n secondary: `${formatNumber(e.ms_rata)} ms${e.galat ? ` · ${formatNumber(e.galat)} galat` : ''}`,\n }))}\n />\n </Panel>\n <div className=\"u-log-summary-col\">\n {!clientId && (\n <Panel title=\"Aplikasi teratas\">\n <BarList\n loading={muat}\n items={(d?.klien_teratas ?? []).map((k) => ({ label: <code>{k.client_id}</code>, value: k.jumlah, secondary: k.galat ? `${formatNumber(k.galat)} galat` : undefined }))}\n />\n </Panel>\n )}\n <Panel title=\"Sebaran status\">\n {muat ? <Skeleton style={{ height: 40 }} /> : <SegmentBar data={statusKel.map((s) => ({ ...s, color: warna[s.label] }))} format={(n) => formatNumber(n)} />}\n <ul className=\"u-log-status\">\n {(d?.status ?? []).map((s) => (\n <li key={s.status}>\n <Badge variant={nadaStatus(s.status)} shape=\"square\">\n {s.status}\n </Badge>\n <span>{formatNumber(s.jumlah)}</span>\n </li>\n ))}\n </ul>\n </Panel>\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ================================================================ Log aktivitas SSO\nexport interface BarisAudit {\n id: number;\n time: string;\n event: string;\n username: string;\n client_id: string;\n ip: string;\n detail: string;\n}\n\ntype Nada = 'success' | 'danger' | 'warning' | 'info' | 'neutral' | 'primary';\n/** Label dan nada tiap peristiwa SSO. */\nexport const PERISTIWA_SSO: Record<string, { label: string; nada: Nada; icon: React.ReactNode }> = {\n login: { label: 'Masuk', nada: 'success', icon: <LogIn /> },\n login_failed: { label: 'Gagal masuk', nada: 'danger', icon: <Ban /> },\n login_locked: { label: 'Akun dikunci sementara', nada: 'danger', icon: <ShieldAlert /> },\n login_suspicious: { label: 'Login mencurigakan', nada: 'warning', icon: <ShieldAlert /> },\n login_confirmed: { label: 'Login dikonfirmasi pengguna', nada: 'success', icon: <ShieldCheck /> },\n login_reported: { label: 'Login dilaporkan bukan pemilik', nada: 'danger', icon: <ShieldAlert /> },\n login_captcha_failed: { label: 'Captcha salah', nada: 'warning', icon: <Ban /> },\n logout: { label: 'Keluar', nada: 'neutral', icon: <LogOut /> },\n authorize: { label: 'Membuka aplikasi', nada: 'info', icon: <AppWindow /> },\n access_denied: { label: 'Akses aplikasi ditolak', nada: 'danger', icon: <Ban /> },\n token_authorization_code: { label: 'Token diterbitkan (login)', nada: 'info', icon: <KeyRound /> },\n token_refresh_token: { label: 'Token diperbarui', nada: 'info', icon: <KeyRound /> },\n password_reset_requested: { label: 'Minta reset password', nada: 'info', icon: <KeyRound /> },\n password_reset: { label: 'Password direset', nada: 'warning', icon: <KeyRound /> },\n password_reset_failed: { label: 'Reset password gagal', nada: 'danger', icon: <KeyRound /> },\n password_reset_mail_failed: { label: 'Email reset gagal terkirim', nada: 'warning', icon: <KeyRound /> },\n password_reset_unknown: { label: 'Reset untuk akun tak dikenal', nada: 'warning', icon: <KeyRound /> },\n session_revoked: { label: 'Sesi diakhiri', nada: 'warning', icon: <MonitorSmartphone /> },\n session_hijack_blocked: { label: 'Pembajakan sesi dicegah', nada: 'danger', icon: <ShieldAlert /> },\n device_trusted: { label: 'Perangkat dipercaya', nada: 'info', icon: <MonitorSmartphone /> },\n device_untrusted: { label: 'Perangkat tidak dipercaya lagi', nada: 'neutral', icon: <MonitorSmartphone /> },\n history_export: { label: 'Riwayat diunduh', nada: 'neutral', icon: <Activity /> },\n admin_client_create: { label: 'Aplikasi dibuat', nada: 'primary', icon: <Settings2 /> },\n admin_client_update: { label: 'Aplikasi diubah', nada: 'primary', icon: <Settings2 /> },\n admin_client_delete: { label: 'Aplikasi dihapus', nada: 'danger', icon: <Settings2 /> },\n admin_client_logo: { label: 'Logo aplikasi diganti', nada: 'primary', icon: <Settings2 /> },\n admin_client_secret: { label: 'Secret aplikasi diganti', nada: 'warning', icon: <KeyRound /> },\n admin_session_revoke: { label: 'Admin mengeluarkan pengguna', nada: 'warning', icon: <MonitorSmartphone /> },\n};\nexport const labelPeristiwa = (e: string) =>\n PERISTIWA_SSO[e] ??\n (e.startsWith('token_')\n ? { label: `Token diterbitkan (${e.slice(6).replace(/_/g, ' ')})`, nada: 'info' as Nada, icon: <KeyRound /> }\n : { label: e.replace(/_/g, ' '), nada: 'neutral' as Nada, icon: <Activity /> });\n\nconst GRUP: Array<{ value: string; label: string }> = [\n { value: 'login', label: 'Masuk & gagal masuk' },\n { value: 'logout', label: 'Keluar' },\n { value: 'authorize', label: 'Membuka aplikasi' },\n { value: 'access', label: 'Akses ditolak' },\n { value: 'password', label: 'Password' },\n { value: 'session', label: 'Sesi' },\n { value: 'token', label: 'Token' },\n { value: 'device', label: 'Perangkat' },\n { value: 'admin', label: 'Perubahan admin' },\n];\n\nexport interface LogAktivitasProps {\n username?: string;\n /** Batasi ke satu aplikasi SSO. */\n clientId?: string;\n /** Kelompok awal, mis. 'login' atau 'admin'. */\n grup?: string;\n perPage?: number;\n saringan?: boolean;\n /** Klik nama pengguna (mis. buka KeamananPengguna). */\n onPilihPengguna?: (username: string) => void;\n className?: string;\n}\n\n/**\n * Linimasa aktivitas SSO terbaru dulu: masuk, gagal masuk, keluar, membuka aplikasi, reset password, sesi dicabut,\n * dan perubahan aplikasi oleh admin. Chip jumlah per peristiwa bisa diklik untuk menyaring.\n */\nexport function LogAktivitas({ username, clientId, grup, perPage = 30, saringan = true, onPilihPengguna, className }: LogAktivitasProps) {\n const [f, setF] = React.useState<FilterValues>(grup ? { grup } : {});\n const [event, setEvent] = React.useState<string | null>(null);\n const [page, setPage] = React.useState(1);\n const tgl = (f.tanggal ?? {}) as DateRangeValue;\n const query = {\n username: username ?? ((f.username as string) || undefined),\n client_id: clientId,\n grup: (f.grup as string) || undefined,\n event: event ?? undefined,\n q: (f.q as string)?.trim() || undefined,\n dari: tgl.from,\n sampai: tgl.to,\n page,\n per_page: perPage,\n };\n const q = useSsoQuery<BarisAudit[]>(['audit', query], (sso, signal) => sso.request('GET', '/audit', { query, signal }));\n const meta = q.meta as { total?: number; last_page?: number; per_event?: Array<{ event: string; jumlah: number }> } | undefined;\n const ubah = (v: FilterValues) => {\n setF(v);\n setEvent(null);\n setPage(1);\n };\n return (\n <div className={cn('u-audit', className)}>\n {saringan && (\n <FilterBar\n value={f}\n onValueChange={ubah}\n search={{ placeholder: 'Cari pengguna, aplikasi, IP', key: 'q' }}\n resultCount={meta?.total}\n resultLabel=\"peristiwa\"\n fields={[\n { key: 'grup', label: 'Jenis', type: 'select', options: GRUP },\n { key: 'tanggal', label: 'Tanggal', type: 'date-range' },\n ]}\n />\n )}\n {meta?.per_event && meta.per_event.length > 1 && (\n <div className=\"u-audit-chips\" role=\"group\" aria-label=\"Saring per peristiwa\">\n {meta.per_event.slice(0, 8).map((p) => {\n const l = labelPeristiwa(p.event);\n const on = event === p.event;\n return (\n <button key={p.event} type=\"button\" data-on={on ? '' : undefined} data-tone={l.nada} onClick={() => (setEvent(on ? null : p.event), setPage(1))}>\n {l.label}\n <span>{formatNumber(p.jumlah)}</span>\n </button>\n );\n })}\n </div>\n )}\n {q.error && !q.data ? (\n <Alert\n variant=\"danger\"\n title=\"Log aktivitas gagal dimuat\"\n actions={\n <Button size=\"sm\" variant=\"outline\" onClick={q.refetch}>\n Coba lagi\n </Button>\n }\n >\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n ) : q.loading && !q.data ? (\n <div className=\"u-audit-list\">\n {[0, 1, 2, 3].map((i) => (\n <Skeleton key={i} style={{ height: 52 }} />\n ))}\n </div>\n ) : !q.data?.length ? (\n <Empty bordered icon={<Activity />} title=\"Belum ada aktivitas\" description=\"Tidak ada peristiwa yang cocok dengan saringan ini.\" />\n ) : (\n <ol className=\"u-audit-list\" data-loading={q.loading ? '' : undefined}>\n {q.data.map((r) => {\n const l = labelPeristiwa(r.event);\n return (\n <li key={r.id}>\n <span className=\"u-audit-icon\" data-tone={l.nada} aria-hidden>\n {l.icon}\n </span>\n <div className=\"u-audit-body\">\n <p>\n <strong>{l.label}</strong>\n {r.username && (\n <>\n {' · '}\n {onPilihPengguna ? (\n <button type=\"button\" className=\"u-audit-user\" onClick={() => onPilihPengguna(r.username)}>\n {r.username}\n </button>\n ) : (\n <span className=\"u-audit-user\">{r.username}</span>\n )}\n </>\n )}\n </p>\n <p className=\"u-audit-meta\">\n {r.client_id && !clientId && <code>{r.client_id}</code>}\n {r.ip && <span>{r.ip}</span>}\n {r.detail && <span className=\"u-audit-detail\">{r.detail}</span>}\n </p>\n </div>\n <time dateTime={r.time} title={`${formatDate(r.time, 'long')} ${formatTime(r.time)}`}>\n {formatRelative(r.time)}\n </time>\n </li>\n );\n })}\n </ol>\n )}\n {(meta?.last_page ?? 1) > 1 && <Pagination page={page} totalPages={meta!.last_page!} total={meta?.total} perPage={perPage} onPageChange={setPage} />}\n </div>\n );\n}\n\n// ================================================================ Keamanan akun pengguna\nexport interface KeamananPenggunaData {\n username: string;\n sessions: Array<{ id: string; device: string; user_agent: string; ip: string; last_ip?: string; auth_time: string; last_seen: string; expires_at: string }>;\n history: Array<{ time: string; status: string; device: string; ip: string; flags: string[]; suspicious: boolean }>;\n}\n\nconst STATUS_LOGIN: Record<string, { label: string; nada: BadgeVariant }> = {\n ok: { label: 'Berhasil', nada: 'success' },\n gagal: { label: 'Gagal', nada: 'danger' },\n diblokir: { label: 'Diblokir', nada: 'danger' },\n diakhiri: { label: 'Sesi diakhiri', nada: 'neutral' },\n};\nconst FLAG: Record<string, string> = {\n perangkat_baru: 'Perangkat baru',\n jaringan_baru: 'Jaringan baru',\n setelah_gagal: 'Setelah gagal',\n dipercaya: 'Perangkat tepercaya',\n ip_berubah: 'IP berubah',\n browser_lain: 'Browser lain',\n};\n\n/**\n * Keamanan akun satu pengguna untuk admin/helpdesk: sesi SSO aktif per perangkat, riwayat login dengan tanda mencurigakan,\n * dan tombol keluarkan dari semua perangkat.\n */\nexport function KeamananPengguna({ username, limit = 30, className }: { username: string; limit?: number; className?: string }) {\n const sso = useSsoAdmin();\n const q = useSsoQuery<KeamananPenggunaData>(['security', username, limit], (s, signal) => s.request('GET', `/users/${encodeURIComponent(username)}/security`, { query: { limit }, signal }));\n const [cabut, setCabut] = React.useState(false);\n const [info, setInfo] = React.useState<string | null>(null);\n const d = q.data;\n const kolom: DataColumn<KeamananPenggunaData['history'][number]>[] = [\n { key: 'time', header: 'Waktu', cell: (r) => `${formatDate(r.time, 'medium')} ${formatTime(r.time)}`, mobile: 'subtitle' },\n {\n key: 'status',\n header: 'Hasil',\n shrink: true,\n cell: (r) => {\n const s = STATUS_LOGIN[r.status] ?? { label: r.status, nada: 'neutral' as BadgeVariant };\n return <Badge variant={s.nada}>{s.label}</Badge>;\n },\n mobile: 'badge',\n },\n { key: 'device', header: 'Perangkat', mobile: 'title' },\n { key: 'ip', header: 'IP', cell: (r) => <code>{r.ip}</code> },\n {\n key: 'flags',\n header: 'Tanda',\n cell: (r) =>\n r.suspicious || r.flags.length ? (\n <span className=\"u-app-badges\">\n {r.suspicious && <Badge variant=\"warning\">Mencurigakan</Badge>}\n {r.flags.map((x) => (\n <Badge key={x} variant=\"outline\">\n {FLAG[x] ?? x}\n </Badge>\n ))}\n </span>\n ) : (\n '–'\n ),\n },\n ];\n if (q.error && !d)\n return (\n <Alert variant=\"danger\" title=\"Data keamanan akun gagal dimuat\">\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n );\n return (\n <div className={cn('u-security', className)}>\n {info && (\n <Alert variant=\"success\" onClick={() => setInfo(null)}>\n {info}\n </Alert>\n )}\n <Panel\n title=\"Sesi aktif\"\n description={d ? `${d.sessions.length} perangkat sedang masuk sebagai ${username}` : undefined}\n actions={\n <Button variant=\"destructive-soft\" size=\"sm\" disabled={!d?.sessions.length || !sso} onClick={() => setCabut(true)}>\n <LogOut /> Keluarkan dari semua perangkat\n </Button>\n }\n >\n {q.loading && !d ? (\n <Skeleton style={{ height: 96 }} />\n ) : d?.sessions.length ? (\n <ul className=\"u-sessions\">\n {d.sessions.map((s) => (\n <li key={s.id}>\n <span className=\"u-sessions-icon\" aria-hidden>\n <MonitorSmartphone />\n </span>\n <div>\n <strong>{s.device}</strong>\n <p>\n <code>{s.last_ip || s.ip}</code> · masuk {formatRelative(s.auth_time)} · aktif {formatRelative(s.last_seen)}\n </p>\n </div>\n <small>berakhir {formatDate(s.expires_at, 'medium')}</small>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"u-app-muted\">Tidak ada sesi aktif.</p>\n )}\n </Panel>\n <Panel title=\"Riwayat login\" description=\"Termasuk percobaan yang gagal dan tanda mencurigakan.\">\n <DataTable\n columns={kolom}\n rows={d?.history}\n rowKey={(r) => `${r.time}${r.ip}${r.status}`}\n loading={q.loading}\n columnToggle={false}\n densityToggle={false}\n defaultDensity=\"compact\"\n empty={{ title: 'Belum ada riwayat login' }}\n />\n </Panel>\n <ConfirmDialog\n open={cabut}\n onOpenChange={setCabut}\n title={`Keluarkan ${username} dari semua perangkat?`}\n description=\"Semua sesi SSO pengguna ini berakhir; mereka harus memasukkan password lagi. Sesi yang sudah terbuka di aplikasi lain tetap berjalan sampai sesi aplikasi itu berakhir.\"\n confirmLabel=\"Keluarkan\"\n tone=\"danger\"\n onConfirm={async () => {\n const r = await sso!.request<{ revoked: number }>('POST', `/users/${encodeURIComponent(username)}/revoke`);\n setInfo(`${formatNumber(r.data.revoked)} sesi diakhiri.`);\n invalidateSso();\n }}\n />\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { AppWindow, Eye, EyeOff, Globe, ImagePlus, KeyRound, LayoutGrid, List, Lock, Pencil, Plus, RefreshCw, Search, Server, ShieldCheck, Smartphone, TriangleAlert, Users } from 'lucide-react';\nimport type { Siakad } from 'unipo-siakad-sdk';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber } from '../lib/format';\nimport { Badge, Button, Skeleton } from '../components/actions';\nimport { Alert, Avatar, Card, DescriptionList, Empty, Tabs } from '../components/display';\nimport { StatCard, StatGrid } from '../components/charts';\nimport { CodeBlock, CopyButton } from '../components/code';\nimport { Checkbox, Field, Input, InputGroup, SegmentedControl, Switch, Textarea } from '../components/forms';\nimport { ConfirmDialog, Dialog, Sheet } from '../components/overlays';\nimport { Wizard, WizardReview, FormGrid } from '../components/wizard';\nimport { DataTable, type DataColumn } from '../components/data-table';\nimport { invalidateSiakad, pesanGalat, useOptionalSiakad, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\nimport { LogAktivitas, LogApi, RingkasanLogApi } from './log';\n\n/*\n * Komponen pengelolaan aplikasi integrasi (Pustikom): satu aplikasi = entri katalog hak akses SIAKAD (/v1/rbac/aplikasi)\n * + klien login SSO (API admin SSO, lewat BFF) + klien API SIAKAD (/v1/rbac/klien-api). Daftar, kartu, detail, ubah,\n * wizard pembuatan, tampilan secret sekali lihat, dan pemilih scope.\n */\n\n// ================================================================ Klien API admin SSO\nexport class SsoAdminError extends Error {\n constructor(\n public status: number,\n public code: string,\n message: string,\n ) {\n super(message);\n this.name = 'SsoAdminError';\n }\n}\n\nexport interface SsoAdminClient {\n request<T = unknown>(\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n path: string,\n opts?: { query?: Record<string, unknown>; body?: unknown; signal?: AbortSignal },\n ): Promise<{ data: T; meta?: Record<string, any> }>;\n}\n\nexport interface SsoAdminOptions {\n /** Alamat BFF yang meneruskan ke /api/admin SSO (bawaan '/bff/sso'). Jangan panggil SSO langsung dari browser: butuh client secret. */\n baseUrl?: string;\n /** Header tambahan per permintaan, mis. () => ({ 'X-CSRF-Token': csrf }). */\n headers?: () => Record<string, string>;\n /** Kirim PUT/PATCH/DELETE sebagai POST + X-HTTP-Method-Override (untuk hosting yang menolak metode itu). */\n methodOverride?: boolean;\n fetch?: typeof fetch;\n}\n\n/** Klien API admin SSO lewat BFF aplikasi Anda (cookie sesi + CSRF). */\nexport function createSsoAdmin({ baseUrl = '/bff/sso', headers, methodOverride, fetch: f }: SsoAdminOptions = {}): SsoAdminClient {\n return {\n async request(method, path, opts = {}) {\n const q = Object.entries(opts.query ?? {}).filter(([, v]) => v != null && v !== '');\n const url = `${baseUrl.replace(/\\/$/, '')}${path}${q.length ? `?${new URLSearchParams(q.map(([k, v]) => [k, String(v)]))}` : ''}`;\n const h: Record<string, string> = { Accept: 'application/json', ...headers?.() };\n if (opts.body !== undefined) h['Content-Type'] = 'application/json';\n let m: string = method;\n if (methodOverride && method !== 'GET' && method !== 'POST') {\n h['X-HTTP-Method-Override'] = method;\n m = 'POST';\n }\n const res = await (f ?? fetch)(url, { method: m, headers: h, body: opts.body === undefined ? undefined : JSON.stringify(opts.body), credentials: 'same-origin', signal: opts.signal });\n const json = (await res.json().catch(() => null)) as { data?: unknown; meta?: Record<string, any>; error?: { code?: string; message?: string } } | null;\n if (!res.ok) throw new SsoAdminError(res.status, json?.error?.code ?? 'error', json?.error?.message ?? `SSO menjawab ${res.status}.`);\n return { data: json?.data as never, meta: json?.meta };\n },\n };\n}\n\nconst SsoContext = React.createContext<SsoAdminClient | null>(null);\n/** Pasang klien admin SSO untuk komponen aplikasi, log aktivitas, dan keamanan pengguna. */\nexport function SsoAdminProvider({ client, children }: { client: SsoAdminClient; children: React.ReactNode }) {\n return <SsoContext.Provider value={client}>{children}</SsoContext.Provider>;\n}\nexport function useSsoAdmin(): SsoAdminClient | null {\n return React.useContext(SsoContext);\n}\n\nconst ssoListeners = new Set<() => void>();\n/** Muat ulang semua data SSO yang tampil (setelah menyimpan). */\nexport function invalidateSso() {\n ssoListeners.forEach((l) => l());\n}\n\n/** Query sederhana ke API admin SSO (tanpa cache bersama). */\nexport function useSsoQuery<T>(\n key: ReadonlyArray<unknown>,\n fn: (sso: SsoAdminClient, signal: AbortSignal) => Promise<{ data: T; meta?: Record<string, any> }>,\n opts: { enabled?: boolean } = {},\n): QueryState<T> {\n const sso = useSsoAdmin();\n const k = JSON.stringify(key);\n const enabled = opts.enabled ?? true;\n const [nonce, setNonce] = React.useState(0);\n const [st, setSt] = React.useState<{ r?: { data: T; meta?: Record<string, any> }; loading: boolean; error: Error | null }>({ loading: enabled, error: null });\n const fnRef = React.useRef(fn);\n fnRef.current = fn;\n React.useEffect(() => {\n const l = () => setNonce((n) => n + 1);\n ssoListeners.add(l);\n return () => void ssoListeners.delete(l);\n }, []);\n React.useEffect(() => {\n if (!enabled) return void setSt((s) => ({ ...s, loading: false }));\n if (!sso) return void setSt({ loading: false, error: new SsoAdminError(0, 'no_client', 'Klien admin SSO belum dipasang (<SsoAdminProvider>).') });\n const ctrl = new AbortController();\n setSt((s) => ({ ...s, loading: true, error: null }));\n fnRef\n .current(sso, ctrl.signal)\n .then((r) => !ctrl.signal.aborted && setSt({ r, loading: false, error: null }))\n .catch((e: Error) => !ctrl.signal.aborted && e?.name !== 'AbortError' && setSt((s) => ({ ...s, loading: false, error: e })));\n return () => ctrl.abort();\n }, [k, sso, enabled, nonce]);\n return { data: st.r?.data, meta: st.r?.meta as never, loading: st.loading, error: st.error, refetch: () => setNonce((n) => n + 1) };\n}\n\n// ================================================================ Tipe\nexport type JenisAplikasi = 'web' | 'mobile' | 'layanan' | 'api';\n\n/** Aplikasi di katalog hak akses SIAKAD (/v1/rbac/aplikasi). */\nexport interface AplikasiRbac {\n id: number;\n kode: string;\n nama: string;\n keterangan?: string | null;\n jenis: JenisAplikasi;\n url?: string | null;\n client_id_api?: string | null;\n client_id_sso?: string | null;\n sistem?: boolean;\n aktif: boolean;\n urut?: number;\n created_at?: string | null;\n}\n\n/** Klien login SSO (/api/admin/clients). */\nexport interface KlienSso {\n id: string;\n name: string;\n description?: string;\n redirect_uris: string[];\n post_logout_redirect_uris: string[];\n frontchannel_logout_uri?: string;\n levels?: string[];\n permission?: string;\n portal_url?: string;\n active: boolean;\n logo_url?: string | null;\n admin?: boolean;\n created_at?: string;\n updated_at?: string;\n}\n\n/** Klien API SIAKAD (/v1/rbac/klien-api). */\nexport interface KlienApi {\n id: string;\n name: string;\n scopes: string[];\n allow_user_login: boolean;\n trust_user_ip?: boolean;\n sso_audience?: string | null;\n allowed_ips: string[];\n allowed_origins: string[];\n prodi?: string[];\n rate_limit?: number | null;\n active: boolean;\n created_at?: string;\n logo_uri?: string | null;\n lingkungan?: 'live' | 'development' | string;\n}\n\n/** Satu aplikasi nyata: gabungan katalog, klien SSO, dan klien API. */\nexport interface AplikasiTerpadu {\n kunci: string;\n kode: string;\n nama: string;\n keterangan?: string | null;\n jenis: JenisAplikasi;\n url: string | null;\n logo: string | null;\n aktif: boolean;\n bawaan: boolean;\n /** Login SSO dibatasi izin <kode>.akses. */\n terbatas: boolean;\n rbac?: AplikasiRbac;\n sso?: KlienSso;\n api?: KlienApi;\n}\n\n// ================================================================ Data\nconst A = '/v1/rbac';\nconst sekali = { staleTime: 60_000 };\n\nexport function useAplikasiRbac() {\n return useSiakadQuery<AplikasiRbac[]>(['rbac', 'aplikasi'], (s, signal) => s.request({ method: 'GET', path: `${A}/aplikasi`, query: { per_page: 100 } }, { signal }), sekali);\n}\nexport function useKlienApi() {\n return useSiakadQuery<KlienApi[]>(['rbac', 'klien-api'], (s, signal) => s.request({ method: 'GET', path: `${A}/klien-api` }, { signal }), sekali);\n}\n/** Katalog scope API: { 'krs:read': 'Baca KRS', ... }. */\nexport function useKatalogScope() {\n return useSiakadQuery<Record<string, string>>(['rbac', 'scope'], (s, signal) => s.request({ method: 'GET', path: `${A}/klien-api/scope` }, { signal }), { staleTime: 10 * 60_000 });\n}\nexport function usePeranRbac() {\n return useSiakadQuery<Array<{ id: number; kode: string; nama: string; aktif: boolean; level_siakad?: string | null }>>(\n ['rbac', 'peran'],\n (s, signal) => s.request({ method: 'GET', path: `${A}/peran`, query: { per_page: 100 } }, { signal }),\n sekali,\n );\n}\nexport function useKlienSso() {\n return useSsoQuery<KlienSso[]>(['clients'], (sso, signal) => sso.request('GET', '/clients', { signal }));\n}\n\n/** Client ID SSO dari kode aplikasi (SSO hanya menerima huruf kecil, angka, garis bawah). */\nexport const idSsoDariKode = (kode: string) => kode.replace(/-/g, '_');\n\n/**\n * Gabungkan katalog, klien SSO, dan klien API menjadi satu baris per aplikasi. Urutan pencocokan: tautan tersimpan\n * (client_id_sso / client_id_api), client ID sama dengan kode, lalu sso_audience klien API. Klien tanpa pasangan tampil sendiri.\n */\nexport function gabungAplikasi(rbac: AplikasiRbac[], sso: KlienSso[], api: KlienApi[]): AplikasiTerpadu[] {\n const pakaiSso = new Set<string>();\n const pakaiApi = new Set<string>();\n const hasil: AplikasiTerpadu[] = rbac.map((a) => {\n const s = sso.find((c) => c.id === a.client_id_sso) ?? sso.find((c) => !a.client_id_sso && c.id === idSsoDariKode(a.kode));\n if (s) pakaiSso.add(s.id);\n const k = api.find((c) => c.id === a.client_id_api) ?? (a.client_id_api ? undefined : api.find((c) => !pakaiApi.has(c.id) && (c.id === a.kode || (s && c.sso_audience === s.id))));\n if (k) pakaiApi.add(k.id);\n return {\n kunci: a.kode,\n kode: a.kode,\n nama: a.nama,\n keterangan: a.keterangan,\n jenis: a.jenis,\n url: a.url || s?.portal_url || null,\n logo: s?.logo_url ?? k?.logo_uri ?? null,\n aktif: a.aktif && (s ? s.active : true) && (k ? k.active : true),\n bawaan: !!a.sistem,\n terbatas: !!s?.permission,\n rbac: a,\n sso: s,\n api: k,\n };\n });\n for (const s of sso) {\n if (pakaiSso.has(s.id) || s.admin) continue;\n hasil.push({\n kunci: `sso:${s.id}`,\n kode: s.id,\n nama: s.name,\n keterangan: s.description,\n jenis: 'web',\n url: s.portal_url || null,\n logo: s.logo_url ?? null,\n aktif: s.active,\n bawaan: false,\n terbatas: !!s.permission,\n sso: s,\n });\n }\n for (const k of api) {\n if (pakaiApi.has(k.id)) continue;\n hasil.push({ kunci: `api:${k.id}`, kode: k.id, nama: k.name, jenis: 'api', url: null, logo: k.logo_uri ?? null, aktif: k.active, bawaan: false, terbatas: false, api: k });\n }\n return hasil;\n}\n\nexport interface AplikasiTerpaduState {\n data: AplikasiTerpadu[] | undefined;\n loading: boolean;\n error: Error | null;\n /** Galat sumber yang tidak wajib (SSO atau klien API), ditampilkan sebagai peringatan. */\n peringatan: string[];\n refetch: () => void;\n}\n\n/** Semua aplikasi integrasi, sudah digabung. Bila SSO belum terpasang, daftar tetap tampil dari SIAKAD. */\nexport function useAplikasiTerpadu(): AplikasiTerpaduState {\n const rbac = useAplikasiRbac();\n const sso = useKlienSso();\n const api = useKlienApi();\n const data = React.useMemo(() => (rbac.data ? gabungAplikasi(rbac.data, sso.data ?? [], api.data ?? []) : undefined), [rbac.data, sso.data, api.data]);\n const peringatan = [sso.error && `Data login SSO tidak terbaca: ${pesanGalat(sso.error)}`, api.error && `Klien API tidak terbaca: ${pesanGalat(api.error)}`].filter(Boolean) as string[];\n return {\n data,\n loading: rbac.loading || (sso.loading && !sso.data) || (api.loading && !api.data),\n error: rbac.error,\n peringatan,\n refetch: () => {\n rbac.refetch();\n sso.refetch();\n api.refetch();\n },\n };\n}\n\nconst daftarTeks = (t: string) =>\n t\n .split(/[\\n,]+/)\n .map((x) => x.trim())\n .filter(Boolean);\nconst hostDari = (u?: string | null) => (u ? u.replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '') : '');\nconst JENIS: Record<JenisAplikasi, { label: string; pendek: string; icon: React.ReactNode }> = {\n web: { label: 'Aplikasi web', pendek: 'Web', icon: <Globe /> },\n mobile: { label: 'Aplikasi mobile', pendek: 'Mobile', icon: <Smartphone /> },\n layanan: { label: 'Layanan server', pendek: 'Server', icon: <Server /> },\n api: { label: 'Integrasi API', pendek: 'API', icon: <KeyRound /> },\n};\n\n// ================================================================ Tampilan kecil\n/** Logo aplikasi; tanpa gambar memakai inisial berwarna tetap. */\nexport function IkonAplikasi({ nama, src, size = 'md', className }: { nama: string; src?: string | null; size?: 'sm' | 'md' | 'lg' | 'xl'; className?: string }) {\n return <Avatar name={nama || '?'} src={src ?? undefined} size={size} shape=\"square\" className={cn('u-app-icon', className)} />;\n}\n\n/** Lencana status aplikasi: aktif/nonaktif, login SSO, klien API, login terbatas, bawaan, lingkungan data. */\nexport function LencanaAplikasi({ aplikasi: a, className }: { aplikasi: AplikasiTerpadu; className?: string }) {\n return (\n <span className={cn('u-app-badges', className)}>\n <Badge variant={a.aktif ? 'success' : 'neutral'} dot>\n {a.aktif ? 'Aktif' : 'Nonaktif'}\n </Badge>\n {a.sso && <Badge variant=\"info\">SSO</Badge>}\n {a.api && <Badge variant=\"primary\">API</Badge>}\n {a.terbatas && (\n <Badge variant=\"warning\">\n <Lock aria-hidden /> Terbatas\n </Badge>\n )}\n {a.api?.lingkungan && a.api.lingkungan !== 'live' && <Badge variant=\"outline\">Development</Badge>}\n {a.bawaan && <Badge variant=\"outline\">Bawaan</Badge>}\n </span>\n );\n}\n\nexport interface KartuAplikasiProps {\n aplikasi: AplikasiTerpadu;\n onPilih?: (a: AplikasiTerpadu) => void;\n href?: string;\n /** Isi kaki kartu (tombol). */\n aksi?: React.ReactNode;\n className?: string;\n}\n\n/** Kartu satu aplikasi: logo, nama, alamat, lencana, dan ringkasan scope/redirect. */\nexport function KartuAplikasi({ aplikasi: a, onPilih, href, aksi, className }: KartuAplikasiProps) {\n const isi = (\n <>\n <div className=\"u-app-card-head\">\n <IkonAplikasi nama={a.nama} src={a.logo} size=\"lg\" />\n <div className=\"u-app-card-title\">\n <strong>{a.nama}</strong>\n <span>{a.url ? hostDari(a.url) : <code>{a.kode}</code>}</span>\n </div>\n </div>\n {a.keterangan && <p className=\"u-app-card-desc\">{a.keterangan}</p>}\n <LencanaAplikasi aplikasi={a} />\n <dl className=\"u-app-card-meta\">\n <div>\n <dt>Jenis</dt>\n <dd>{JENIS[a.jenis]?.label ?? a.jenis}</dd>\n </div>\n <div>\n <dt>Scope API</dt>\n <dd>{a.api ? formatNumber(a.api.scopes.length) : '–'}</dd>\n </div>\n <div>\n <dt>Callback</dt>\n <dd>{a.sso ? formatNumber(a.sso.redirect_uris.length) : '–'}</dd>\n </div>\n </dl>\n {aksi && <div className=\"u-app-card-actions\">{aksi}</div>}\n </>\n );\n if (href)\n return (\n <Card render={<a href={href} />} interactive className={cn('u-app-card', className)}>\n {isi}\n </Card>\n );\n return (\n <Card\n interactive={!!onPilih}\n className={cn('u-app-card', className)}\n {...(onPilih ? { role: 'button', tabIndex: 0, onClick: () => onPilih(a), onKeyDown: (e: React.KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && (e.preventDefault(), onPilih(a)) } : {})}\n >\n {isi}\n </Card>\n );\n}\n\n// ================================================================ Daftar aplikasi\ntype Saring = 'semua' | 'sso' | 'api' | 'nonaktif';\n\nexport interface DaftarAplikasiProps {\n /** Klik kartu/baris. Bawaan: buka panel detail. */\n onPilih?: (a: AplikasiTerpadu) => void;\n /** Tautan per aplikasi (mengganti panel detail). */\n href?: (a: AplikasiTerpadu) => string;\n /** Tampilan awal. */\n tampilan?: 'kartu' | 'tabel';\n /** Tombol \"Aplikasi baru\" membuka wizard (bawaan true). */\n bolehBuat?: boolean;\n /** Dipanggil setelah wizard membuat aplikasi. */\n onDibuat?: (h: HasilAplikasiBaru) => void;\n /** Tampilkan kartu angka di atas (bawaan true). */\n statistik?: boolean;\n className?: string;\n}\n\n/**\n * Daftar aplikasi integrasi untuk admin: angka ringkas, pencarian, saringan (SSO, API, nonaktif), kartu atau tabel,\n * panel detail, dan wizard aplikasi baru.\n */\nexport function DaftarAplikasi({ onPilih, href, tampilan: awal = 'kartu', bolehBuat = true, onDibuat, statistik = true, className }: DaftarAplikasiProps) {\n const q = useAplikasiTerpadu();\n const [cari, setCari] = React.useState('');\n const [saring, setSaring] = React.useState<Saring>('semua');\n const [tampilan, setTampilan] = React.useState(awal);\n const [pilih, setPilih] = React.useState<string | null>(null);\n const [wizard, setWizard] = React.useState(false);\n const semua = q.data ?? [];\n const kata = cari.trim().toLowerCase();\n const baris = semua.filter(\n (a) =>\n (saring === 'semua' || (saring === 'sso' && a.sso) || (saring === 'api' && a.api) || (saring === 'nonaktif' && !a.aktif)) &&\n (!kata || [a.nama, a.kode, a.url, a.sso?.id, a.api?.id].some((x) => x?.toLowerCase().includes(kata))),\n );\n const buka = (a: AplikasiTerpadu) => (onPilih ? onPilih(a) : setPilih(a.kunci));\n\n const kolom: DataColumn<AplikasiTerpadu>[] = [\n {\n key: 'nama',\n header: 'Aplikasi',\n value: (a) => a.nama,\n sortable: true,\n cell: (a) => (\n <span className=\"u-app-cell\">\n <IkonAplikasi nama={a.nama} src={a.logo} size=\"sm\" />\n <span>\n <strong>{a.nama}</strong>\n <small>{a.url ? hostDari(a.url) : a.kode}</small>\n </span>\n </span>\n ),\n },\n { key: 'jenis', header: 'Jenis', value: (a) => JENIS[a.jenis]?.label ?? a.jenis, mobile: 'meta' },\n { key: 'sso', header: 'Client SSO', value: (a) => a.sso?.id ?? '', cell: (a) => (a.sso ? <code>{a.sso.id}</code> : '–'), mobile: 'meta' },\n { key: 'api', header: 'Klien API', value: (a) => a.api?.id ?? '', cell: (a) => (a.api ? <code>{a.api.id}</code> : '–'), mobile: 'meta' },\n { key: 'status', header: 'Status', value: (a) => (a.aktif ? 'Aktif' : 'Nonaktif'), cell: (a) => <LencanaAplikasi aplikasi={a} />, mobile: 'badge' },\n ];\n\n return (\n <div className={cn('u-app-list', className)}>\n {statistik && (\n <StatGrid>\n <StatCard label=\"Aplikasi\" value={formatNumber(semua.length)} icon={<AppWindow />} loading={q.loading && !q.data} />\n <StatCard label=\"Aktif\" value={formatNumber(semua.filter((a) => a.aktif).length)} icon={<ShieldCheck />} tone=\"success\" loading={q.loading && !q.data} />\n <StatCard label=\"Login SSO\" value={formatNumber(semua.filter((a) => a.sso).length)} icon={<Users />} tone=\"info\" loading={q.loading && !q.data} />\n <StatCard label=\"Klien API\" value={formatNumber(semua.filter((a) => a.api).length)} icon={<KeyRound />} tone=\"warning\" loading={q.loading && !q.data} />\n </StatGrid>\n )}\n {q.peringatan.map((p) => (\n <Alert key={p} variant=\"warning\">\n {p}\n </Alert>\n ))}\n <div className=\"u-app-toolbar\">\n <InputGroup start={<Search />} className=\"u-app-search\">\n <Input value={cari} onChange={(e) => setCari(e.target.value)} placeholder=\"Cari nama, kode, client ID\" aria-label=\"Cari aplikasi\" />\n </InputGroup>\n <SegmentedControl<Saring>\n value={saring}\n onValueChange={setSaring}\n options={[\n { value: 'semua', label: 'Semua' },\n { value: 'sso', label: 'SSO' },\n { value: 'api', label: 'API' },\n { value: 'nonaktif', label: 'Nonaktif' },\n ]}\n aria-label=\"Saring aplikasi\"\n />\n <span className=\"u-app-toolbar-end\">\n <SegmentedControl<'kartu' | 'tabel'>\n value={tampilan}\n onValueChange={setTampilan}\n options={[\n { value: 'kartu', label: <LayoutGrid />, 'aria-label': 'Tampilan kartu' },\n { value: 'tabel', label: <List />, 'aria-label': 'Tampilan tabel' },\n ]}\n />\n {bolehBuat && (\n <Button onClick={() => setWizard(true)}>\n <Plus /> Aplikasi baru\n </Button>\n )}\n </span>\n </div>\n\n {q.error ? (\n <Alert\n variant=\"danger\"\n title=\"Daftar aplikasi gagal dimuat\"\n actions={\n <Button size=\"sm\" variant=\"outline\" onClick={q.refetch}>\n Coba lagi\n </Button>\n }\n >\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n ) : tampilan === 'kartu' ? (\n q.loading && !q.data ? (\n <div className=\"u-app-grid\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} style={{ height: 196 }} />\n ))}\n </div>\n ) : baris.length ? (\n <div className=\"u-app-grid\">\n {baris.map((a) => (\n <KartuAplikasi key={a.kunci} aplikasi={a} href={href?.(a)} onPilih={href ? undefined : buka} />\n ))}\n </div>\n ) : (\n <Empty\n bordered\n icon={<AppWindow />}\n title={semua.length ? 'Tidak ada aplikasi yang cocok' : 'Belum ada aplikasi'}\n description={semua.length ? 'Ubah kata kunci atau saringan.' : 'Daftarkan aplikasi pertama untuk memberi login SSO dan akses API.'}\n actions={\n semua.length ? (\n <Button variant=\"outline\" onClick={() => (setCari(''), setSaring('semua'))}>\n Hapus saringan\n </Button>\n ) : bolehBuat ? (\n <Button onClick={() => setWizard(true)}>\n <Plus /> Aplikasi baru\n </Button>\n ) : undefined\n }\n />\n )\n ) : (\n <DataTable\n columns={kolom}\n rows={baris}\n rowKey={(a) => a.kunci}\n loading={q.loading}\n onRowClick={href ? (a) => (window.location.href = href(a)) : buka}\n columnToggle={false}\n filtered={!!kata || saring !== 'semua'}\n emptyFiltered={{ onReset: () => (setCari(''), setSaring('semua')) }}\n empty={{ icon: <AppWindow />, title: 'Belum ada aplikasi' }}\n />\n )}\n\n {!onPilih && !href && <SheetDetailAplikasi kode={pilih} open={pilih != null} onOpenChange={(o) => !o && setPilih(null)} />}\n {bolehBuat && (\n <WizardAplikasi\n open={wizard}\n onOpenChange={setWizard}\n onSelesai={(h) => {\n onDibuat?.(h);\n q.refetch();\n }}\n />\n )}\n </div>\n );\n}\n\n// ================================================================ Detail aplikasi\nexport type TabDetailAplikasi = 'ringkasan' | 'sso' | 'api' | 'log' | 'aktivitas';\n\nexport interface DetailAplikasiProps {\n /** Kode aplikasi (atau `sso:<id>` / `api:<id>` untuk klien tanpa katalog). */\n kode?: string | null;\n /** Data siap pakai (mis. dari daftar); tanpa ini diambil dari API. */\n aplikasi?: AplikasiTerpadu;\n tab?: TabDetailAplikasi;\n onTabChange?: (t: TabDetailAplikasi) => void;\n /** Tombol \"Ubah\" (bawaan: panel FormAplikasi). */\n onUbah?: (a: AplikasiTerpadu) => void;\n className?: string;\n}\n\n/** Halaman detail aplikasi: kepala dengan aksi, lalu tab ringkasan, login SSO, klien API, log API, dan log aktivitas. */\nexport function DetailAplikasi({ kode, aplikasi, tab, onTabChange, onUbah, className }: DetailAplikasiProps) {\n const q = useAplikasiTerpadu();\n const a = aplikasi ?? q.data?.find((x) => x.kunci === kode || x.kode === kode);\n const [ubah, setUbah] = React.useState(false);\n if (!a) {\n if (q.loading) return <Skeleton style={{ height: 320 }} />;\n return <Empty bordered icon={<AppWindow />} title=\"Aplikasi tidak ditemukan\" description={q.error ? pesanGalat(q.error) : `Tidak ada aplikasi dengan kode ${kode ?? ''}.`} />;\n }\n const items: Array<{ value: TabDetailAplikasi; label: string; content: React.ReactNode; disabled?: boolean }> = [\n { value: 'ringkasan', label: 'Ringkasan', content: <TabRingkasan a={a} /> },\n { value: 'sso', label: 'Login SSO', content: <TabSso a={a} /> },\n { value: 'api', label: 'Klien API', content: <TabApi a={a} /> },\n {\n value: 'log',\n label: 'Log API',\n content: a.api ? <LogApi clientId={a.api.id} /> : <Empty title=\"Belum punya klien API\" description=\"Log permintaan API muncul setelah aplikasi memakai klien API SIAKAD.\" />,\n disabled: !a.api,\n },\n { value: 'aktivitas', label: 'Aktivitas login', content: a.sso ? <LogAktivitas clientId={a.sso.id} /> : <Empty title=\"Belum memakai login SSO\" />, disabled: !a.sso },\n ];\n return (\n <div className={cn('u-app-detail', className)}>\n <header className=\"u-app-detail-head\">\n <IkonAplikasi nama={a.nama} src={a.logo} size=\"xl\" />\n <div className=\"u-app-detail-title\">\n <h2>{a.nama}</h2>\n <p>\n {a.url ? (\n <a href={a.url} target=\"_blank\" rel=\"noreferrer\">\n {hostDari(a.url)}\n </a>\n ) : (\n <code>{a.kode}</code>\n )}\n <span aria-hidden> · </span>\n {JENIS[a.jenis]?.label ?? a.jenis}\n </p>\n <LencanaAplikasi aplikasi={a} />\n </div>\n <div className=\"u-app-detail-actions\">\n <GantiSecret aplikasi={a} />\n <Button variant=\"outline\" onClick={() => (onUbah ? onUbah(a) : setUbah(true))}>\n <Pencil /> Ubah\n </Button>\n </div>\n </header>\n <Tabs items={items} value={tab} defaultValue={tab ? undefined : 'ringkasan'} onValueChange={onTabChange} />\n {!onUbah && <SheetUbahAplikasi aplikasi={ubah ? a : null} onOpenChange={(o) => !o && setUbah(false)} onTersimpan={q.refetch} />}\n </div>\n );\n}\n\n/** DetailAplikasi di panel samping. */\nexport function SheetDetailAplikasi({ kode, open, onOpenChange, aplikasi }: { kode?: string | null; aplikasi?: AplikasiTerpadu; open: boolean; onOpenChange: (o: boolean) => void }) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange} title=\"Detail aplikasi\" size=\"xl\">\n {open && <DetailAplikasi kode={kode} aplikasi={aplikasi} />}\n </Sheet>\n );\n}\n\nfunction Daftar({ isi, kosong = '–' }: { isi?: string[] | null; kosong?: string }) {\n if (!isi?.length) return <span className=\"u-app-muted\">{kosong}</span>;\n return (\n <ul className=\"u-app-uris\">\n {isi.map((x) => (\n <li key={x}>\n <code>{x}</code>\n </li>\n ))}\n </ul>\n );\n}\n\nfunction IdSalin({ id }: { id: string }) {\n return (\n <span className=\"u-app-id\">\n <code>{id}</code>\n <CopyButton text={id} label=\"Salin client ID\" />\n </span>\n );\n}\n\nfunction TabRingkasan({ a }: { a: AplikasiTerpadu }) {\n return (\n <div className=\"u-app-tab\">\n <DescriptionList\n items={[\n { label: 'Kode', value: <code>{a.kode}</code> },\n { label: 'Jenis', value: JENIS[a.jenis]?.label ?? a.jenis },\n {\n label: 'Alamat',\n value: a.url ? (\n <a href={a.url} target=\"_blank\" rel=\"noreferrer\">\n {a.url}\n </a>\n ) : null,\n },\n { label: 'Keterangan', value: a.keterangan || null },\n { label: 'Login SSO', value: a.sso ? <IdSalin id={a.sso.id} /> : 'Belum dipasang' },\n { label: 'Klien API', value: a.api ? <IdSalin id={a.api.id} /> : 'Belum dipasang' },\n {\n label: 'Siapa boleh login',\n value: a.sso ? (\n a.terbatas ? (\n <>\n Pemegang izin <code>{a.sso.permission}</code>\n </>\n ) : (\n 'Semua pengguna SIAKAD'\n )\n ) : null,\n },\n { label: 'Didaftarkan', value: a.rbac?.created_at || a.sso?.created_at || a.api?.created_at ? formatDate(a.rbac?.created_at || a.sso?.created_at || a.api?.created_at, 'long') : null },\n ]}\n />\n {a.api && (\n <section>\n <h3 className=\"u-app-subtitle\">Pemakaian API 7 hari terakhir</h3>\n <RingkasanLogApi clientId={a.api.id} ringkas />\n </section>\n )}\n </div>\n );\n}\n\nfunction TabSso({ a }: { a: AplikasiTerpadu }) {\n const s = a.sso;\n if (!s) return <Empty icon={<ShieldCheck />} title=\"Belum memakai login SSO\" description=\"Ubah aplikasi ini untuk memasang login lewat sso.unipo.ac.id.\" />;\n return (\n <DescriptionList\n className=\"u-app-tab\"\n items={[\n { label: 'Client ID', value: <IdSalin id={s.id} /> },\n {\n label: 'Status',\n value: (\n <Badge variant={s.active ? 'success' : 'neutral'} dot>\n {s.active ? 'Aktif' : 'Nonaktif'}\n </Badge>\n ),\n },\n { label: 'Alamat callback', value: <Daftar isi={s.redirect_uris} /> },\n { label: 'Setelah keluar', value: <Daftar isi={s.post_logout_redirect_uris} /> },\n { label: 'Logout serentak', value: s.frontchannel_logout_uri ? <code>{s.frontchannel_logout_uri}</code> : null },\n { label: 'Izin wajib', value: s.permission ? <code>{s.permission}</code> : 'Tidak ada (semua pengguna)' },\n { label: 'Level SIAKAD', value: s.levels?.length ? s.levels.join(', ') : 'Semua level' },\n { label: 'Alamat portal', value: s.portal_url || null },\n { label: 'Diubah', value: s.updated_at ? formatDate(s.updated_at, 'long') : null },\n ]}\n />\n );\n}\n\n/** Kelompokkan scope per sumber data: krs:read, krs:write → krs. */\nfunction kelompokScope(scopes: string[]): Array<[string, string[]]> {\n const m = new Map<string, string[]>();\n for (const s of scopes) {\n const [g] = s.split(':');\n m.set(g!, [...(m.get(g!) ?? []), s]);\n }\n return [...m.entries()].sort((x, y) => x[0].localeCompare(y[0]));\n}\n\nfunction TabApi({ a }: { a: AplikasiTerpadu }) {\n const k = a.api;\n if (!k) return <Empty icon={<KeyRound />} title=\"Belum punya klien API\" description=\"Ubah aplikasi ini untuk memberi akses API SIAKAD.\" />;\n return (\n <DescriptionList\n className=\"u-app-tab\"\n items={[\n { label: 'Client ID', value: <IdSalin id={k.id} /> },\n {\n label: 'Status',\n value: (\n <Badge variant={k.active ? 'success' : 'neutral'} dot>\n {k.active ? 'Aktif' : 'Nonaktif'}\n </Badge>\n ),\n },\n { label: 'Database', value: k.lingkungan ? (k.lingkungan === 'live' ? 'Live' : 'Development (data tiruan)') : null },\n {\n label: `Scope (${k.scopes.length})`,\n value: (\n <span className=\"u-scope-chips\">\n {k.scopes.map((s) => (\n <Badge key={s} variant={s.endsWith(':write') ? 'warning' : 'neutral'} shape=\"square\">\n {s}\n </Badge>\n ))}\n </span>\n ),\n },\n {\n label: 'Token pengguna',\n value: [k.sso_audience && `tukar login SSO (${k.sso_audience})`, k.allow_user_login && 'login username/password'].filter(Boolean).join(', ') || 'Tidak (hanya token aplikasi)',\n },\n { label: 'Batas IP', value: <Daftar isi={k.allowed_ips} kosong=\"Semua IP\" /> },\n { label: 'Origin browser', value: <Daftar isi={k.allowed_origins} kosong=\"Tidak ada (CORS tertutup)\" /> },\n { label: 'Batas permintaan', value: k.rate_limit ? `${formatNumber(k.rate_limit)} per menit` : 'Bawaan server' },\n ]}\n />\n );\n}\n\n// ================================================================ Secret sekali lihat\nexport interface IsiRahasia {\n label: string;\n nilai: string;\n /** Disamarkan sampai ditampilkan. */\n rahasia?: boolean;\n}\n\nexport interface SecretSekaliProps {\n open: boolean;\n onOpenChange: (o: boolean) => void;\n judul?: React.ReactNode;\n isi: IsiRahasia[];\n /** Isi .env siap tempel. */\n env?: string;\n}\n\n/**\n * Menampilkan client secret yang hanya muncul sekali: tersamar, bisa ditampilkan dan disalin, isi .env siap tempel,\n * dan tombol tutup baru aktif setelah admin mencentang \"sudah saya simpan\".\n */\nexport function SecretSekali({ open, onOpenChange, judul = 'Simpan kredensial ini', isi, env }: SecretSekaliProps) {\n const [simpan, setSimpan] = React.useState(false);\n const [lihat, setLihat] = React.useState<Record<number, boolean>>({});\n React.useEffect(() => {\n if (open) (setSimpan(false), setLihat({}));\n }, [open]);\n return (\n <Dialog\n open={open}\n onOpenChange={(o) => (o || simpan) && onOpenChange(o)}\n title={judul}\n description=\"Secret hanya ditampilkan sekali. Setelah dialog ini ditutup, secret tidak bisa dilihat lagi; yang bisa dilakukan hanya membuat secret baru.\"\n size=\"lg\"\n footer={\n <>\n <label className=\"u-secret-ack\">\n <Checkbox checked={simpan} onCheckedChange={(v) => setSimpan(v === true)} /> Sudah saya simpan di tempat aman\n </label>\n <Button disabled={!simpan} onClick={() => onOpenChange(false)}>\n Selesai\n </Button>\n </>\n }\n >\n <div className=\"u-secret\">\n {isi.map((r, i) => (\n <Field key={r.label} label={r.label}>\n <InputGroup\n end={\n <span className=\"u-secret-tools\">\n {r.rahasia && (\n <Button variant=\"ghost\" size=\"xs\" iconOnly aria-label={lihat[i] ? 'Sembunyikan' : 'Tampilkan'} onClick={() => setLihat((l) => ({ ...l, [i]: !l[i] }))}>\n {lihat[i] ? <EyeOff /> : <Eye />}\n </Button>\n )}\n <CopyButton text={r.nilai} label={`Salin ${r.label}`} />\n </span>\n }\n >\n <Input readOnly value={r.rahasia && !lihat[i] ? '•'.repeat(Math.min(32, r.nilai.length)) : r.nilai} className=\"u-mono\" onFocus={(e) => e.currentTarget.select()} />\n </InputGroup>\n </Field>\n ))}\n {env && <CodeBlock code={env} language=\"bash\" filename=\".env\" lineNumbers={false} />}\n </div>\n </Dialog>\n );\n}\n\n/** Isi .env untuk aplikasi integrasi. */\nexport function teksEnv(o: { issuer?: string; siakad?: string; sso?: { id: string; secret: string }; api?: { id: string; secret: string } }): string {\n const b: string[] = [];\n if (o.sso) b.push(`SSO_ISSUER=${o.issuer ?? 'https://sso.unipo.ac.id'}`, `SSO_CLIENT_ID=${o.sso.id}`, `SSO_CLIENT_SECRET=${o.sso.secret}`);\n if (o.api) b.push(`SIAKAD_API_URL=${(o.siakad ?? 'https://siakad.unipo.ac.id').replace(/\\/$/, '')}/api`, `SIAKAD_API_CLIENT_ID=${o.api.id}`, `SIAKAD_API_CLIENT_SECRET=${o.api.secret}`);\n return b.join('\\n');\n}\n\n/** Tombol ganti secret SSO/API dengan konfirmasi, lalu tampilkan secret baru sekali. */\nexport function GantiSecret({ aplikasi: a, issuer, siakadUrl }: { aplikasi: AplikasiTerpadu; issuer?: string; siakadUrl?: string }) {\n const siakad = useOptionalSiakad();\n const sso = useSsoAdmin();\n const [target, setTarget] = React.useState<'sso' | 'api' | null>(null);\n const [hasil, setHasil] = React.useState<{ judul: string; isi: IsiRahasia[]; env: string } | null>(null);\n const [galat, setGalat] = React.useState<string | null>(null);\n if (!a.sso && !a.api) return null;\n const jalan = async () => {\n setGalat(null);\n try {\n if (target === 'sso' && a.sso && sso) {\n const r = await sso.request<{ client_secret: string }>('POST', `/clients/${a.sso.id}/secret`);\n setHasil({\n judul: `Secret SSO baru ${a.nama}`,\n isi: [\n { label: 'Client ID SSO', nilai: a.sso.id },\n { label: 'Client secret SSO', nilai: r.data.client_secret, rahasia: true },\n ],\n env: teksEnv({ issuer, sso: { id: a.sso.id, secret: r.data.client_secret } }),\n });\n } else if (target === 'api' && a.api && siakad) {\n const r = await siakad.request<{ client_secret: string }>({ method: 'POST', path: `${A}/klien-api/${a.api.id}/secret` });\n setHasil({\n judul: `Secret API baru ${a.nama}`,\n isi: [\n { label: 'Client ID API', nilai: a.api.id },\n { label: 'Client secret API', nilai: r.data.client_secret, rahasia: true },\n ],\n env: teksEnv({ siakad: siakadUrl, api: { id: a.api.id, secret: r.data.client_secret } }),\n });\n }\n } catch (e) {\n setGalat(pesanGalat(e));\n }\n };\n return (\n <>\n {a.sso && (\n <Button variant=\"outline\" onClick={() => setTarget('sso')}>\n <RefreshCw /> Secret SSO\n </Button>\n )}\n {a.api && (\n <Button variant=\"outline\" onClick={() => setTarget('api')}>\n <RefreshCw /> Secret API\n </Button>\n )}\n <ConfirmDialog\n open={target != null}\n onOpenChange={(o) => !o && setTarget(null)}\n title={`Ganti secret ${target === 'sso' ? 'SSO' : 'API'} ${a.nama}?`}\n description=\"Secret lama langsung tidak berlaku. Aplikasi berhenti bisa login/memanggil API sampai .env-nya diisi secret baru.\"\n confirmLabel=\"Ganti secret\"\n tone=\"warning\"\n icon={<TriangleAlert />}\n onConfirm={jalan}\n />\n {galat && (\n <Alert variant=\"danger\" className=\"u-app-inline-alert\">\n {galat}\n </Alert>\n )}\n <SecretSekali open={hasil != null} onOpenChange={(o) => !o && setHasil(null)} judul={hasil?.judul} isi={hasil?.isi ?? []} env={hasil?.env} />\n </>\n );\n}\n\n// ================================================================ Pemilih scope\nconst AKSI: Record<string, string> = { read: 'Baca', write: 'Tulis', admin: 'Kelola' };\nconst kapital = (t: string) => t.charAt(0).toUpperCase() + t.slice(1);\n\nexport interface PilihScopeProps {\n value: string[];\n onValueChange: (v: string[]) => void;\n /** Katalog { scope: keterangan }; bawaan diambil dari /v1/rbac/klien-api/scope. */\n katalog?: Record<string, string>;\n /** Tinggi maksimum daftar (bawaan 22rem). */\n maxHeight?: string;\n className?: string;\n}\n\n/** Pilih scope API per sumber data: baris per sumber (krs, nilai, mahasiswa) dengan centang Baca/Tulis, pencarian, dan jumlah terpilih. */\nexport function PilihScope({ value, onValueChange, katalog: katalogProp, maxHeight = '22rem', className }: PilihScopeProps) {\n const q = useKatalogScope();\n const katalog = katalogProp ?? q.data ?? {};\n const [cari, setCari] = React.useState('');\n const kata = cari.trim().toLowerCase();\n const grup = kelompokScope(Object.keys(katalog)).filter(([g, list]) => !kata || g.includes(kata) || list.some((s) => katalog[s]?.toLowerCase().includes(kata)));\n const pilih = new Set(value);\n const ganti = (s: string, on: boolean) => onValueChange(on ? [...value, s] : value.filter((x) => x !== s));\n if (!katalogProp && q.loading && !q.data) return <Skeleton style={{ height: 160 }} />;\n if (!katalogProp && q.error) return <Alert variant=\"danger\">{pesanGalat(q.error, { kode: false })}<KodeLaporan error={q.error} /></Alert>;\n return (\n <div className={cn('u-scope-picker', className)}>\n <div className=\"u-scope-picker-head\">\n <InputGroup start={<Search />} size=\"sm\">\n <Input value={cari} onChange={(e) => setCari(e.target.value)} placeholder=\"Cari scope\" aria-label=\"Cari scope\" size=\"sm\" />\n </InputGroup>\n <span className=\"u-scope-count\">{formatNumber(value.length)} dipilih</span>\n {value.length > 0 && (\n <Button variant=\"ghost\" size=\"xs\" onClick={() => onValueChange([])}>\n Kosongkan\n </Button>\n )}\n </div>\n <ul className=\"u-scope-rows\" style={{ maxHeight }}>\n {grup.map(([g, list]) => (\n <li key={g}>\n <span className=\"u-scope-name\">\n <strong>{g}</strong>\n <small>{kapital(katalog[list[0]!]?.replace(/^(Baca|Tulis|Ubah|Kelola|Impor)\\s+/i, '') ?? '')}</small>\n </span>\n <span className=\"u-scope-actions\">\n {list.map((s) => {\n const aksi = s.split(':')[1] ?? s;\n return (\n <label key={s} title={katalog[s]} data-tulis={aksi !== 'read' ? '' : undefined} style={{ gridColumn: aksi === 'read' ? 1 : 2 }}>\n <Checkbox checked={pilih.has(s)} onCheckedChange={(v) => ganti(s, v === true)} aria-label={s} />\n {AKSI[aksi] ?? aksi}\n </label>\n );\n })}\n </span>\n </li>\n ))}\n {!grup.length && <li className=\"u-scope-empty\">Tidak ada scope yang cocok.</li>}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Wizard aplikasi baru\nexport interface InputAplikasiBaru {\n kode: string;\n nama: string;\n keterangan: string;\n jenis: JenisAplikasi;\n url: string;\n logo?: string | null;\n sso?: { redirect_uris: string[]; post_logout_redirect_uris: string[]; frontchannel_logout_uri: string; portal_url: string } | null;\n batasiLogin: boolean;\n peranAkses: number[];\n api?: { scopes: string[]; allow_user_login: boolean; tukarSso: boolean; allowed_ips: string[]; allowed_origins: string[] } | null;\n}\n\nexport interface HasilAplikasiBaru {\n aplikasi: AplikasiRbac;\n sso?: { id: string; secret: string };\n api?: { id: string; secret: string };\n peringatan: string[];\n}\n\n/**\n * Buat aplikasi lengkap: katalog → izin <kode>.akses + peran → klien SSO (+ logo) → klien API → tautan.\n * Langkah setelah katalog yang gagal tidak membatalkan semuanya; dikembalikan sebagai peringatan.\n */\nexport async function buatAplikasiLengkap(siakad: Siakad, sso: SsoAdminClient | null, x: InputAplikasiBaru): Promise<HasilAplikasiBaru> {\n const peringatan: string[] = [];\n const req = <T,>(method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', path: string, body?: unknown, query?: Record<string, string | number>) => siakad.request<T>({ method, path, body, query });\n let app = (await req<AplikasiRbac>('POST', `${A}/aplikasi`, { kode: x.kode, nama: x.nama, keterangan: x.keterangan || null, jenis: x.jenis, url: x.url || null, aktif: true })).data;\n const hasil: HasilAplikasiBaru = { aplikasi: app, peringatan };\n const tautan: Partial<AplikasiRbac> = {};\n const galat = (e: unknown) => (e instanceof Error ? e.message : String(e));\n let izin = '';\n if (x.batasiLogin || x.peranAkses.length) {\n try {\n izin = `${x.kode}.akses`;\n const ada = await req<unknown[]>('GET', `${A}/izin`, undefined, { kode: izin, per_page: 1 });\n if (!ada.data.length)\n await req('POST', `${A}/izin`, {\n aplikasi_id: app.id,\n kode: izin,\n jenis: 'akses',\n grup: 'Akses',\n nama: `Masuk ${x.nama}`,\n keterangan: `Boleh login ke ${x.nama} lewat SSO`,\n berlingkup: false,\n });\n for (const p of x.peranAkses) await req('POST', `${A}/peran-izin`, { peran_id: p, izin });\n } catch (e) {\n peringatan.push(`Hak akses login belum lengkap: ${galat(e)}`);\n }\n }\n if (x.sso) {\n if (!sso) peringatan.push('Klien SSO belum dibuat: klien admin SSO belum dipasang.');\n else\n try {\n const r = await sso.request<KlienSso & { client_secret: string }>('POST', '/clients', {\n body: { id: idSsoDariKode(x.kode), name: x.nama, description: x.keterangan, ...x.sso, permission: x.batasiLogin ? izin : '' },\n });\n hasil.sso = { id: r.data.id, secret: r.data.client_secret };\n tautan.client_id_sso = r.data.id;\n if (x.logo) await sso.request('POST', `/clients/${r.data.id}/logo`, { body: { data: x.logo } }).catch((e) => peringatan.push(`Logo belum terpasang: ${galat(e)}`));\n } catch (e) {\n peringatan.push(`Klien SSO gagal dibuat: ${galat(e)}`);\n }\n }\n if (x.api) {\n try {\n const { tukarSso, ...input } = x.api;\n const r = await req<KlienApi & { client_id: string; client_secret: string }>('POST', `${A}/klien-api`, { name: x.nama, ...input, sso_audience: tukarSso && hasil.sso ? hasil.sso.id : null });\n hasil.api = { id: r.data.client_id ?? r.data.id, secret: r.data.client_secret };\n tautan.client_id_api = hasil.api.id;\n } catch (e) {\n peringatan.push(`Klien API gagal dibuat: ${galat(e)}`);\n }\n }\n if (Object.keys(tautan).length) {\n try {\n app = (await req<AplikasiRbac>('PUT', `${A}/aplikasi/${app.id}`, tautan)).data;\n hasil.aplikasi = app;\n } catch (e) {\n peringatan.push(`Klien belum tertaut ke aplikasi: ${galat(e)}`);\n }\n }\n return hasil;\n}\n\nconst slug = (t: string) =>\n t\n .toLowerCase()\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 40);\n\nfunction bacaDataUri(f: File): Promise<string> {\n return new Promise((ok, gagal) => {\n const r = new FileReader();\n r.onload = () => ok(String(r.result));\n r.onerror = () => gagal(new Error('Berkas tidak bisa dibaca.'));\n r.readAsDataURL(f);\n });\n}\n\n/** Pilihan besar dengan sakelar: ikon, judul, penjelasan. */\nfunction Opsi({ icon, judul, teks, value, onChange }: { icon: React.ReactNode; judul: string; teks: string; value: boolean; onChange: (v: boolean) => void }) {\n return (\n <label className=\"u-app-option\" data-on={value ? '' : undefined}>\n <span className=\"u-app-option-icon\">{icon}</span>\n <span className=\"u-app-option-text\">\n <strong>{judul}</strong>\n <span>{teks}</span>\n </span>\n <Switch checked={value} onCheckedChange={onChange} />\n </label>\n );\n}\n\nfunction PilihLogo({ value, onChange, nama }: { value: string | null; onChange: (v: string | null) => void; nama: string }) {\n return (\n <div className=\"u-app-logo-pick\">\n <IkonAplikasi nama={nama || '?'} src={value} size=\"xl\" />\n <label className=\"u-button\" data-variant=\"outline\" data-size=\"sm\">\n <ImagePlus /> {value ? 'Ganti logo' : 'Pilih logo'}\n <input\n type=\"file\"\n accept=\"image/png,image/jpeg,image/webp\"\n className=\"u-sr-only\"\n onChange={async (e) => {\n const f = e.target.files?.[0];\n if (f) onChange(await bacaDataUri(f));\n }}\n />\n </label>\n {value && (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => onChange(null)}>\n Hapus\n </Button>\n )}\n <small>PNG, JPG, atau WebP, maks 2 MB.</small>\n </div>\n );\n}\n\nexport interface WizardAplikasiProps {\n open: boolean;\n onOpenChange: (o: boolean) => void;\n onSelesai?: (h: HasilAplikasiBaru) => void;\n /** Ganti cara membuat (mis. lewat endpoint BFF sendiri). Bawaan: buatAplikasiLengkap. */\n buat?: (x: InputAplikasiBaru) => Promise<HasilAplikasiBaru>;\n /** Kode yang sudah dipakai (validasi). Bawaan dari katalog. */\n kodeTerpakai?: string[];\n issuer?: string;\n siakadUrl?: string;\n /** 'dialog' (bawaan) atau 'halaman' untuk dipasang langsung di halaman (mis. /aplikasi/baru); `open` diabaikan. */\n tampilan?: 'dialog' | 'halaman';\n}\n\n/**\n * Wizard modal membuat aplikasi integrasi: identitas → login SSO → hak akses login → akses API → periksa,\n * lalu secret ditampilkan sekali beserta isi .env.\n */\nexport function WizardAplikasi({ open: openProp, onOpenChange, onSelesai, buat, kodeTerpakai, issuer, siakadUrl, tampilan = 'dialog' }: WizardAplikasiProps) {\n const open = tampilan === 'halaman' || openProp;\n const siakad = useOptionalSiakad();\n const sso = useSsoAdmin();\n const rbac = useAplikasiRbac();\n const peran = usePeranRbac();\n const [step, setStep] = React.useState(0);\n const [hasil, setHasil] = React.useState<HasilAplikasiBaru | null>(null);\n const [nama, setNama] = React.useState('');\n const [kode, setKode] = React.useState('');\n const [kodeManual, setKodeManual] = React.useState(false);\n const [jenis, setJenis] = React.useState<JenisAplikasi>('web');\n const [url, setUrl] = React.useState('https://');\n const [ket, setKet] = React.useState('');\n const [logo, setLogo] = React.useState<string | null>(null);\n const [pakaiSso, setPakaiSso] = React.useState(true);\n const [callback, setCallback] = React.useState('');\n const [keluar, setKeluar] = React.useState('');\n const [fc, setFc] = React.useState('');\n const [batasi, setBatasi] = React.useState(true);\n const [peranAkses, setPeranAkses] = React.useState<number[]>([]);\n const [pakaiApi, setPakaiApi] = React.useState(false);\n const [scopes, setScopes] = React.useState<string[]>(['referensi:read']);\n const [tukar, setTukar] = React.useState(true);\n const [langsung, setLangsung] = React.useState(false);\n const [ips, setIps] = React.useState('');\n const [origins, setOrigins] = React.useState('');\n\n React.useEffect(() => {\n if (!open) return;\n setStep(0);\n setHasil(null);\n }, [open]);\n\n const dasar = url.replace(/\\/+$/, '');\n const urlValid = /^https?:\\/\\/[^\\s/]+\\.[^\\s/]+/.test(dasar);\n const cb = callback || (urlValid ? `${dasar}/sso/callback` : '');\n const terpakai = kodeTerpakai ?? rbac.data?.map((a) => a.kode) ?? [];\n const daftarPeran = (peran.data ?? []).filter((p) => p.aktif);\n\n const input = (): InputAplikasiBaru => ({\n kode,\n nama: nama.trim(),\n keterangan: ket.trim(),\n jenis,\n url: urlValid ? dasar : '',\n logo,\n sso: pakaiSso ? { redirect_uris: daftarTeks(cb), post_logout_redirect_uris: daftarTeks(keluar || `${dasar}/`), frontchannel_logout_uri: fc.trim(), portal_url: dasar } : null,\n batasiLogin: pakaiSso && batasi,\n peranAkses: pakaiSso && batasi ? peranAkses : [],\n api: pakaiApi ? { scopes, allow_user_login: langsung, tukarSso: pakaiSso && tukar, allowed_ips: daftarTeks(ips), allowed_origins: daftarTeks(origins) } : null,\n });\n\n const steps = [\n {\n id: 'identitas',\n title: 'Identitas',\n description: 'Nama, kode, dan alamat',\n icon: <AppWindow />,\n onNext: () => {\n if (!nama.trim()) return 'Nama aplikasi wajib diisi.';\n if (!/^[a-z0-9][a-z0-9_-]{1,39}$/.test(kode)) return 'Kode: huruf kecil, angka, - atau _, 2 sampai 40 karakter.';\n if (terpakai.includes(kode)) return `Kode ${kode} sudah dipakai aplikasi lain.`;\n if (pakaiSso && !urlValid) return 'Alamat aplikasi wajib diisi (https://...).';\n },\n content: (\n <FormGrid>\n <div className=\"u-span-2\">\n <PilihLogo value={logo} onChange={setLogo} nama={nama} />\n </div>\n <Field label=\"Nama aplikasi\" required className=\"u-span-2\">\n <Input\n value={nama}\n placeholder=\"mis. E-Learning UNIPO\"\n onChange={(e) => {\n setNama(e.target.value);\n if (!kodeManual) setKode(slug(e.target.value));\n }}\n />\n </Field>\n <Field label=\"Kode\" required description={`Awalan izin (${kode || 'kode'}.akses) dan client ID SSO. Tidak bisa diganti.`}>\n <Input value={kode} className=\"u-mono\" placeholder=\"elearning\" onChange={(e) => (setKode(e.target.value.toLowerCase()), setKodeManual(true))} />\n </Field>\n <Field label=\"Jenis\">\n <SegmentedControl<JenisAplikasi>\n value={jenis}\n onValueChange={setJenis}\n fullWidth\n options={(Object.keys(JENIS) as JenisAplikasi[]).map((j) => ({ value: j, label: JENIS[j].pendek, icon: JENIS[j].icon, 'aria-label': JENIS[j].label }))}\n />\n </Field>\n <Field label=\"Alamat aplikasi\" className=\"u-span-2\" description=\"Dipakai untuk portal SSO dan alamat callback bawaan.\">\n <Input value={url} onChange={(e) => setUrl(e.target.value)} placeholder=\"https://elearning.unipo.ac.id\" />\n </Field>\n <Field label=\"Keterangan\" optional className=\"u-span-2\">\n <Textarea value={ket} onChange={(e) => setKet(e.target.value)} rows={2} maxLength={255} />\n </Field>\n </FormGrid>\n ),\n },\n {\n id: 'sso',\n title: 'Login SSO',\n description: 'Masuk dengan akun SIAKAD',\n icon: <ShieldCheck />,\n onNext: () => (pakaiSso && !daftarTeks(cb).length ? 'Alamat callback wajib diisi.' : undefined),\n content: (\n <div className=\"u-app-step\">\n <Opsi\n icon={<ShieldCheck />}\n judul=\"Login lewat SSO UNIPO\"\n teks=\"Pengguna masuk dengan akun SIAKAD di sso.unipo.ac.id dan aplikasi tampil di portal SSO.\"\n value={pakaiSso}\n onChange={setPakaiSso}\n />\n {pakaiSso && (\n <FormGrid>\n <Field label=\"Alamat callback\" required className=\"u-span-2\" description=\"Satu per baris. Harus persis sama dengan yang dipakai aplikasi.\">\n <Textarea value={cb} onChange={(e) => setCallback(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Alamat setelah keluar\">\n <Input value={keluar || (urlValid ? `${dasar}/` : '')} onChange={(e) => setKeluar(e.target.value)} className=\"u-mono\" />\n </Field>\n <Field label=\"Logout serentak\" optional description=\"Dibuka SSO saat pengguna keluar dari aplikasi lain.\">\n <Input value={fc} onChange={(e) => setFc(e.target.value)} placeholder={urlValid ? `${dasar}/sso/logout` : ''} className=\"u-mono\" />\n </Field>\n </FormGrid>\n )}\n </div>\n ),\n },\n {\n id: 'hak',\n title: 'Hak akses',\n description: 'Siapa yang boleh masuk',\n icon: <Lock />,\n optional: true,\n content: !pakaiSso ? (\n <Empty title=\"Tanpa login SSO\" description=\"Aplikasi ini tidak memakai login SSO, jadi tidak perlu batas pengguna. Lanjutkan ke akses API.\" />\n ) : (\n <div className=\"u-app-step\">\n <Opsi\n icon={<Lock />}\n judul=\"Hanya peran tertentu yang boleh login\"\n teks={`Pengguna wajib memegang izin ${kode || 'kode'}.akses; aplikasi juga disembunyikan dari portal pengguna lain.`}\n value={batasi}\n onChange={setBatasi}\n />\n {batasi && (\n <Field label=\"Peran yang boleh masuk\" description=\"Administrator selalu bisa masuk. Peran turunan ikut mewarisi.\">\n {peran.loading && !peran.data ? (\n <Skeleton style={{ height: 120 }} />\n ) : (\n <div className=\"u-app-roles\">\n {daftarPeran.map((p) => (\n <label key={p.id}>\n <Checkbox checked={peranAkses.includes(p.id)} onCheckedChange={(v) => setPeranAkses(v === true ? [...peranAkses, p.id] : peranAkses.filter((x) => x !== p.id))} />\n <span>\n <strong>{p.nama}</strong>\n <code>{p.kode}</code>\n </span>\n </label>\n ))}\n </div>\n )}\n </Field>\n )}\n </div>\n ),\n },\n {\n id: 'api',\n title: 'Akses API',\n description: 'Data SIAKAD yang boleh dipakai',\n icon: <KeyRound />,\n onNext: () => (pakaiApi && !scopes.length ? 'Pilih minimal satu scope.' : undefined),\n content: (\n <div className=\"u-app-step\">\n <Opsi icon={<KeyRound />} judul=\"Butuh akses API SIAKAD\" teks=\"Membuat klien API untuk membaca atau menulis data SIAKAD sesuai scope yang dipilih.\" value={pakaiApi} onChange={setPakaiApi} />\n {pakaiApi && (\n <>\n <Field label=\"Scope\">\n <PilihScope value={scopes} onValueChange={setScopes} maxHeight=\"15rem\" />\n </Field>\n <div className=\"u-app-checks\">\n {pakaiSso && (\n <label>\n <Checkbox checked={tukar} onCheckedChange={(v) => setTukar(v === true)} />\n <span>\n <strong>Tukar login SSO menjadi token API pengguna</strong>\n <small>Disarankan: aplikasi memakai id_token SSO untuk token API atas nama pengguna.</small>\n </span>\n </label>\n )}\n <label>\n <Checkbox checked={langsung} onCheckedChange={(v) => setLangsung(v === true)} />\n <span>\n <strong>Izinkan login username/password langsung ke API</strong>\n <small>Hanya untuk aplikasi tepercaya; lebih aman lewat SSO.</small>\n </span>\n </label>\n </div>\n <FormGrid>\n <Field label=\"Batas IP server\" optional description=\"IP atau CIDR, satu per baris.\">\n <Textarea value={ips} onChange={(e) => setIps(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Origin browser\" optional description=\"Untuk memanggil API dari browser (CORS).\">\n <Textarea value={origins} onChange={(e) => setOrigins(e.target.value)} rows={2} className=\"u-mono\" placeholder={urlValid ? dasar : ''} />\n </Field>\n </FormGrid>\n </>\n )}\n </div>\n ),\n },\n {\n id: 'periksa',\n title: 'Periksa',\n description: 'Tinjau sebelum dibuat',\n icon: <AppWindow />,\n content: hasil ? (\n <div className=\"u-app-step\">\n <Alert variant=\"success\" title={`${hasil.aplikasi.nama} sudah terdaftar`}>\n {hasil.sso ? `Login SSO aktif (client ${hasil.sso.id}). ` : ''}\n {hasil.api ? `Klien API ${hasil.api.id} dibuat. ` : ''}\n Pengaturan lain bisa diubah di halaman aplikasi.\n </Alert>\n {hasil.peringatan.map((p) => (\n <Alert key={p} variant=\"warning\">\n {p}\n </Alert>\n ))}\n </div>\n ) : (\n <div className=\"u-app-step\">\n <div className=\"u-app-review-head\">\n <IkonAplikasi nama={nama} src={logo} size=\"lg\" />\n <div>\n <strong>{nama || 'Tanpa nama'}</strong>\n <span>\n <code>{kode}</code> · {JENIS[jenis].label}\n </span>\n </div>\n </div>\n <WizardReview\n sections={[\n {\n title: 'Identitas',\n onEdit: () => setStep(0),\n items: [\n { label: 'Alamat', value: urlValid ? dasar : '–' },\n { label: 'Keterangan', value: ket || '–' },\n ],\n },\n {\n title: 'Login SSO',\n onEdit: () => setStep(1),\n items: pakaiSso\n ? [\n { label: 'Client ID', value: idSsoDariKode(kode) },\n { label: 'Callback', value: daftarTeks(cb).join(', ') },\n ]\n : [{ label: 'Login SSO', value: 'Tidak dipakai' }],\n },\n {\n title: 'Hak akses',\n onEdit: () => setStep(2),\n items: [\n {\n label: 'Boleh login',\n value: pakaiSso\n ? batasi\n ? `Pemegang ${kode}.akses${\n peranAkses.length\n ? `: ${daftarPeran\n .filter((p) => peranAkses.includes(p.id))\n .map((p) => p.nama)\n .join(', ')}`\n : ' (administrator)'\n }`\n : 'Semua pengguna SIAKAD'\n : '–',\n },\n ],\n },\n {\n title: 'Akses API',\n onEdit: () => setStep(3),\n items: pakaiApi\n ? [\n { label: 'Scope', value: scopes.join(', ') },\n { label: 'Token pengguna', value: [pakaiSso && tukar && 'tukar SSO', langsung && 'login langsung'].filter(Boolean).join(', ') || 'Tidak' },\n ]\n : [{ label: 'API SIAKAD', value: 'Tidak dipakai' }],\n },\n ]}\n />\n <Alert variant=\"info\">Secret SSO dan API hanya ditampilkan sekali setelah dibuat. Siapkan tempat menyimpannya.</Alert>\n </div>\n ),\n },\n ];\n\n const selesai = async () => {\n if (hasil) {\n onOpenChange(false);\n return;\n }\n if (!buat && !siakad) return 'SDK SIAKAD belum dipasang.';\n try {\n const h = await (buat ? buat(input()) : buatAplikasiLengkap(siakad!, sso, input()));\n setHasil(h);\n invalidateSiakad('rbac');\n invalidateSso();\n onSelesai?.(h);\n } catch (e) {\n return pesanGalat(e);\n }\n };\n\n return (\n <>\n {tampilan === 'halaman' ? (\n <Wizard\n steps={steps}\n step={step}\n onStepChange={setStep}\n onFinish={selesai}\n finishLabel={hasil ? 'Selesai' : 'Buat aplikasi'}\n nextLabel=\"Lanjut\"\n title=\"Aplikasi baru\"\n description=\"Login SSO, hak akses, dan akses API SIAKAD.\"\n />\n ) : (\n <Dialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Aplikasi baru\"\n description=\"Daftarkan aplikasi integrasi: login SSO, hak akses, dan akses API SIAKAD.\"\n size=\"xl\"\n className=\"u-app-wizard\"\n >\n <Wizard steps={steps} step={step} onStepChange={setStep} onFinish={selesai} finishLabel={hasil ? 'Tutup' : 'Buat aplikasi'} nextLabel=\"Lanjut\" />\n </Dialog>\n )}\n <SecretSekali\n open={!!hasil && !!(hasil.sso || hasil.api) && open}\n onOpenChange={() => setHasil((h) => (h ? { ...h, sso: undefined, api: undefined } : h))}\n judul={hasil ? `Kredensial ${hasil.aplikasi.nama}` : undefined}\n isi={[\n ...(hasil?.sso\n ? [\n { label: 'Client ID SSO', nilai: hasil.sso.id },\n { label: 'Client secret SSO', nilai: hasil.sso.secret, rahasia: true },\n ]\n : []),\n ...(hasil?.api\n ? [\n { label: 'Client ID API SIAKAD', nilai: hasil.api.id },\n { label: 'Client secret API SIAKAD', nilai: hasil.api.secret, rahasia: true },\n ]\n : []),\n ]}\n env={hasil ? teksEnv({ issuer, siakad: siakadUrl, sso: hasil.sso, api: hasil.api }) : undefined}\n />\n </>\n );\n}\n\n// ================================================================ Ubah aplikasi\nexport interface FormAplikasiProps {\n aplikasi: AplikasiTerpadu;\n onTersimpan?: () => void;\n onBatal?: () => void;\n className?: string;\n}\n\n/**\n * Formulir ubah aplikasi: identitas (katalog), login SSO (callback, logout, batas izin, aktif), dan klien API\n * (scope, IP, origin, batas permintaan, aktif). Hanya bagian yang berubah yang dikirim.\n */\nexport function FormAplikasi({ aplikasi: a, onTersimpan, onBatal, className }: FormAplikasiProps) {\n const siakad = useOptionalSiakad();\n const sso = useSsoAdmin();\n const [nama, setNama] = React.useState(a.nama);\n const [ket, setKet] = React.useState(a.keterangan ?? '');\n const [url, setUrl] = React.useState(a.url ?? '');\n const [aktif, setAktif] = React.useState(a.aktif);\n const [logo, setLogo] = React.useState<string | null>(a.logo);\n const [cb, setCb] = React.useState(a.sso?.redirect_uris.join('\\n') ?? '');\n const [keluar, setKeluar] = React.useState(a.sso?.post_logout_redirect_uris.join('\\n') ?? '');\n const [fc, setFc] = React.useState(a.sso?.frontchannel_logout_uri ?? '');\n const [batasi, setBatasi] = React.useState(a.terbatas);\n const [scopes, setScopes] = React.useState(a.api?.scopes ?? []);\n const [ips, setIps] = React.useState(a.api?.allowed_ips.join('\\n') ?? '');\n const [origins, setOrigins] = React.useState(a.api?.allowed_origins.join('\\n') ?? '');\n const [rate, setRate] = React.useState(a.api?.rate_limit ? String(a.api.rate_limit) : '');\n const [langsung, setLangsung] = React.useState(a.api?.allow_user_login ?? false);\n const [kirim, setKirim] = React.useState(false);\n const [galat, setGalat] = React.useState<string[]>([]);\n const sama = (x: string[], y: string[]) => x.length === y.length && x.every((v, i) => v === y[i]);\n\n const simpan = async (e: React.FormEvent) => {\n e.preventDefault();\n setKirim(true);\n const g: string[] = [];\n const req = (method: 'PUT' | 'PATCH', path: string, body: unknown) => siakad!.request({ method, path, body });\n if (a.rbac && siakad && (nama !== a.rbac.nama || ket !== (a.rbac.keterangan ?? '') || url !== (a.rbac.url ?? '') || aktif !== a.rbac.aktif))\n await req('PUT', `${A}/aplikasi/${a.rbac.id}`, { nama, keterangan: ket || null, url: url || null, aktif }).catch((x) => g.push(`Katalog: ${pesanGalat(x)}`));\n if (a.sso && sso) {\n const ubah: Record<string, unknown> = {};\n if (nama !== a.sso.name) ubah.name = nama;\n if (ket !== (a.sso.description ?? '')) ubah.description = ket;\n if (!sama(daftarTeks(cb), a.sso.redirect_uris)) ubah.redirect_uris = daftarTeks(cb);\n if (!sama(daftarTeks(keluar), a.sso.post_logout_redirect_uris)) ubah.post_logout_redirect_uris = daftarTeks(keluar);\n if (fc !== (a.sso.frontchannel_logout_uri ?? '')) ubah.frontchannel_logout_uri = fc;\n if (url && url !== (a.sso.portal_url ?? '')) ubah.portal_url = url;\n if (batasi !== a.terbatas) ubah.permission = batasi ? `${a.kode}.akses` : '';\n if (aktif !== a.sso.active && !a.sso.admin) ubah.active = aktif;\n if (Object.keys(ubah).length) await sso.request('PATCH', `/clients/${a.sso.id}`, { body: ubah }).catch((x) => g.push(`Login SSO: ${pesanGalat(x)}`));\n if (logo !== a.logo) await sso.request(logo ? 'POST' : 'DELETE', `/clients/${a.sso.id}/logo`, logo ? { body: { data: logo } } : {}).catch((x) => g.push(`Logo: ${pesanGalat(x)}`));\n }\n if (a.api && siakad) {\n const ubah: Record<string, unknown> = {};\n if (nama !== a.api.name) ubah.name = nama;\n if (!sama([...scopes].sort(), [...a.api.scopes].sort())) ubah.scopes = scopes;\n if (!sama(daftarTeks(ips), a.api.allowed_ips)) ubah.allowed_ips = daftarTeks(ips);\n if (!sama(daftarTeks(origins), a.api.allowed_origins)) ubah.allowed_origins = daftarTeks(origins);\n if ((rate ? Number(rate) : null) !== (a.api.rate_limit ?? null)) ubah.rate_limit = rate ? Number(rate) : null;\n if (langsung !== a.api.allow_user_login) ubah.allow_user_login = langsung;\n if (aktif !== a.api.active) ubah.active = aktif;\n if (Object.keys(ubah).length) await req('PATCH', `${A}/klien-api/${a.api.id}`, ubah).catch((x) => g.push(`Klien API: ${pesanGalat(x)}`));\n }\n setKirim(false);\n setGalat(g);\n invalidateSiakad('rbac');\n invalidateSso();\n if (!g.length) onTersimpan?.();\n };\n\n return (\n <form className={cn('u-app-form', className)} onSubmit={simpan}>\n {galat.length > 0 && (\n <Alert variant=\"danger\" title=\"Sebagian perubahan belum tersimpan\">\n <ul>\n {galat.map((x) => (\n <li key={x}>{x}</li>\n ))}\n </ul>\n </Alert>\n )}\n <fieldset>\n <legend>Identitas</legend>\n {a.sso && <PilihLogo value={logo} onChange={setLogo} nama={nama} />}\n <FormGrid>\n <Field label=\"Nama\" required>\n <Input value={nama} onChange={(e) => setNama(e.target.value)} />\n </Field>\n <Field label=\"Kode\" description=\"Tidak bisa diganti.\">\n <Input value={a.kode} readOnly className=\"u-mono\" />\n </Field>\n <Field label=\"Alamat aplikasi\" className=\"u-span-2\">\n <Input value={url} onChange={(e) => setUrl(e.target.value)} placeholder=\"https://\" />\n </Field>\n <Field label=\"Keterangan\" optional className=\"u-span-2\">\n <Textarea value={ket} onChange={(e) => setKet(e.target.value)} rows={2} maxLength={255} />\n </Field>\n </FormGrid>\n <Opsi icon={<ShieldCheck />} judul=\"Aplikasi aktif\" teks=\"Nonaktif: login SSO dan token API aplikasi ini ditolak sampai diaktifkan lagi.\" value={aktif} onChange={setAktif} />\n </fieldset>\n {a.sso && (\n <fieldset>\n <legend>Login SSO</legend>\n <Field label=\"Alamat callback\" required description=\"Satu per baris.\">\n <Textarea value={cb} onChange={(e) => setCb(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <FormGrid>\n <Field label=\"Setelah keluar\">\n <Textarea value={keluar} onChange={(e) => setKeluar(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Logout serentak\" optional>\n <Input value={fc} onChange={(e) => setFc(e.target.value)} className=\"u-mono\" />\n </Field>\n </FormGrid>\n <Opsi icon={<Lock />} judul=\"Hanya pemegang izin yang boleh login\" teks={`Pengguna wajib memegang ${a.kode}.akses.`} value={batasi} onChange={setBatasi} />\n </fieldset>\n )}\n {a.api && (\n <fieldset>\n <legend>Klien API</legend>\n <Field label=\"Scope\">\n <PilihScope value={scopes} onValueChange={setScopes} maxHeight=\"16rem\" />\n </Field>\n <FormGrid>\n <Field label=\"Batas IP\" optional description=\"Satu per baris.\">\n <Textarea value={ips} onChange={(e) => setIps(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Origin browser\" optional>\n <Textarea value={origins} onChange={(e) => setOrigins(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Batas permintaan per menit\" optional description=\"Kosong = bawaan server.\">\n <Input value={rate} onChange={(e) => setRate(e.target.value.replace(/\\D/g, ''))} inputMode=\"numeric\" />\n </Field>\n </FormGrid>\n <label className=\"u-app-checks\">\n <span>\n <Checkbox checked={langsung} onCheckedChange={(v) => setLangsung(v === true)} />\n <span>\n <strong>Izinkan login username/password langsung ke API</strong>\n </span>\n </span>\n </label>\n </fieldset>\n )}\n <div className=\"u-app-form-actions\">\n {onBatal && (\n <Button variant=\"outline\" type=\"button\" onClick={onBatal}>\n Batal\n </Button>\n )}\n <Button type=\"submit\" loading={kirim}>\n Simpan perubahan\n </Button>\n </div>\n </form>\n );\n}\n\n/** FormAplikasi di panel samping. Buka dengan memberi `aplikasi`, tutup dengan null. */\nexport function SheetUbahAplikasi({ aplikasi, onOpenChange, onTersimpan }: { aplikasi: AplikasiTerpadu | null; onOpenChange: (o: boolean) => void; onTersimpan?: () => void }) {\n return (\n <Sheet open={aplikasi != null} onOpenChange={onOpenChange} title={aplikasi ? `Ubah ${aplikasi.nama}` : 'Ubah aplikasi'} size=\"lg\">\n {aplikasi && (\n <FormAplikasi\n key={aplikasi.kunci}\n aplikasi={aplikasi}\n onBatal={() => onOpenChange(false)}\n onTersimpan={() => {\n onTersimpan?.();\n onOpenChange(false);\n }}\n />\n )}\n </Sheet>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { BookOpen, Briefcase, Building2, GraduationCap, Landmark, Network, UserRound, Users, UsersRound } from 'lucide-react';\nimport { Combobox, OptionContent } from '../components/select';\nimport type { ControlSize } from '../components/forms';\nimport { Avatar } from '../components/display';\nimport { useOptionalSiakad } from './provider';\n\ntype Baris = Record<string, unknown>;\nconst teks = (v: unknown) => (v == null ? '' : String(v));\nconst gabung = (...xs: unknown[]) => xs.filter((x) => x != null && x !== '').join(' · ');\n\n/**\n * Sumber data untuk {@link PilihEntitas}: endpoint daftar (dengan pencarian `q`), kolom yang menjadi nilai\n * (ID/NIM/NIDN/username), dan cara menampilkan satu baris. Isi sendiri untuk tabel yang belum ada di\n * {@link SUMBER_ENTITAS}, mis. dari katalog OpenAPI.\n */\nexport interface SumberEntitas {\n /** Nama tunggal untuk teks bantuan, mis. \"mahasiswa\", \"organisasi mahasiswa\". */\n nama: string;\n /** Endpoint daftar, mis. `/v1/kemahasiswaan/ormawa`. Harus menerima `q` dan `per_page` (kecuali `klien`). */\n path: string;\n /** Kolom baris yang menjadi nilai, mis. `id`, `nim`, `username`. */\n kunci: string;\n /** Endpoint satu data untuk menampilkan nilai awal, dengan `{id}`, mis. `/v1/mahasiswa/{id}`. */\n satu?: string;\n /** Bila tidak ada `satu`: parameter daftar untuk mencari nilai awal, mis. `username`. Bawaan `q`. */\n saringKunci?: string;\n /** Daftar kecil tanpa pencarian server: dimuat sekali, disaring di browser. */\n klien?: boolean;\n /** Parameter tetap untuk endpoint daftar. */\n query?: Record<string, string | number | boolean | undefined>;\n judul: (r: Baris) => string;\n meta?: (r: Baris) => string;\n /** Avatar inisial/foto (orang) atau ikon (lainnya). */\n avatar?: boolean;\n ikon?: React.ReactNode;\n placeholder?: string;\n}\n\n/** Sumber bawaan. Kunci objek ini dipakai sebagai `jenis` di <PilihEntitas jenis=\"mahasiswa\" />. */\nexport const SUMBER_ENTITAS = {\n mahasiswa: {\n nama: 'mahasiswa',\n path: '/v1/mahasiswa',\n kunci: 'nim',\n satu: '/v1/mahasiswa/{id}',\n judul: (r) => teks(r.nama),\n meta: (r) => gabung(r.nim, r.nama_prodi, r.tahun_masuk),\n avatar: true,\n ikon: <GraduationCap />,\n placeholder: 'Cari NIM atau nama mahasiswa',\n },\n dosen: {\n nama: 'dosen',\n path: '/v1/dosen',\n kunci: 'nidn',\n satu: '/v1/dosen/{id}',\n judul: (r) => teks(r.nama_lengkap || r.nama),\n meta: (r) => gabung(r.nidn && `NIDN ${r.nidn}`, r.jabatan_akademik, r.nama_prodi),\n avatar: true,\n ikon: <UserRound />,\n placeholder: 'Cari NIDN atau nama dosen',\n },\n pegawai: {\n nama: 'pegawai',\n path: '/v1/sdm/pegawai',\n kunci: 'id',\n satu: '/v1/sdm/pegawai/{id}',\n judul: (r) => teks(r.nama_lengkap || r.nama),\n meta: (r) => gabung(r.nip && `NIP ${r.nip}`, r.nidn && `NIDN ${r.nidn}`, r.unit_nama),\n avatar: true,\n ikon: <Users />,\n placeholder: 'Cari nama, NIP, atau NIDN pegawai',\n },\n /** Akun pengguna (user.username): mahasiswa, dosen, tendik, admin. */\n pengguna: {\n nama: 'pengguna',\n path: '/v1/induk/orang',\n kunci: 'username',\n saringKunci: 'username',\n judul: (r) => teks(r.nama),\n meta: (r) => gabung(r.username, r.email),\n avatar: true,\n ikon: <UserRound />,\n placeholder: 'Cari nama, username, atau email',\n },\n /** Orang (identitas tunggal, induk_orang.id). */\n orang: {\n nama: 'orang',\n path: '/v1/induk/orang',\n kunci: 'id',\n satu: '/v1/induk/orang/{id}',\n judul: (r) => teks(r.nama),\n meta: (r) => gabung(r.username, r.email),\n avatar: true,\n ikon: <UserRound />,\n placeholder: 'Cari nama, NIK, username, atau email',\n },\n /** Orang dicocokkan dengan NIK. */\n nik: {\n nama: 'orang',\n path: '/v1/induk/orang',\n kunci: 'nik',\n saringKunci: 'nik',\n judul: (r) => teks(r.nama),\n meta: (r) => gabung(r.nik && `NIK ${r.nik}`, r.username),\n avatar: true,\n ikon: <UserRound />,\n placeholder: 'Cari nama atau NIK',\n },\n ormawa: {\n nama: 'organisasi mahasiswa',\n path: '/v1/kemahasiswaan/ormawa',\n kunci: 'id',\n satu: '/v1/kemahasiswaan/ormawa/{id}',\n judul: (r) => teks(r.nama),\n meta: (r) => gabung(r.kode, r.jenis, r.bidang),\n ikon: <UsersRound />,\n placeholder: 'Cari nama atau kode ormawa',\n },\n 'mata-kuliah': {\n nama: 'mata kuliah',\n path: '/v1/mata-kuliah',\n kunci: 'kode_mk',\n judul: (r) => teks(r.nama_mk),\n meta: (r) => gabung(r.kode_mk, r.sks_mk != null && `${r.sks_mk} SKS`, r.semester && `Semester ${r.semester}`),\n ikon: <BookOpen />,\n placeholder: 'Cari kode atau nama mata kuliah',\n },\n prodi: {\n nama: 'program studi',\n path: '/v1/referensi/prodi',\n kunci: 'kode_prodi',\n klien: true,\n judul: (r) => gabung(r.kode_jenjang, r.nama_prodi).replace(' · ', ' '),\n meta: (r) => gabung(r.kode_prodi, r.nama_fakultas),\n ikon: <GraduationCap />,\n placeholder: 'Cari program studi',\n },\n fakultas: {\n nama: 'fakultas',\n path: '/v1/referensi/fakultas',\n kunci: 'kode_fakultas',\n klien: true,\n judul: (r) => teks(r.nama_fakultas || r.nama),\n meta: (r) => teks(r.kode_fakultas),\n ikon: <Landmark />,\n placeholder: 'Cari fakultas',\n },\n unit: {\n nama: 'unit',\n path: '/v1/induk/unit',\n kunci: 'id',\n satu: '/v1/induk/unit/{id}',\n judul: (r) => teks(r.nama),\n meta: (r) => gabung(r.singkatan || r.kode, r.jenis),\n ikon: <Network />,\n placeholder: 'Cari nama atau kode unit',\n },\n jabatan: {\n nama: 'jabatan',\n path: '/v1/induk/jabatan',\n kunci: 'id',\n satu: '/v1/induk/jabatan/{id}',\n judul: (r) => teks(r.nama),\n meta: (r) => gabung(r.kode, r.kelompok),\n ikon: <Briefcase />,\n placeholder: 'Cari jabatan',\n },\n} satisfies Record<string, SumberEntitas>;\n\nexport type JenisEntitas = keyof typeof SUMBER_ENTITAS;\n\n/**\n * Tebak jenis entitas dari nama kolom dan keterangannya, untuk formulir yang dibangun otomatis dari skema API.\n * Contoh: `pengaju_nim` + \"m_mahasiswa.NIM\" → mahasiswa, `konselor` + \"user.username\" → pengguna,\n * `ormawa_id` + \"ID di kmhs_ormawa\" → ormawa. Mengembalikan null bila bukan rujukan ke data lain\n * (kolom isian biasa seperti NIK pada formulir data pribadi tetap diketik).\n */\nexport function jenisEntitasDariKolom(nama: string, keterangan = ''): JenisEntitas | null {\n const n = nama.toLowerCase();\n const k = keterangan.toLowerCase();\n if (/m_mahasiswa\\.nim|\\bnim\\b/.test(k) || /(^|_)nim$/.test(n)) return 'mahasiswa';\n if (/m_dosen|\\bnidn\\b/.test(k) || /(^|_)nidn$/.test(n)) return 'dosen';\n if (/user\\.username|\\busername\\b/.test(k) || /(^|_)username$/.test(n)) return 'pengguna';\n if (/kmhs_ormawa|kemahasiswaan_ormawa/.test(k) || n === 'ormawa_id') return 'ormawa';\n if (/sdm_pegawai/.test(k) || n === 'pegawai_id' || n === 'sdm_pegawai_id') return 'pegawai';\n if (/induk_orang\\.nik/.test(k)) return 'nik';\n if (/induk_orang/.test(k) || n === 'orang_id') return 'orang';\n if (/induk_unit|sdm_unit/.test(k) || n === 'unit_id') return 'unit';\n if (/induk_jabatan/.test(k) || n === 'jabatan_id') return 'jabatan';\n if (/m_mata_kuliah|kode_mk/.test(k) || n === 'kode_mk') return 'mata-kuliah';\n if (/(^|_)kode_prodi$/.test(n) || /m_prodi|kode_prodi/.test(k)) return 'prodi';\n if (/(^|_)kode_fakultas$/.test(n) || /m_fakultas|kode_fakultas/.test(k)) return 'fakultas';\n return null;\n}\n\nexport interface PilihEntitasProps {\n /** Jenis bawaan (`mahasiswa`, `dosen`, `pegawai`, `pengguna`, `orang`, `nik`, `ormawa`, `mata-kuliah`, `prodi`, `fakultas`, `unit`, `jabatan`) atau sumber sendiri. */\n jenis: JenisEntitas | SumberEntitas;\n /** Nilai = isi kolom kunci (ID, NIM, NIDN, username). */\n value?: string | number | null;\n defaultValue?: string | number | null;\n /** Dipanggil dengan nilai kunci (string) dan baris lengkapnya; null saat dikosongkan. */\n onValueChange?: (value: string | null, item: Baris | null) => void;\n /** Saringan tambahan ke endpoint daftar, mis. `{ prodi: '55201' }`. */\n query?: Record<string, string | number | boolean | undefined>;\n /** Ganti pemuat (data contoh/uji). */\n load?: (q: string, signal: AbortSignal) => Promise<Baris[]>;\n limit?: number;\n placeholder?: string;\n name?: string;\n id?: string;\n disabled?: boolean;\n size?: ControlSize;\n className?: string;\n 'aria-label'?: string;\n}\n\n/**\n * Isian cari-dan-pilih untuk merujuk data lain, pengganti isian ID/NIM/NIDN/username yang diketik manual.\n * Nilainya tetap kunci (mis. NIM), jadi bisa langsung dipakai di formulir dan dikirim ke API. Nilai awal\n * ditampilkan sebagai nama, bukan angka.\n *\n * ```tsx\n * <PilihEntitas jenis=\"mahasiswa\" value={nim} onValueChange={setNim} />\n * <PilihEntitas jenis=\"ormawa\" name=\"ormawa_id\" defaultValue={baris.ormawa_id} />\n * <PilihEntitas jenis={jenisEntitasDariKolom(kolom.nama, kolom.keterangan) ?? 'pengguna'} ... />\n * ```\n */\nexport function PilihEntitas({ jenis, value, defaultValue, onValueChange, query, load, limit = 20, placeholder, name, id, disabled, size, className, ...rest }: PilihEntitasProps) {\n const siakad = useOptionalSiakad();\n const src: SumberEntitas = typeof jenis === 'string' ? SUMBER_ENTITAS[jenis] : jenis;\n const kunciDari = React.useCallback((r: Baris) => teks(r[src.kunci]), [src.kunci]);\n const [inner, setInner] = React.useState<string | null>(defaultValue == null || defaultValue === '' ? null : String(defaultValue));\n const nilai = value !== undefined ? (value == null || value === '' ? null : String(value)) : inner;\n const [item, setItem] = React.useState<Baris | null>(null);\n const q = JSON.stringify(query ?? {});\n\n // Cache daftar kecil (mode klien) per komponen.\n const semua = React.useRef<Promise<Baris[]> | null>(null);\n React.useEffect(() => {\n semua.current = null;\n }, [src.path, q]);\n\n const ambilDaftar = React.useCallback(\n async (kata: string, signal: AbortSignal, ekstra: Record<string, unknown> = {}): Promise<Baris[]> => {\n if (load) return load(kata, signal);\n if (!siakad) throw new Error('SDK belum dipasang di <UnipoProvider>.');\n if (src.klien) {\n semua.current ??= siakad.request<Baris[]>({ method: 'GET', path: src.path, query: { ...src.query, ...JSON.parse(q) } }).then((r) => (Array.isArray(r.data) ? r.data : []));\n const rows = await semua.current;\n const t = kata.trim().toLowerCase();\n return t ? rows.filter((r) => `${src.judul(r)} ${src.meta?.(r) ?? ''} ${kunciDari(r)}`.toLowerCase().includes(t)) : rows;\n }\n const r = await siakad.request<Baris[]>({ method: 'GET', path: src.path, query: { ...src.query, ...JSON.parse(q), q: kata || undefined, per_page: limit, ...ekstra } }, { signal });\n return Array.isArray(r.data) ? r.data : [];\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [siakad, load, src.path, src.klien, q, limit],\n );\n\n // Nilai dari luar (mis. formulir ubah) → muat barisnya agar tampil sebagai nama.\n React.useEffect(() => {\n if (!nilai) return setItem(null);\n if (item && kunciDari(item) === nilai) return;\n const stub: Baris = { [src.kunci]: nilai, __stub: true };\n setItem(stub);\n const ctrl = new AbortController();\n (async () => {\n if (src.satu && siakad && !load) {\n const r = await siakad.request<Baris>({ method: 'GET', path: src.satu, query: { id: nilai } }, { signal: ctrl.signal });\n return r.data;\n }\n const rows = await ambilDaftar(src.saringKunci ? '' : nilai, ctrl.signal, src.saringKunci ? { [src.saringKunci]: nilai } : {});\n return rows.find((r) => kunciDari(r) === nilai) ?? null;\n })()\n .then((r) => !ctrl.signal.aborted && r && kunciDari(r) === nilai && setItem(r))\n .catch(() => undefined);\n return () => ctrl.abort();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nilai, src.path, src.kunci]);\n\n const label = (r: Baris) => (r.__stub ? teks(r[src.kunci]) : src.judul(r) || kunciDari(r));\n return (\n <Combobox<Baris>\n {...rest}\n id={id}\n name={name}\n size={size}\n disabled={disabled}\n className={className}\n placeholder={placeholder ?? src.placeholder ?? `Cari ${src.nama}`}\n icon={src.ikon}\n loadItems={ambilDaftar}\n value={item}\n onValueChange={(r) => {\n const k = r ? kunciDari(r) : null;\n setItem(r);\n setInner(k);\n onValueChange?.(k, r);\n }}\n itemToString={label}\n itemKey={kunciDari}\n emptyText={`Tidak ada ${src.nama} yang cocok.`}\n renderItem={(r) => (\n <>\n {src.avatar ? (\n <Avatar name={label(r)} src={typeof r.foto === 'string' ? r.foto : undefined} size=\"sm\" />\n ) : (\n <span className=\"u-option-media\" data-shape=\"square\">\n {src.ikon ?? <Building2 size={14} />}\n </span>\n )}\n <OptionContent title={label(r)} meta={src.meta?.(r)} />\n </>\n )}\n />\n );\n}\n","'use client';\nimport * as React from 'react';\nimport type { Siakad } from 'unipo-siakad-sdk';\nimport { Dropzone, FileList, type UploadedFile } from '../components/calendar';\nimport { pesanGalat, useSiakad, useSiakadQuery } from './provider';\n\n/** Data berkas dari /v1/berkas (subset yang dipakai komponen). */\nexport interface BerkasTerunggah {\n id: string;\n nama: string;\n ekstensi?: string | null;\n mime?: string | null;\n ukuran: number;\n status: 'mengunggah' | 'menunggu_unggah' | 'tersedia';\n kategori?: string | null;\n url?: string | null;\n sesi?: { ukuran_potongan: number; jumlah_potongan: number; diterima: number[] };\n}\n\n/** Batas dari GET /v1/berkas/info. */\nexport interface InfoBerkas {\n maks_byte: number;\n batas_sekali_unggah_byte: number;\n ukuran_potongan: number;\n ekstensi: string[];\n penyimpanan: { driver: string; kode: string; nama: string };\n}\n\nexport interface OpsiUnggahBerkas {\n kategori?: string;\n modul?: string;\n folder?: string;\n keterangan?: string;\n visibilitas?: 'privat' | 'publik';\n /** Potongan yang dikirim bersamaan pada unggah bertahap (bawaan 3). */\n paralel?: number;\n}\n\nconst tunggu = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\n/**\n * Unggah satu File ke /v1/berkas: sekali kirim bila muat dalam batas unggah server, selain itu bertahap per\n * potongan (paralel, diulang 3 kali bila gagal). Sama dengan `unggahBerkas()` di unipo-siakad-sdk 1.2+.\n */\nexport async function unggahKeBerkas(\n siakad: Siakad,\n info: InfoBerkas,\n file: File,\n opsi: OpsiUnggahBerkas = {},\n onProgress?: (persen: number) => void,\n signal?: AbortSignal,\n): Promise<BerkasTerunggah> {\n const { paralel = 3, ...atribut } = opsi;\n const attr = Object.fromEntries(Object.entries(atribut).filter(([, v]) => v !== undefined));\n if (file.size <= info.batas_sekali_unggah_byte) {\n onProgress?.(0);\n const r = await siakad.request<BerkasTerunggah>({ method: 'POST', path: '/v1/berkas', body: { berkas: file, ...attr }, multipart: true }, { signal, timeout: 300_000 });\n onProgress?.(100);\n return r.data;\n }\n const sesi = (await siakad.request<BerkasTerunggah>({ method: 'POST', path: '/v1/berkas/bertahap', body: { nama: file.name, ukuran: file.size, ...attr } }, { signal })).data;\n const { ukuran_potongan: ukuran, jumlah_potongan: jumlah } = sesi.sesi!;\n const antre = Array.from({ length: jumlah }, (_, i) => i);\n let terkirim = 0;\n const kirim = async (ke: number) => {\n const bagian = file.slice(ke * ukuran, Math.min(file.size, (ke + 1) * ukuran));\n for (let coba = 0; ; coba++) {\n try {\n await siakad.request({ method: 'POST', path: `/v1/berkas/${sesi.id}/potongan/${ke}`, body: { potongan: { data: bagian, filename: `${ke}.part` } }, multipart: true }, { signal, timeout: 300_000 });\n terkirim += bagian.size;\n onProgress?.(Math.min(99, Math.round((terkirim / file.size) * 100)));\n return;\n } catch (e) {\n if (coba >= 3 || signal?.aborted) throw e;\n await tunggu(500 * 2 ** coba);\n }\n }\n };\n await Promise.all(\n Array.from({ length: Math.max(1, Math.min(paralel, jumlah)) }, async () => {\n for (let ke = antre.shift(); ke !== undefined; ke = antre.shift()) await kirim(ke);\n }),\n );\n const hasil = (await siakad.request<BerkasTerunggah>({ method: 'POST', path: `/v1/berkas/${sesi.id}/selesai` }, { signal, timeout: 300_000 })).data;\n onProgress?.(100);\n return hasil;\n}\n\n/** Batas unggah server (GET /v1/berkas/info), di-cache 10 menit. */\nexport function useInfoBerkas() {\n return useSiakadQuery<InfoBerkas>(['berkas-info'], (s, signal) => s.request<InfoBerkas>({ method: 'GET', path: '/v1/berkas/info' }, { signal }), { staleTime: 600_000 });\n}\n\n/** Fungsi unggah siap pakai: `const unggah = useUnggahBerkas({ kategori: 'dokumen' }); const b = await unggah(file, setPersen);` */\nexport function useUnggahBerkas(opsi: OpsiUnggahBerkas = {}) {\n const siakad = useSiakad();\n const { data: info } = useInfoBerkas();\n const ref = React.useRef(opsi);\n ref.current = opsi;\n return React.useCallback(\n async (file: File, onProgress?: (persen: number) => void, signal?: AbortSignal) => {\n const i = info ?? (await siakad.request<InfoBerkas>({ method: 'GET', path: '/v1/berkas/info' })).data;\n return unggahKeBerkas(siakad, i, file, ref.current, onProgress, signal);\n },\n [siakad, info],\n );\n}\n\n/** Tautan unduh sementara (tanpa token) untuk <img>, <a>, atau pratinjau PDF. */\nexport function useUrlBerkas(id: string | null | undefined, ttl = 900) {\n return useSiakadQuery<{ url: string }>(\n ['berkas-url', id ?? '', ttl],\n (s, signal) => s.request<{ url: string }>({ method: 'GET', path: `/v1/berkas/${encodeURIComponent(id ?? '')}/url`, query: { ttl } }, { signal }),\n { enabled: Boolean(id), staleTime: Math.max(30, ttl - 60) * 1000 },\n );\n}\n\nexport interface UnggahBerkasProps extends OpsiUnggahBerkas {\n /** Dipanggil untuk setiap berkas yang selesai; `berkas.id` dipakai sebagai `berkas_id` di endpoint modul. */\n onSelesai?: (berkas: BerkasTerunggah) => void;\n onGalat?: (pesan: string, file: File) => void;\n /** Ekstensi yang diterima, mis. \".pdf,.jpg,.png\". */\n accept?: string;\n multiple?: boolean;\n /** Batas ukuran (byte); bawaan dari server (BERKAS_MAKS_MB). */\n maxSize?: number;\n disabled?: boolean;\n title?: React.ReactNode;\n hint?: React.ReactNode;\n /** Sembunyikan daftar berkas setelah selesai (bawaan false). */\n sembunyikanSelesai?: boolean;\n className?: string;\n}\n\n/**\n * Kotak unggah yang terhubung ke /v1/berkas: progres per berkas, unggah bertahap otomatis untuk file besar\n * (hosting dengan upload_max_filesize kecil), dan berkas tersimpan di penyimpanan aktif (S3/R2/MinIO/Google Drive\n * atau disk server).\n */\nexport function UnggahBerkas({\n onSelesai,\n onGalat,\n accept,\n multiple,\n maxSize,\n disabled,\n title,\n hint,\n sembunyikanSelesai,\n className,\n ...opsi\n}: UnggahBerkasProps) {\n const unggah = useUnggahBerkas(opsi);\n const { data: info } = useInfoBerkas();\n const [daftar, setDaftar] = React.useState<UploadedFile[]>([]);\n const batal = React.useRef(new Map<string, AbortController>());\n React.useEffect(() => () => batal.current.forEach((c) => c.abort()), []);\n\n const ubah = (id: string, p: Partial<UploadedFile>) => setDaftar((d) => d.map((f) => (f.id === id ? { ...f, ...p } : f)));\n const mulai = (files: File[]) => {\n for (const file of files) {\n const id = `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const ctl = new AbortController();\n batal.current.set(id, ctl);\n setDaftar((d) => [...(multiple ? d : d.filter((f) => f.progress != null)), { id, name: file.name, size: file.size, progress: 0 }]);\n unggah(file, (persen) => ubah(id, { progress: persen }), ctl.signal)\n .then((b) => {\n ubah(id, { progress: undefined, url: b.url ?? undefined });\n if (sembunyikanSelesai) setDaftar((d) => d.filter((f) => f.id !== id));\n onSelesai?.(b);\n })\n .catch((e) => {\n if (ctl.signal.aborted) return;\n const pesan = pesanGalat(e);\n ubah(id, { progress: undefined, error: pesan });\n onGalat?.(pesan, file);\n })\n .finally(() => batal.current.delete(id));\n }\n };\n\n return (\n <div className={className} style={{ display: 'grid', gap: 'var(--u-space-3, 12px)' }}>\n <Dropzone\n onFiles={mulai}\n accept={accept}\n multiple={multiple}\n maxSize={maxSize ?? info?.maks_byte}\n disabled={disabled}\n title={title}\n hint={hint}\n onReject={(m) => onGalat?.(m, new File([], ''))}\n />\n <FileList\n files={daftar}\n onRemove={(id) => {\n batal.current.get(id)?.abort();\n setDaftar((d) => d.filter((f) => f.id !== id));\n }}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/siakad/negara.tsx","../src/siakad/cari.tsx","../src/siakad/status-layanan.tsx","../src/siakad/kalender.tsx","../src/siakad/portal.tsx","../src/siakad/pmb.tsx","../src/siakad/kelengkapan.tsx","../src/siakad/dasbor.tsx","../src/siakad/kurikulum.tsx","../src/siakad/lms.tsx","../src/siakad/cbt.tsx","../src/siakad/navigasi.tsx","../src/siakad/log.tsx","../src/siakad/aplikasi.tsx","../src/siakad/berkas.tsx"],"names":["countries","n","React","jsx","cn","useOptionalSiakad","React2","nama","jsxs","Fragment","PenLine","OptionContent","Combobox","GraduationCap","Avatar","Badge","UserRound","Users","BookOpen","School","Building2","Globe2","useSiakadQuery","MapPin","Select","React3","Globe","Database","KeyRound","Cloud","ServiceStatusPanel","ShieldCheck","CreditCard","HardDrive","Mail","MessageCircle","Video","ServiceList","toISODate","React4","eventsByDay","hariIni","EventCalendar","Button","Download","Alert","pesanGalat","KodeLaporan","EventLegend","formatEventRange","AgendaList","list","EVENT_COLORS","Calendar","NewsGrid","RankedList","AnnouncementList","EventCard","FormGrid","Field","Input","RadioGroup","DatePicker","parseISODate","Textarea","toggle","Check","useSiakad","s","React5","p","Skeleton","ubah","Wizard","invalidateSiakad","formatDate","WizardReview","IdCard","Home","Phone","React6","BadgeCheck","CircleAlert","label","Lock","ArrowRight","RefreshCw","Panel","StatGrid","React7","StatCard","formatNumber","BookOpenCheck","Progress","UserPlus","UserCheck","TriangleAlert","BarChart","GroupedBarChart","DonutChart","BarList","formatPersen","DashboardGrid","Wallet","formatRupiahRingkas","Receipt","FileClock","PiggyBank","Inbox","BudgetMeter","Briefcase","SegmentBar","ClipboardCheck","FileText","ShieldAlert","CycleSteps","ActionList","FlaskConical","Send","Archive","Newspaper","CalendarClock","MessageSquare","LineChart","ActivityFeed","formatRelative","Funnel","Galat","muatDari","Empty","React8","Layers","Target","Info","ProgressRing","dataFlag","Network","ListChecks","TableContainer","Table","ClipboardList","Sheet","ChevronRight","Maximize2","opt","ListTodo","FileQuestion","BellDot","formatTime","React9","MonitorCheck","React10","Timer","Clock","opsi","daftar","ArrowLeft","Flag","LayoutGrid","ConfirmDialog","CircleCheck","AppLogo","UnipoAppLogo","React11","Navbar","Faq","React12","DataTable","Activity","FilterBar","DescriptionList","CopyButton","SegmentedControl","Gauge","LogIn","Ban","LogOut","AppWindow","MonitorSmartphone","Settings2","Pagination","React13","Smartphone","Server","Card","InputGroup","Search","List","Plus","Pencil","Tabs","Dialog","Checkbox","EyeOff","Eye","CodeBlock","teks","Switch","ImagePlus","React14","Dropzone","FileList"],"mappings":"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","file":"siakad.cjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { countries } from 'country-flag-icons';\nimport { cn } from '../lib/cn';\n\nlet flagUrl = (code: string) => `https://purecatamphetamine.github.io/country-flag-icons/3x2/${code}.svg`;\n\n/**\n * Atur sumber gambar bendera (SVG 3:2). Bawaan: CDN country-flag-icons.\n * Untuk aplikasi tanpa internet luar, salin `node_modules/country-flag-icons/3x2/*.svg` ke folder publik:\n * configureFlags((kode) => `/bendera/${kode}.svg`)\n */\nexport function configureFlags(fn: (code: string) => string) {\n flagUrl = fn;\n}\n\nexport interface Negara {\n /** ISO 3166-1 alpha-2, mis. \"ID\". */\n kode: string;\n /** Nama dalam bahasa Indonesia, mis. \"Indonesia\", \"Malaysia\", \"Arab Saudi\". */\n nama: string;\n}\n\nlet cached: Negara[] | null = null;\n/** Daftar negara (ISO 3166-1) dengan nama Indonesia dari Intl.DisplayNames; Indonesia di urutan pertama. */\nexport function daftarNegara(): Negara[] {\n if (cached) return cached;\n const dn = typeof Intl !== 'undefined' && 'DisplayNames' in Intl ? new Intl.DisplayNames(['id'], { type: 'region' }) : null;\n const list = countries\n .filter((c) => c.length === 2 && !['AC', 'TA', 'XK', 'EU'].includes(c))\n .map((kode) => ({ kode, nama: dn?.of(kode) ?? kode }))\n .sort((a, b) => a.nama.localeCompare(b.nama, 'id'));\n const id = list.findIndex((n) => n.kode === 'ID');\n if (id > 0) list.unshift(...list.splice(id, 1));\n return (cached = list);\n}\n\n/** Gambar bendera negara (rasio 3:2). */\nexport function Bendera({ kode, size = 20, className, title }: { kode: string; size?: number; className?: string; title?: string }) {\n const [gagal, setGagal] = React.useState(false);\n const h = Math.round((size * 2) / 3);\n if (gagal || !kode) return <span className={cn('u-flag', className)} style={{ width: size, height: h }} aria-hidden />;\n return <img className={cn('u-flag', className)} src={flagUrl(kode.toUpperCase())} width={size} height={h} alt={title ?? ''} loading=\"lazy\" onError={() => setGagal(true)} />;\n}\n","'use client';\nimport * as React from 'react';\nimport type { Siakad } from 'unipo-siakad-sdk';\nimport { BookOpen, Building2, Globe2, GraduationCap, MapPin, PenLine, School, UserRound, Users } from 'lucide-react';\nimport { Combobox, OptionContent, Select, type ComboboxProps, type SelectOption } from '../components/select';\nimport { Avatar } from '../components/display';\nimport { Badge } from '../components/actions';\nimport { Bendera, daftarNegara, type Negara } from './negara';\nimport { useOptionalSiakad, useSiakadQuery } from './provider';\n\n/** Props bersama semua komponen Cari*. */\nexport type CariProps<T> = Omit<ComboboxProps<T>, 'items' | 'loadItems' | 'itemToString' | 'itemKey' | 'renderItem'> & {\n /** Ganti sumber data (mis. data contoh atau endpoint lain). */\n load?: (q: string, signal: AbortSignal) => Promise<T[]>;\n /** Jumlah hasil per pencarian. Bawaan 20. */\n limit?: number;\n};\n\nfunction useLoader<T>(defaultLoad: ((s: Siakad, q: string, signal: AbortSignal, limit: number) => Promise<T[]>) | null, custom: CariProps<T>['load'], limit = 20) {\n const siakad = useOptionalSiakad();\n return React.useCallback(\n (q: string, signal: AbortSignal) => {\n if (custom) return custom(q, signal);\n if (!siakad || !defaultLoad) return Promise.reject(new Error('SDK belum dipasang di <UnipoProvider>.'));\n return defaultLoad(siakad, q, signal, limit);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [siakad, custom, limit],\n );\n}\n\n/**\n * Tambahkan butir \"ketik manual\" di akhir hasil bila nama yang diketik tidak ada di daftar\n * (sama seperti formulir PMB). Butir manual punya `manual: true` dan `kode: ''`.\n */\nfunction withManual<T extends { kode: string; nama: string; manual?: boolean }>(load: (q: string, signal: AbortSignal) => Promise<T[]>, enabled: boolean, min = 3) {\n if (!enabled) return load;\n return async (q: string, signal: AbortSignal) => {\n const rows = await load(q, signal).catch((e) => {\n if (e?.name === 'AbortError') throw e;\n return [] as T[];\n });\n const text = q.trim();\n if (text.length < min || rows.some((r) => r.nama.toLowerCase() === text.toLowerCase())) return rows;\n return [...rows, { kode: '', nama: text, manual: true } as T];\n };\n}\nconst ManualItem = ({ nama }: { nama: string }) => (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n <PenLine size={14} />\n </span>\n <OptionContent title={`Pakai \"${nama}\"`} meta=\"Tidak ada di daftar, ketik manual\" />\n </>\n);\n\n// ================================================================ Mahasiswa\nexport interface MahasiswaOption {\n nim: string;\n nama: string;\n nama_prodi?: string | null;\n tahun_masuk?: string | null;\n status_aktif?: string | null;\n status_aktif_label?: string | null;\n foto?: string | null;\n [k: string]: unknown;\n}\nconst STATUS_TONE: Record<string, 'success' | 'warning' | 'danger' | 'info' | 'neutral'> = { A: 'success', C: 'warning', D: 'danger', K: 'danger', L: 'info', N: 'neutral' };\n\nexport interface CariMahasiswaProps extends CariProps<MahasiswaOption> {\n /** Saringan tambahan ke GET /v1/mahasiswa (prodi, angkatan, status, nidn_pa, kelas). */\n filter?: { prodi?: string; angkatan?: string; status?: string; nidn_pa?: string; kelas?: string };\n}\n/** Cari mahasiswa berdasarkan NIM atau nama (SDK: mahasiswa.list). Token dosen otomatis dibatasi ke mahasiswa bimbingannya. */\nexport function CariMahasiswa({ load, limit, filter, placeholder = 'Cari NIM atau nama mahasiswa', ...props }: CariMahasiswaProps) {\n const f = JSON.stringify(filter ?? {});\n const loader = useLoader<MahasiswaOption>(\n async (s, q, signal, per_page) => (await s.mahasiswa.list({ ...JSON.parse(f), q: q || undefined, per_page }, { signal })).data as MahasiswaOption[],\n load,\n limit,\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const keyed = React.useCallback(loader, [loader, f]);\n return (\n <Combobox<MahasiswaOption>\n {...props}\n placeholder={placeholder}\n icon={<GraduationCap />}\n loadItems={keyed}\n itemToString={(m) => `${m.nim} · ${m.nama}`}\n itemKey={(m) => m.nim}\n emptyText=\"Mahasiswa tidak ditemukan.\"\n renderItem={(m) => (\n <>\n <Avatar name={m.nama} src={m.foto} size=\"sm\" />\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{m.nama}</span>\n <span className=\"u-option-meta\">\n <span className=\"u-mono\">{m.nim}</span>\n {m.nama_prodi ? ` · ${m.nama_prodi}` : ''}\n {m.tahun_masuk ? ` · ${m.tahun_masuk}` : ''}\n </span>\n </span>\n {m.status_aktif_label && (\n <Badge variant={STATUS_TONE[m.status_aktif ?? ''] ?? 'neutral'} dot>\n {m.status_aktif_label}\n </Badge>\n )}\n </>\n )}\n />\n );\n}\n\n// ================================================================ Dosen\nexport interface DosenOption {\n nidn: string;\n nama: string;\n nama_lengkap?: string | null;\n nama_prodi?: string | null;\n jabatan_akademik?: string | null;\n foto?: string | null;\n [k: string]: unknown;\n}\n/** Cari dosen berdasarkan NIDN atau nama (SDK: dosen.list). */\nexport function CariDosen({ load, limit, filter, placeholder = 'Cari NIDN atau nama dosen', ...props }: CariProps<DosenOption> & { filter?: { prodi?: string; status?: string } }) {\n const f = JSON.stringify(filter ?? {});\n const loader = useLoader<DosenOption>(async (s, q, signal, per_page) => (await s.dosen.list({ ...JSON.parse(f), q: q || undefined, per_page }, { signal })).data as DosenOption[], load, limit);\n return (\n <Combobox<DosenOption>\n {...props}\n placeholder={placeholder}\n icon={<UserRound />}\n loadItems={loader}\n itemToString={(d) => d.nama_lengkap || d.nama}\n itemKey={(d) => d.nidn}\n emptyText=\"Dosen tidak ditemukan.\"\n renderItem={(d) => (\n <>\n <Avatar name={d.nama} src={d.foto} size=\"sm\" />\n <OptionContent title={d.nama_lengkap || d.nama} meta={[d.nidn && `NIDN ${d.nidn}`, d.jabatan_akademik, d.nama_prodi].filter(Boolean).join(' · ')} />\n </>\n )}\n />\n );\n}\n\n// ================================================================ Pegawai (dosen + tendik)\nexport interface PegawaiOption {\n id: number;\n nama: string;\n nama_lengkap?: string | null;\n jenis?: 'dosen' | 'tendik';\n nidn?: string | null;\n nip?: string | null;\n unit_nama?: string | null;\n foto?: string | null;\n [k: string]: unknown;\n}\n/** Cari pegawai/tendik/dosen dari modul SDM (SDK: sdm.getPegawai). */\nexport function CariPegawai({ load, limit, jenis, placeholder = 'Cari nama, NIP, atau NIDN pegawai', ...props }: CariProps<PegawaiOption> & { jenis?: 'dosen' | 'tendik' }) {\n const loader = useLoader<PegawaiOption>(async (s, q, signal, per_page) => (await s.sdm.getPegawai({ jenis, q: q || undefined, per_page }, { signal })).data as PegawaiOption[], load, limit);\n return (\n <Combobox<PegawaiOption>\n {...props}\n placeholder={placeholder}\n icon={<Users />}\n loadItems={loader}\n itemToString={(p) => p.nama_lengkap || p.nama}\n itemKey={(p) => String(p.id)}\n emptyText=\"Pegawai tidak ditemukan.\"\n renderItem={(p) => (\n <>\n <Avatar name={p.nama} src={p.foto} size=\"sm\" />\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{p.nama_lengkap || p.nama}</span>\n <span className=\"u-option-meta\">{[p.nip && `NIP ${p.nip}`, p.unit_nama].filter(Boolean).join(' · ')}</span>\n </span>\n {p.jenis && <Badge variant={p.jenis === 'dosen' ? 'primary' : 'secondary'}>{p.jenis === 'dosen' ? 'Dosen' : 'Tendik'}</Badge>}\n </>\n )}\n />\n );\n}\n\n// ================================================================ Mata kuliah\nexport interface MataKuliahOption {\n id?: number;\n kode_mk: string;\n nama_mk: string;\n sks_mk?: number | null;\n semester?: string | number | null;\n kode_prodi?: string | null;\n [k: string]: unknown;\n}\n/** Cari mata kuliah berdasarkan kode atau nama (SDK: mataKuliah.list). */\nexport function CariMataKuliah({ load, limit, filter, placeholder = 'Cari kode atau nama mata kuliah', ...props }: CariProps<MataKuliahOption> & { filter?: { prodi?: string; tahun_id?: string; semester?: string } }) {\n const f = JSON.stringify(filter ?? {});\n const loader = useLoader<MataKuliahOption>(async (s, q, signal, per_page) => (await s.mataKuliah.list({ ...JSON.parse(f), q: q || undefined, per_page }, { signal })).data as MataKuliahOption[], load, limit);\n return (\n <Combobox<MataKuliahOption>\n {...props}\n placeholder={placeholder}\n icon={<BookOpen />}\n loadItems={loader}\n itemToString={(m) => `${m.kode_mk} · ${m.nama_mk}`}\n itemKey={(m) => `${m.kode_prodi ?? ''}:${m.kode_mk}`}\n emptyText=\"Mata kuliah tidak ditemukan.\"\n renderItem={(m) => (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n <BookOpen size={14} />\n </span>\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{m.nama_mk}</span>\n <span className=\"u-option-meta\">\n <span className=\"u-mono\">{m.kode_mk}</span>\n {m.semester ? ` · Semester ${m.semester}` : ''}\n </span>\n </span>\n {m.sks_mk != null && <Badge variant=\"primary\" shape=\"square\">{m.sks_mk} SKS</Badge>}\n </>\n )}\n />\n );\n}\n\n// ================================================================ Sekolah asal\nexport interface SekolahOption {\n kode: string;\n nama: string;\n kota?: string | null;\n jenis?: string | null;\n /** true bila nama diketik manual (tidak ada di daftar); kode kosong. */\n manual?: boolean;\n [k: string]: unknown;\n}\n/**\n * Cari sekolah asal (SMA/SMK/MA) seperti formulir PMB (SDK: pmb.getInfoSekolah, publik, minimal 3 huruf).\n * Sekolah yang tidak ada di daftar bisa diketik manual (matikan dengan allowManual={false}).\n */\nexport function CariSekolah({ load, limit, allowManual = true, placeholder = 'Ketik nama sekolah, mis. SMA Negeri 1 Marisa', ...props }: CariProps<SekolahOption> & { allowManual?: boolean }) {\n const base = useLoader<SekolahOption>(async (s, q, signal) => (await s.pmb.getInfoSekolah({ q }, { signal })).data as SekolahOption[], load, limit);\n const loader = React.useMemo(() => withManual(base, allowManual), [base, allowManual]);\n return (\n <Combobox<SekolahOption>\n {...props}\n placeholder={placeholder}\n icon={<School />}\n loadItems={loader}\n minQueryLength={3}\n hintText=\"Ketik minimal 3 huruf nama atau NPSN sekolah.\"\n itemToString={(s) => s.nama}\n itemKey={(s) => (s.manual ? `manual:${s.nama}` : s.kode)}\n emptyText=\"Sekolah tidak ditemukan. Periksa ejaan atau hubungi panitia.\"\n renderItem={(s) =>\n s.manual ? (\n <ManualItem nama={s.nama} />\n ) : (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n <School size={14} />\n </span>\n <OptionContent title={s.nama} meta={[s.jenis, s.kota].filter(Boolean).join(' · ')} />\n </>\n )\n }\n />\n );\n}\n\n// ================================================================ Perguruan tinggi\nexport interface PerguruanTinggiOption {\n kode: string;\n nama: string;\n singkatan?: string | null;\n kota?: string | null;\n logo?: string | null;\n manual?: boolean;\n [k: string]: unknown;\n}\n/**\n * Cari perguruan tinggi asal (mahasiswa pindahan/alih jenjang, studi lanjut dosen) dari referensi SIAKAD\n * `r_perguruan_tinggi` lewat `GET /v1/pmb/info/perguruan-tinggi` (publik, minimal 3 huruf; SDK 1.1:\n * pmb.getInfoPerguruanTinggi). Nama yang tidak ada di daftar bisa diketik manual, seperti formulir PMB.\n */\nexport function CariPerguruanTinggi({ load, limit, allowManual = true, placeholder = 'Cari atau ketik nama perguruan tinggi', ...props }: CariProps<PerguruanTinggiOption> & { allowManual?: boolean }) {\n const base = useLoader<PerguruanTinggiOption>(\n // Lewat request() agar juga jalan dengan SDK 1.0 yang belum punya metode getInfoPerguruanTinggi.\n async (s, q, signal) => (await s.request<PerguruanTinggiOption[]>({ method: 'GET', path: '/v1/pmb/info/perguruan-tinggi', query: { q }, public: true }, { signal })).data,\n load,\n limit,\n );\n const loader = React.useMemo(() => withManual(base, allowManual), [base, allowManual]);\n return (\n <Combobox<PerguruanTinggiOption>\n {...props}\n placeholder={placeholder}\n icon={<Building2 />}\n loadItems={loader}\n itemToString={(p) => p.nama}\n itemKey={(p) => (p.manual ? `manual:${p.nama}` : p.kode)}\n minQueryLength={3}\n hintText=\"Ketik minimal 3 huruf nama, singkatan, atau kode PT.\"\n emptyText=\"Perguruan tinggi tidak ditemukan.\"\n renderItem={(p) =>\n p.manual ? (\n <ManualItem nama={p.nama} />\n ) : (\n <>\n <span className=\"u-option-media\" data-shape=\"square\">\n {p.logo ? <img src={p.logo} alt=\"\" /> : <Building2 size={14} />}\n </span>\n <OptionContent title={p.nama} meta={[p.singkatan, p.kota].filter(Boolean).join(' · ')} />\n </>\n )\n }\n />\n );\n}\n\n// ================================================================ Negara (data lokal + bendera)\n/** Cari negara dengan bendera (kewarganegaraan, negara asal mahasiswa asing, alamat luar negeri). Tidak butuh API. */\nexport function CariNegara({ placeholder = 'Cari negara', ...props }: Omit<ComboboxProps<Negara>, 'items' | 'loadItems' | 'itemToString' | 'itemKey' | 'renderItem'>) {\n const items = React.useMemo(daftarNegara, []);\n const value = props.value;\n return (\n <Combobox<Negara>\n {...props}\n placeholder={placeholder}\n icon={value ? <Bendera kode={value.kode} size={18} /> : <Globe2 />}\n items={items}\n itemToString={(n) => n.nama}\n itemKey={(n) => n.kode}\n emptyText=\"Negara tidak ditemukan.\"\n renderItem={(n) => (\n <>\n <span className=\"u-option-media\" data-shape=\"flag\">\n <Bendera kode={n.kode} size={22} />\n </span>\n <span className=\"u-option-text\" style={{ flex: 1 }}>\n <span>{n.nama}</span>\n </span>\n <span className=\"u-option-meta u-mono\">{n.kode}</span>\n </>\n )}\n />\n );\n}\n\n// ================================================================ Wilayah\nexport interface WilayahOption {\n kode: string;\n nama: string;\n [k: string]: unknown;\n}\n/** Pilih provinsi lalu kabupaten/kota (SDK: tracer.getReferensiWilayah). */\nexport function CariWilayah({ propinsi, placeholder, ...props }: CariProps<WilayahOption> & { /** Kode provinsi: bila diisi, menampilkan kabupaten/kota di provinsi itu. */ propinsi?: string }) {\n const { data, loading } = useSiakadQuery(['wilayah', propinsi ?? ''], (s, signal) => s.tracer.getReferensiWilayah(propinsi ? { propinsi } : {}, { signal }));\n const items = ((data as Array<Record<string, unknown>> | undefined) ?? []).map((w) => ({ kode: String(w.kode ?? w.id), nama: String(w.nama ?? '') }));\n return (\n <Combobox<WilayahOption>\n {...props}\n placeholder={placeholder ?? (propinsi ? 'Cari kabupaten/kota' : 'Cari provinsi')}\n icon={<MapPin />}\n items={items}\n emptyText={loading ? 'Memuat…' : 'Wilayah tidak ditemukan.'}\n itemToString={(w) => w.nama}\n itemKey={(w) => w.kode}\n />\n );\n}\n\n// ================================================================ Pilihan referensi (Select)\ntype PilihProps<V> = { value?: V | null; onValueChange?: (v: V | null) => void; placeholder?: string; className?: string; id?: string; disabled?: boolean; size?: 'sm' | 'md' | 'lg'; 'aria-label'?: string };\n\n/** Pilih program studi, dikelompokkan per fakultas (SDK: referensi.getProdi). */\nexport function PilihProdi({ placeholder = 'Semua program studi', ...props }: PilihProps<string>) {\n const { data } = useSiakadQuery(['referensi', 'prodi'], (s, signal) => s.referensi.getProdi({}, { signal }), { staleTime: 10 * 60_000 });\n const options: SelectOption<string>[] = (data ?? []).map((p) => ({\n value: String(p.kode_prodi),\n label: `${p.kode_jenjang ? p.kode_jenjang + ' ' : ''}${p.nama_prodi}`,\n group: p.nama_fakultas ?? undefined,\n }));\n return <Select<string> {...props} placeholder={placeholder} options={options} />;\n}\n\n/** Pilih tahun akademik/periode (SDK: referensi.getTahunAkademik). */\nexport function PilihTahunAkademik({ placeholder = 'Pilih periode', ...props }: PilihProps<string>) {\n const { data } = useSiakadQuery(['referensi', 'tahun'], (s, signal) => s.referensi.getTahunAkademik({}, { signal }), { staleTime: 10 * 60_000 });\n const options: SelectOption<string>[] = ((data as Array<Record<string, unknown>> | undefined) ?? []).map((t) => ({\n value: String(t.tahun_id),\n label: String(t.nama_tahun ?? t.tahun_id),\n description: t.aktif === true || t.buka === 'Y' ? 'Aktif' : undefined,\n }));\n return <Select<string> {...props} placeholder={placeholder} options={options} />;\n}\n\n","'use client';\nimport * as React from 'react';\nimport { Cloud, CreditCard, Database, Globe, HardDrive, KeyRound, Mail, MessageCircle, ShieldCheck, Video } from 'lucide-react';\nimport { ServiceList, ServiceStatusPanel, type ServiceCheck, type ServiceInfo } from '../components/status';\nimport { useOptionalSiakad, useSiakadQuery } from './provider';\n\nexport interface StatusLayananProps {\n /** Alamat API yang ditampilkan di baris Gerbang API, mis. \"https://api.unipo.ac.id/v1\". */\n apiLabel?: string;\n /**\n * Layanan tambahan yang diperiksa lewat fetch (mis. SSO). Alamat harus mengizinkan CORS dari aplikasi Anda,\n * atau arahkan ke BFF sendiri (mis. /bff/status).\n */\n extra?: Array<{ key: string; name: string; url: string; description?: string; icon?: React.ReactNode }>;\n /** Sertakan baris SSO (sso.unipo.ac.id) lewat URL ini. Bawaan tidak ada. */\n ssoUrl?: string;\n intervalMs?: number;\n title?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Status layanan UNIPO siap pakai: Gerbang API dan database SIAKAD dari `system.health()` (GET /v1/health, publik),\n * plus layanan lain yang Anda daftarkan (SSO, BFF). Diperiksa ulang tiap menit dan lewat tombol Periksa ulang.\n */\nexport function StatusLayananUnipo({ apiLabel = 'https://api.unipo.ac.id/v1', extra = [], ssoUrl, intervalMs = 60_000, title, className }: StatusLayananProps) {\n const siakad = useOptionalSiakad();\n // Satu panggilan health dipakai dua baris (gerbang + database).\n const health = React.useRef<Promise<Record<string, unknown>> | null>(null);\n const getHealth = (signal: AbortSignal) => {\n if (!health.current) {\n if (!siakad) return Promise.reject(new Error('SDK belum dipasang'));\n health.current = siakad.system.health({}, { signal }).then((r) => r.data as Record<string, unknown>);\n health.current.finally(() => setTimeout(() => (health.current = null), 1000)).catch(() => undefined);\n }\n return health.current;\n };\n const fetchCheck = (url: string) => async (signal: AbortSignal) => {\n const r = await fetch(url, { signal, cache: 'no-store', headers: { Accept: 'application/json' } });\n if (!r.ok) throw Object.assign(new Error(String(r.status)), { status: r.status });\n };\n const checks: ServiceCheck[] = [\n { key: 'api', name: 'Gerbang API', description: apiLabel, icon: <Globe />, check: async (signal) => void (await getHealth(signal)) },\n {\n key: 'db',\n name: 'Database SIAKAD',\n icon: <Database />,\n check: async (signal) => {\n const h = await getHealth(signal);\n return h.database === 'ok' ? { description: 'Terhubung' } : { status: 'down', detail: String(h.database ?? 'gagal') };\n },\n },\n ...(ssoUrl ? [{ key: 'sso', name: 'Login SSO', description: ssoUrl.replace(/\\/\\.well-known.*$/, ''), icon: <KeyRound />, check: fetchCheck(ssoUrl) }] : []),\n ...extra.map((e) => ({ key: e.key, name: e.name, description: e.description ?? e.url, icon: e.icon ?? <Cloud />, check: fetchCheck(e.url) })),\n ];\n return <ServiceStatusPanel checks={checks} intervalMs={intervalMs} title={title} className={className} />;\n}\n\n// ================================================================ Integrasi aktif\nconst INTEGRASI: Record<string, { nama: string; icon: React.ReactNode }> = {\n captcha: { nama: 'Captcha', icon: <ShieldCheck /> },\n pembayaran: { nama: 'Payment gateway', icon: <CreditCard /> },\n penyimpanan: { nama: 'Penyimpanan berkas', icon: <HardDrive /> },\n cache: { nama: 'Cache & antrean', icon: <Database /> },\n email: { nama: 'Email', icon: <Mail /> },\n whatsapp: { nama: 'WhatsApp', icon: <MessageCircle /> },\n rapat: { nama: 'Rapat daring', icon: <Video /> },\n};\n\n/** Daftar integrasi pihak ketiga yang aktif (GET /v1/integrasi/status, publik): captcha, pembayaran, email, dll. */\nexport function IntegrasiAktif({ className }: { className?: string }) {\n const { data, loading } = useSiakadQuery(['integrasi', 'status'], (s, signal) => s.integrasi.getStatus({}, { signal }), { staleTime: 60_000 });\n const d = (data ?? {}) as Record<string, { penyedia?: string; driver?: string; mode?: string } | null>;\n const keys = Object.keys(INTEGRASI).filter((k) => loading || k in d);\n const services: ServiceInfo[] = keys.map((k) => {\n const v = d[k];\n return {\n key: k,\n name: INTEGRASI[k].nama,\n icon: INTEGRASI[k].icon,\n status: loading ? 'checking' : v ? 'ok' : 'off',\n statusLabel: loading ? undefined : v ? 'Aktif' : 'Nonaktif',\n description: loading ? 'Memuat…' : v ? [v.penyedia ?? v.driver, v.mode === 'sandbox' ? 'mode uji' : null].filter(Boolean).join(' · ') : 'Belum diatur di Pustikom',\n };\n });\n return <ServiceList className={className} services={services} />;\n}\n","'use client';\nimport * as React from 'react';\nimport { Download } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { Button } from '../components/actions';\nimport { Calendar, toISODate } from '../components/calendar';\nimport { Alert } from '../components/display';\nimport { AgendaList, EVENT_COLORS, EventCalendar, EventLegend, eventsByDay, formatEventRange, type CalendarEvent } from '../components/schedule';\nimport { pesanGalat, useSiakadQuery } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/** Satu baris dari `GET /v1/kalender/terpadu`. */\nexport interface KegiatanTerpadu {\n sumber: 'kalender' | 'libur' | 'tahun' | 'batas' | 'portal' | 'pmb' | string;\n jenis: string;\n judul: string;\n mulai: string;\n selesai: string | null;\n id?: number;\n libur?: boolean;\n lokasi?: string | null;\n tautan?: string | null;\n warna?: string | null;\n keterangan?: string | null;\n tahun_id?: string | null;\n kode_prodi?: string | null;\n}\n\nexport const JENIS_KEGIATAN: Record<string, string> = {\n akademik: 'Akademik',\n perkuliahan: 'Perkuliahan',\n ujian: 'Ujian',\n krs: 'KRS',\n nilai: 'Nilai',\n libur: 'Libur',\n cuti_bersama: 'Cuti bersama',\n wisuda: 'Wisuda',\n pmb: 'PMB',\n keuangan: 'Keuangan',\n kemahasiswaan: 'Kemahasiswaan',\n rapat: 'Rapat',\n lainnya: 'Lainnya',\n};\n\n/** Ubah baris kalender terpadu menjadi `CalendarEvent`. */\nexport function keEvent(k: KegiatanTerpadu, i = 0): CalendarEvent {\n return {\n id: `${k.sumber}-${k.id ?? i}`,\n title: k.judul,\n start: k.mulai,\n end: k.selesai,\n kind: k.jenis,\n color: k.warna || undefined,\n location: k.lokasi || undefined,\n description: k.keterangan || undefined,\n href: k.tautan || undefined,\n holiday: !!k.libur || k.jenis === 'libur' || k.jenis === 'cuti_bersama',\n };\n}\n\ninterface KalenderQuery {\n kodeProdi?: string;\n tahunId?: string;\n /** Sumber yang diambil, mis. ['kalender','libur','tahun']. Bawaan semua. */\n sumber?: string[];\n}\n\nfunction useKalender(dari: string, sampai: string, { kodeProdi, tahunId, sumber }: KalenderQuery) {\n return useSiakadQuery<KegiatanTerpadu[]>(\n ['kalender-terpadu', dari, sampai, kodeProdi, tahunId, sumber?.join(',')],\n (s, signal) =>\n s.kalender.getTerpadu(\n {\n dari,\n sampai,\n kode_prodi: kodeProdi,\n tahun_id: tahunId,\n sumber: sumber?.join(','),\n },\n { signal },\n ) as never,\n );\n}\n\nconst awalBulan = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst rentangGrid = (m: Date) => {\n const first = awalBulan(m);\n const off = (first.getDay() + 6) % 7;\n return [toISODate(new Date(first.getFullYear(), first.getMonth(), 1 - off)), toISODate(new Date(first.getFullYear(), first.getMonth(), 42 - off))] as const;\n};\n\n// ================================================================ Kalender akademik penuh\nexport interface KalenderAkademikProps extends KalenderQuery {\n /** Bulan awal. Bawaan bulan ini. */\n initialMonth?: Date;\n /** Tautan langganan .ics (mis. `${baseUrl}/v1/kalender/ics`) untuk tombol \"Langganan\". */\n icsUrl?: string;\n /** Klik kegiatan; bawaan membuka panel tanggal itu. */\n onKegiatanClick?: (k: CalendarEvent) => void;\n className?: string;\n}\n\n/**\n * Kalender akademik dari `kalender.getTerpadu`: grid bulan + panel agenda tanggal terpilih,\n * legenda yang bisa dipakai menyaring jenis kegiatan, dan tombol langganan .ics.\n */\nexport function KalenderAkademik({ initialMonth, icsUrl, onKegiatanClick, className, ...q }: KalenderAkademikProps) {\n const [month, setMonth] = React.useState(() => awalBulan(initialMonth ?? new Date()));\n const [selected, setSelected] = React.useState<string>(() => toISODate(new Date()));\n const [hidden, setHidden] = React.useState<string[]>([]);\n const [dari, sampai] = rentangGrid(month);\n const { data, loading, error, refetch } = useKalender(dari, sampai, q);\n\n const events = React.useMemo(() => (data ?? []).map(keEvent), [data]);\n const visible = React.useMemo(() => events.filter((e) => !hidden.includes(e.kind ?? '')), [events, hidden]);\n const kinds = React.useMemo(() => [...new Set(events.map((e) => e.kind ?? 'lainnya'))].sort((a, b) => Object.keys(JENIS_KEGIATAN).indexOf(a) - Object.keys(JENIS_KEGIATAN).indexOf(b)), [events]);\n const byDay = React.useMemo(() => eventsByDay(visible), [visible]);\n const hariIni = byDay.get(selected) ?? [];\n // Mendatang: 5 kegiatan berikutnya setelah tanggal terpilih (untuk panel saat tanggal kosong).\n const mendatang = React.useMemo(() => visible.filter((e) => e.start.slice(0, 10) > selected).slice(0, 5), [visible, selected]);\n\n return (\n <div className={cn('u-kalender-wrap', className)}>\n <div className=\"u-kalender\">\n <div style={{ display: 'grid', gap: '0.75rem', minWidth: 0 }}>\n <EventCalendar\n events={visible}\n month={month}\n onMonthChange={setMonth}\n selected={selected}\n onSelect={(d) => setSelected(d)}\n onEventClick={(e) => (onKegiatanClick ? onKegiatanClick(e) : setSelected(e.start.slice(0, 10) < dari ? dari : e.start.slice(0, 10)))}\n loading={loading && !data}\n toolbar={\n icsUrl ? (\n <Button variant=\"outline\" size=\"sm\" render={<a href={icsUrl} />}>\n <Download /> Langganan .ics\n </Button>\n ) : undefined\n }\n />\n {error && (\n <Alert\n variant=\"danger\"\n title=\"Kalender gagal dimuat\"\n actions={\n <Button size=\"sm\" variant=\"outline\" onClick={refetch}>\n Coba lagi\n </Button>\n }\n >\n {pesanGalat(error, { kode: false })}\n <KodeLaporan error={error} />\n </Alert>\n )}\n {kinds.length > 0 && <EventLegend kinds={kinds} labels={JENIS_KEGIATAN} hidden={hidden} onToggle={(k) => setHidden((h) => (h.includes(k) ? h.filter((x) => x !== k) : [...h, k]))} />}\n </div>\n <aside className=\"u-kalender-side\" aria-label=\"Agenda tanggal terpilih\">\n <h4>{formatEventRange(selected, null, true)}</h4>\n <p>{hariIni.length ? `${hariIni.length} kegiatan` : 'Tidak ada kegiatan di tanggal ini'}</p>\n {hariIni.length > 0 && <AgendaList events={hariIni} onEventClick={onKegiatanClick} compact />}\n <h4 className=\"u-kalender-sub\">Berikutnya</h4>\n <AgendaList events={mendatang} loading={loading && !data} onEventClick={onKegiatanClick} compact empty=\"Belum ada kegiatan terjadwal.\" />\n </aside>\n </div>\n </div>\n );\n}\n\n// ================================================================ Versi sidebar\nexport interface KalenderSidebarProps extends KalenderQuery {\n /** Judul widget. */\n title?: React.ReactNode;\n /** Jumlah kegiatan mendatang yang ditampilkan. Bawaan 4. */\n limit?: number;\n /** Tautan \"Lihat semua\". */\n href?: string;\n onKegiatanClick?: (k: CalendarEvent) => void;\n className?: string;\n}\n\n/**\n * Kalender ringkas untuk sidebar portal/dasbor: kalender kecil dengan titik warna per kegiatan.\n * Klik tanggal untuk melihat kegiatannya; tanpa pilihan, tampil kegiatan mendatang.\n */\nexport function KalenderSidebar({ title = 'Kalender akademik', limit = 4, href, onKegiatanClick, className, ...q }: KalenderSidebarProps) {\n const [month, setMonth] = React.useState(() => awalBulan(new Date()));\n const [selected, setSelected] = React.useState<Date | null>(null);\n const [dari, sampai] = rentangGrid(month);\n const { data, loading } = useKalender(dari, sampai, q);\n const events = React.useMemo(() => (data ?? []).map(keEvent), [data]);\n const byDay = React.useMemo(() => eventsByDay(events, dari, sampai), [events, dari, sampai]);\n const markers = React.useMemo(() => {\n const m: Record<string, { color?: string }[]> = {};\n byDay.forEach(\n (list, k) =>\n (m[k] = list.slice(0, 3).map((e) => ({\n color: e.color ?? EVENT_COLORS[e.kind ?? ''] ?? 'var(--u-primary)',\n }))),\n );\n return m;\n }, [byDay]);\n const today = toISODate(new Date());\n const sel = selected ? toISODate(selected) : null;\n const list = sel ? (byDay.get(sel) ?? []) : events.filter((e) => e.start.slice(0, 10) >= today);\n\n return (\n <section className={cn('u-kalender-mini', className)}>\n <div className=\"u-kalender-mini-head\">\n <h4>{title}</h4>\n {href && (\n <a className=\"u-kalender-link\" href={href}>\n Lihat semua\n </a>\n )}\n </div>\n <Calendar value={selected} onValueChange={(d) => setSelected(sel === toISODate(d) ? null : d)} month={month} onMonthChange={setMonth} markers={markers} cellSize={34} />\n <div className=\"u-kalender-mini-head\">\n <h4\n style={{\n fontSize: 'var(--u-text-xs)',\n color: 'var(--u-muted-foreground)',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n {sel ? formatEventRange(sel, null, true) : 'Mendatang'}\n </h4>\n {sel && (\n <Button variant=\"link\" size=\"xs\" onClick={() => setSelected(null)}>\n Tampilkan mendatang\n </Button>\n )}\n </div>\n <AgendaList events={list} limit={limit} loading={loading && !data} onEventClick={onKegiatanClick} compact empty={sel ? 'Tidak ada kegiatan.' : 'Belum ada kegiatan terjadwal.'} />\n </section>\n );\n}\n","'use client';\nimport { AnnouncementList, EventCard, NewsGrid, RankedList, type AnnouncementItem, type EventCardItem, type NewsGridProps, type NewsItem } from '../components/content';\nimport { Alert } from '../components/display';\nimport { pesanGalat, useSiakadQuery } from './provider';\n\n/** Bentuk ringkas berita/pengumuman/agenda dari `/v1/portal/*` (kolom yang dipakai widget). */\nexport interface KontenPortal {\n id: number;\n slug?: string | null;\n judul: string;\n ringkasan?: string | null;\n jenis?: string | null;\n kategori?: { slug: string; nama: string; warna?: string | null } | null;\n gambar?: { url: string; alt?: string | null } | null;\n sampul?: { url: string } | null;\n penulis_tampil?: string | null;\n dilihat?: number | null;\n terbit_pada?: string | null;\n // pengumuman\n nomor?: string | null;\n prioritas?: string | null;\n berlaku_sampai?: string | null;\n sematkan?: boolean | null;\n // agenda\n mulai?: string;\n selesai?: string | null;\n sepanjang_hari?: boolean | null;\n mode?: string | null;\n lokasi?: string | null;\n penyelenggara?: string | null;\n pendaftaran?: boolean | null;\n}\n\nconst JENIS_BERITA: Record<string, string> = {\n prestasi: 'Prestasi',\n opini: 'Opini',\n liputan: 'Liputan',\n siaran_pers: 'Siaran pers',\n artikel: 'Artikel',\n};\n\n/** Pembentuk URL detail. Bawaan: `/berita/{slug}`, `/pengumuman/{slug}`, `/agenda/{slug}`. */\nexport type HrefKonten = (jenis: 'berita' | 'pengumuman' | 'agenda', k: KontenPortal) => string | undefined;\nconst hrefBawaan: HrefKonten = (jenis, k) => `/${jenis}/${k.slug ?? k.id}`;\n\nexport function keBerita(k: KontenPortal, href: HrefKonten = hrefBawaan): NewsItem {\n return {\n id: k.id,\n title: k.judul,\n href: href('berita', k),\n excerpt: k.ringkasan ?? undefined,\n image: k.gambar?.url ?? null,\n imageAlt: k.gambar?.alt ?? '',\n category: k.kategori ? { name: k.kategori.nama, color: k.kategori.warna } : null,\n author: k.penulis_tampil ?? undefined,\n date: k.terbit_pada ?? null,\n views: k.dilihat ?? null,\n badge: k.jenis && JENIS_BERITA[k.jenis] !== k.kategori?.nama ? JENIS_BERITA[k.jenis] : undefined,\n };\n}\n\ninterface Umum {\n /** Kode situs portal, mis. 'univ' atau kode fakultas. Kosong = semua situs. */\n situs?: string;\n /** Ikutkan situs turunan (fakultas/prodi di bawahnya). */\n turunan?: boolean;\n /** Jumlah item. */\n jumlah?: number;\n href?: HrefKonten;\n className?: string;\n}\n\nfunction Galat({ error, refetch }: { error: Error; refetch: () => void }) {\n return (\n <Alert\n variant=\"danger\"\n title=\"Konten gagal dimuat\"\n actions={\n <button type=\"button\" className=\"u-section-link\" onClick={refetch}>\n Coba lagi\n </button>\n }\n >\n {pesanGalat(error)}\n </Alert>\n );\n}\n\n// ================================================================ Berita\nexport interface BeritaPortalProps extends Umum {\n /** grid / featured (sorotan) / list. */\n layout?: NewsGridProps['layout'];\n kategori?: string;\n /** berita | artikel | opini | prestasi | liputan | siaran_pers */\n jenis?: string;\n unggulan?: boolean;\n urut?: 'terbaru' | 'populer';\n /** Berita yang menyebut mahasiswa/dosen ini (untuk profil). */\n nim?: string;\n nidn?: string;\n minColumn?: number;\n}\n\n/** Berita dari `portal.getBerita` dalam tata letak grid, sorotan, atau daftar. */\nexport function BeritaPortal({ situs, turunan, jumlah = 6, href, className, layout = 'grid', kategori, jenis, unggulan, urut, nim, nidn, minColumn }: BeritaPortalProps) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n kategori,\n jenis,\n unggulan: unggulan ? '1' : undefined,\n urut,\n nim,\n nidn,\n };\n const { data, loading, error, refetch } = useSiakadQuery<KontenPortal[]>(['portal-berita', q], (s, signal) => s.portal.getBerita(q, { signal }) as never, { staleTime: 120_000 });\n if (error) return <Galat error={error} refetch={refetch} />;\n return <NewsGrid className={className} layout={layout} minColumn={minColumn} loading={loading && !data} skeletonCount={jumlah} items={(data ?? []).map((k) => keBerita(k, href))} />;\n}\n\n/** Daftar bernomor berita terpopuler (urut=populer). */\nexport function BeritaTerpopuler({ situs, turunan, jumlah = 5, href, className }: Umum) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n urut: 'populer',\n };\n const { data, loading } = useSiakadQuery<KontenPortal[]>(['portal-berita', q], (s, signal) => s.portal.getBerita(q, { signal }) as never, { staleTime: 300_000 });\n return <RankedList className={className} loading={loading && !data} items={(data ?? []).map((k) => keBerita(k, href))} />;\n}\n\n// ================================================================ Pengumuman\nexport interface PengumumanPortalProps extends Umum {\n /** biasa | penting | darurat */\n prioritas?: string;\n /** Sertakan yang sudah lewat masa berlaku. */\n kedaluwarsa?: boolean;\n}\n\n/** Pengumuman dari `portal.getPengumuman`: tersemat di atas, prioritas berwarna, masa berlaku. */\nexport function PengumumanPortal({ situs, turunan, jumlah = 5, href = hrefBawaan, className, prioritas, kedaluwarsa }: PengumumanPortalProps) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n prioritas,\n kedaluwarsa: kedaluwarsa ? '1' : undefined,\n };\n const { data, loading, error, refetch } = useSiakadQuery<KontenPortal[]>(['portal-pengumuman', q], (s, signal) => s.portal.getPengumuman(q, { signal }) as never, { staleTime: 120_000 });\n if (error) return <Galat error={error} refetch={refetch} />;\n const items: AnnouncementItem[] = (data ?? [])\n .map((k) => ({\n id: k.id,\n title: k.judul,\n href: href('pengumuman', k),\n number: k.nomor,\n priority: k.prioritas ?? undefined,\n date: k.terbit_pada,\n until: k.berlaku_sampai,\n pinned: !!k.sematkan,\n }))\n .sort((a, b) => Number(b.pinned) - Number(a.pinned));\n return <AnnouncementList className={className} loading={loading && !data} items={items} />;\n}\n\n// ================================================================ Agenda\nexport interface AgendaPortalProps extends Umum {\n waktu?: 'mendatang' | 'lalu' | 'semua';\n /** luring | daring | hibrida */\n mode?: string;\n /** row = baris berbingkai; card = kartu dengan gambar. */\n variant?: 'row' | 'card';\n}\n\n/** Agenda dari `portal.getAgenda` (bawaan: mendatang) dengan tile tanggal, jam WITA, mode, dan lokasi. */\nexport function AgendaPortal({ situs, turunan, jumlah = 4, href = hrefBawaan, className, waktu = 'mendatang', mode, variant = 'row' }: AgendaPortalProps) {\n const q = {\n situs,\n turunan: turunan ? '1' : undefined,\n per_page: jumlah,\n waktu,\n mode,\n };\n const { data, loading, error, refetch } = useSiakadQuery<KontenPortal[]>(['portal-agenda', q], (s, signal) => s.portal.getAgenda(q, { signal }) as never, { staleTime: 120_000 });\n if (error) return <Galat error={error} refetch={refetch} />;\n if (loading && !data) return <AnnouncementList loading items={[]} />;\n const items: EventCardItem[] = (data ?? []).map((k) => ({\n id: k.id,\n title: k.judul,\n href: href('agenda', k),\n start: k.mulai ?? '',\n end: k.selesai,\n allDay: !!k.sepanjang_hari,\n mode: k.mode,\n location: k.lokasi ?? undefined,\n organizer: k.penyelenggara ?? undefined,\n image: k.gambar?.url ?? null,\n registration: !!k.pendaftaran,\n }));\n if (!items.length) return <div className=\"u-agenda-empty\">Belum ada agenda {waktu === 'lalu' ? 'yang lalu' : 'mendatang'}.</div>;\n return (\n <div\n className={className}\n style={{\n display: 'grid',\n gap: '0.75rem',\n gridTemplateColumns: variant === 'card' ? 'repeat(auto-fill, minmax(min(100%, 260px), 1fr))' : undefined,\n }}\n >\n {items.map((it) => (\n <EventCard key={it.id} item={it} variant={variant} />\n ))}\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { Check, GraduationCap } from 'lucide-react';\nimport { Alert } from '../components/display';\nimport { DatePicker, parseISODate, toISODate } from '../components/calendar';\nimport { Field, Input, RadioGroup, Textarea } from '../components/forms';\nimport { Select } from '../components/select';\nimport { Skeleton } from '../components/actions';\nimport { FormGrid, Wizard, WizardReview, type ReviewSection, type WizardStep } from '../components/wizard';\nimport { formatDate } from '../lib/format';\nimport { CariPerguruanTinggi, CariSekolah } from './cari';\nimport { invalidateSiakad, pesanGalat, useSiakad, useSiakadQuery } from './provider';\n\n// ================================================================ Tipe formulir (PATCH /v1/pmb/saya/pendaftaran/{id})\ntype Isian = Record<string, string | number | null | undefined>;\nexport interface FormulirPmb {\n pribadi?: Isian;\n alamat?: Isian;\n asal_sekolah?: Isian;\n orang_tua?: { ayah?: Isian; ibu?: Isian; wali?: Isian };\n pilihan?: string[];\n}\nexport type Opsi = { kode: string; nama: string };\n/** Referensi kode dari `GET /v1/pmb/info/referensi-formulir` (tabel r_kode SIAKAD). */\nexport type ReferensiFormulir = Partial<\n Record<'jenis_kelamin' | 'agama' | 'warga_negara' | 'status_sipil' | 'hidup' | 'status_masuk' | 'asal_jenjang' | 'pendidikan' | 'pekerjaan' | 'penghasilan' | 'sumber_informasi', Opsi[]>\n>;\n\n/** Ambil referensi kode formulir (publik, di-cache 1 jam). */\nexport function useReferensiFormulir() {\n return useSiakadQuery<ReferensiFormulir>(['pmb-referensi-formulir'], (s, signal) => s.pmb.getInfoReferensiFormulir({}, { signal }) as never, { staleTime: 3_600_000 });\n}\n\nconst opsi = (xs?: Opsi[]) => (xs ?? []).map((o) => ({ value: o.kode, label: o.nama }));\nconst nama = (xs: Opsi[] | undefined, kode: unknown) => (kode == null || kode === '' ? null : (xs?.find((o) => o.kode === String(kode))?.nama ?? String(kode)));\n\n// ================================================================ Bagian isian (dipakai wizard PMB dan biodata)\ninterface BagianProps {\n value: Isian;\n onChange: (patch: Isian) => void;\n ref_: ReferensiFormulir;\n errors?: Record<string, string>;\n}\nconst teks = (v: unknown) => (v == null ? '' : String(v));\n\nexport function IsianDataDiri({ value: v, onChange, ref_, errors = {} }: BagianProps) {\n const set = (k: string) => (e: React.ChangeEvent<HTMLInputElement>) => onChange({ [k]: e.target.value });\n return (\n <FormGrid>\n <Field label=\"Nama lengkap\" required description=\"Sesuai ijazah. Maksimal 30 karakter (batas kolom SIAKAD).\" error={errors.nama} style={{ gridColumn: '1 / -1' }}>\n <Input value={teks(v.nama)} onChange={set('nama')} maxLength={30} autoComplete=\"name\" />\n </Field>\n <Field label=\"NIK\" required error={errors.no_identitas} description=\"16 digit, sesuai KTP/KK.\">\n <Input value={teks(v.no_identitas)} onChange={(e) => onChange({ no_identitas: e.target.value.replace(/\\D/g, '').slice(0, 16) })} inputMode=\"numeric\" />\n </Field>\n <Field label=\"NISN\" optional error={errors.nisn}>\n <Input value={teks(v.nisn)} onChange={(e) => onChange({ nisn: e.target.value.replace(/\\D/g, '').slice(0, 10) })} inputMode=\"numeric\" />\n </Field>\n <Field label=\"Jenis kelamin\" required error={errors.jenis_kelamin} style={{ gridColumn: '1 / -1' }}>\n <RadioGroup orientation=\"horizontal\" options={opsi(ref_.jenis_kelamin)} value={teks(v.jenis_kelamin) || null} onValueChange={(x) => onChange({ jenis_kelamin: x })} />\n </Field>\n <Field label=\"Tempat lahir\" required error={errors.tempat_lahir}>\n <Input value={teks(v.tempat_lahir)} onChange={set('tempat_lahir')} />\n </Field>\n <Field label=\"Tanggal lahir\" required error={errors.tanggal_lahir}>\n <DatePicker value={v.tanggal_lahir ? parseISODate(String(v.tanggal_lahir)) : null} onValueChange={(d) => onChange({ tanggal_lahir: d ? toISODate(d) : null })} max={new Date()} />\n </Field>\n <Field label=\"Agama\" required error={errors.agama}>\n <Select options={opsi(ref_.agama)} value={teks(v.agama) || null} onValueChange={(x) => onChange({ agama: x })} />\n </Field>\n <Field label=\"Kewarganegaraan\" error={errors.warga_negara}>\n <Select options={opsi(ref_.warga_negara)} value={teks(v.warga_negara) || null} onValueChange={(x) => onChange({ warga_negara: x })} />\n </Field>\n <Field label=\"Nomor HP (WhatsApp)\" required error={errors.hp} description=\"Untuk informasi seleksi dan pembayaran.\">\n <Input value={teks(v.hp)} onChange={(e) => onChange({ hp: e.target.value.replace(/[^\\d+]/g, '') })} inputMode=\"tel\" autoComplete=\"tel\" placeholder=\"08xx\" />\n </Field>\n <Field label=\"Email\" optional error={errors.email}>\n <Input type=\"email\" value={teks(v.email)} onChange={set('email')} autoComplete=\"email\" />\n </Field>\n </FormGrid>\n );\n}\n\nexport function IsianAlamat({ value: v, onChange, errors = {} }: Omit<BagianProps, 'ref_'> & { ref_?: ReferensiFormulir }) {\n const set = (k: string) => (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange({ [k]: e.target.value });\n return (\n <FormGrid columns={3}>\n <Field label=\"Alamat\" required error={errors.alamat} description=\"Nama jalan, nomor rumah, atau patokan.\" style={{ gridColumn: '1 / -1' }}>\n <Textarea rows={2} value={teks(v.alamat)} onChange={set('alamat')} autoComplete=\"street-address\" />\n </Field>\n <Field label=\"RT\" optional>\n <Input value={teks(v.rt)} onChange={set('rt')} inputMode=\"numeric\" maxLength={3} />\n </Field>\n <Field label=\"RW\" optional>\n <Input value={teks(v.rw)} onChange={set('rw')} inputMode=\"numeric\" maxLength={3} />\n </Field>\n <Field label=\"Kode pos\" optional>\n <Input value={teks(v.kode_pos)} onChange={set('kode_pos')} inputMode=\"numeric\" maxLength={5} autoComplete=\"postal-code\" />\n </Field>\n <Field label=\"Dusun/lingkungan\" optional>\n <Input value={teks(v.dusun)} onChange={set('dusun')} />\n </Field>\n <Field label=\"Desa/kelurahan\" required error={errors.desa}>\n <Input value={teks(v.desa)} onChange={set('desa')} />\n </Field>\n <Field label=\"Kecamatan\" required error={errors.kecamatan}>\n <Input value={teks(v.kecamatan)} onChange={set('kecamatan')} />\n </Field>\n </FormGrid>\n );\n}\n\nexport function IsianAsalSekolah({ value: v, onChange, ref_, errors = {} }: BagianProps) {\n const pindahan = ['P', 'pindahan', '2'].includes(teks(v.status_masuk));\n const tahun = new Date().getFullYear();\n return (\n <FormGrid>\n <Field label=\"Status masuk\" required style={{ gridColumn: '1 / -1' }}>\n <RadioGroup\n variant=\"card\"\n options={(ref_.status_masuk?.length\n ? ref_.status_masuk\n : [\n { kode: 'B', nama: 'Mahasiswa baru' },\n { kode: 'P', nama: 'Pindahan' },\n ]\n ).map((o) => ({\n value: o.kode,\n label: o.nama,\n description: ['P', 'pindahan', '2'].includes(o.kode) ? 'Dari perguruan tinggi lain, dengan pengakuan SKS' : 'Lulusan SMA/SMK/MA atau sederajat',\n }))}\n value={teks(v.status_masuk) || null}\n onValueChange={(x) => onChange({ status_masuk: x })}\n />\n </Field>\n {!pindahan ? (\n <>\n <Field label=\"Asal sekolah\" required error={errors.nama_sekolah} description=\"Cari nama atau NPSN. Tidak ketemu? Ketik namanya lalu pilih “Pakai …”.\" style={{ gridColumn: '1 / -1' }}>\n <CariSekolah\n value={v.nama_sekolah ? { kode: teks(v.kode_sekolah), nama: teks(v.nama_sekolah) } : null}\n onValueChange={(s) => onChange({ kode_sekolah: s?.kode || null, nama_sekolah: s?.nama ?? null })}\n />\n </Field>\n <Field label=\"Tahun lulus\" required error={errors.tahun_lulus}>\n <Select\n options={Array.from({ length: 8 }, (_, i) => ({ value: String(tahun - i + 1), label: String(tahun - i + 1) }))}\n value={v.tahun_lulus ? String(v.tahun_lulus) : null}\n onValueChange={(x) => onChange({ tahun_lulus: x ? Number(x) : null })}\n />\n </Field>\n <Field label=\"Nilai rata-rata ijazah\" optional>\n <Input value={teks(v.nilai_un)} onChange={(e) => onChange({ nilai_un: e.target.value.replace(/[^\\d.,]/g, '') })} inputMode=\"decimal\" placeholder=\"mis. 85,40\" />\n </Field>\n </>\n ) : (\n <>\n <Field label=\"Perguruan tinggi asal\" required error={errors.nama_asal_pt} style={{ gridColumn: '1 / -1' }}>\n <CariPerguruanTinggi\n value={v.nama_asal_pt ? { kode: teks(v.kode_asal_pt), nama: teks(v.nama_asal_pt) } : null}\n onValueChange={(p) => onChange({ kode_asal_pt: p?.kode || null, nama_asal_pt: p?.nama ?? null })}\n />\n </Field>\n <Field label=\"Jenjang asal\">\n <Select options={opsi(ref_.asal_jenjang)} value={teks(v.asal_jenjang) || null} onValueChange={(x) => onChange({ asal_jenjang: x })} />\n </Field>\n <Field label=\"Program studi asal\" required error={errors.nama_asal_prodi}>\n <Input value={teks(v.nama_asal_prodi)} onChange={(e) => onChange({ nama_asal_prodi: e.target.value })} />\n </Field>\n <Field label=\"NIM asal\" optional>\n <Input value={teks(v.nim_asal)} onChange={(e) => onChange({ nim_asal: e.target.value })} />\n </Field>\n <Field label=\"SKS yang sudah ditempuh\" optional description=\"Diakui setelah verifikasi prodi.\">\n <Input value={teks(v.sks_diakui)} onChange={(e) => onChange({ sks_diakui: e.target.value.replace(/\\D/g, '') ? Number(e.target.value.replace(/\\D/g, '')) : null })} inputMode=\"numeric\" />\n </Field>\n </>\n )}\n </FormGrid>\n );\n}\n\nfunction IsianSatuOrtu({ label, value: v, onChange, ref_ }: BagianProps & { label: string }) {\n return (\n <>\n <p className=\"u-form-section-title\">{label}</p>\n <Field label={`Nama ${label.toLowerCase()}`} required style={{ gridColumn: '1 / -1' }}>\n <Input value={teks(v.nama)} onChange={(e) => onChange({ nama: e.target.value })} />\n </Field>\n <Field label=\"Pendidikan terakhir\">\n <Select options={opsi(ref_.pendidikan)} value={teks(v.pendidikan) || null} onValueChange={(x) => onChange({ pendidikan: x })} />\n </Field>\n <Field label=\"Pekerjaan\">\n <Select options={opsi(ref_.pekerjaan)} value={teks(v.pekerjaan) || null} onValueChange={(x) => onChange({ pekerjaan: x })} />\n </Field>\n <Field label=\"Penghasilan per bulan\">\n <Select options={opsi(ref_.penghasilan)} value={teks(v.penghasilan) || null} onValueChange={(x) => onChange({ penghasilan: x })} />\n </Field>\n <Field label=\"Nomor HP\" optional>\n <Input value={teks(v.hp)} onChange={(e) => onChange({ hp: e.target.value.replace(/[^\\d+]/g, '') })} inputMode=\"tel\" />\n </Field>\n </>\n );\n}\n\nexport function IsianOrangTua({ value, onChange, ref_ }: { value: NonNullable<FormulirPmb['orang_tua']>; onChange: (v: NonNullable<FormulirPmb['orang_tua']>) => void; ref_: ReferensiFormulir }) {\n return (\n <FormGrid>\n {(['ayah', 'ibu'] as const).map((h) => (\n <IsianSatuOrtu key={h} label={h === 'ayah' ? 'Ayah' : 'Ibu'} value={value[h] ?? {}} ref_={ref_} onChange={(p) => onChange({ ...value, [h]: { ...(value[h] ?? {}), ...p } })} />\n ))}\n </FormGrid>\n );\n}\n\n// ================================================================ Pilihan prodi\nexport interface ProdiGelombang {\n kode_prodi: string;\n nama_prodi: string;\n jenjang?: string | null;\n kode_fakultas?: string | null;\n kuota?: number | null;\n jumlah_peminat?: number | null;\n}\n\n/** Pilih program studi sesuai urutan prioritas (pilihan 1, 2, …) dengan kuota dan jumlah peminat. */\nexport function PilihanProdi({ prodi, value, onChange, maks = 2 }: { prodi: ProdiGelombang[]; value: string[]; onChange: (v: string[]) => void; maks?: number }) {\n const toggle = (k: string) => (value.includes(k) ? onChange(value.filter((x) => x !== k)) : value.length < maks ? onChange([...value, k]) : onChange([...value.slice(0, maks - 1), k]));\n return (\n <div className=\"u-prodi-pick\">\n <p className=\"u-prodi-pick-hint\">\n Pilih hingga <b>{maks}</b> program studi. Urutan klik menjadi urutan prioritas.\n </p>\n <ul>\n {prodi.map((p) => {\n const i = value.indexOf(p.kode_prodi);\n const rasio = p.kuota ? (p.jumlah_peminat ?? 0) / p.kuota : 0;\n return (\n <li key={p.kode_prodi}>\n <button type=\"button\" className=\"u-prodi-opt\" aria-pressed={i >= 0} onClick={() => toggle(p.kode_prodi)}>\n <span className=\"u-prodi-rank\" aria-hidden>\n {i >= 0 ? i + 1 : <GraduationCap />}\n </span>\n <span className=\"u-prodi-text\">\n <span className=\"u-prodi-name\">\n {p.jenjang ? `${p.jenjang} ` : ''}\n {p.nama_prodi}\n </span>\n <span className=\"u-prodi-meta\">\n {p.kode_fakultas}\n {p.kuota ? ` · kuota ${p.kuota}` : ''}\n {p.jumlah_peminat != null ? ` · ${p.jumlah_peminat} peminat` : ''}\n </span>\n </span>\n {p.kuota ? (\n <span className=\"u-prodi-meter\" data-level={rasio > 1.5 ? 'tinggi' : rasio > 0.8 ? 'sedang' : 'rendah'} title=\"Perbandingan peminat dan kuota\">\n {rasio > 1.5 ? 'Persaingan tinggi' : rasio > 0.8 ? 'Sedang' : 'Peluang besar'}\n </span>\n ) : null}\n {i >= 0 && <Check className=\"u-prodi-check\" aria-hidden />}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Wizard pendaftaran PMB\nexport interface WizardPendaftaranPmbProps {\n /** UUID pendaftaran (dari `POST /v1/pmb/saya/pendaftaran`). */\n id: string;\n /** Dipanggil setelah pendaftaran diajukan. */\n onDiajukan?: (hasil: { no_pmb?: string | null; status?: string }) => void;\n /** Kontak panitia di bawah daftar langkah. */\n kontak?: React.ReactNode;\n className?: string;\n}\n\ninterface Pendaftaran {\n id: string;\n no_pmb: string | null;\n status: string;\n gelombang: { id: number; nama: string; jalur?: string | null };\n formulir: FormulirPmb;\n pilihan: Array<{ urut: number; kode_prodi: string; nama_prodi?: string | null }>;\n kelengkapan: Record<string, string> | [];\n}\n\n/**\n * Wizard formulir PMB yang tersambung ke SIAKAD: memuat draf `pmb.getSayaPendaftaranById`, menyimpan tiap langkah\n * dengan `pmb.patchSayaPendaftaranById` (hanya bagian langkah itu), lalu `pmb.postSayaPendaftaranByIdAjukan`.\n * Galat validasi server ditampilkan di field terkait.\n */\nexport function WizardPendaftaranPmb({ id, onDiajukan, kontak, className }: WizardPendaftaranPmbProps) {\n const siakad = useSiakad();\n const det = useSiakadQuery<Pendaftaran>(['pmb-pendaftaran', id], (s, signal) => s.pmb.getSayaPendaftaranById(id, {}, { signal }) as never, { staleTime: 0 });\n const ref = useReferensiFormulir();\n const gelId = det.data?.gelombang.id;\n const gel = useSiakadQuery<{ maks_pilihan?: number; prodi: ProdiGelombang[] }>(['pmb-gelombang', gelId], (s, signal) => s.pmb.getInfoGelombangById(gelId!, {}, { signal }) as never, {\n enabled: !!gelId,\n staleTime: 600_000,\n });\n\n const [f, setF] = React.useState<FormulirPmb | null>(null);\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n const [step, setStep] = React.useState(0);\n const [savedAt, setSavedAt] = React.useState<Date | null>(null);\n const [selesai, setSelesai] = React.useState<string | null>(null);\n React.useEffect(() => {\n if (det.data && !f) setF({ ...det.data.formulir, pilihan: det.data.formulir.pilihan ?? det.data.pilihan.map((p) => p.kode_prodi) });\n }, [det.data, f]);\n\n if (det.error)\n return (\n <Alert variant=\"danger\" title=\"Formulir tidak bisa dimuat\">\n {pesanGalat(det.error)}\n </Alert>\n );\n if (!f || !ref.data)\n return (\n <div className=\"u-wizard\" aria-busy>\n <Skeleton style={{ height: 420, borderRadius: 16 }} />\n </div>\n );\n if (selesai)\n return (\n <Alert variant=\"success\" title=\"Pendaftaran berhasil diajukan\">\n Nomor pendaftaran Anda <b>{selesai}</b>. Panitia akan memverifikasi data; pantau status di dasbor.\n </Alert>\n );\n\n const r = ref.data;\n const ubah = <K extends keyof FormulirPmb>(k: K, patch: Partial<NonNullable<FormulirPmb[K]>>) => {\n setF((x) => ({ ...x, [k]: Array.isArray(patch) ? patch : { ...((x?.[k] as object) ?? {}), ...patch } }));\n setErrors((e) => {\n const n = { ...e };\n for (const key of Object.keys(patch)) delete n[key];\n return n;\n });\n };\n const simpan = (bagian: keyof FormulirPmb) => async () => {\n try {\n await siakad.pmb.patchSayaPendaftaranById(id, { [bagian]: f[bagian] } as never);\n setSavedAt(new Date());\n setErrors({});\n } catch (e) {\n const err = e as { status?: number; details?: Record<string, unknown> };\n const fields = err.status === 422 && err.details && Object.keys(err.details).length ? err.details : null;\n if (fields) {\n setErrors(Object.fromEntries(Object.entries(fields).map(([k, v]) => [k.split('.').pop()!, String(v)])));\n return 'Periksa kembali isian yang ditandai.';\n }\n return pesanGalat(e);\n }\n };\n\n const p = f.pribadi ?? {};\n const a = f.alamat ?? {};\n const s = f.asal_sekolah ?? {};\n const o = f.orang_tua ?? {};\n const prodi = gel.data?.prodi ?? [];\n const wajib = (obj: Isian, keys: string[]) => keys.filter((k) => obj[k] == null || obj[k] === '');\n const kurang = {\n pilihan: (f.pilihan ?? []).length ? null : 'Pilih minimal satu program studi.',\n pribadi: wajib(p, ['nama', 'no_identitas', 'jenis_kelamin', 'tempat_lahir', 'tanggal_lahir', 'agama', 'hp']).length ? 'Data diri belum lengkap.' : null,\n alamat: wajib(a, ['alamat', 'desa', 'kecamatan']).length ? 'Alamat belum lengkap.' : null,\n asal_sekolah: !(s.nama_sekolah || s.nama_asal_pt) ? 'Asal sekolah belum diisi.' : null,\n orang_tua: !(o.ayah?.nama || o.ibu?.nama) ? 'Isi minimal nama ayah atau ibu.' : null,\n };\n\n const steps: WizardStep[] = [\n {\n id: 'prodi',\n title: 'Program studi',\n description: det.data!.gelombang.nama + (det.data!.gelombang.jalur ? ` · ${det.data!.gelombang.jalur}` : ''),\n content: gel.loading ? (\n <Skeleton style={{ height: 240 }} />\n ) : (\n <PilihanProdi prodi={prodi} value={f.pilihan ?? []} maks={gel.data?.maks_pilihan ?? 2} onChange={(v) => setF((x) => ({ ...x, pilihan: v }))} />\n ),\n onNext: async () => kurang.pilihan ?? (await simpan('pilihan')()),\n error: !!errors.pilihan,\n },\n {\n id: 'pribadi',\n title: 'Data diri',\n description: 'Sesuai KTP/KK dan ijazah',\n content: <IsianDataDiri value={p} ref_={r} errors={errors} onChange={(x) => ubah('pribadi', x)} />,\n onNext: simpan('pribadi'),\n },\n { id: 'alamat', title: 'Alamat', description: 'Domisili saat ini', content: <IsianAlamat value={a} errors={errors} onChange={(x) => ubah('alamat', x)} />, onNext: simpan('alamat') },\n {\n id: 'asal',\n title: 'Asal sekolah',\n description: 'Sekolah atau kampus asal',\n content: <IsianAsalSekolah value={s} ref_={r} errors={errors} onChange={(x) => ubah('asal_sekolah', x)} />,\n onNext: simpan('asal_sekolah'),\n },\n {\n id: 'ortu',\n title: 'Orang tua',\n description: 'Data ayah dan ibu',\n content: <IsianOrangTua value={o} ref_={r} onChange={(x) => setF((y) => ({ ...y, orang_tua: x }))} />,\n onNext: simpan('orang_tua'),\n },\n {\n id: 'tinjau',\n title: 'Tinjau & ajukan',\n description: 'Pastikan semua benar',\n content: <PmbReview f={f} r={r} prodi={prodi} kurang={kurang} server={Array.isArray(det.data!.kelengkapan) ? {} : det.data!.kelengkapan} go={setStep} />,\n },\n ];\n\n return (\n <Wizard\n className={className}\n steps={steps}\n step={step}\n onStepChange={setStep}\n savedAt={savedAt}\n title=\"Formulir pendaftaran\"\n description=\"Isian tersimpan otomatis tiap langkah. Anda bisa melanjutkan kapan saja.\"\n aside={kontak}\n finishLabel=\"Ajukan pendaftaran\"\n onFinish={async () => {\n const k = Object.values(kurang).find(Boolean);\n if (k) return k;\n try {\n const res = await siakad.pmb.postSayaPendaftaranByIdAjukan(id);\n const d = res.data as { no_pmb?: string | null; status?: string };\n invalidateSiakad('pmb');\n setSelesai(d.no_pmb ?? '-');\n onDiajukan?.(d);\n } catch (e) {\n return pesanGalat(e);\n }\n }}\n />\n );\n}\n\nfunction PmbReview({\n f,\n r,\n prodi,\n kurang,\n server,\n go,\n}: {\n f: FormulirPmb;\n r: ReferensiFormulir;\n prodi: ProdiGelombang[];\n kurang: Record<string, string | null>;\n server: Record<string, string>;\n go: (n: number) => void;\n}) {\n const p = f.pribadi ?? {};\n const a = f.alamat ?? {};\n const s = f.asal_sekolah ?? {};\n const o = f.orang_tua ?? {};\n const sections: ReviewSection[] = [\n {\n title: 'Program studi',\n onEdit: () => go(0),\n missing: kurang.pilihan,\n items: (f.pilihan ?? []).map((k, i) => ({ label: `Pilihan ${i + 1}`, value: prodi.find((x) => x.kode_prodi === k)?.nama_prodi ?? k })),\n },\n {\n title: 'Data diri',\n onEdit: () => go(1),\n missing: kurang.pribadi,\n items: [\n { label: 'Nama', value: p.nama },\n { label: 'NIK', value: p.no_identitas },\n { label: 'Jenis kelamin', value: nama(r.jenis_kelamin, p.jenis_kelamin) },\n { label: 'Tempat, tanggal lahir', value: p.tempat_lahir || p.tanggal_lahir ? `${p.tempat_lahir ?? '…'}, ${p.tanggal_lahir ? formatDate(String(p.tanggal_lahir), 'long') : '…'}` : null },\n { label: 'Agama', value: nama(r.agama, p.agama) },\n { label: 'Nomor HP', value: p.hp },\n ],\n },\n {\n title: 'Alamat',\n onEdit: () => go(2),\n missing: kurang.alamat,\n items: [\n { label: 'Alamat', value: [a.alamat, a.rt && `RT ${a.rt}`, a.rw && `RW ${a.rw}`].filter(Boolean).join(', ') },\n { label: 'Desa/kelurahan', value: a.desa },\n { label: 'Kecamatan', value: a.kecamatan },\n ],\n },\n {\n title: 'Asal sekolah',\n onEdit: () => go(3),\n missing: kurang.asal_sekolah,\n items: [\n { label: 'Sekolah/PT asal', value: s.nama_sekolah ?? s.nama_asal_pt },\n { label: 'Tahun lulus', value: s.tahun_lulus },\n ],\n },\n {\n title: 'Orang tua',\n onEdit: () => go(4),\n missing: kurang.orang_tua,\n items: [\n { label: 'Ayah', value: o.ayah?.nama },\n { label: 'Ibu', value: o.ibu?.nama },\n { label: 'Pekerjaan ayah', value: nama(r.pekerjaan, o.ayah?.pekerjaan) },\n { label: 'Pekerjaan ibu', value: nama(r.pekerjaan, o.ibu?.pekerjaan) },\n ],\n },\n ];\n const lain = Object.entries(server).filter(([k]) => k.startsWith('berkas') || k === 'rapor' || k === 'prestasi' || k.startsWith('akun'));\n return (\n <div style={{ display: 'grid', gap: '1rem' }}>\n {lain.length > 0 && (\n <Alert variant=\"warning\" title=\"Masih ada yang perlu dilengkapi di luar formulir\">\n <ul style={{ margin: 0, paddingLeft: '1.1rem' }}>\n {lain.map(([k, v]) => (\n <li key={k}>\n {k.replace('berkas.', 'Berkas ').replace('akun.', 'Akun ')}: {v}\n </li>\n ))}\n </ul>\n </Alert>\n )}\n <WizardReview sections={sections} />\n </div>\n );\n}\n\n// ================================================================ Wizard biodata mahasiswa\nexport interface BiodataMahasiswa {\n pribadi: Isian;\n alamat: Isian;\n asal_sekolah: Isian;\n orang_tua: NonNullable<FormulirPmb['orang_tua']>;\n}\nexport interface WizardBiodataProps {\n /** Nilai awal, mis. dari `mahasiswa.getByNim`. */\n nilaiAwal?: Partial<BiodataMahasiswa>;\n /**\n * Simpan biodata. SIAKAD belum menyediakan endpoint ubah biodata mahasiswa untuk umum,\n * jadi aplikasi yang menentukan tujuannya (mis. pengajuan perubahan data ke BAAK).\n */\n onSimpan: (data: BiodataMahasiswa, bagian: keyof BiodataMahasiswa | 'semua') => void | string | Promise<void | string | null | undefined>;\n className?: string;\n}\n\n/** Wizard pemutakhiran biodata mahasiswa (data diri, alamat, riwayat pendidikan, orang tua) memakai referensi kode SIAKAD. */\nexport function WizardBiodata({ nilaiAwal, onSimpan, className }: WizardBiodataProps) {\n const ref = useReferensiFormulir();\n const [d, setD] = React.useState<BiodataMahasiswa>(() => ({ pribadi: {}, alamat: {}, asal_sekolah: { status_masuk: 'B' }, orang_tua: {}, ...nilaiAwal }));\n const [step, setStep] = React.useState(0);\n const [savedAt, setSavedAt] = React.useState<Date | null>(null);\n const [ok, setOk] = React.useState(false);\n if (!ref.data) return <Skeleton style={{ height: 420, borderRadius: 16 }} />;\n const r = ref.data;\n const set = (k: keyof BiodataMahasiswa) => (patch: Isian) => setD((x) => ({ ...x, [k]: { ...x[k], ...patch } }));\n const save = (k: keyof BiodataMahasiswa) => async () => {\n const res = await onSimpan(d, k);\n if (typeof res === 'string') return res;\n setSavedAt(new Date());\n };\n if (ok)\n return (\n <Alert variant=\"success\" title=\"Biodata tersimpan\">\n Terima kasih, data Anda sudah diperbarui.\n </Alert>\n );\n return (\n <Wizard\n className={className}\n title=\"Pemutakhiran biodata\"\n description=\"Data ini dipakai untuk ijazah, PDDikti, dan surat keterangan.\"\n step={step}\n onStepChange={setStep}\n savedAt={savedAt}\n finishLabel=\"Simpan biodata\"\n steps={[\n { id: 'pribadi', title: 'Data diri', content: <IsianDataDiri value={d.pribadi} ref_={r} onChange={set('pribadi')} />, onNext: save('pribadi') },\n { id: 'alamat', title: 'Alamat', content: <IsianAlamat value={d.alamat} onChange={set('alamat')} />, onNext: save('alamat') },\n { id: 'riwayat', title: 'Riwayat pendidikan', content: <IsianAsalSekolah value={d.asal_sekolah} ref_={r} onChange={set('asal_sekolah')} />, onNext: save('asal_sekolah') },\n { id: 'ortu', title: 'Orang tua', content: <IsianOrangTua value={d.orang_tua} ref_={r} onChange={(x) => setD((y) => ({ ...y, orang_tua: x }))} />, onNext: save('orang_tua') },\n {\n id: 'tinjau',\n title: 'Tinjau',\n content: (\n <WizardReview\n sections={[\n {\n title: 'Data diri',\n onEdit: () => setStep(0),\n items: [\n { label: 'Nama', value: d.pribadi.nama },\n { label: 'NIK', value: d.pribadi.no_identitas },\n { label: 'Agama', value: nama(r.agama, d.pribadi.agama) },\n { label: 'Nomor HP', value: d.pribadi.hp },\n ],\n },\n {\n title: 'Alamat',\n onEdit: () => setStep(1),\n items: [\n { label: 'Alamat', value: d.alamat.alamat },\n { label: 'Desa', value: d.alamat.desa },\n { label: 'Kecamatan', value: d.alamat.kecamatan },\n ],\n },\n {\n title: 'Riwayat pendidikan',\n onEdit: () => setStep(2),\n items: [\n { label: 'Asal', value: d.asal_sekolah.nama_sekolah ?? d.asal_sekolah.nama_asal_pt },\n { label: 'Tahun lulus', value: d.asal_sekolah.tahun_lulus },\n ],\n },\n {\n title: 'Orang tua',\n onEdit: () => setStep(3),\n items: [\n { label: 'Ayah', value: d.orang_tua.ayah?.nama },\n { label: 'Ibu', value: d.orang_tua.ibu?.nama },\n ],\n },\n ]}\n />\n ),\n },\n ]}\n onFinish={async () => {\n const res = await onSimpan(d, 'semua');\n if (typeof res === 'string') return res;\n setOk(true);\n }}\n />\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { ArrowRight, BadgeCheck, CircleAlert, Home, IdCard, Lock, Phone, Users } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { Button, Skeleton } from '../components/actions';\nimport { Alert, Avatar } from '../components/display';\nimport { Field, Input, Textarea } from '../components/forms';\nimport { Combobox, Select } from '../components/select';\nimport { FormGrid, Wizard, WizardReview, type WizardStep } from '../components/wizard';\nimport { invalidateSiakad, pesanGalat, useSiakad, useSiakadQuery } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n// ================================================================ Tipe (GET /v1/kelengkapan/saya)\nexport interface IsianKurang {\n kolom: string;\n label: string;\n wajib: boolean;\n /** kosong | tidak_sah | ganda */\n alasan: 'kosong' | 'tidak_sah' | 'ganda' | string;\n bisa_diisi_sendiri: boolean;\n}\nexport interface KelengkapanSaya {\n entitas: 'mahasiswa' | 'dosen' | string;\n /** NIM atau NIDN. */\n kunci: string;\n nama: string;\n kode_prodi?: string | null;\n lengkap: boolean;\n perlu_wizard: boolean;\n persen_wajib: number;\n kurang: IsianKurang[];\n isian_sendiri: string[];\n diperiksa_pada?: string;\n}\n\n/** Data tampilan pengguna untuk kartu profil. Foto biasanya dari SSO (`picture` di userinfo). */\nexport interface PenggunaKelengkapan {\n nama?: string;\n foto?: string | null;\n /** Baris kedua, mis. \"S1 Informatika · Angkatan 2023\". */\n keterangan?: React.ReactNode;\n}\n\nconst PATH = '/v1/kelengkapan/saya';\n\n/** Ambil kelengkapan data pengguna yang login (token pengguna, scope `kelengkapan:saya`). */\nexport function useKelengkapanSaya(opts: { enabled?: boolean } = {}) {\n return useSiakadQuery<KelengkapanSaya>(['kelengkapan-saya'], (s, signal) => s.request<KelengkapanSaya>({ method: 'GET', path: PATH }, { signal }), { staleTime: 60_000, ...opts });\n}\n\n// ================================================================ Kelompok isian\ntype Kelompok = 'identitas' | 'keluarga' | 'alamat' | 'kontak';\nconst KELOMPOK: Record<Kelompok, { title: string; description: string; icon: React.ReactNode; kolom: string[] }> = {\n identitas: { title: 'Identitas', description: 'NIK, NISN, NPWP', icon: <IdCard />, kolom: ['nik', 'nik_dosen', 'nisn', 'npwp'] },\n keluarga: { title: 'Keluarga', description: 'Nama orang tua', icon: <Users />, kolom: ['nama_ibu_kandung', 'nama_ibu', 'nama_ayah'] },\n alamat: { title: 'Alamat', description: 'Tempat tinggal saat ini', icon: <Home />, kolom: ['alamat', 'dusun', 'rt', 'rw', 'desa', 'kecamatan', 'kode_pos', 'jenis_tinggal'] },\n kontak: { title: 'Kontak', description: 'Nomor HP dan email', icon: <Phone />, kolom: ['hp', 'email'] },\n};\nconst kelompokDari = (kolom: string): Kelompok => (Object.keys(KELOMPOK) as Kelompok[]).find((k) => KELOMPOK[k].kolom.includes(kolom)) ?? 'identitas';\n\nconst ALASAN: Record<string, string> = { kosong: 'Belum diisi', tidak_sah: 'Format belum sesuai', ganda: 'Sama dengan data orang lain' };\n\nconst PETUNJUK: Record<\n string,\n {\n description?: string;\n placeholder?: string;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n maxLength?: number;\n filter?: (v: string) => string;\n span?: boolean;\n multiline?: boolean;\n type?: string;\n }\n> = {\n nik: { description: '16 digit sesuai KTP/KK.', inputMode: 'numeric', maxLength: 16, filter: (v) => v.replace(/\\D/g, '') },\n nik_dosen: { description: '16 digit sesuai KTP.', inputMode: 'numeric', maxLength: 16, filter: (v) => v.replace(/\\D/g, '') },\n nisn: { description: '10 digit, lihat di ijazah atau nisn.data.kemdikbud.go.id.', inputMode: 'numeric', maxLength: 10, filter: (v) => v.replace(/\\D/g, '') },\n npwp: { description: '15 atau 16 digit.', inputMode: 'numeric', maxLength: 16, filter: (v) => v.replace(/\\D/g, '') },\n nama_ibu_kandung: { description: 'Sesuai akta kelahiran/KK. Dipakai untuk verifikasi ijazah di PDDikti.', span: true },\n nama_ibu: { description: 'Sesuai akta kelahiran/KK.', span: true },\n nama_ayah: { span: true },\n alamat: { description: 'Nama jalan, nomor rumah, atau patokan.', span: true, multiline: true },\n rt: { inputMode: 'numeric', maxLength: 3, filter: (v) => v.replace(/\\D/g, '') },\n rw: { inputMode: 'numeric', maxLength: 3, filter: (v) => v.replace(/\\D/g, '') },\n kode_pos: { inputMode: 'numeric', maxLength: 5, filter: (v) => v.replace(/\\D/g, '') },\n hp: { description: 'Nomor aktif, sebaiknya WhatsApp.', inputMode: 'tel', placeholder: '08xx', filter: (v) => v.replace(/[^\\d+]/g, '') },\n email: { type: 'email', placeholder: 'nama@contoh.com' },\n kecamatan: { span: true },\n};\n\ninterface Wilayah {\n kode: string;\n nama: string;\n kabupaten?: string;\n}\n\nfunction IsianKelengkapan({\n isian,\n value,\n onChange,\n error,\n jenisTinggal,\n}: {\n isian: IsianKurang;\n value: string;\n onChange: (v: string, label?: string) => void;\n error?: string;\n jenisTinggal: Array<{ value: string; label: string }>;\n}) {\n const siakad = useSiakad();\n const p = PETUNJUK[isian.kolom] ?? {};\n const [wil, setWil] = React.useState<Wilayah | null>(null);\n const loadWil = React.useCallback(\n async (q: string, signal: AbortSignal) => (await siakad.request<Wilayah[]>({ method: 'GET', path: '/v1/kelengkapan/referensi/wilayah', query: { q }, public: true }, { signal })).data,\n [siakad],\n );\n const desc = (\n <>\n {isian.alasan !== 'kosong' && <span className=\"u-kl-alasan\">{ALASAN[isian.alasan] ?? isian.alasan}. </span>}\n {p.description}\n </>\n );\n let control: React.ReactNode;\n if (isian.kolom === 'kecamatan')\n control = (\n <Combobox<Wilayah>\n loadItems={loadWil}\n minQueryLength={3}\n hintText=\"Ketik minimal 3 huruf nama kecamatan atau kabupaten.\"\n placeholder=\"Cari kecamatan\"\n value={wil}\n itemToString={(w) => w.nama}\n itemKey={(w) => w.kode}\n renderItem={(w) => (\n <span style={{ display: 'grid' }}>\n <span>{w.nama}</span>\n <span style={{ fontSize: 12, color: 'var(--u-muted-foreground)' }}>{w.kabupaten}</span>\n </span>\n )}\n onValueChange={(w) => {\n setWil(w);\n onChange(w?.kode ?? '', w ? `${w.nama}${w.kabupaten ? `, ${w.kabupaten}` : ''}` : undefined);\n }}\n />\n );\n else if (isian.kolom === 'jenis_tinggal') control = <Select options={jenisTinggal} value={value || null} onValueChange={(v) => onChange(v ?? '', jenisTinggal.find((o) => o.value === v)?.label)} />;\n else if (p.multiline) control = <Textarea rows={2} value={value} onChange={(e) => onChange(e.target.value)} />;\n else\n control = (\n <Input value={value} type={p.type} inputMode={p.inputMode} maxLength={p.maxLength} placeholder={p.placeholder} onChange={(e) => onChange(p.filter ? p.filter(e.target.value) : e.target.value)} />\n );\n return (\n <Field label={isian.label} required={isian.wajib} optional={!isian.wajib} description={desc} error={error} style={p.span ? { gridColumn: '1 / -1' } : undefined}>\n {control}\n </Field>\n );\n}\n\n// ================================================================ Kartu profil\nfunction RingFoto({ nama, foto, persen, size = 88 }: { nama: string; foto?: string | null; persen: number; size?: number }) {\n const t = 4;\n const r = (size - t) / 2;\n const c = 2 * Math.PI * r;\n const tone = persen >= 100 ? 'var(--u-success)' : persen >= 70 ? 'var(--u-primary)' : 'var(--u-warning)';\n return (\n <span className=\"u-kl-ring\" style={{ width: size, height: size }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} aria-hidden>\n <circle cx={size / 2} cy={size / 2} r={r} fill=\"none\" stroke=\"var(--u-border)\" strokeWidth={t} />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={tone}\n strokeWidth={t}\n strokeLinecap=\"round\"\n strokeDasharray={`${(c * Math.min(100, persen)) / 100} ${c}`}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n />\n </svg>\n <Avatar name={nama} src={foto} size=\"xl\" className=\"u-kl-avatar\" />\n <span className=\"u-kl-pct\" style={{ background: tone }}>\n {persen}%\n </span>\n </span>\n );\n}\n\nexport interface KartuProfilKelengkapanProps {\n data: KelengkapanSaya;\n pengguna?: PenggunaKelengkapan;\n /** Tombol aksi, mis. \"Lengkapi data\". */\n action?: React.ReactNode;\n className?: string;\n}\n\n/** Kartu profil: foto dengan cincin persen kelengkapan, nama, NIM/NIDN, dan ringkasan isian yang kurang. */\nexport function KartuProfilKelengkapan({ data, pengguna, action, className }: KartuProfilKelengkapanProps) {\n const nama = pengguna?.nama ?? data.nama;\n const wajib = data.kurang.filter((k) => k.wajib).length;\n return (\n <div className={cn('u-kl-card', className)} data-lengkap={data.lengkap ? '' : undefined}>\n <RingFoto nama={nama} foto={pengguna?.foto} persen={data.persen_wajib} />\n <div className=\"u-kl-who\">\n <p className=\"u-kl-name\">\n {nama}\n {data.lengkap && <BadgeCheck aria-label=\"Data lengkap\" />}\n </p>\n <p className=\"u-kl-sub\">\n <span className=\"u-kl-id\">\n {data.entitas === 'dosen' ? 'NIDN' : 'NIM'} {data.kunci}\n </span>\n {pengguna?.keterangan ?? (data.kode_prodi ? <span>Prodi {data.kode_prodi}</span> : null)}\n </p>\n <p className=\"u-kl-status\">\n {data.lengkap ? (\n 'Data wajib PDDikti sudah lengkap.'\n ) : (\n <>\n <CircleAlert aria-hidden /> {wajib} isian wajib belum lengkap\n </>\n )}\n </p>\n </div>\n {action && <div className=\"u-kl-action\">{action}</div>}\n </div>\n );\n}\n\n// ================================================================ Wizard\nexport interface WizardKelengkapanProps {\n pengguna?: PenggunaKelengkapan;\n /** Setelah semua isian tersimpan. */\n onSelesai?: (data: KelengkapanSaya) => void;\n /** Tombol \"Nanti saja\" di layar sambutan. */\n onLewati?: () => void;\n /** Kontak BAK/SDM untuk isian yang tidak bisa diubah sendiri. */\n kontakPetugas?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Wizard kelengkapan data dari `GET /v1/kelengkapan/saya`: kartu profil berfoto dengan persen kelengkapan,\n * langkah dibentuk otomatis dari isian yang kurang (identitas, keluarga, alamat, kontak), lalu semua isian\n * dikirim sekaligus ke `POST /v1/kelengkapan/saya`. Galat 422 kembali ke langkah dan isian yang salah.\n */\nexport function WizardKelengkapan({ pengguna, onSelesai, onLewati, kontakPetugas, className }: WizardKelengkapanProps) {\n const siakad = useSiakad();\n const q = useKelengkapanSaya();\n const ref = useSiakadQuery<{ jenis_tinggal: Record<string, string> }>(\n ['kelengkapan-referensi'],\n (s, signal) => s.request({ method: 'GET', path: '/v1/kelengkapan/referensi', public: true }, { signal }),\n { staleTime: 3_600_000 },\n );\n const [mulai, setMulai] = React.useState(false);\n const [step, setStep] = React.useState(0);\n const [nilai, setNilai] = React.useState<Record<string, string>>({});\n const [label, setLabel] = React.useState<Record<string, string>>({});\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n const [hasil, setHasil] = React.useState<KelengkapanSaya | null>(null);\n\n if (q.error)\n return (\n <Alert variant=\"danger\" title=\"Kelengkapan data tidak bisa diperiksa\">\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n );\n if (!q.data)\n return (\n <div className={cn('u-kl', className)} aria-busy>\n <div className=\"u-kl-card\">\n <Skeleton shape=\"circle\" style={{ width: 88, height: 88 }} />\n <div style={{ flex: 1, display: 'grid', gap: 8 }}>\n <Skeleton style={{ height: 18, width: '50%' }} />\n <Skeleton style={{ height: 14, width: '35%' }} />\n </div>\n </div>\n </div>\n );\n\n const data = hasil ?? q.data;\n const sendiri = data.kurang.filter((k) => k.bisa_diisi_sendiri);\n const petugas = data.kurang.filter((k) => !k.bisa_diisi_sendiri);\n const jenisTinggal = Object.entries(ref.data?.jenis_tinggal ?? {}).map(([value, label]) => ({ value, label }));\n const grup = (Object.keys(KELOMPOK) as Kelompok[]).map((k) => ({ k, isian: sendiri.filter((i) => kelompokDari(i.kolom) === k) })).filter((g) => g.isian.length);\n\n const PanelPetugas = petugas.length > 0 && (\n <div className=\"u-kl-petugas\">\n <p>\n <Lock aria-hidden /> Perlu diubah petugas {data.entitas === 'dosen' ? 'SDM' : 'BAK'} dengan dokumen\n </p>\n <ul>\n {petugas.map((k) => (\n <li key={k.kolom}>\n {k.label}\n <span>{ALASAN[k.alasan] ?? k.alasan}</span>\n </li>\n ))}\n </ul>\n {kontakPetugas && <div className=\"u-kl-kontak\">{kontakPetugas}</div>}\n </div>\n );\n\n // ---- selesai / sudah lengkap\n if (hasil || !data.perlu_wizard || !sendiri.length) {\n return (\n <div className={cn('u-kl', className)}>\n <KartuProfilKelengkapan data={data} pengguna={pengguna} />\n {hasil && (\n <Alert variant=\"success\" title=\"Terima kasih, data Anda tersimpan\">\n Perubahan langsung tercatat di SIAKAD dan ikut dilaporkan ke PDDikti pada sinkronisasi berikutnya.\n </Alert>\n )}\n {PanelPetugas}\n </div>\n );\n }\n\n // ---- sambutan\n if (!mulai) {\n return (\n <div className={cn('u-kl', className)}>\n <KartuProfilKelengkapan\n data={data}\n pengguna={pengguna}\n action={\n <>\n {onLewati && (\n <Button variant=\"ghost\" onClick={onLewati}>\n Nanti saja\n </Button>\n )}\n <Button onClick={() => setMulai(true)}>\n Lengkapi sekarang <ArrowRight />\n </Button>\n </>\n }\n />\n <div className=\"u-kl-groups\">\n {grup.map((g) => (\n <div key={g.k} className=\"u-kl-group\">\n <span className=\"u-kl-group-icon\">{KELOMPOK[g.k].icon}</span>\n <div>\n <p>{KELOMPOK[g.k].title}</p>\n <span>{g.isian.map((i) => i.label).join(', ')}</span>\n </div>\n </div>\n ))}\n </div>\n {PanelPetugas}\n </div>\n );\n }\n\n const ubah = (kolom: string) => (v: string, l?: string) => {\n setNilai((x) => ({ ...x, [kolom]: v }));\n if (l !== undefined) setLabel((x) => ({ ...x, [kolom]: l }));\n setErrors((e) => {\n const n = { ...e };\n delete n[kolom];\n return n;\n });\n };\n const cekLangkah = (isian: IsianKurang[]) => () => {\n const kosong = isian.filter((i) => i.wajib && !(nilai[i.kolom] ?? '').trim());\n if (kosong.length) {\n setErrors((e) => ({ ...e, ...Object.fromEntries(kosong.map((i) => [i.kolom, 'Wajib diisi.'])) }));\n return `Lengkapi ${kosong.map((i) => i.label).join(', ')}.`;\n }\n };\n\n const steps: WizardStep[] = [\n ...grup.map((g) => ({\n id: g.k,\n title: KELOMPOK[g.k].title,\n description: g.isian.map((i) => i.label).join(', '),\n error: g.isian.some((i) => errors[i.kolom] && errors[i.kolom] !== 'Wajib diisi.'),\n content: (\n <FormGrid>\n {g.isian.map((i) => (\n <IsianKelengkapan key={i.kolom} isian={i} value={nilai[i.kolom] ?? ''} onChange={ubah(i.kolom)} error={errors[i.kolom]} jenisTinggal={jenisTinggal} />\n ))}\n </FormGrid>\n ),\n onNext: cekLangkah(g.isian),\n })),\n {\n id: 'tinjau',\n title: 'Tinjau & simpan',\n description: 'Periksa sebelum disimpan',\n content: (\n <WizardReview\n sections={grup.map((g, idx) => ({\n title: KELOMPOK[g.k].title,\n onEdit: () => setStep(idx),\n items: g.isian.map((i) => ({ label: i.label, value: label[i.kolom] ?? nilai[i.kolom] })),\n }))}\n />\n ),\n },\n ];\n\n return (\n <div className={cn('u-kl', className)}>\n <KartuProfilKelengkapan data={data} pengguna={pengguna} />\n <Wizard\n steps={steps}\n step={step}\n onStepChange={setStep}\n title=\"Lengkapi data\"\n description=\"Isian ini wajib dilaporkan ke PDDikti. Hanya isian yang kurang yang ditanyakan.\"\n aside={petugas.length ? PanelPetugas : undefined}\n finishLabel=\"Simpan data\"\n onFinish={async () => {\n const body = Object.fromEntries(Object.entries(nilai).filter(([, v]) => v.trim() !== ''));\n if (!Object.keys(body).length) return 'Belum ada isian yang diisi.';\n try {\n const res = await siakad.request<KelengkapanSaya>({ method: 'POST', path: PATH, body });\n invalidateSiakad('kelengkapan');\n setHasil(res.data);\n onSelesai?.(res.data);\n } catch (e) {\n const err = e as { status?: number; details?: Record<string, unknown> };\n if (err.status === 422 && err.details && Object.keys(err.details).length) {\n setErrors(Object.fromEntries(Object.entries(err.details).map(([k, v]) => [k, String(v)])));\n const idx = grup.findIndex((g) => g.isian.some((i) => i.kolom in err.details!));\n if (idx >= 0) setStep(idx);\n return 'Ada isian yang belum sesuai. Periksa yang ditandai merah.';\n }\n return pesanGalat(e);\n }\n }}\n />\n </div>\n );\n}\n\n/** Pengingat ringkas untuk dasbor: tampil hanya bila `perlu_wizard`. */\nexport function PengingatKelengkapan({ pengguna, href, onBuka, className }: { pengguna?: PenggunaKelengkapan; href?: string; onBuka?: () => void; className?: string }) {\n const { data } = useKelengkapanSaya();\n if (!data || !data.perlu_wizard) return null;\n return (\n <KartuProfilKelengkapan\n className={cn('u-kl-reminder', className)}\n data={data}\n pengguna={pengguna}\n action={\n <Button size=\"sm\" onClick={onBuka} render={href ? <a href={href} /> : undefined}>\n Lengkapi data <ArrowRight />\n </Button>\n }\n />\n );\n}\n","'use client';\nimport * as React from 'react';\nimport {\n Archive,\n BadgeCheck,\n BookOpenCheck,\n Briefcase,\n CalendarClock,\n ClipboardCheck,\n FileClock,\n FileText,\n FlaskConical,\n GraduationCap,\n Inbox,\n Mail,\n MessageSquare,\n Newspaper,\n PiggyBank,\n Receipt,\n RefreshCw,\n Send,\n ShieldAlert,\n TriangleAlert,\n UserCheck,\n UserPlus,\n Users,\n Wallet,\n} from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen, formatRelative, formatRupiahRingkas } from '../lib/format';\nimport { Button } from '../components/actions';\nimport { Alert, Progress } from '../components/display';\nimport {\n ActionList,\n ActivityFeed,\n BarChart,\n BarList,\n BudgetMeter,\n CycleSteps,\n DashboardGrid,\n DonutChart,\n Funnel,\n GroupedBarChart,\n LineChart,\n Panel,\n SegmentBar,\n StatCard,\n StatGrid,\n} from '../components/charts';\nimport { pesanGalat, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/*\n * Widget per fitur untuk tiap unit kerja (BAAK, keuangan, kepegawaian, SPMI, LPPM, arsip, humas, PMB, tracer).\n * Tiap modul punya: hook data (mis. useStatistikPmb), kartu ringkasan (RingkasanPmb), widget panel kecil\n * (CorongPmb, PendaftarHarianPmb, …), dan dasbor utuh (DasborPmb) yang hanya menyusun widget-widget itu.\n * Widget dengan kueri yang sama berbagi satu panggilan API.\n */\n\n// ================================================================ Bantuan bersama\ntype Angka = number | string | null | undefined;\nconst n = (v: Angka) => (v == null || v === '' ? 0 : Number(v) || 0);\n/** Peta {kunci: jumlah} dari API (PHP mengirim [] untuk peta kosong). */\nconst peta = (m: unknown): Array<[string, number]> => (m && typeof m === 'object' && !Array.isArray(m) ? Object.entries(m as Record<string, Angka>).map(([k, v]) => [k, n(v)]) : []);\nconst judulKunci = (k: string) => (k === 'belum_diisi' || k === '' ? 'Belum diisi' : k.length <= 3 ? k.toUpperCase() : (k.charAt(0).toUpperCase() + k.slice(1)).replace(/_/g, ' '));\nconst ubah = (cur: number, prev: number | undefined) => (prev ? ((cur - prev) / prev) * 100 : null);\n\n/** \"20241\" → \"2024/2025 Ganjil\"; pendek: \"24/25 Gj\". */\nexport function labelSemester(id: string | number, pendek = false): string {\n const s = String(id);\n const y = Number(s.slice(0, 4));\n const k = s.slice(4);\n if (!y) return s;\n const nama = k === '1' ? 'Ganjil' : k === '2' ? 'Genap' : k === '3' ? 'Pendek' : '';\n return pendek ? `${String(y).slice(2)}/${String(y + 1).slice(2)} ${({ Ganjil: 'Gj', Genap: 'Gn', Pendek: 'Pd' } as Record<string, string>)[nama] ?? ''}`.trim() : `${y}/${y + 1} ${nama}`.trim();\n}\n\nconst BULAN = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agu', 'Sep', 'Okt', 'Nov', 'Des'];\nconst tglPendek = (iso: string) => {\n const d = new Date(iso.length <= 10 ? `${iso}T00:00:00` : iso);\n return Number.isNaN(d.getTime()) ? iso : `${d.getDate()} ${BULAN[d.getMonth()]}`;\n};\n\nexport interface DasborBaseProps {\n /** Judul dasbor. Isi `null` untuk menyembunyikan kepala. */\n title?: React.ReactNode;\n description?: React.ReactNode;\n /** Kontrol di kanan kepala, mis. pilihan periode/unit. */\n actions?: React.ReactNode;\n className?: string;\n}\n\n/** Kerangka dasbor: kepala (judul, keterangan, aksi), galat dengan tombol muat ulang, lalu isi. */\nexport function KerangkaDasbor({ title, description, actions, error, onRetry, children, className }: DasborBaseProps & { error?: Error | null; onRetry?: () => void; children: React.ReactNode }) {\n return (\n <div className={cn('u-dasbor', className)}>\n {(title || actions) && (\n <header className=\"u-dasbor-head\">\n <div>\n {title && <h2>{title}</h2>}\n {description && <p>{description}</p>}\n </div>\n {actions && <div className=\"u-dasbor-actions\">{actions}</div>}\n </header>\n )}\n {error ? (\n <Alert\n variant=\"danger\"\n title=\"Data dasbor gagal dimuat\"\n actions={\n onRetry && (\n <Button size=\"sm\" variant=\"outline\" onClick={onRetry}>\n <RefreshCw /> Muat ulang\n </Button>\n )\n }\n >\n {pesanGalat(error, { kode: false })}\n <KodeLaporan error={error} />\n </Alert>\n ) : (\n children\n )}\n </div>\n );\n}\n\nconst galatDari = (...qs: Array<QueryState<unknown>>) => qs.find((q) => q.error)?.error ?? null;\nconst ulangSemua =\n (...qs: Array<QueryState<unknown>>) =>\n () =>\n qs.forEach((q) => q.refetch());\n\n// ================================================================ Pabrik widget\nexport interface WidgetProps {\n /** Ganti judul bawaan panel. */\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n /** Lebar kolom di DashboardGrid. */\n span?: 1 | 2 | 3 | 'full';\n className?: string;\n}\n\nfunction GalatWidget({ error, onRetry }: { error: Error; onRetry: () => void }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(error, { kode: false })}<KodeLaporan error={error} /></span>\n <Button size=\"sm\" variant=\"ghost\" onClick={onRetry}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\n\n/**\n * Membuat widget panel kecil dari satu hook data. Widget yang memakai hook dan kueri yang sama berbagi satu panggilan API,\n * jadi memasang beberapa widget di satu halaman tidak menambah beban server.\n */\nfunction buatWidget<Q extends object, D>(\n nama: string,\n useData: (q: Q) => QueryState<D>,\n bawaan: { title: string; description?: string; span?: WidgetProps['span'] },\n isi: (d: D | undefined, muat: boolean, q: Q) => React.ReactNode,\n) {\n function Widget(props: Q & WidgetProps) {\n const r = useData(props);\n return (\n <Panel title={props.title ?? bawaan.title} description={props.description ?? bawaan.description} actions={props.actions} span={props.span ?? bawaan.span} className={props.className}>\n {r.error ? <GalatWidget error={r.error} onRetry={r.refetch} /> : isi(r.data, r.loading && !r.data, props)}\n </Panel>\n );\n }\n Widget.displayName = nama;\n return Widget;\n}\n\n/** Bungkus kartu ringkasan: galat ringkas atau grid kartu. */\nfunction KartuRingkas({ q, min = 190, className, children }: { q: Array<QueryState<unknown>>; min?: number; className?: string; children: React.ReactNode }) {\n const e = galatDari(...q);\n if (e) return <GalatWidget error={e} onRetry={ulangSemua(...q)} />;\n return (\n <StatGrid min={min} className={className}>\n {children}\n </StatGrid>\n );\n}\nconst muatDari = (r: QueryState<unknown>) => r.loading && !r.data;\n\n// ================================================================ BAAK / akademik\nexport interface RingkasAkademik {\n tahun_id: string;\n total: Partial<Record<'mahasiswa_aktif' | 'status_aktif_semester' | 'cuti' | 'nonaktif' | 'mengisi_krs' | 'mahasiswa_baru' | 'lulusan' | 'dosen' | 'ews_tinggi', Angka>>;\n per_prodi: Array<{\n kode_prodi: string;\n nama_prodi: string;\n jenjang?: string;\n mahasiswa_aktif: Angka;\n mengisi_krs?: Angka;\n dosen?: Angka;\n rasio_dosen_mahasiswa?: Angka;\n persen_krs?: Angka;\n rata_ipk_lulusan?: Angka;\n rata_sks_krs?: Angka;\n ews_tinggi?: Angka;\n }>;\n}\nexport interface TrenAkademik {\n tahun_id: string;\n mengisi_krs: Angka;\n mahasiswa_baru: Angka;\n lulusan: Angka;\n rata_ips: Angka;\n}\nexport interface KueriAkademik {\n /** Semester, mis. \"20261\". Bawaan semester aktif. */\n tahunId?: string;\n kodeProdi?: string;\n /** Jumlah semester untuk tren (2–20). Bawaan 8. */\n semester?: number;\n}\n/** GET /v1/dasbor/ringkas. */\nexport function useRingkasAkademik({ tahunId, kodeProdi }: KueriAkademik) {\n const q = { tahun_id: tahunId, kode_prodi: kodeProdi };\n return useSiakadQuery<RingkasAkademik>(['dasbor-ringkas', q], (s, signal) => s.dasbor.getRingkas(q, { signal }) as never, { staleTime: 300_000 });\n}\n/** GET /v1/dasbor/tren, diurutkan dari semester terlama. */\nexport function useTrenAkademik({ semester = 8, kodeProdi }: KueriAkademik) {\n const r = useSiakadQuery<TrenAkademik[]>(['dasbor-tren', semester, kodeProdi], (s, signal) => s.dasbor.getTren({ semester, kode_prodi: kodeProdi }, { signal }) as never, { staleTime: 300_000 });\n const data = React.useMemo(() => (r.data ? [...r.data].sort((a, b) => String(a.tahun_id).localeCompare(String(b.tahun_id))) : undefined), [r.data]);\n return { ...r, data };\n}\n\n/** Kartu angka BAAK: mahasiswa aktif, pengisi KRS, mahasiswa baru, lulusan, dosen, EWS. */\nexport function RingkasanAkademik({ hrefEws, className, ...k }: KueriAkademik & { hrefEws?: string; className?: string }) {\n const ringkas = useRingkasAkademik(k);\n const tren = useTrenAkademik(k);\n const t = ringkas.data?.total ?? {};\n const seri = tren.data ?? [];\n const muat = muatDari(ringkas);\n const akhir = seri[seri.length - 1];\n // Bandingkan dengan semester sejenis tahun lalu (ganjil dengan ganjil).\n const lalu = akhir ? [...seri].reverse().find((r) => r !== akhir && String(r.tahun_id).slice(4) === String(akhir.tahun_id).slice(4)) : undefined;\n const banding = (key: keyof TrenAkademik) => (akhir && lalu ? ubah(n(akhir[key]), n(lalu[key])) : null);\n const labelLalu = lalu ? `dari ${labelSemester(lalu.tahun_id)}` : undefined;\n const aktif = n(t.mahasiswa_aktif);\n const dosen = n(t.dosen);\n return (\n <KartuRingkas q={[ringkas, tren]} className={className}>\n <StatCard label=\"Mahasiswa aktif\" icon={<Users />} loading={muat} value={formatNumber(aktif)} hint={`${formatNumber(n(t.status_aktif_semester))} aktif semester ini`} />\n <StatCard\n label=\"Mengisi KRS\"\n icon={<BookOpenCheck />}\n loading={muat}\n value={formatNumber(n(t.mengisi_krs))}\n delta={banding('mengisi_krs')}\n deltaLabel={labelLalu}\n trend={seri.map((r) => n(r.mengisi_krs))}\n footer={!muat && aktif > 0 ? <Progress value={Math.min(100, (n(t.mengisi_krs) / aktif) * 100)} size=\"sm\" /> : undefined}\n />\n <StatCard label=\"Mahasiswa baru\" icon={<UserPlus />} loading={muat} value={formatNumber(n(t.mahasiswa_baru))} delta={banding('mahasiswa_baru')} deltaLabel={labelLalu} tone=\"info\" />\n <StatCard label=\"Lulusan\" icon={<GraduationCap />} loading={muat} value={formatNumber(n(t.lulusan))} delta={banding('lulusan')} deltaLabel={labelLalu} tone=\"success\" />\n <StatCard\n label=\"Dosen\"\n icon={<UserCheck />}\n loading={muat}\n value={formatNumber(dosen)}\n hint={dosen ? `Rasio 1 : ${formatNumber(aktif / dosen, { maximumFractionDigits: 0 })}` : 'Belum ada data dosen'}\n tone=\"neutral\"\n />\n <StatCard\n label=\"Risiko tinggi (EWS)\"\n icon={<TriangleAlert />}\n loading={muat}\n value={formatNumber(n(t.ews_tinggi))}\n hint=\"mahasiswa perlu pendampingan\"\n tone={n(t.ews_tinggi) > 0 ? 'danger' : 'neutral'}\n href={hrefEws}\n />\n </KartuRingkas>\n );\n}\n\n/** Pengisi KRS per semester (batang, semester berjalan ditandai). */\nexport const KrsPerSemester = buatWidget('KrsPerSemester', useTrenAkademik, { title: 'Pengisi KRS per semester', description: 'Semester terakhir', span: 2 }, (seri, muat) => (\n <BarChart loading={muat} highlightLast data={(seri ?? []).map((r) => ({ label: labelSemester(r.tahun_id, true), title: labelSemester(r.tahun_id), value: n(r.mengisi_krs) }))} />\n));\n\n/** Mahasiswa baru dan lulusan per semester (batang berkelompok). */\nexport const MabaLulusanPerSemester = buatWidget('MabaLulusanPerSemester', useTrenAkademik, { title: 'Mahasiswa baru & lulusan', span: 2 }, (seri, muat) => (\n <GroupedBarChart\n loading={muat}\n labels={(seri ?? []).map((r) => labelSemester(r.tahun_id, true))}\n titles={(seri ?? []).map((r) => labelSemester(r.tahun_id))}\n series={[\n { label: 'Mahasiswa baru', values: (seri ?? []).map((r) => n(r.mahasiswa_baru)) },\n { label: 'Lulusan', values: (seri ?? []).map((r) => n(r.lulusan)) },\n ]}\n />\n));\n\n/** Rata-rata IPS per semester. */\nexport const IpsPerSemester = buatWidget('IpsPerSemester', useTrenAkademik, { title: 'Rata-rata IPS', description: 'Per semester' }, (seri, muat) => (\n <BarChart\n loading={muat}\n height={150}\n format={(v) => formatNumber(v, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n data={(seri ?? []).map((r) => ({ label: labelSemester(r.tahun_id, true), title: labelSemester(r.tahun_id), value: n(r.rata_ips) }))}\n />\n));\n\n/** Komposisi aktif, cuti, nonaktif semester berjalan. */\nexport const StatusMahasiswa = buatWidget('StatusMahasiswa', useRingkasAkademik, { title: 'Status mahasiswa', description: 'Semester berjalan' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={132}\n centerLabel=\"mahasiswa\"\n data={[\n { label: 'Aktif', value: n(d?.total.status_aktif_semester) },\n { label: 'Cuti', value: n(d?.total.cuti) },\n { label: 'Nonaktif', value: n(d?.total.nonaktif) },\n ]}\n />\n));\n\n/** Mahasiswa aktif per prodi dengan persen pengisian KRS. */\nexport const MahasiswaPerProdi = buatWidget('MahasiswaPerProdi', useRingkasAkademik, { title: 'Mahasiswa aktif per prodi', description: 'Persentase pengisian KRS di kanan', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n items={[...(d?.per_prodi ?? [])]\n .sort((a, b) => n(b.mahasiswa_aktif) - n(a.mahasiswa_aktif))\n .map((p) => ({\n label: `${p.jenjang ? p.jenjang + ' ' : ''}${p.nama_prodi}`,\n value: n(p.mahasiswa_aktif),\n secondary: p.persen_krs != null ? `KRS ${formatPersen(n(p.persen_krs), 0)}` : undefined,\n }))}\n />\n));\n\n/** Rasio dosen : mahasiswa per prodi (makin kecil makin baik). */\nexport const RasioDosenPerProdi = buatWidget('RasioDosenPerProdi', useRingkasAkademik, { title: 'Mahasiswa per dosen', description: 'Per prodi, makin kecil makin baik' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n format={(v) => `1 : ${formatNumber(v, { maximumFractionDigits: 0 })}`}\n items={(d?.per_prodi ?? [])\n .filter((p) => n(p.dosen) > 0)\n .map((p) => ({ label: p.nama_prodi, value: n(p.mahasiswa_aktif) / n(p.dosen), secondary: `${formatNumber(n(p.dosen))} dosen` }))\n .sort((a, b) => b.value - a.value)}\n />\n));\n\n/** Dasbor BAAK lengkap. Semua bagian juga tersedia sebagai widget terpisah. */\nexport function DasborAkademik({\n tahunId,\n kodeProdi,\n semester = 8,\n hrefEws,\n title = 'Dasbor akademik',\n description,\n actions,\n className,\n}: DasborBaseProps & KueriAkademik & { /** Tautan daftar mahasiswa berisiko (EWS). */ hrefEws?: string }) {\n const k = { tahunId, kodeProdi, semester };\n const ringkas = useRingkasAkademik(k);\n return (\n <KerangkaDasbor\n title={title}\n description={description ?? (ringkas.data ? `Tahun akademik ${labelSemester(ringkas.data.tahun_id)}` : undefined)}\n actions={actions}\n error={ringkas.error}\n onRetry={ringkas.refetch}\n className={className}\n >\n <RingkasanAkademik {...k} hrefEws={hrefEws} />\n <DashboardGrid>\n <KrsPerSemester {...k} description={`${semester} semester terakhir`} />\n <StatusMahasiswa {...k} />\n <MahasiswaPerProdi {...k} />\n <IpsPerSemester {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Keuangan\nexport interface SerapanAnggaran {\n periode?: { id: number; kode?: string; nama?: string; mulai?: string; selesai?: string; status?: string } | null;\n anggaran: Angka;\n realisasi: Angka;\n persen: Angka;\n penerimaan_lain?: Angka;\n per_unit: Array<{ unit_id: number; unit: string | null; anggaran: Angka; realisasi: Angka; dalam_proses: Angka; sisa: Angka; persen: Angka }>;\n per_akun: Array<{ akun_id: number; akun_kode?: string | null; akun_nama?: string | null; anggaran: Angka; realisasi: Angka; dalam_proses: Angka; sisa: Angka; persen: Angka }>;\n}\nexport interface KueriKeuangan {\n periodeId?: number;\n unitId?: number;\n}\n/** GET /v1/keu/serapan. */\nexport function useSerapanAnggaran({ periodeId, unitId }: KueriKeuangan) {\n const q = { periode_id: periodeId, unit_id: unitId };\n return useSiakadQuery<SerapanAnggaran>(['keu-serapan', q], (s, signal) => s.keu.getSerapan(q, { signal }) as never, { staleTime: 120_000 });\n}\nconst prosesDari = (d?: SerapanAnggaran) => (d?.per_unit ?? []).reduce((a, u) => a + n(u.dalam_proses), 0);\n\n/** Kartu angka keuangan: pagu, realisasi, dalam proses, sisa, penerimaan lain. */\nexport function RingkasanKeuangan({ className, ...k }: KueriKeuangan & { className?: string }) {\n const r = useSerapanAnggaran(k);\n const d = r.data;\n const muat = muatDari(r);\n const proses = prosesDari(d);\n const sisa = n(d?.anggaran) - n(d?.realisasi) - proses;\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Pagu anggaran\" icon={<Wallet />} loading={muat} value={formatRupiahRingkas(n(d?.anggaran))} hint=\"RKA disetujui\" tone=\"neutral\" />\n <StatCard\n label=\"Realisasi\"\n icon={<Receipt />}\n loading={muat}\n value={formatRupiahRingkas(n(d?.realisasi))}\n hint={`${formatPersen(n(d?.persen))} dari pagu`}\n footer={!muat ? <Progress value={Math.min(100, n(d?.persen))} size=\"sm\" /> : undefined}\n />\n <StatCard label=\"Dalam proses\" icon={<FileClock />} loading={muat} value={formatRupiahRingkas(proses)} hint=\"diajukan, belum disetujui\" tone=\"warning\" />\n <StatCard\n label=\"Sisa anggaran\"\n icon={<PiggyBank />}\n loading={muat}\n value={formatRupiahRingkas(sisa)}\n tone={sisa < 0 ? 'danger' : 'success'}\n hint={sisa < 0 ? 'melebihi pagu' : 'belum terpakai'}\n />\n {d?.penerimaan_lain != null && <StatCard label=\"Penerimaan lain\" icon={<Inbox />} value={formatRupiahRingkas(n(d.penerimaan_lain))} tone=\"info\" hint=\"di luar UKT\" />}\n </KartuRingkas>\n );\n}\n\n/** Meter pagu: terpakai, dalam proses, sisa. */\nexport const PosisiAnggaran = buatWidget('PosisiAnggaran', useSerapanAnggaran, { title: 'Posisi anggaran' }, (d, muat) =>\n muat ? <Progress value={null} /> : <BudgetMeter target={n(d?.anggaran)} used={n(d?.realisasi)} pending={prosesDari(d)} format={formatRupiahRingkas} label={d?.periode?.nama ?? 'Pagu periode'} />,\n);\n\n/** Persen serapan per unit kerja. */\nexport const SerapanPerUnit = buatWidget('SerapanPerUnit', useSerapanAnggaran, { title: 'Serapan per unit', description: 'Persen realisasi terhadap pagu unit', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n max={100}\n format={(v) => formatPersen(v, 0)}\n items={[...(d?.per_unit ?? [])]\n .sort((a, b) => n(b.persen) - n(a.persen))\n .map((u) => ({ label: u.unit ?? `Unit ${u.unit_id}`, value: n(u.persen), secondary: `${formatRupiahRingkas(n(u.realisasi))} dari ${formatRupiahRingkas(n(u.anggaran))}` }))}\n />\n));\n\n/** Realisasi per akun belanja (delapan terbesar). */\nexport const RealisasiPerAkun = buatWidget('RealisasiPerAkun', useSerapanAnggaran, { title: 'Realisasi per akun', description: 'Delapan akun terbesar', span: 'full' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n format={formatRupiahRingkas}\n items={[...(d?.per_akun ?? [])]\n .sort((a, b) => n(b.realisasi) - n(a.realisasi))\n .map((a) => ({ label: a.akun_nama ?? a.akun_kode ?? '-', value: n(a.realisasi), secondary: [a.akun_kode, a.persen != null ? formatPersen(n(a.persen), 0) : null].filter(Boolean).join(' · ') }))}\n />\n));\n\n/** Dasbor keuangan lengkap. */\nexport function DasborKeuangan({ periodeId, unitId, title = 'Serapan anggaran', description, actions, className }: DasborBaseProps & KueriKeuangan) {\n const k = { periodeId, unitId };\n const r = useSerapanAnggaran(k);\n const per = r.data?.periode;\n return (\n <KerangkaDasbor\n title={title}\n description={description ?? (per ? `${per.nama ?? per.kode}${per.mulai && per.selesai ? ` · ${formatDate(per.mulai)} – ${formatDate(per.selesai)}` : ''}` : undefined)}\n actions={actions}\n error={r.error}\n onRetry={r.refetch}\n className={className}\n >\n <RingkasanKeuangan {...k} />\n <DashboardGrid>\n <PosisiAnggaran {...k} />\n <SerapanPerUnit {...k} />\n <RealisasiPerAkun {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Kepegawaian\nexport interface DataSdm {\n total: Angka;\n per_jenis?: Record<string, Angka>;\n per_status_kepegawaian?: Record<string, Angka>;\n per_jenis_kelamin?: Record<string, Angka>;\n per_pendidikan?: Record<string, Angka>;\n per_golongan?: Record<string, Angka>;\n per_kelompok_usia?: Record<string, Angka>;\n dosen?: { per_jabatan_akademik?: Record<string, Angka>; per_pendidikan?: Record<string, Angka>; serdos?: Record<string, Angka>; per_prodi?: Record<string, Angka> };\n tendik?: { per_jenis_tendik?: Record<string, Angka> };\n catatan?: string;\n}\nexport interface KueriSdm {\n unitId?: number | string;\n}\n/** GET /v1/sdm/laporan/ringkasan. */\nexport function useRingkasanSdm({ unitId }: KueriSdm) {\n const q = { unit_id: unitId == null ? undefined : String(unitId) };\n return useSiakadQuery<DataSdm>(['sdm-ringkasan', q], (s, signal) => s.sdm.getLaporanRingkasan(q, { signal }) as never, { staleTime: 300_000 });\n}\nconst URUT_JAD = ['Guru Besar', 'Lektor Kepala', 'Lektor', 'Asisten Ahli', 'Tenaga Pengajar'];\nconst URUT_DIDIK = ['S3', 'S2', 'Sp-2', 'Sp-1', 'Profesi', 'S1', 'D4', 'D3', 'D2', 'D1', 'SMA', 'SMK', 'SMP', 'SD'];\nconst URUT_USIA = ['<30', '30-39', '40-49', '50-59', '60+'];\nconst urutMenurut = (urut: string[]) => (a: [string, number], b: [string, number]) => {\n const i = (x: string) => (urut.indexOf(x) < 0 ? 99 : urut.indexOf(x));\n return i(a[0]) - i(b[0]) || b[1] - a[1];\n};\n\n/** Kartu angka kepegawaian: pegawai, dosen, tendik, dosen tetap bersertifikat. */\nexport function RingkasanKepegawaian({ className, ...k }: KueriSdm & { className?: string }) {\n const r = useRingkasanSdm(k);\n const d = r.data;\n const muat = muatDari(r);\n const jenis = Object.fromEntries(peta(d?.per_jenis));\n const serdos = Object.fromEntries(peta(d?.dosen?.serdos));\n const tetap = n(serdos.sudah) + n(serdos.belum);\n const didik = Object.fromEntries(peta(d?.dosen?.per_pendidikan));\n const jk = Object.fromEntries(peta(d?.per_jenis_kelamin));\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Pegawai\" icon={<Users />} loading={muat} value={formatNumber(n(d?.total))} tone=\"neutral\" hint={`${formatNumber(n(jk.L))} laki-laki · ${formatNumber(n(jk.P))} perempuan`} />\n <StatCard label=\"Dosen\" icon={<GraduationCap />} loading={muat} value={formatNumber(n(jenis.dosen))} hint={`${formatNumber(n(didik.S3))} bergelar doktor`} />\n <StatCard label=\"Tenaga kependidikan\" icon={<Briefcase />} loading={muat} value={formatNumber(n(jenis.tendik))} tone=\"info\" />\n <StatCard\n label=\"Dosen tetap bersertifikat\"\n icon={<BadgeCheck />}\n loading={muat}\n value={tetap ? formatPersen((n(serdos.sudah) / tetap) * 100, 0) : '–'}\n hint={`${formatNumber(n(serdos.sudah))} dari ${formatNumber(tetap)} dosen tetap`}\n tone=\"success\"\n footer={!muat && tetap ? <Progress value={(n(serdos.sudah) / tetap) * 100} size=\"sm\" tone=\"success\" /> : undefined}\n />\n </KartuRingkas>\n );\n}\n\n/** Jabatan akademik dosen, urut dari Guru Besar. */\nexport const JabatanAkademikDosen = buatWidget('JabatanAkademikDosen', useRingkasanSdm, { title: 'Jabatan akademik dosen', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n items={peta(d?.dosen?.per_jabatan_akademik)\n .sort(urutMenurut(URUT_JAD))\n .map(([k, v]) => ({ label: k === 'belum_diisi' ? 'Belum punya jabatan' : k, value: v }))}\n />\n));\n/** Status kepegawaian (tetap, kontrak, honorer, …). */\nexport const StatusKepegawaian = buatWidget('StatusKepegawaian', useRingkasanSdm, { title: 'Status kepegawaian' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={128}\n centerLabel=\"pegawai\"\n data={peta(d?.per_status_kepegawaian)\n .sort((a, b) => b[1] - a[1])\n .map(([k, v]) => ({ label: judulKunci(k), value: v }))}\n />\n));\n/** Pendidikan tertinggi semua pegawai. */\nexport const PendidikanPegawai = buatWidget('PendidikanPegawai', useRingkasanSdm, { title: 'Pendidikan tertinggi', description: 'Semua pegawai' }, (d, muat) =>\n muat ? (\n <Progress value={null} />\n ) : (\n <SegmentBar\n data={peta(d?.per_pendidikan)\n .sort(urutMenurut(URUT_DIDIK))\n .map(([k, v]) => ({ label: judulKunci(k), value: v }))}\n />\n ),\n);\n/** Sebaran kelompok usia pegawai. */\nexport const UsiaPegawai = buatWidget('UsiaPegawai', useRingkasanSdm, { title: 'Kelompok usia' }, (d, muat) => (\n <BarChart\n loading={muat}\n height={140}\n data={peta(d?.per_kelompok_usia)\n .filter(([k]) => k !== 'belum_diisi')\n .sort(urutMenurut(URUT_USIA))\n .map(([k, v]) => ({ label: k, title: `Usia ${k}`, value: v }))}\n />\n));\n/** Tenaga kependidikan per jenis tugas. */\nexport const TendikPerJenis = buatWidget('TendikPerJenis', useRingkasanSdm, { title: 'Tenaga kependidikan per jenis' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={6}\n items={peta(d?.tendik?.per_jenis_tendik)\n .sort((a, b) => b[1] - a[1])\n .map(([k, v]) => ({ label: judulKunci(k), value: v }))}\n />\n));\n/** Pegawai per golongan. */\nexport const GolonganPegawai = buatWidget('GolonganPegawai', useRingkasanSdm, { title: 'Golongan', span: 'full' }, (d, muat) => (\n <BarChart\n loading={muat}\n height={140}\n data={peta(d?.per_golongan)\n .filter(([k]) => k !== 'belum_diisi')\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([k, v]) => ({ label: k, title: `Golongan ${k}`, value: v }))}\n />\n));\n\n/** Dasbor kepegawaian lengkap. */\nexport function DasborKepegawaian({ unitId, title = 'Dasbor kepegawaian', description, actions, className }: DasborBaseProps & KueriSdm) {\n const k = { unitId };\n const r = useRingkasanSdm(k);\n return (\n <KerangkaDasbor title={title} description={description ?? r.data?.catatan} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanKepegawaian {...k} />\n <DashboardGrid>\n <JabatanAkademikDosen {...k} />\n <StatusKepegawaian {...k} />\n <PendidikanPegawai {...k} />\n <UsiaPegawai {...k} />\n <TendikPerJenis {...k} />\n <GolonganPegawai {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ SPMI\ninterface RekapCapaian {\n kunci: string;\n total: Angka;\n tercapai: Angka;\n melampaui: Angka;\n tidak_tercapai: Angka;\n belum: Angka;\n terisi: Angka;\n persen_terpenuhi: Angka;\n persen_terisi: Angka;\n}\nexport interface DasborSpmiData {\n periode?: { id: number; nama?: string; tahun?: number | string } | null;\n ppepp: Record<'penetapan' | 'pelaksanaan' | 'evaluasi' | 'pengendalian' | 'peningkatan', { terpenuhi: boolean; bukti: Record<string, unknown> }>;\n capaian: RekapCapaian | null;\n capaian_per_bidang: RekapCapaian[];\n ami: Array<{ status: string; n: Angka }>;\n temuan: Partial<Record<'total' | 'terbuka' | 'kts_mayor' | 'kts_minor' | 'observasi' | 'terlambat' | 'ditutup', Angka>>;\n survei?: Array<{ status: string; n: Angka }>;\n risiko_tinggi_terbuka?: Angka;\n akreditasi?: Partial<Record<'kedaluwarsa' | 'segera_ajukan' | 'belum_ada_data' | 'aman', Angka>>;\n pelaporan?: { butir: Angka; dilaporkan: Angka; valid: Angka } | null;\n}\nexport interface KueriSpmi {\n periodeId?: number;\n unitId?: number;\n}\n/** GET /v1/spmi/dasbor. */\nexport function useDasborSpmi({ periodeId, unitId }: KueriSpmi) {\n const q = { periode_id: periodeId, unit_id: unitId };\n return useSiakadQuery<DasborSpmiData>(['spmi-dasbor', q], (s, signal) => s.spmi.getDasbor(q, { signal }) as never, { staleTime: 120_000 });\n}\n\n/** Kartu angka SPMI: indikator terpenuhi, capaian terisi, temuan terbuka, akreditasi. */\nexport function RingkasanSpmi({ className, ...k }: KueriSpmi & { className?: string }) {\n const r = useDasborSpmi(k);\n const d = r.data;\n const muat = muatDari(r);\n const c = d?.capaian;\n const tm = d?.temuan ?? {};\n const ak = d?.akreditasi ?? {};\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard\n label=\"Indikator terpenuhi\"\n icon={<ClipboardCheck />}\n loading={muat}\n value={c?.persen_terpenuhi != null ? formatPersen(n(c.persen_terpenuhi), 0) : '–'}\n hint={`${formatNumber(n(c?.tercapai) + n(c?.melampaui))} tercapai/melampaui`}\n tone=\"success\"\n />\n <StatCard\n label=\"Capaian terisi\"\n icon={<FileText />}\n loading={muat}\n value={c?.persen_terisi != null ? formatPersen(n(c.persen_terisi), 0) : '–'}\n hint={`${formatNumber(n(c?.terisi))} dari ${formatNumber(n(c?.total))} indikator`}\n footer={!muat ? <Progress value={n(c?.persen_terisi)} size=\"sm\" /> : undefined}\n />\n <StatCard\n label=\"Temuan terbuka\"\n icon={<ShieldAlert />}\n loading={muat}\n value={formatNumber(n(tm.terbuka))}\n hint={`${formatNumber(n(tm.terlambat))} lewat batas waktu`}\n tone={n(tm.terlambat) > 0 ? 'danger' : n(tm.terbuka) > 0 ? 'warning' : 'neutral'}\n />\n <StatCard\n label=\"Akreditasi perlu diurus\"\n icon={<BadgeCheck />}\n loading={muat}\n value={formatNumber(n(ak.kedaluwarsa) + n(ak.segera_ajukan))}\n hint={`${formatNumber(n(ak.kedaluwarsa))} kedaluwarsa · ${formatNumber(n(ak.aman))} aman`}\n tone={n(ak.kedaluwarsa) > 0 ? 'danger' : 'neutral'}\n />\n </KartuRingkas>\n );\n}\n\n/** Lima tahap PPEPP dengan bukti singkat. */\nexport const SiklusPpepp = buatWidget('SiklusPpepp', useDasborSpmi, { title: 'Siklus PPEPP', description: 'Penetapan, pelaksanaan, evaluasi, pengendalian, peningkatan', span: 'full' }, (d, muat) => {\n if (muat || !d?.ppepp) return <Progress value={null} />;\n const b = (key: keyof DasborSpmiData['ppepp'], f: string) => n(d.ppepp[key]?.bukti?.[f] as Angka);\n return (\n <CycleSteps\n steps={[\n { label: 'Penetapan', done: !!d.ppepp.penetapan?.terpenuhi, detail: `${b('penetapan', 'standar_berlaku')} standar berlaku` },\n { label: 'Pelaksanaan', done: !!d.ppepp.pelaksanaan?.terpenuhi, detail: `${formatPersen(b('pelaksanaan', 'capaian_terisi_persen'), 0)} capaian terisi` },\n { label: 'Evaluasi', done: !!d.ppepp.evaluasi?.terpenuhi, detail: `${b('evaluasi', 'auditee_ami_selesai')} auditee AMI selesai` },\n { label: 'Pengendalian', done: !!d.ppepp.pengendalian?.terpenuhi, detail: `${b('pengendalian', 'temuan_ditutup')} temuan ditutup` },\n { label: 'Peningkatan', done: !!d.ppepp.peningkatan?.terpenuhi, detail: `${b('peningkatan', 'keputusan_peningkatan_standar')} keputusan peningkatan` },\n ]}\n />\n );\n});\n/** Persen indikator terpenuhi per bidang standar. */\nexport const CapaianPerBidang = buatWidget(\n 'CapaianPerBidang',\n useDasborSpmi,\n { title: 'Capaian per bidang', description: 'Persen indikator terpenuhi dari yang sudah dinilai', span: 2 },\n (d, muat) => (\n <BarList\n loading={muat}\n max={100}\n format={(v) => formatPersen(v, 0)}\n items={(d?.capaian_per_bidang ?? []).map((x) => ({\n label: judulKunci(String(x.kunci)),\n value: n(x.persen_terpenuhi),\n secondary: `${formatNumber(n(x.terisi))}/${formatNumber(n(x.total))} terisi`,\n }))}\n />\n ),\n);\n/** Melampaui, tercapai, tidak tercapai, belum dinilai. */\nexport const PemenuhanIndikator = buatWidget('PemenuhanIndikator', useDasborSpmi, { title: 'Pemenuhan indikator' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={128}\n centerLabel=\"indikator\"\n data={[\n { label: 'Melampaui', value: n(d?.capaian?.melampaui) },\n { label: 'Tercapai', value: n(d?.capaian?.tercapai) },\n { label: 'Tidak tercapai', value: n(d?.capaian?.tidak_tercapai) },\n { label: 'Belum dinilai', value: n(d?.capaian?.belum) },\n ]}\n />\n));\n/** Temuan AMI per kategori dan yang sudah ditutup. */\nexport const TemuanAmi = buatWidget('TemuanAmi', useDasborSpmi, { title: 'Temuan audit' }, (d, muat) => {\n if (muat) return <Progress value={null} />;\n const tm = d?.temuan ?? {};\n return (\n <div style={{ display: 'grid', gap: '1.25rem' }}>\n <SegmentBar\n data={[\n { label: 'KTS mayor', value: n(tm.kts_mayor) },\n { label: 'KTS minor', value: n(tm.kts_minor) },\n { label: 'Observasi', value: n(tm.observasi) },\n ]}\n />\n <Progress label=\"Temuan ditutup\" value={n(tm.ditutup)} max={Math.max(1, n(tm.total))} tone=\"success\" format={(v, m) => `${v} dari ${m}`} />\n </div>\n );\n});\n/** Antrean SPMI yang perlu ditangani. */\nexport const TindakanSpmi = buatWidget('TindakanSpmi', useDasborSpmi, { title: 'Perlu tindakan' }, (d, muat) => (\n <ActionList\n loading={muat}\n items={[\n { label: 'Temuan lewat batas waktu', count: n(d?.temuan?.terlambat), tone: 'danger', icon: <TriangleAlert /> },\n { label: 'Risiko tinggi terbuka', count: n(d?.risiko_tinggi_terbuka), tone: 'danger', icon: <ShieldAlert /> },\n { label: 'Akreditasi segera diajukan', count: n(d?.akreditasi?.segera_ajukan), icon: <BadgeCheck /> },\n { label: 'Unit belum punya data akreditasi', count: n(d?.akreditasi?.belum_ada_data), tone: 'info', icon: <FileText /> },\n ]}\n />\n));\n/** Butir pelaporan PDDikti: dilaporkan dan valid. */\nexport const PelaporanPddikti = buatWidget('PelaporanPddikti', useDasborSpmi, { title: 'Pelaporan PDDikti' }, (d, muat) => {\n const pl = d?.pelaporan;\n if (muat) return <Progress value={null} />;\n if (!pl || !n(pl.butir)) return <p className=\"u-chart-empty\">Belum ada butir pelaporan periode ini.</p>;\n return (\n <div style={{ display: 'grid', gap: '0.875rem' }}>\n <Progress label=\"Dilaporkan\" value={n(pl.dilaporkan)} max={n(pl.butir)} format={(v, m) => `${v}/${m}`} />\n <Progress label=\"Dinyatakan valid\" value={n(pl.valid)} max={n(pl.butir)} tone=\"success\" format={(v, m) => `${v}/${m}`} />\n </div>\n );\n});\n\n/** Dasbor SPMI lengkap. */\nexport function DasborSpmi({ periodeId, unitId, title = 'Penjaminan mutu internal', description, actions, className }: DasborBaseProps & KueriSpmi) {\n const k = { periodeId, unitId };\n const r = useDasborSpmi(k);\n const p = r.data?.periode;\n return (\n <KerangkaDasbor title={title} description={description ?? (p ? `Periode ${p.nama ?? p.tahun}` : undefined)} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanSpmi {...k} />\n <DashboardGrid>\n <SiklusPpepp {...k} />\n <CapaianPerBidang {...k} />\n <PemenuhanIndikator {...k} />\n <TemuanAmi {...k} />\n <TindakanSpmi {...k} />\n <PelaporanPddikti {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ LPPM\nexport interface RekapLppm {\n tahun?: string | null;\n kegiatan_per_status: Array<{ jenis: string; status: string; jumlah: Angka; dana_usulan?: Angka; dana_disetujui?: Angka }>;\n kegiatan_per_sumber_dana: Array<{ jenis: string; sumber_dana: string | null; jumlah: Angka; dana: Angka }>;\n kegiatan_per_skema: Array<{ kode?: string; nama: string; jenis: string; jumlah: Angka; didanai: Angka }>;\n luaran_per_jenis: Array<{ kategori?: string; kode?: string; nama: string; jumlah: Angka; terverifikasi: Angka }>;\n dosen_terlibat: Angka;\n mahasiswa_terlibat: Angka;\n tugas_pengelola?: Partial<Record<'usulan_menunggu_review' | 'usulan_menunggu_penetapan' | 'laporan_menunggu' | 'luaran_menunggu_verifikasi' | 'pencairan_diajukan', Angka>> | null;\n}\nexport interface KueriLppm {\n tahun?: string | number;\n kodeProdi?: string;\n}\n/** GET /v1/lppm/rekap/dasbor. */\nexport function useRekapLppm({ tahun, kodeProdi }: KueriLppm) {\n const q = { tahun: tahun == null ? undefined : String(tahun), kode_prodi: kodeProdi };\n return useSiakadQuery<RekapLppm>(['lppm-rekap', q], (s, signal) => s.lppm.getRekapDasbor(q, { signal }) as never, { staleTime: 120_000 });\n}\nconst JENIS_LPPM: Record<string, string> = { penelitian: 'Penelitian', pkm: 'PkM', pengabdian: 'PkM' };\nconst jumlahJenis = (d: RekapLppm | undefined, j: string) => (d?.kegiatan_per_status ?? []).filter((x) => (JENIS_LPPM[x.jenis] ?? x.jenis) === j).reduce((a, x) => a + n(x.jumlah), 0);\n\n/** Kartu angka LPPM: penelitian, PkM, dana disetujui, dosen terlibat. */\nexport function RingkasanLppm({ className, ...k }: KueriLppm & { className?: string }) {\n const r = useRekapLppm(k);\n const d = r.data;\n const muat = muatDari(r);\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Penelitian\" icon={<FlaskConical />} loading={muat} value={formatNumber(jumlahJenis(d, 'Penelitian'))} hint=\"kegiatan\" />\n <StatCard label=\"Pengabdian (PkM)\" icon={<Users />} loading={muat} value={formatNumber(jumlahJenis(d, 'PkM'))} hint=\"kegiatan\" tone=\"info\" />\n <StatCard label=\"Dana disetujui\" icon={<Wallet />} loading={muat} value={formatRupiahRingkas((d?.kegiatan_per_status ?? []).reduce((a, x) => a + n(x.dana_disetujui), 0))} tone=\"success\" />\n <StatCard\n label=\"Dosen terlibat\"\n icon={<UserCheck />}\n loading={muat}\n value={formatNumber(n(d?.dosen_terlibat))}\n hint={`${formatNumber(n(d?.mahasiswa_terlibat))} mahasiswa terlibat`}\n tone=\"neutral\"\n />\n </KartuRingkas>\n );\n}\n\nconst TUGAS_LPPM: Array<[keyof NonNullable<RekapLppm['tugas_pengelola']>, string]> = [\n ['usulan_menunggu_review', 'Usulan menunggu review'],\n ['usulan_menunggu_penetapan', 'Usulan menunggu penetapan'],\n ['laporan_menunggu', 'Laporan menunggu diperiksa'],\n ['luaran_menunggu_verifikasi', 'Luaran menunggu verifikasi'],\n ['pencairan_diajukan', 'Pencairan dana diajukan'],\n];\n/** Antrean pengelola LPPM. Hanya berisi bila token milik pengelola. */\nexport const AntreanLppm = buatWidget(\n 'AntreanLppm',\n (q: KueriLppm & { hrefTugas?: Partial<Record<string, string>> }) => useRekapLppm(q),\n { title: 'Perlu tindakan', description: 'Antrean pengelola LPPM' },\n (d, muat, q) =>\n !muat && !d?.tugas_pengelola ? (\n <p className=\"u-chart-empty\">Antrean hanya tampil untuk pengelola LPPM.</p>\n ) : (\n <ActionList loading={muat} items={TUGAS_LPPM.map(([key, label]) => ({ key, label, count: n(d?.tugas_pengelola?.[key]), href: q.hrefTugas?.[key] }))} />\n ),\n);\n/** Kegiatan per status, dirinci penelitian/PkM. */\nexport const KegiatanLppmPerStatus = buatWidget('KegiatanLppmPerStatus', useRekapLppm, { title: 'Kegiatan per status', span: 2 }, (d, muat) => {\n const gab = new Map<string, Record<string, number>>();\n (d?.kegiatan_per_status ?? []).forEach((x) => {\n const m = gab.get(x.status) ?? {};\n const j = JENIS_LPPM[x.jenis] ?? x.jenis;\n m[j] = (m[j] ?? 0) + n(x.jumlah);\n gab.set(x.status, m);\n });\n return (\n <BarList\n loading={muat}\n items={[...gab]\n .map(([s, m]) => ({\n label: judulKunci(s),\n value: Object.values(m).reduce((a, b) => a + b, 0),\n secondary: Object.entries(m)\n .map(([j, v]) => `${v} ${j}`)\n .join(' · '),\n }))\n .sort((a, b) => b.value - a.value)}\n />\n );\n});\n/** Dana kegiatan per sumber pendanaan. */\nexport const DanaLppmPerSumber = buatWidget('DanaLppmPerSumber', useRekapLppm, { title: 'Dana per sumber' }, (d, muat) => {\n const sumber = new Map<string, number>();\n (d?.kegiatan_per_sumber_dana ?? []).forEach((x) => sumber.set(x.sumber_dana ?? 'belum_diisi', (sumber.get(x.sumber_dana ?? 'belum_diisi') ?? 0) + n(x.dana)));\n return (\n <DonutChart loading={muat} size={136} format={formatRupiahRingkas} centerLabel=\"total dana\" data={[...sumber].sort((a, b) => b[1] - a[1]).map(([k, v]) => ({ label: judulKunci(k), value: v }))} />\n );\n});\n/** Usulan per skema hibah dan yang didanai. */\nexport const SkemaHibah = buatWidget('SkemaHibah', useRekapLppm, { title: 'Skema hibah', description: 'Jumlah usulan dan yang didanai', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n items={[...(d?.kegiatan_per_skema ?? [])].sort((a, b) => n(b.jumlah) - n(a.jumlah)).map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: `${formatNumber(n(x.didanai))} didanai` }))}\n />\n));\n/** Luaran penelitian/PkM per jenis. */\nexport const LuaranLppm = buatWidget('LuaranLppm', useRekapLppm, { title: 'Luaran', description: 'Publikasi, HKI, dan luaran lain', span: 'full' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={10}\n items={[...(d?.luaran_per_jenis ?? [])]\n .sort((a, b) => n(b.jumlah) - n(a.jumlah))\n .map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: `${formatNumber(n(x.terverifikasi))} terverifikasi` }))}\n />\n));\n\n/** Dasbor LPPM lengkap. */\nexport function DasborLppm({\n tahun,\n kodeProdi,\n hrefTugas,\n title = 'Penelitian & pengabdian',\n description,\n actions,\n className,\n}: DasborBaseProps & KueriLppm & { /** Tautan per antrean pengelola, mis. { usulan_menunggu_review: '/lppm/review' }. */ hrefTugas?: Partial<Record<string, string>> }) {\n const k = { tahun, kodeProdi };\n const r = useRekapLppm(k);\n const pengelola = !!r.data?.tugas_pengelola;\n return (\n <KerangkaDasbor title={title} description={description ?? (r.data?.tahun ? `Tahun ${r.data.tahun}` : 'Semua tahun')} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanLppm {...k} />\n <DashboardGrid>\n {pengelola && <AntreanLppm {...k} hrefTugas={hrefTugas} />}\n <DanaLppmPerSumber {...k} />\n <KegiatanLppmPerStatus {...k} span={pengelola ? 'full' : 2} />\n <SkemaHibah {...k} />\n <LuaranLppm {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Arsip\nexport interface LaporanArsip {\n tahun: number | string;\n surat_per_bulan: Array<{ bulan: number; masuk: Angka; keluar: Angka }>;\n surat_per_status: Array<{ arah: string; status: string; jumlah: Angka }>;\n surat_per_klasifikasi: Array<{ kode: string; nama: string; jumlah: Angka }>;\n disposisi?: Partial<Record<'total' | 'aktif' | 'lewat_batas' | 'selesai' | 'rata_jam_selesai', Angka>> | null;\n dokumen?: Partial<Record<'total' | 'kedaluwarsa' | 'akan_kedaluwarsa_90_hari', Angka>> | null;\n retensi_jatuh_tempo?: { pemindahan: Angka; pemusnahan_penyerahan: Angka };\n peminjaman_aktif?: Angka;\n}\nexport interface KueriArsip {\n unitId?: number | string;\n tahun?: number | string;\n /** Sertakan unit turunan. */\n turunan?: boolean;\n}\n/** GET /v1/arsip/laporan/ringkasan. */\nexport function useLaporanArsip({ unitId, tahun, turunan }: KueriArsip) {\n const q = { unit_id: unitId == null ? undefined : String(unitId), tahun: tahun == null ? undefined : String(tahun), turunan: turunan ? '1' : undefined };\n return useSiakadQuery<LaporanArsip>(['arsip-ringkasan', q], (s, signal) => s.arsip.getLaporanRingkasan(q, { signal }) as never, { staleTime: 120_000 });\n}\n\n/** Kartu angka arsip: surat masuk/keluar, disposisi aktif, dokumen kedaluwarsa. */\nexport function RingkasanArsip({ className, ...k }: KueriArsip & { className?: string }) {\n const r = useLaporanArsip(k);\n const d = r.data;\n const muat = muatDari(r);\n const bln = d?.surat_per_bulan ?? [];\n const ds = d?.disposisi ?? {};\n const dk = d?.dokumen ?? {};\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Surat masuk\" icon={<Mail />} loading={muat} value={formatNumber(bln.reduce((a, x) => a + n(x.masuk), 0))} trend={bln.map((x) => n(x.masuk))} />\n <StatCard label=\"Surat keluar\" icon={<Send />} loading={muat} value={formatNumber(bln.reduce((a, x) => a + n(x.keluar), 0))} trend={bln.map((x) => n(x.keluar))} tone=\"info\" />\n <StatCard\n label=\"Disposisi aktif\"\n icon={<Inbox />}\n loading={muat}\n value={formatNumber(n(ds.aktif))}\n hint={ds.rata_jam_selesai != null ? `rata-rata selesai ${formatNumber(n(ds.rata_jam_selesai))} jam` : undefined}\n tone={n(ds.lewat_batas) > 0 ? 'warning' : 'neutral'}\n />\n <StatCard\n label=\"Dokumen kedaluwarsa\"\n icon={<FileClock />}\n loading={muat}\n value={formatNumber(n(dk.kedaluwarsa))}\n hint={`${formatNumber(n(dk.akan_kedaluwarsa_90_hari))} lagi dalam 90 hari`}\n tone={n(dk.kedaluwarsa) > 0 ? 'danger' : 'neutral'}\n />\n </KartuRingkas>\n );\n}\n/** Surat masuk vs keluar per bulan. */\nexport const SuratPerBulan = buatWidget('SuratPerBulan', useLaporanArsip, { title: 'Surat per bulan', span: 2 }, (d, muat) => {\n const bln = d?.surat_per_bulan ?? [];\n return (\n <GroupedBarChart\n loading={muat}\n labels={bln.map((x) => BULAN[x.bulan - 1] ?? String(x.bulan))}\n series={[\n { label: 'Masuk', values: bln.map((x) => n(x.masuk)) },\n { label: 'Keluar', values: bln.map((x) => n(x.keluar)) },\n ]}\n />\n );\n});\n/** Disposisi lewat batas, retensi jatuh tempo, peminjaman. */\nexport const TindakanArsip = buatWidget('TindakanArsip', useLaporanArsip, { title: 'Perlu tindakan' }, (d, muat) => (\n <ActionList\n loading={muat}\n items={[\n { label: 'Disposisi lewat batas waktu', count: n(d?.disposisi?.lewat_batas), tone: 'danger', icon: <TriangleAlert /> },\n { label: 'Jatuh tempo pindah ke inaktif', count: n(d?.retensi_jatuh_tempo?.pemindahan), icon: <Archive /> },\n { label: 'Jatuh tempo musnah/serah', count: n(d?.retensi_jatuh_tempo?.pemusnahan_penyerahan), icon: <Archive /> },\n { label: 'Peminjaman arsip aktif', count: n(d?.peminjaman_aktif), tone: 'info', icon: <BookOpenCheck /> },\n ]}\n />\n));\n/** Klasifikasi surat terbanyak tahun ini. */\nexport const KlasifikasiSurat = buatWidget('KlasifikasiSurat', useLaporanArsip, { title: 'Klasifikasi terbanyak', span: 2 }, (d, muat) => (\n <BarList loading={muat} limit={8} items={(d?.surat_per_klasifikasi ?? []).map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: x.kode }))} />\n));\n/** Surat per status (masuk dan keluar digabung). */\nexport const StatusSurat = buatWidget('StatusSurat', useLaporanArsip, { title: 'Status surat' }, (d, muat) => {\n const m = new Map<string, number>();\n (d?.surat_per_status ?? []).forEach((x) => m.set(x.status, (m.get(x.status) ?? 0) + n(x.jumlah)));\n return <DonutChart loading={muat} size={128} centerLabel=\"surat\" data={[...m].sort((a, b) => b[1] - a[1]).map(([k, v]) => ({ label: judulKunci(k), value: v }))} />;\n});\n\n/** Dasbor arsip lengkap. */\nexport function DasborArsip({ unitId, tahun, turunan, title = 'Arsip & persuratan', description, actions, className }: DasborBaseProps & KueriArsip) {\n const k = { unitId, tahun, turunan };\n const r = useLaporanArsip(k);\n return (\n <KerangkaDasbor title={title} description={description ?? (r.data ? `Tahun ${r.data.tahun}` : undefined)} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanArsip {...k} />\n <DashboardGrid>\n <SuratPerBulan {...k} />\n <TindakanArsip {...k} />\n <KlasifikasiSurat {...k} />\n <StatusSurat {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Humas\ninterface KontenRingkas {\n jenis: string;\n id: number;\n judul: string;\n situs?: string | null;\n updated_at?: string;\n terbit_pada?: string;\n tayang?: number;\n aksi?: string;\n username?: string;\n waktu?: string;\n}\nexport interface DataHumas {\n jumlah: Record<string, Partial<Record<'draf' | 'review' | 'terbit' | 'arsip', Angka>>>;\n terjadwal: Angka;\n pesan_baru: Angka;\n antrean_review: KontenRingkas[];\n terjadwal_daftar: KontenRingkas[];\n tayang_harian: Array<{ tanggal: string; tayang: Angka }>;\n tayang_total: Angka;\n populer: KontenRingkas[];\n aktivitas: KontenRingkas[];\n topik?: Array<{ kode: string; nama: string; warna?: string | null; jumlah: Angka }>;\n}\nexport interface KueriHumas {\n situs?: string;\n /** Rentang tayangan (7–90 hari). Bawaan 30. */\n hari?: number;\n /** Tautan ke editor konten. */\n hrefKonten?: (k: { jenis: string; id: number }) => string;\n}\n/** GET /v1/humas/ringkasan. */\nexport function useRingkasanHumas({ situs, hari = 30 }: KueriHumas) {\n const q = { situs, hari: String(hari) };\n return useSiakadQuery<DataHumas>(['humas-ringkasan', q], (s, signal) => s.humas.getRingkasan(q, { signal }) as never, { staleTime: 60_000 });\n}\nconst AKSI_HUMAS: Record<string, string> = { buat: 'membuat', ubah: 'mengubah', terbit: 'menerbitkan', review: 'mengajukan review', arsip: 'mengarsipkan', hapus: 'menghapus', pulihkan: 'memulihkan' };\nconst totalHumas = (d: DataHumas | undefined, key: 'draf' | 'review' | 'terbit') => Object.values(d?.jumlah ?? {}).reduce((a, x) => a + n(x[key]), 0);\n\n/** Kartu angka redaksi: tayangan, terbit, review, terjadwal, pesan baru. */\nexport function RingkasanHumas({ className, ...k }: KueriHumas & { className?: string }) {\n const r = useRingkasanHumas(k);\n const d = r.data;\n const muat = muatDari(r);\n const hari = k.hari ?? 30;\n return (\n <KartuRingkas q={[r]} min={180} className={className}>\n <StatCard label=\"Tayangan\" icon={<Newspaper />} loading={muat} value={formatNumber(n(d?.tayang_total))} hint={`${hari} hari terakhir`} trend={(d?.tayang_harian ?? []).map((x) => n(x.tayang))} />\n <StatCard label=\"Konten terbit\" icon={<BadgeCheck />} loading={muat} value={formatNumber(totalHumas(d, 'terbit'))} tone=\"success\" />\n <StatCard\n label=\"Menunggu review\"\n icon={<ClipboardCheck />}\n loading={muat}\n value={formatNumber(totalHumas(d, 'review'))}\n tone={totalHumas(d, 'review') > 0 ? 'warning' : 'neutral'}\n hint={`${formatNumber(totalHumas(d, 'draf'))} draf`}\n />\n <StatCard label=\"Terjadwal\" icon={<CalendarClock />} loading={muat} value={formatNumber(n(d?.terjadwal))} tone=\"info\" />\n <StatCard label=\"Pesan baru\" icon={<MessageSquare />} loading={muat} value={formatNumber(n(d?.pesan_baru))} tone={n(d?.pesan_baru) > 0 ? 'warning' : 'neutral'} />\n </KartuRingkas>\n );\n}\n/** Tayangan portal per hari. */\nexport const TayanganHarian = buatWidget('TayanganHarian', useRingkasanHumas, { title: 'Tayangan harian', span: 2 }, (d, muat) => {\n const seri = d?.tayang_harian ?? [];\n return (\n <LineChart\n loading={muat}\n labels={seri.map((x) => tglPendek(x.tanggal))}\n titles={seri.map((x) => formatDate(x.tanggal, 'long'))}\n series={[{ label: 'Tayangan', values: seri.map((x) => n(x.tayang)) }]}\n />\n );\n});\n/** Konten paling banyak dibaca dalam rentang hari. */\nexport const KontenTerpopuler = buatWidget('KontenTerpopuler', useRingkasanHumas, { title: 'Terpopuler' }, (d, muat, q) => (\n <BarList loading={muat} limit={6} items={(d?.populer ?? []).map((k) => ({ label: k.judul, value: n(k.tayang), secondary: judulKunci(k.jenis), href: q.hrefKonten?.(k) }))} />\n));\n/** Konten yang menunggu review redaktur. */\nexport const AntreanReview = buatWidget('AntreanReview', useRingkasanHumas, { title: 'Antrean review' }, (d, muat, q) => (\n <ActivityFeed\n loading={muat}\n empty=\"Tidak ada konten yang menunggu review.\"\n items={(d?.antrean_review ?? [])\n .slice(0, 6)\n .map((k) => ({\n id: `${k.jenis}-${k.id}`,\n title: k.judul,\n href: q.hrefKonten?.(k),\n icon: <ClipboardCheck />,\n meta: [judulKunci(k.jenis), k.situs].filter(Boolean).join(' · '),\n time: k.updated_at ? formatRelative(k.updated_at) : undefined,\n }))}\n />\n));\n/** Konten terjadwal terbit. */\nexport const JadwalTerbit = buatWidget('JadwalTerbit', useRingkasanHumas, { title: 'Jadwal terbit' }, (d, muat, q) => (\n <ActivityFeed\n loading={muat}\n empty=\"Belum ada konten terjadwal.\"\n items={(d?.terjadwal_daftar ?? [])\n .slice(0, 6)\n .map((k) => ({\n id: `${k.jenis}-${k.id}`,\n title: k.judul,\n href: q.hrefKonten?.(k),\n icon: <CalendarClock />,\n meta: judulKunci(k.jenis),\n time: k.terbit_pada ? formatDate(k.terbit_pada, 'medium') : undefined,\n }))}\n />\n));\n/** Riwayat perubahan konten terbaru. */\nexport const AktivitasRedaksi = buatWidget('AktivitasRedaksi', useRingkasanHumas, { title: 'Aktivitas terbaru' }, (d, muat, q) => (\n <ActivityFeed\n loading={muat}\n items={(d?.aktivitas ?? [])\n .slice(0, 6)\n .map((k, i) => ({\n id: `${k.jenis}-${k.id}-${i}`,\n title: k.judul,\n href: q.hrefKonten?.(k),\n meta: `${k.username ?? 'Seseorang'} ${AKSI_HUMAS[k.aksi ?? ''] ?? k.aksi ?? ''}`,\n time: k.waktu ? formatRelative(k.waktu) : undefined,\n }))}\n />\n));\n\n/** Dasbor ruang redaksi lengkap. */\nexport function DasborHumas({ situs, hari = 30, hrefKonten, title = 'Ruang redaksi', description, actions, className }: DasborBaseProps & KueriHumas) {\n const k = { situs, hari, hrefKonten };\n const r = useRingkasanHumas(k);\n return (\n <KerangkaDasbor title={title} description={description ?? `Tayangan ${hari} hari terakhir`} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanHumas {...k} />\n <DashboardGrid>\n <TayanganHarian {...k} />\n <KontenTerpopuler {...k} />\n <AntreanReview {...k} />\n <JadwalTerbit {...k} />\n <AktivitasRedaksi {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ PMB\nexport interface StatistikPmb {\n akun_terdaftar: Angka;\n corong: Partial<Record<'pendaftaran' | 'draf' | 'diajukan' | 'perlu_perbaikan' | 'terverifikasi' | 'ditolak' | 'mengundurkan_diri' | 'bayar_formulir' | 'lulus' | 'daftar_ulang', Angka>>;\n per_prodi: Array<{ kode_prodi: string; nama_prodi: string | null; peminat: Angka; pilihan_pertama: Angka; lulus?: Angka; daftar_ulang?: Angka }>;\n per_sumber_informasi: Array<{ sumber: string; jumlah: Angka; diajukan?: Angka }>;\n per_referal?: Array<{ kode: string; nama: string; jenis?: string; jumlah: Angka; diajukan?: Angka }>;\n harian_30_hari: Array<{ tanggal: string; akun_mulai: Angka; diajukan: Angka }>;\n}\nexport interface KueriPmb {\n gelombangId?: number | string;\n}\n/** GET /v1/pmb/admin/statistik. */\nexport function useStatistikPmb({ gelombangId }: KueriPmb) {\n const q = { gelombang_id: gelombangId == null ? undefined : String(gelombangId) };\n return useSiakadQuery<StatistikPmb>(['pmb-statistik', q], (s, signal) => s.pmb.getAdminStatistik(q, { signal }) as never, { staleTime: 60_000 });\n}\n\n/** Kartu angka PMB: akun, formulir diajukan (7 hari vs 7 hari sebelumnya), perlu perbaikan, lulus, daftar ulang. */\nexport function RingkasanPmb({ className, ...k }: KueriPmb & { className?: string }) {\n const r = useStatistikPmb(k);\n const d = r.data;\n const muat = muatDari(r);\n const c = d?.corong ?? {};\n const h = d?.harian_30_hari ?? [];\n const tujuh = (key: 'akun_mulai' | 'diajukan', dari: number) => h.slice(Math.max(0, h.length - dari - 7), h.length - dari).reduce((a, x) => a + n(x[key]), 0);\n return (\n <KartuRingkas q={[r]} min={180} className={className}>\n <StatCard\n label=\"Akun terdaftar\"\n icon={<UserPlus />}\n loading={muat}\n value={formatNumber(n(d?.akun_terdaftar))}\n trend={h.map((x) => n(x.akun_mulai))}\n delta={ubah(tujuh('akun_mulai', 0), tujuh('akun_mulai', 7))}\n deltaLabel=\"7 hari terakhir\"\n />\n <StatCard\n label=\"Formulir diajukan\"\n icon={<Send />}\n loading={muat}\n value={formatNumber(n(c.diajukan))}\n trend={h.map((x) => n(x.diajukan))}\n delta={ubah(tujuh('diajukan', 0), tujuh('diajukan', 7))}\n deltaLabel=\"7 hari terakhir\"\n tone=\"info\"\n />\n <StatCard\n label=\"Perlu perbaikan\"\n icon={<TriangleAlert />}\n loading={muat}\n value={formatNumber(n(c.perlu_perbaikan))}\n tone={n(c.perlu_perbaikan) > 0 ? 'warning' : 'neutral'}\n hint=\"menunggu pendaftar\"\n />\n <StatCard\n label=\"Lulus seleksi\"\n icon={<BadgeCheck />}\n loading={muat}\n value={formatNumber(n(c.lulus))}\n tone=\"success\"\n hint={n(c.terverifikasi) ? `dari ${formatNumber(n(c.terverifikasi))} terverifikasi` : undefined}\n />\n <StatCard\n label=\"Daftar ulang\"\n icon={<GraduationCap />}\n loading={muat}\n value={formatNumber(n(c.daftar_ulang))}\n hint={n(c.lulus) ? `${formatPersen((n(c.daftar_ulang) / n(c.lulus)) * 100, 0)} dari yang lulus` : undefined}\n tone=\"success\"\n />\n </KartuRingkas>\n );\n}\n/** Corong akun → diajukan → terverifikasi → lulus → daftar ulang. */\nexport const CorongPmb = buatWidget('CorongPmb', useStatistikPmb, { title: 'Corong pendaftaran', description: 'Persentase konversi dari tahap sebelumnya' }, (d, muat) => (\n <Funnel\n loading={muat}\n stages={[\n { label: 'Akun dibuat', value: n(d?.akun_terdaftar) },\n { label: 'Formulir diajukan', value: n(d?.corong.diajukan) },\n { label: 'Terverifikasi', value: n(d?.corong.terverifikasi) },\n { label: 'Lulus seleksi', value: n(d?.corong.lulus) },\n { label: 'Daftar ulang', value: n(d?.corong.daftar_ulang) },\n ]}\n />\n));\n/** Akun baru dan formulir diajukan per hari (30 hari). */\nexport const PendaftarHarianPmb = buatWidget('PendaftarHarianPmb', useStatistikPmb, { title: 'Pendaftar harian', description: '30 hari terakhir', span: 2 }, (d, muat) => {\n const h = d?.harian_30_hari ?? [];\n return (\n <LineChart\n loading={muat}\n labels={h.map((x) => tglPendek(x.tanggal))}\n titles={h.map((x) => formatDate(x.tanggal, 'long'))}\n series={[\n { label: 'Akun baru', values: h.map((x) => n(x.akun_mulai)) },\n { label: 'Formulir diajukan', values: h.map((x) => n(x.diajukan)) },\n ]}\n />\n );\n});\n/** Peminat per prodi dan pilihan pertama. */\nexport const PeminatPerProdi = buatWidget('PeminatPerProdi', useStatistikPmb, { title: 'Peminat per prodi', description: 'Semua pilihan; pilihan pertama di kanan', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n limit={10}\n items={[...(d?.per_prodi ?? [])]\n .sort((a, b) => n(b.peminat) - n(a.peminat))\n .map((p) => ({ label: p.nama_prodi ?? p.kode_prodi, value: n(p.peminat), secondary: `${formatNumber(n(p.pilihan_pertama))} pilihan 1` }))}\n />\n));\n/** Dari mana pendaftar mengenal UNIPO. */\nexport const SumberInformasiPmb = buatWidget('SumberInformasiPmb', useStatistikPmb, { title: 'Sumber informasi' }, (d, muat) => (\n <DonutChart\n loading={muat}\n size={128}\n centerLabel=\"pendaftar\"\n data={[...(d?.per_sumber_informasi ?? [])].sort((a, b) => n(b.jumlah) - n(a.jumlah)).map((x) => ({ label: x.sumber, value: n(x.jumlah) }))}\n />\n));\n/** Kode referal teratas (sekolah, alumni, mitra). */\nexport const ReferalPmb = buatWidget('ReferalPmb', useStatistikPmb, { title: 'Referal teratas', span: 'full' }, (d, muat) => (\n <BarList\n loading={muat}\n limit={8}\n empty=\"Belum ada pendaftar lewat referal.\"\n items={[...(d?.per_referal ?? [])].sort((a, b) => n(b.jumlah) - n(a.jumlah)).map((x) => ({ label: x.nama, value: n(x.jumlah), secondary: `${x.kode} · ${formatNumber(n(x.diajukan))} diajukan` }))}\n />\n));\n\n/** Dasbor panitia PMB lengkap. */\nexport function DasborPmb({ gelombangId, title = 'Penerimaan mahasiswa baru', description, actions, className }: DasborBaseProps & KueriPmb) {\n const k = { gelombangId };\n const r = useStatistikPmb(k);\n return (\n <KerangkaDasbor title={title} description={description} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanPmb {...k} />\n <DashboardGrid>\n <CorongPmb {...k} />\n <SumberInformasiPmb {...k} />\n <PendaftarHarianPmb {...k} span=\"full\" />\n <PeminatPerProdi {...k} />\n {!!r.data?.per_referal?.length && <ReferalPmb {...k} span={1} />}\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n\n// ================================================================ Tracer study\nexport interface StatistikTracer {\n alumni: Angka;\n terlacak: Angka;\n persen_terlacak: Angka;\n per_status: Array<{ status: string | null; label: string; jumlah: Angka }>;\n per_tahun_lulus: Array<{ tahun: number; jumlah: Angka; terlacak: Angka }>;\n per_prodi: Array<{ kode_prodi: string; nama_prodi: string | null; jumlah: Angka; terlacak: Angka; bekerja_wirausaha_studi: Angka }>;\n instansi_teratas: Array<{ instansi: string; jumlah: Angka }>;\n lowongan_aktif?: Angka;\n}\nexport interface KueriTracer {\n /** Kode prodi. */\n prodi?: string;\n}\n/** GET /v1/tracer/statistik. */\nexport function useStatistikTracer({ prodi }: KueriTracer) {\n const q = { prodi };\n return useSiakadQuery<StatistikTracer>(['tracer-statistik', q], (s, signal) => s.tracer.getStatistik(q, { signal }) as never, { staleTime: 300_000 });\n}\nconst positifTracer = (d?: StatistikTracer) => (d?.per_status ?? []).filter((x) => x.status != null && ['1', '3', '4'].includes(String(x.status))).reduce((a, x) => a + n(x.jumlah), 0);\n\n/** Kartu angka tracer: alumni, terlacak, bekerja/wirausaha/studi, lowongan. */\nexport function RingkasanTracer({ className, ...k }: KueriTracer & { className?: string }) {\n const r = useStatistikTracer(k);\n const d = r.data;\n const muat = muatDari(r);\n const terlacak = n(d?.terlacak);\n const positif = positifTracer(d);\n return (\n <KartuRingkas q={[r]} className={className}>\n <StatCard label=\"Alumni\" icon={<GraduationCap />} loading={muat} value={formatNumber(n(d?.alumni))} tone=\"neutral\" />\n <StatCard\n label=\"Terlacak\"\n icon={<UserCheck />}\n loading={muat}\n value={formatPersen(n(d?.persen_terlacak), 0)}\n hint={`${formatNumber(terlacak)} alumni mengisi`}\n footer={!muat ? <Progress value={n(d?.persen_terlacak)} size=\"sm\" /> : undefined}\n />\n <StatCard\n label=\"Bekerja, wirausaha, atau studi\"\n icon={<Briefcase />}\n loading={muat}\n value={terlacak ? formatPersen((positif / terlacak) * 100, 0) : '–'}\n hint={`${formatNumber(positif)} dari yang terlacak`}\n tone=\"success\"\n />\n <StatCard label=\"Lowongan aktif\" icon={<Inbox />} loading={muat} value={formatNumber(n(d?.lowongan_aktif))} tone=\"info\" />\n </KartuRingkas>\n );\n}\n/** Status alumni terlacak (bekerja, wiraswasta, studi, mencari kerja, …). */\nexport const StatusAlumni = buatWidget('StatusAlumni', useStatistikTracer, { title: 'Status alumni terlacak' }, (d, muat) => (\n <DonutChart loading={muat} size={128} centerLabel=\"terlacak\" data={(d?.per_status ?? []).filter((x) => x.status != null).map((x) => ({ label: x.label, value: n(x.jumlah) }))} />\n));\n/** Alumni dan yang terlacak per tahun lulus. */\nexport const AlumniPerTahunLulus = buatWidget('AlumniPerTahunLulus', useStatistikTracer, { title: 'Per tahun lulus', description: 'Jumlah alumni dan yang terlacak', span: 2 }, (d, muat) => {\n const thn = [...(d?.per_tahun_lulus ?? [])].sort((a, b) => a.tahun - b.tahun).slice(-8);\n return (\n <GroupedBarChart\n loading={muat}\n labels={thn.map((x) => String(x.tahun))}\n series={[\n { label: 'Alumni', values: thn.map((x) => n(x.jumlah)) },\n { label: 'Terlacak', values: thn.map((x) => n(x.terlacak)), color: 'var(--u-chart-3)' },\n ]}\n />\n );\n});\n/** Persen alumni terlacak per prodi. */\nexport const KeterlacakanPerProdi = buatWidget('KeterlacakanPerProdi', useStatistikTracer, { title: 'Keterlacakan per prodi', span: 2 }, (d, muat) => (\n <BarList\n loading={muat}\n max={100}\n format={(v) => formatPersen(v, 0)}\n items={(d?.per_prodi ?? [])\n .map((p) => ({ label: p.nama_prodi ?? p.kode_prodi, value: n(p.jumlah) ? (n(p.terlacak) / n(p.jumlah)) * 100 : 0, secondary: `${formatNumber(n(p.terlacak))}/${formatNumber(n(p.jumlah))}` }))\n .sort((a, b) => b.value - a.value)}\n />\n));\n/** Instansi tempat alumni paling banyak bekerja. */\nexport const InstansiAlumni = buatWidget('InstansiAlumni', useStatistikTracer, { title: 'Instansi teratas' }, (d, muat) => (\n <BarList loading={muat} limit={8} items={(d?.instansi_teratas ?? []).map((x) => ({ label: x.instansi, value: n(x.jumlah) }))} />\n));\n\n/** Dasbor tracer study lengkap. */\nexport function DasborTracer({ prodi, title = 'Tracer study alumni', description, actions, className }: DasborBaseProps & KueriTracer) {\n const k = { prodi };\n const r = useStatistikTracer(k);\n return (\n <KerangkaDasbor title={title} description={description} actions={actions} error={r.error} onRetry={r.refetch} className={className}>\n <RingkasanTracer {...k} />\n <DashboardGrid>\n <StatusAlumni {...k} />\n <AlumniPerTahunLulus {...k} />\n <KeterlacakanPerProdi {...k} />\n <InstansiAlumni {...k} />\n </DashboardGrid>\n </KerangkaDasbor>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { BookOpen, Check, ChevronRight, Maximize2, CircleAlert, ClipboardList, FileText, GraduationCap, Info, Layers, ListChecks, Network, RefreshCw, Target, TriangleAlert } from 'lucide-react';\nimport { cn, dataFlag } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Alert, Empty, Progress, ProgressRing, Table, TableContainer } from '../components/display';\nimport { ActivityFeed, Panel, SegmentBar, StatCard, StatGrid } from '../components/charts';\nimport { Sheet } from '../components/overlays';\nimport { invalidateSiakad, pesanGalat, useOptionalSiakad, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/*\n * Widget Kurikulum OBE (/v1/kurikulum-obe, Permendiktisaintek 39/2025): daftar kurikulum, ringkasan & alur status,\n * validasi SN Dikti, profil lulusan, CPL per ranah, matriks pemetaan (profil–CPL, CPL–BK, CPL–MK, BK–MK) yang bisa diubah,\n * struktur MK per semester dengan batas SKS, CPMK & sub-CPMK, RPS, capaian CPL (prodi dan per mahasiswa),\n * status migrasi dari kurikulum lama, ekuivalensi MK, dan catatan peninjauan.\n */\n\n// ================================================================ Tipe\ntype Angka = number | string | null | undefined;\nconst n = (v: Angka) => (v == null || v === '' ? 0 : Number(v) || 0);\nconst daftar = (v: unknown): string[] =>\n Array.isArray(v)\n ? v.map((x) => (typeof x === 'object' && x ? String((x as { kode_mk?: string; kode?: string }).kode_mk ?? (x as { kode?: string }).kode ?? '') : String(x)))\n : typeof v === 'string' && v\n ? v.split(',')\n : [];\n\nexport type StatusKurikulum = 'draf' | 'diajukan' | 'disahkan' | 'berlaku' | 'arsip';\nexport interface Kurikulum {\n id: number;\n kode_prodi: string;\n nama_prodi?: string | null;\n kode_jenjang?: string | null;\n kode: string;\n nama: string;\n status: StatusKurikulum;\n versi?: number;\n sumber?: 'baru' | 'migrasi' | 'salinan';\n tahun_berlaku?: number | null;\n tahun_id_mulai?: string | null;\n regulasi?: string | null;\n no_sk?: string | null;\n tanggal_sk?: string | null;\n masa_tempuh?: number | null;\n sks_lulus?: Angka;\n sks_wajib?: Angka;\n sks_pilihan?: Angka;\n ipk_min_lulus?: Angka;\n jumlah_mk?: Angka;\n total_sks_mk?: Angka;\n jumlah_cpl?: Angka;\n jenjang?: { nama?: string; sks_min?: number | null; masa_tempuh?: number | null; batas_semester?: boolean } | null;\n ringkasan?: Partial<Record<'profil_lulusan' | 'cpl' | 'bahan_kajian' | 'mata_kuliah' | 'sks_wajib_mk' | 'sks_pilihan_mk' | 'cpmk' | 'mk_dengan_rps_disahkan', Angka>>;\n angkatan?: number[];\n transisi_status?: StatusKurikulum[];\n disahkan_at?: string | null;\n updated_at?: string | null;\n}\nexport interface MkKurikulum {\n id: number;\n kode_mk: string;\n nama: string;\n semester: number | null;\n sks: Angka;\n jenis: 'A' | 'B' | 'C' | 'D' | 'S' | 'W' | string;\n jumlah_cpmk?: Angka;\n cpl?: string[] | string | null;\n prasyarat?: unknown;\n status_rps?: string | null;\n modalitas?: string | null;\n deskripsi?: string | null;\n cpmk?: Cpmk[];\n}\nexport interface Cpmk {\n id: number;\n kode: string;\n deskripsi: string;\n target?: Angka;\n cpl?: Array<{ cpl_id: number; kode: string; bobot?: Angka }>;\n sub_cpmk?: Array<{ id: number; kode: string; deskripsi: string; indikator?: string | null }>;\n}\nexport type RanahCpl = 'sikap' | 'pengetahuan' | 'keterampilan_umum' | 'keterampilan_khusus';\nexport interface Cpl {\n id: number;\n kode: string;\n ranah: RanahCpl;\n kelompok_sn?: string | null;\n deskripsi: string;\n sumber?: string | null;\n target?: Angka;\n mata_kuliah?: Array<{ mk_id: number; kode_mk: string; nama: string; bobot?: Angka }>;\n}\nexport interface ProfilLulusan {\n id: number;\n kode: string;\n nama: string;\n deskripsi?: string | null;\n}\nexport interface BahanKajian {\n id: number;\n kode: string;\n nama: string;\n deskripsi?: string | null;\n}\nexport type NamaMatriks = 'profil-cpl' | 'cpl-bk' | 'cpl-mk' | 'bk-mk';\nexport type MatriksKurikulumData = Record<NamaMatriks, Array<Record<string, number>>>;\nexport interface ValidasiKurikulumData {\n ringkasan: {\n galat: number;\n peringatan: number;\n info: number;\n regulasi?: string;\n jenjang?: string;\n sks_wajib_mk?: Angka;\n sks_pilihan_mk?: Angka;\n jumlah_mk?: Angka;\n jumlah_cpl?: Angka;\n kelengkapan_persen?: Angka;\n siap_disahkan?: boolean;\n };\n temuan: Array<{ tingkat: 'galat' | 'peringatan' | 'info'; kode: string; pesan: string; pasal?: string | null }>;\n}\nexport interface CapaianCplData {\n angkatan?: number | null;\n sampai_tahun_id?: string | null;\n metode?: string | null;\n cpl: Array<{ cpl_id: number; kode: string; ranah: string; deskripsi: string; target: Angka; jumlah_mk: Angka; jumlah_mahasiswa: Angka; rata_rata: Angka; persen_tercapai: Angka }>;\n}\nexport interface CapaianMahasiswaData {\n mahasiswa: { nim: string; nama: string; kode_prodi: string; angkatan: number };\n kurikulum: { id: number; kode: string; nama: string; status: string };\n cpl: Array<{\n cpl_id: number;\n kode: string;\n ranah: string;\n deskripsi: string;\n target: Angka;\n nilai: Angka;\n tercapai: boolean | null;\n mk_sudah_dinilai: number;\n mk_total: number;\n mata_kuliah: Array<{ mk_id: number; kode_mk: string; nama: string; bobot: Angka; nilai: Angka }>;\n }>;\n}\nexport interface Rps {\n id: number;\n versi: number;\n status: 'draf' | 'disahkan' | 'arsip';\n tahun_id?: string | null;\n deskripsi?: string | null;\n materi_pokok?: string | null;\n pustaka_utama?: string[];\n pustaka_pendukung?: string[];\n dosen_pengampu?: string[];\n disahkan_at?: string | null;\n mata_kuliah?: { kode_mk?: string; nama?: string; sks?: Angka; semester?: number | null };\n cpl?: Array<{ kode: string; deskripsi: string }>;\n cpmk?: Cpmk[];\n pertemuan: Array<{\n pertemuan_ke: number;\n sampai_ke?: number | null;\n sub_cpmk_id?: number | null;\n materi?: string | null;\n indikator?: string | null;\n metode?: string | null;\n modalitas?: string | null;\n waktu_menit?: number | null;\n penugasan?: string | null;\n bobot?: Angka;\n ujian?: boolean;\n }>;\n evaluasi: Array<{ jenis_evaluasi: number; nama: string; bobot: Angka; komponen_siakad?: string | null; cpmk?: Array<{ cpmk_id: number; bobot: Angka }> }>;\n total_bobot_evaluasi?: Angka;\n}\nexport interface StatusMigrasiProdi {\n kode_prodi: string;\n nama_prodi: string;\n jenjang?: string;\n tahap: '1_belum' | '2_dilengkapi' | '3_disahkan' | '4_diterbitkan';\n lama?: { jumlah_semester: number; semester_terakhir?: string | null; mk_semester_terakhir?: number };\n impor_terakhir?: { tahun_id: string; waktu: string } | null;\n terbit_terakhir?: { tahun_id: string; waktu: string } | null;\n}\nexport interface Ekuivalensi {\n id: number;\n kode_mk_lama: string;\n nama_mk_lama?: string | null;\n sks_lama?: Angka;\n kode_mk?: string | null;\n nama_mk?: string | null;\n sks_mk?: Angka;\n jenis: 'setara' | 'gabung' | 'pecah' | 'dihapus';\n catatan?: string | null;\n}\nexport interface Peninjauan {\n id: number;\n jenis: string;\n judul: string;\n tanggal?: string | null;\n pelaksana?: string | null;\n ringkasan?: string | null;\n status?: 'rencana' | 'berjalan' | 'selesai';\n}\n\n// ================================================================ Label & warna\nexport const STATUS_KURIKULUM: Record<StatusKurikulum, { label: string; variant: BadgeVariant }> = {\n draf: { label: 'Draf', variant: 'neutral' },\n diajukan: { label: 'Diajukan', variant: 'warning' },\n disahkan: { label: 'Disahkan', variant: 'info' },\n berlaku: { label: 'Berlaku', variant: 'success' },\n arsip: { label: 'Arsip', variant: 'outline' },\n};\nexport const RANAH_CPL: Record<RanahCpl, string> = { sikap: 'Sikap', pengetahuan: 'Pengetahuan', keterampilan_umum: 'Keterampilan umum', keterampilan_khusus: 'Keterampilan khusus' };\nexport const JENIS_MK: Record<string, string> = { A: 'Wajib', B: 'Pilihan', C: 'Wajib peminatan', D: 'Pilihan peminatan', S: 'Tugas akhir', W: 'Wajib nasional' };\nconst JENIS_EVALUASI: Record<number, string> = { 1: 'Aktivitas partisipatif', 2: 'Hasil proyek', 3: 'Kognitif: tugas', 4: 'Kognitif: ujian' };\nconst AKSI_STATUS: Record<StatusKurikulum, string> = { draf: 'Kembalikan ke draf', diajukan: 'Ajukan', disahkan: 'Sahkan', berlaku: 'Berlakukan', arsip: 'Arsipkan' };\n/** Batas SKS per semester (Pasal 17–18): 20 untuk semester 1–2, 24 sesudahnya. */\nexport const maksSksSemester = (s: number) => (s <= 2 ? 20 : 24);\n\nexport function StatusKurikulumBadge({ status }: { status: StatusKurikulum | string }) {\n const s = STATUS_KURIKULUM[status as StatusKurikulum] ?? { label: status, variant: 'neutral' as const };\n return (\n <Badge variant={s.variant} dot>\n {s.label}\n </Badge>\n );\n}\n\nfunction Galat({ q }: { q: QueryState<unknown> }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(q.error, { kode: false })}<KodeLaporan error={q.error} /></span>\n <Button size=\"sm\" variant=\"ghost\" onClick={q.refetch}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\nconst muatDari = (q: QueryState<unknown>) => q.loading && !q.data;\n\n// ================================================================ Hook data\nconst P = '/v1/kurikulum-obe';\nconst opt = { staleTime: 60_000 };\nexport function useDaftarKurikulum(q: { prodi?: string; status?: StatusKurikulum; q?: string } = {}) {\n return useSiakadQuery<Kurikulum[]>(['kur-daftar', q], (s, signal) => s.kurikulumObe.getKurikulum({ ...q, per_page: 100 } as never, { signal }) as never, opt);\n}\nexport function useKurikulum(id: number | string | undefined) {\n return useSiakadQuery<Kurikulum>(['kur', String(id)], (s, signal) => s.kurikulumObe.getKurikulumById(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useMkKurikulum(id: number | string | undefined, q: { semester?: string; jenis?: string } = {}) {\n return useSiakadQuery<MkKurikulum[]>(['kur', String(id), 'mk', q], (s, signal) => s.kurikulumObe.getKurikulumByIdMk(id!, q, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useCplKurikulum(id: number | string | undefined) {\n return useSiakadQuery<Cpl[]>(['kur', String(id), 'cpl'], (s, signal) => s.kurikulumObe.getKurikulumByIdCpl(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useProfilLulusan(id: number | string | undefined) {\n return useSiakadQuery<ProfilLulusan[]>(['kur', String(id), 'profil'], (s, signal) => s.kurikulumObe.getKurikulumByIdProfilLulusan(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useBahanKajian(id: number | string | undefined) {\n return useSiakadQuery<BahanKajian[]>(['kur', String(id), 'bk'], (s, signal) => s.kurikulumObe.getKurikulumByIdBahanKajian(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useMatriksKurikulum(id: number | string | undefined) {\n return useSiakadQuery<MatriksKurikulumData>(['kur', String(id), 'matriks'], (s, signal) => s.kurikulumObe.getKurikulumByIdMatriks(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useValidasiKurikulum(id: number | string | undefined) {\n return useSiakadQuery<ValidasiKurikulumData>(['kur', String(id), 'validasi'], (s, signal) => s.kurikulumObe.getKurikulumByIdValidasi(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function useCapaianCpl(id: number | string | undefined, q: { angkatan?: number; sampai?: string } = {}) {\n return useSiakadQuery<CapaianCplData>(['kur', String(id), 'capaian', q], (s, signal) => s.kurikulumObe.getKurikulumByIdCapaian(id!, q, { signal }) as never, {\n staleTime: 300_000,\n enabled: id != null,\n });\n}\nexport function useCapaianCplMahasiswa(nim: string | undefined, kurikulumId?: number) {\n return useSiakadQuery<CapaianMahasiswaData>(['kur-capaian-mhs', nim, kurikulumId], (s, signal) => s.kurikulumObe.getCapaianMahasiswaByNim(nim!, { kurikulum_id: kurikulumId }, { signal }) as never, {\n staleTime: 300_000,\n enabled: !!nim,\n });\n}\nexport function useMataKuliahObe(mkId: number | string | undefined) {\n return useSiakadQuery<MkKurikulum>(['kur-mk', String(mkId)], (s, signal) => s.kurikulumObe.getMkByMk(mkId!, {}, { signal }) as never, { ...opt, enabled: mkId != null });\n}\nexport function useRps(rpsId: number | string | undefined) {\n return useSiakadQuery<Rps>(['kur-rps', String(rpsId)], (s, signal) => s.kurikulumObe.getRpsByRps(rpsId!, {}, { signal }) as never, { ...opt, enabled: rpsId != null });\n}\nexport function useStatusMigrasiKurikulum() {\n return useSiakadQuery<StatusMigrasiProdi[]>(['kur-migrasi-status'], (s, signal) => s.kurikulumObe.getMigrasiStatus({}, { signal }) as never, opt);\n}\nexport function useEkuivalensi(id: number | string | undefined) {\n return useSiakadQuery<Ekuivalensi[]>(['kur', String(id), 'ekuivalensi'], (s, signal) => s.kurikulumObe.getKurikulumByIdEkuivalensi(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\nexport function usePeninjauan(id: number | string | undefined) {\n return useSiakadQuery<Peninjauan[]>(['kur', String(id), 'peninjauan'], (s, signal) => s.kurikulumObe.getKurikulumByIdPeninjauan(id!, {}, { signal }) as never, { ...opt, enabled: id != null });\n}\n\n// ================================================================ Daftar kurikulum\n/** Kartu satu kurikulum: kode, nama, prodi, status, versi, MK, SKS, CPL. */\nexport function KartuKurikulum({ data, href, onClick, className }: { data: Kurikulum; href?: string; onClick?: () => void; className?: string }) {\n const Tag = href ? 'a' : onClick ? 'button' : 'div';\n return (\n <Tag className={cn('u-kur-card', className)} {...(href ? { href } : onClick ? { type: 'button' as const, onClick } : {})}>\n <div className=\"u-kur-card-top\">\n <span className=\"u-kur-code\">{data.kode}</span>\n <StatusKurikulumBadge status={data.status} />\n </div>\n <p className=\"u-kur-card-title\">{data.nama}</p>\n <p className=\"u-kur-card-sub\">\n {[data.nama_prodi ?? data.kode_prodi, data.tahun_berlaku ? `berlaku ${data.tahun_berlaku}` : null, data.versi && data.versi > 1 ? `versi ${data.versi}` : null].filter(Boolean).join(' · ')}\n </p>\n <dl className=\"u-kur-card-stats\">\n <div>\n <dt>MK</dt>\n <dd>{formatNumber(n(data.jumlah_mk))}</dd>\n </div>\n <div>\n <dt>SKS</dt>\n <dd>\n {formatNumber(n(data.total_sks_mk))}\n {data.sks_lulus ? <small>/{formatNumber(n(data.sks_lulus))}</small> : null}\n </dd>\n </div>\n <div>\n <dt>CPL</dt>\n <dd>{formatNumber(n(data.jumlah_cpl))}</dd>\n </div>\n </dl>\n </Tag>\n );\n}\n\n/** Daftar kurikulum OBE per prodi (kartu). */\nexport function DaftarKurikulum({\n prodi,\n status,\n href,\n onPilih,\n className,\n}: {\n prodi?: string;\n status?: StatusKurikulum;\n /** Tautan per kurikulum. */ href?: (k: Kurikulum) => string;\n onPilih?: (k: Kurikulum) => void;\n className?: string;\n}) {\n const q = useDaftarKurikulum({ prodi, status });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q))\n return (\n <div className={cn('u-kur-grid', className)}>\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} style={{ height: 156 }} />\n ))}\n </div>\n );\n if (!q.data?.length) return <Empty icon={<BookOpen />} title=\"Belum ada kurikulum OBE\" description=\"Buat kurikulum baru atau impor dari kurikulum lama lewat menu migrasi.\" bordered />;\n return (\n <div className={cn('u-kur-grid', className)}>\n {q.data.map((k) => (\n <KartuKurikulum key={k.id} data={k} href={href?.(k)} onClick={onPilih ? () => onPilih(k) : undefined} />\n ))}\n </div>\n );\n}\n\n// ================================================================ Ringkasan & alur status\n/** Kepala kurikulum: identitas, status, SKS terhadap syarat lulus, kelengkapan OBE, dan tombol alur status. */\nexport function RingkasanKurikulum({\n kurikulumId,\n bolehUbahStatus,\n onStatusBerubah,\n className,\n}: {\n kurikulumId: number | string;\n /** Tampilkan tombol transisi status (butuh scope kurikulum:write). */ bolehUbahStatus?: boolean;\n onStatusBerubah?: (k: Kurikulum) => void;\n className?: string;\n}) {\n const q = useKurikulum(kurikulumId);\n const siakad = useOptionalSiakad();\n const [sibuk, setSibuk] = React.useState<string | null>(null);\n const [galat, setGalat] = React.useState<string | null>(null);\n if (q.error) return <Galat q={q} />;\n const k = q.data;\n const r = k?.ringkasan ?? {};\n const muat = muatDari(q);\n const sksMk = n(r.sks_wajib_mk) + n(r.sks_pilihan_mk);\n const syarat = n(k?.sks_lulus) || n(k?.jenjang?.sks_min);\n const rpsPersen = n(r.mata_kuliah) ? (n(r.mk_dengan_rps_disahkan) / n(r.mata_kuliah)) * 100 : 0;\n const ubah = async (status: StatusKurikulum) => {\n if (!siakad || !k) return;\n setSibuk(status);\n setGalat(null);\n try {\n const res = await siakad.kurikulumObe.postKurikulumByIdStatus(k.id, { status } as never);\n invalidateSiakad('kur');\n onStatusBerubah?.(res.data as unknown as Kurikulum);\n } catch (e) {\n setGalat(pesanGalat(e));\n } finally {\n setSibuk(null);\n }\n };\n return (\n <section className={cn('u-kur-head', className)}>\n <div className=\"u-kur-head-main\">\n {muat ? (\n <Skeleton style={{ height: 64, width: '60%' }} />\n ) : (\n <>\n <div className=\"u-kur-head-meta\">\n <span className=\"u-kur-code\">{k?.kode}</span>\n <StatusKurikulumBadge status={k!.status} />\n {k?.sumber === 'migrasi' && <Badge variant=\"outline\">Dari kurikulum lama</Badge>}\n </div>\n <h2 className=\"u-kur-head-title\">{k?.nama}</h2>\n <p className=\"u-kur-head-sub\">{[k?.nama_prodi, k?.jenjang?.nama, k?.tahun_berlaku ? `Berlaku ${k.tahun_berlaku}` : null, k?.no_sk ? `SK ${k.no_sk}` : null].filter(Boolean).join(' · ')}</p>\n {!!k?.angkatan?.length && <p className=\"u-kur-head-sub\">Dipakai angkatan {k.angkatan.join(', ')}</p>}\n </>\n )}\n {bolehUbahStatus && !!k?.transisi_status?.length && (\n <div className=\"u-kur-head-actions\">\n {k.transisi_status.map((t) => (\n <Button key={t} size=\"sm\" variant={t === 'draf' || t === 'arsip' ? 'outline' : 'primary'} loading={sibuk === t} disabled={!!sibuk} onClick={() => void ubah(t)}>\n {AKSI_STATUS[t] ?? t}\n </Button>\n ))}\n </div>\n )}\n {galat && (\n <p className=\"u-kur-error\" role=\"alert\">\n <CircleAlert aria-hidden /> {galat}\n </p>\n )}\n </div>\n <StatGrid min={150}>\n <StatCard\n label=\"SKS mata kuliah\"\n icon={<Layers />}\n loading={muat}\n value={formatNumber(sksMk)}\n hint={syarat ? `syarat lulus ${formatNumber(syarat)} SKS` : `${formatNumber(n(r.sks_wajib_mk))} wajib · ${formatNumber(n(r.sks_pilihan_mk))} pilihan`}\n tone={syarat && sksMk < syarat ? 'warning' : 'primary'}\n footer={!muat && syarat ? <Progress value={Math.min(100, (sksMk / syarat) * 100)} size=\"sm\" tone={sksMk < syarat ? 'warning' : 'success'} /> : undefined}\n />\n <StatCard label=\"Mata kuliah\" icon={<BookOpen />} loading={muat} value={formatNumber(n(r.mata_kuliah))} hint={`${formatNumber(n(r.cpmk))} CPMK`} tone=\"neutral\" />\n <StatCard\n label=\"CPL\"\n icon={<Target />}\n loading={muat}\n value={formatNumber(n(r.cpl))}\n hint={`${formatNumber(n(r.profil_lulusan))} profil lulusan · ${formatNumber(n(r.bahan_kajian))} bahan kajian`}\n tone=\"info\"\n />\n <StatCard\n label=\"RPS disahkan\"\n icon={<FileText />}\n loading={muat}\n value={formatPersen(rpsPersen, 0)}\n hint={`${formatNumber(n(r.mk_dengan_rps_disahkan))} dari ${formatNumber(n(r.mata_kuliah))} MK`}\n tone={rpsPersen >= 100 ? 'success' : 'warning'}\n footer={!muat ? <Progress value={rpsPersen} size=\"sm\" /> : undefined}\n />\n </StatGrid>\n </section>\n );\n}\n\n// ================================================================ Validasi\nconst IKON_TINGKAT = { galat: <CircleAlert />, peringatan: <TriangleAlert />, info: <Info /> };\n/** Validasi kurikulum terhadap SN Dikti dan kelengkapan OBE: persen kelengkapan, galat, peringatan, info beserta pasal. */\nexport function ValidasiKurikulum({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = useValidasiKurikulum(kurikulumId);\n const [tingkat, setTingkat] = React.useState<'semua' | 'galat' | 'peringatan' | 'info'>('semua');\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const d = q.data!;\n const r = d.ringkasan;\n const persen = n(r.kelengkapan_persen);\n const temuan = d.temuan.filter((t) => tingkat === 'semua' || t.tingkat === tingkat);\n return (\n <section className={cn('u-kur-validasi', className)}>\n <div className=\"u-kur-validasi-top\">\n <ProgressRing value={persen} size={84} thickness={8} tone={r.galat > 0 ? 'danger' : persen >= 100 ? 'success' : 'warning'} label={<b>{formatPersen(persen, 0)}</b>} />\n <div>\n <p className=\"u-kur-validasi-title\">{r.siap_disahkan ? 'Siap disahkan' : r.galat > 0 ? `${r.galat} galat perlu diperbaiki` : 'Belum lengkap'}</p>\n <p className=\"u-kur-validasi-sub\">{r.regulasi ?? 'Permendiktisaintek 39/2025'}</p>\n <div className=\"u-kur-filter\" role=\"group\" aria-label=\"Saring temuan\">\n {(['semua', 'galat', 'peringatan', 'info'] as const).map((t) => (\n <button key={t} type=\"button\" data-active={dataFlag(tingkat === t)} data-tingkat={t} onClick={() => setTingkat(t)}>\n {t === 'semua' ? 'Semua' : t.charAt(0).toUpperCase() + t.slice(1)}\n <span>{t === 'semua' ? d.temuan.length : n(r[t])}</span>\n </button>\n ))}\n </div>\n </div>\n </div>\n {temuan.length ? (\n <ul className=\"u-kur-temuan\">\n {temuan.map((t, i) => (\n <li key={i} data-tingkat={t.tingkat}>\n <span className=\"u-kur-temuan-icon\" aria-hidden>\n {IKON_TINGKAT[t.tingkat]}\n </span>\n <span className=\"u-kur-temuan-text\">\n {t.pesan}\n {t.pasal && <small>{t.pasal}</small>}\n </span>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"u-chart-empty\">\n <Check aria-hidden /> Tidak ada temuan.\n </p>\n )}\n </section>\n );\n}\n\n// ================================================================ Profil lulusan & CPL\n/** Profil lulusan sebagai kartu bernomor. */\nexport function DaftarProfilLulusan({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = useProfilLulusan(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 120 }} />;\n if (!q.data?.length) return <Empty icon={<GraduationCap />} title=\"Profil lulusan belum diisi\" bordered />;\n return (\n <ul className={cn('u-kur-profil', className)}>\n {q.data.map((p) => (\n <li key={p.id}>\n <span className=\"u-kur-code\">{p.kode}</span>\n <b>{p.nama}</b>\n {p.deskripsi && <p>{p.deskripsi}</p>}\n </li>\n ))}\n </ul>\n );\n}\n\n/** CPL dikelompokkan per ranah (sikap, pengetahuan, keterampilan umum, keterampilan khusus) dengan jumlah MK pendukung. */\nexport function DaftarCpl({ kurikulumId, onPilih, className }: { kurikulumId: number | string; onPilih?: (c: Cpl) => void; className?: string }) {\n const q = useCplKurikulum(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n if (!q.data?.length) return <Empty icon={<Target />} title=\"CPL belum diisi\" bordered />;\n return (\n <div className={cn('u-kur-cpl', className)}>\n {(Object.keys(RANAH_CPL) as RanahCpl[]).map((ranah) => {\n const isi = q.data!.filter((c) => c.ranah === ranah);\n if (!isi.length) return null;\n return (\n <section key={ranah} data-ranah={ranah}>\n <h4>\n {RANAH_CPL[ranah]} <span>{isi.length}</span>\n </h4>\n <ul>\n {isi.map((c) => {\n const mk = c.mata_kuliah?.length ?? 0;\n const Tag = onPilih ? 'button' : 'div';\n return (\n <li key={c.id}>\n <Tag className=\"u-kur-cpl-row\" {...(onPilih ? { type: 'button' as const, onClick: () => onPilih(c) } : {})}>\n <span className=\"u-kur-code\">{c.kode}</span>\n <span className=\"u-kur-cpl-desc\">{c.deskripsi}</span>\n <span className=\"u-kur-cpl-meta\" data-kosong={dataFlag(mk === 0)}>\n {mk === 0 ? 'Belum ada MK' : `${mk} MK`}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </section>\n );\n })}\n </div>\n );\n}\n\n// ================================================================ Matriks pemetaan\nconst MATRIKS: Record<NamaMatriks, { baris: 'profil' | 'cpl' | 'bk' | 'mk'; kolom: 'profil' | 'cpl' | 'bk' | 'mk'; kunciBaris: string; kunciKolom: string; judul: string }> = {\n 'profil-cpl': { baris: 'cpl', kolom: 'profil', kunciBaris: 'cpl_id', kunciKolom: 'profil_id', judul: 'CPL × profil lulusan' },\n 'cpl-bk': { baris: 'cpl', kolom: 'bk', kunciBaris: 'cpl_id', kunciKolom: 'bk_id', judul: 'CPL × bahan kajian' },\n 'cpl-mk': { baris: 'mk', kolom: 'cpl', kunciBaris: 'mk_id', kunciKolom: 'cpl_id', judul: 'Mata kuliah × CPL' },\n 'bk-mk': { baris: 'mk', kolom: 'bk', kunciBaris: 'mk_id', kunciKolom: 'bk_id', judul: 'Mata kuliah × bahan kajian' },\n};\n\n/**\n * Matriks pemetaan OBE sebagai tabel centang. Baris/kolom tanpa pasangan ditandai (mis. CPL yang belum didukung MK).\n * Dengan `editable`, klik sel menyimpan langsung lewat PUT /matriks/{nama} (tambah/hapus satu pasangan).\n */\nexport function MatriksKurikulum({ kurikulumId, jenis = 'cpl-mk', editable, className }: { kurikulumId: number | string; jenis?: NamaMatriks; editable?: boolean; className?: string }) {\n const m = useMatriksKurikulum(kurikulumId);\n const cpl = useCplKurikulum(kurikulumId);\n const profil = useProfilLulusan(kurikulumId);\n const bk = useBahanKajian(kurikulumId);\n const mk = useMkKurikulum(kurikulumId);\n const siakad = useOptionalSiakad();\n const [lokal, setLokal] = React.useState<Record<string, boolean>>({});\n const [galat, setGalat] = React.useState<string | null>(null);\n const def = MATRIKS[jenis];\n const sumber = { cpl, profil, bk, mk } as const;\n const semua = [m, sumber[def.baris], sumber[def.kolom]] as Array<QueryState<unknown>>;\n const err = semua.find((x) => x.error);\n React.useEffect(() => setLokal({}), [m.data]);\n if (err) return <Galat q={err} />;\n if (semua.some(muatDari)) return <Skeleton className={className} style={{ height: 260 }} />;\n const label = (x: { kode?: string; kode_mk?: string; nama?: string; deskripsi?: string }) => ({ kode: x.kode_mk ?? x.kode ?? '', nama: x.nama ?? x.deskripsi ?? '' });\n const baris = ((sumber[def.baris].data as Array<{ id: number }>) ?? []).map((x) => ({ id: x.id, ...label(x as never) }));\n const kolom = ((sumber[def.kolom].data as Array<{ id: number }>) ?? []).map((x) => ({ id: x.id, ...label(x as never) }));\n const ada = new Set((m.data?.[jenis] ?? []).map((p) => `${p[def.kunciBaris]}:${p[def.kunciKolom]}`));\n const cek = (b: number, k: number) => lokal[`${b}:${k}`] ?? ada.has(`${b}:${k}`);\n const jumlahBaris = (b: number) => kolom.filter((k) => cek(b, k.id)).length;\n const jumlahKolom = (k: number) => baris.filter((b) => cek(b.id, k)).length;\n const ganti = async (b: number, k: number) => {\n if (!siakad || !editable) return;\n const kunci = `${b}:${k}`;\n const baru = !cek(b, k);\n setLokal((l) => ({ ...l, [kunci]: baru }));\n setGalat(null);\n // Pasangan selalu ditulis dengan nama kolom API (kiri = kunci pertama nama matriks).\n const pasangan = { [def.kunciBaris]: b, [def.kunciKolom]: k };\n try {\n await siakad.request({ method: 'PUT', path: `${P}/kurikulum/${kurikulumId}/matriks/${jenis}`, body: baru ? { tambah: [pasangan] } : { hapus: [pasangan] } });\n invalidateSiakad('kur');\n } catch (e) {\n setLokal((l) => ({ ...l, [kunci]: !baru }));\n setGalat(pesanGalat(e));\n }\n };\n if (!baris.length || !kolom.length) return <Empty icon={<Network />} title=\"Matriks belum bisa diisi\" description=\"Isi dulu kedua sisi matriks (mis. CPL dan mata kuliah).\" bordered />;\n return (\n <div className={cn('u-matriks', className)}>\n {galat && (\n <Alert variant=\"danger\" title=\"Pemetaan gagal disimpan\">\n {galat}\n </Alert>\n )}\n <div className=\"u-matriks-scroll\" tabIndex={0} role=\"region\" aria-label={def.judul}>\n <table>\n <thead>\n <tr>\n <th scope=\"col\" className=\"u-matriks-corner\">\n {def.judul}\n </th>\n {kolom.map((k) => (\n <th key={k.id} scope=\"col\" title={k.nama} data-kosong={dataFlag(jumlahKolom(k.id) === 0)}>\n <span>{k.kode}</span>\n </th>\n ))}\n <th scope=\"col\" className=\"u-matriks-sum\">\n Σ\n </th>\n </tr>\n </thead>\n <tbody>\n {baris.map((b) => (\n <tr key={b.id} data-kosong={dataFlag(jumlahBaris(b.id) === 0)}>\n <th scope=\"row\" title={b.nama}>\n <span className=\"u-kur-code\">{b.kode}</span>\n <span className=\"u-matriks-nama\">{b.nama}</span>\n </th>\n {kolom.map((k) => {\n const on = cek(b.id, k.id);\n return (\n <td key={k.id}>\n {editable ? (\n <button type=\"button\" className=\"u-matriks-cell\" aria-pressed={on} aria-label={`${b.kode} – ${k.kode}`} onClick={() => void ganti(b.id, k.id)}>\n {on && <Check aria-hidden />}\n </button>\n ) : (\n <span className=\"u-matriks-cell\" data-on={dataFlag(on)} aria-label={on ? `${b.kode} – ${k.kode}` : undefined}>\n {on && <Check aria-hidden />}\n </span>\n )}\n </td>\n );\n })}\n <td className=\"u-matriks-sum\">{jumlahBaris(b.id)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <p className=\"u-dasbor-note\">Baris dan kolom bergaris kuning belum punya pasangan. {editable ? 'Klik sel untuk memetakan atau melepas.' : ''}</p>\n </div>\n );\n}\n\n// ================================================================ Struktur MK per semester\n/** Sebaran mata kuliah per semester dengan total SKS terhadap batas per semester, jenis MK, CPL, dan status RPS. */\nexport function StrukturKurikulum({ kurikulumId, onPilihMk, className }: { kurikulumId: number | string; onPilihMk?: (mk: MkKurikulum) => void; className?: string }) {\n const q = useMkKurikulum(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q))\n return (\n <div className={cn('u-struktur', className)}>\n {[0, 1, 2, 3].map((i) => (\n <Skeleton key={i} style={{ height: 280 }} />\n ))}\n </div>\n );\n const mk = q.data ?? [];\n if (!mk.length) return <Empty icon={<BookOpen />} title=\"Belum ada mata kuliah\" bordered />;\n const semester = [...new Set(mk.map((m) => m.semester ?? 0))].sort((a, b) => (a || 99) - (b || 99));\n return (\n <div className={cn('u-struktur-wrap', className)}>\n <div className=\"u-struktur\">\n {semester.map((s) => {\n const isi = mk.filter((m) => (m.semester ?? 0) === s);\n const sks = isi.reduce((a, m) => a + (m.jenis === 'B' || m.jenis === 'D' ? 0 : n(m.sks)), 0);\n const pilihan = isi.reduce((a, m) => a + (m.jenis === 'B' || m.jenis === 'D' ? n(m.sks) : 0), 0);\n const maks = s ? maksSksSemester(s) : 0;\n return (\n <section key={s} className=\"u-struktur-col\" data-lebih={dataFlag(!!maks && sks > maks)}>\n <header>\n <b>{s ? `Semester ${s}` : 'Pilihan bebas'}</b>\n <span>\n {formatNumber(sks)}\n {maks ? `/${maks}` : ''} SKS{pilihan ? ` + ${formatNumber(pilihan)} pilihan` : ''}\n </span>\n {!!maks && <Progress value={Math.min(100, (sks / maks) * 100)} size=\"sm\" tone={sks > maks ? 'danger' : 'primary'} />}\n </header>\n <ul>\n {isi.map((m) => {\n const cpl = daftar(m.cpl);\n const Tag = onPilihMk ? 'button' : 'div';\n return (\n <li key={m.id}>\n <Tag className=\"u-mk-card\" data-jenis={m.jenis} {...(onPilihMk ? { type: 'button' as const, onClick: () => onPilihMk(m) } : {})}>\n <span className=\"u-mk-card-top\">\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n <span className=\"u-mk-sks\">{formatNumber(n(m.sks))} SKS</span>\n </span>\n <span className=\"u-mk-card-title\">{m.nama}</span>\n <span className=\"u-mk-card-foot\">\n <span className=\"u-mk-jenis\">{JENIS_MK[m.jenis] ?? m.jenis}</span>\n {cpl.length > 0 ? <span title={cpl.join(', ')}>{cpl.length} CPL</span> : <span data-warn=\"\">tanpa CPL</span>}\n {m.status_rps === 'disahkan' ? (\n <span data-ok=\"\">RPS</span>\n ) : (\n <span data-warn=\"\" title={m.status_rps ? `RPS ${m.status_rps}` : 'RPS belum dibuat'}>\n RPS {m.status_rps ?? 'belum'}\n </span>\n )}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </section>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ================================================================ CPMK\n/** Satu mata kuliah: CPMK, sub-CPMK, dan CPL yang didukung beserta bobot. */\nexport function CpmkMataKuliah({ mkId, className }: { mkId: number | string; className?: string }) {\n const q = useMataKuliahObe(mkId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const m = q.data!;\n return (\n <section className={cn('u-cpmk', className)}>\n <header className=\"u-cpmk-head\">\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n <h3>{m.nama}</h3>\n <p>{[`${formatNumber(n(m.sks))} SKS`, m.semester ? `Semester ${m.semester}` : 'Pilihan bebas', JENIS_MK[m.jenis] ?? m.jenis, m.modalitas].filter(Boolean).join(' · ')}</p>\n {m.deskripsi && <p className=\"u-cpmk-desc\">{m.deskripsi}</p>}\n </header>\n {!m.cpmk?.length ? (\n <Empty icon={<ListChecks />} title=\"CPMK belum diisi\" />\n ) : (\n <ol className=\"u-cpmk-list\">\n {m.cpmk.map((c) => (\n <li key={c.id}>\n <div className=\"u-cpmk-row\">\n <span className=\"u-kur-code\">{c.kode}</span>\n <p>{c.deskripsi}</p>\n <span className=\"u-cpmk-cpl\">\n {(c.cpl ?? []).map((x) => (\n <Badge key={x.cpl_id} variant=\"secondary\" title={x.bobot != null ? `bobot ${x.bobot}` : undefined}>\n {x.kode}\n </Badge>\n ))}\n </span>\n </div>\n {!!c.sub_cpmk?.length && (\n <ul className=\"u-cpmk-sub\">\n {c.sub_cpmk.map((s) => (\n <li key={s.id}>\n <span className=\"u-kur-code\">{s.kode}</span>\n <span>\n {s.deskripsi}\n {s.indikator && <small>Indikator: {s.indikator}</small>}\n </span>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ol>\n )}\n </section>\n );\n}\n\n// ================================================================ RPS\n/** RPS lengkap: identitas, CPL & CPMK, rencana pertemuan per minggu, dan bobot evaluasi. */\nexport function RpsMataKuliah({ rpsId, className }: { rpsId: number | string; className?: string }) {\n const q = useRps(rpsId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 360 }} />;\n const r = q.data!;\n const mk = r.mata_kuliah ?? {};\n const subKode = new Map((r.cpmk ?? []).flatMap((c) => (c.sub_cpmk ?? []).map((s) => [s.id, s.kode] as const)));\n const totalEval = r.evaluasi.reduce((a, e) => a + n(e.bobot), 0);\n return (\n <article className={cn('u-rps', className)}>\n <header className=\"u-rps-head\">\n <div>\n <span className=\"u-kur-code\">{mk.kode_mk}</span>\n <h3>{mk.nama}</h3>\n <p>\n {[\n mk.sks != null ? `${formatNumber(n(mk.sks))} SKS` : null,\n mk.semester ? `Semester ${mk.semester}` : null,\n `Versi ${r.versi}`,\n r.dosen_pengampu?.length ? `Pengampu: ${r.dosen_pengampu.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' · ')}\n </p>\n </div>\n <Badge variant={r.status === 'disahkan' ? 'success' : r.status === 'draf' ? 'warning' : 'outline'} dot>\n {r.status === 'disahkan' ? `Disahkan${r.disahkan_at ? ' ' + formatDate(r.disahkan_at) : ''}` : r.status === 'draf' ? 'Draf' : 'Arsip'}\n </Badge>\n </header>\n {r.deskripsi && <p className=\"u-rps-desc\">{r.deskripsi}</p>}\n <div className=\"u-rps-grid\">\n <Panel title=\"CPMK\">\n <ol className=\"u-rps-cpmk\">\n {(r.cpmk ?? []).map((c) => (\n <li key={c.id}>\n <span className=\"u-kur-code\">{c.kode}</span>\n <span>{c.deskripsi}</span>\n </li>\n ))}\n </ol>\n </Panel>\n <Panel title=\"Bobot evaluasi\" description={totalEval !== 100 ? `Total ${formatNumber(totalEval)}%, seharusnya 100%` : 'Total 100%'}>\n <SegmentBar format={(v) => `${formatNumber(v)}%`} data={r.evaluasi.map((e) => ({ label: e.nama || JENIS_EVALUASI[e.jenis_evaluasi] || '-', value: n(e.bobot) }))} />\n </Panel>\n </div>\n <TableContainer>\n <Table density=\"compact\">\n <thead>\n <tr>\n <th style={{ width: 64 }}>Minggu</th>\n <th style={{ width: 96 }}>Sub-CPMK</th>\n <th>Materi & indikator</th>\n <th>Metode</th>\n <th style={{ width: 72, textAlign: 'right' }}>Bobot</th>\n </tr>\n </thead>\n <tbody>\n {r.pertemuan.map((p) => (\n <tr key={p.pertemuan_ke} data-ujian={dataFlag(p.ujian)}>\n <td>{p.sampai_ke && p.sampai_ke !== p.pertemuan_ke ? `${p.pertemuan_ke}–${p.sampai_ke}` : p.pertemuan_ke}</td>\n <td>{p.sub_cpmk_id ? <span className=\"u-kur-code\">{subKode.get(p.sub_cpmk_id) ?? p.sub_cpmk_id}</span> : '–'}</td>\n <td>\n {p.ujian ? <b>{p.materi ?? 'Ujian'}</b> : p.materi}\n {p.indikator && <small className=\"u-rps-ind\">{p.indikator}</small>}\n </td>\n <td>\n {p.metode}\n {p.modalitas && <small className=\"u-rps-ind\">{p.modalitas}</small>}\n </td>\n <td style={{ textAlign: 'right' }}>{p.bobot != null && n(p.bobot) > 0 ? `${formatNumber(n(p.bobot))}%` : ''}</td>\n </tr>\n ))}\n </tbody>\n </Table>\n </TableContainer>\n {!!r.pustaka_utama?.length && (\n <div className=\"u-rps-pustaka\">\n <h4>Pustaka utama</h4>\n <ol>\n {r.pustaka_utama.map((p, i) => (\n <li key={i}>{p}</li>\n ))}\n </ol>\n </div>\n )}\n </article>\n );\n}\n\n// ================================================================ Capaian CPL\nfunction BarisCpl({\n kode,\n deskripsi,\n nilai,\n target,\n kanan,\n status,\n}: {\n kode: string;\n deskripsi: string;\n nilai: number | null;\n target: number;\n kanan: React.ReactNode;\n status: 'tercapai' | 'belum' | 'kosong';\n}) {\n return (\n <li className=\"u-cpl-bar\" data-status={status}>\n <span className=\"u-kur-code\">{kode}</span>\n <span className=\"u-cpl-bar-main\">\n <span className=\"u-cpl-bar-desc\" title={deskripsi}>\n {deskripsi}\n </span>\n <span className=\"u-cpl-bar-track\" role=\"img\" aria-label={`${kode}: ${nilai == null ? 'belum ada nilai' : formatNumber(nilai, { maximumFractionDigits: 1 })} dari target ${target}`}>\n <span className=\"u-cpl-bar-fill\" style={{ width: `${Math.min(100, nilai ?? 0)}%` }} />\n <span className=\"u-cpl-bar-target\" style={{ left: `${Math.min(100, target)}%` }} />\n </span>\n </span>\n <span className=\"u-cpl-bar-val\">{kanan}</span>\n </li>\n );\n}\n\n/** Capaian CPL prodi per angkatan: rata-rata skor tiap CPL terhadap target dan persen mahasiswa yang mencapainya. */\nexport function CapaianCplKurikulum({ kurikulumId, angkatan, sampai, className }: { kurikulumId: number | string; angkatan?: number; sampai?: string; className?: string }) {\n const q = useCapaianCpl(kurikulumId, { angkatan, sampai });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 260 }} />;\n const d = q.data!;\n if (!d.cpl.length) return <Empty icon={<Target />} title=\"Belum ada capaian CPL\" description=\"Capaian muncul setelah nilai MK yang dipetakan ke CPL masuk.\" />;\n const tercapai = d.cpl.filter((c) => n(c.rata_rata) >= n(c.target)).length;\n return (\n <div className={cn('u-cpl-capaian', className)}>\n <p className=\"u-cpl-capaian-sum\">\n <b>{tercapai}</b> dari {d.cpl.length} CPL rata-ratanya mencapai target\n {d.angkatan ? ` · angkatan ${d.angkatan}` : ''}\n {d.cpl[0] ? ` · ${formatNumber(n(d.cpl[0].jumlah_mahasiswa))} mahasiswa` : ''}\n </p>\n <ul className=\"u-cpl-bars\">\n {d.cpl.map((c) => (\n <BarisCpl\n key={c.cpl_id}\n kode={c.kode}\n deskripsi={c.deskripsi}\n nilai={c.rata_rata == null ? null : n(c.rata_rata)}\n target={n(c.target)}\n status={c.rata_rata == null ? 'kosong' : n(c.rata_rata) >= n(c.target) ? 'tercapai' : 'belum'}\n kanan={\n <>\n <b>{c.rata_rata == null ? '–' : formatNumber(n(c.rata_rata), { maximumFractionDigits: 1 })}</b>\n <small>{formatPersen(n(c.persen_tercapai), 0)} mhs tercapai</small>\n </>\n }\n />\n ))}\n </ul>\n <p className=\"u-dasbor-note\">Garis tegak = target CPL. Skor 0–100 dihitung dari nilai MK yang dipetakan ke CPL, sesuai bobot pemetaan.</p>\n </div>\n );\n}\n\n/** Capaian CPL satu mahasiswa (untuk profil mahasiswa, dosen PA, atau SKPI). */\nexport function CapaianCplMahasiswa({ nim, kurikulumId, className }: { nim: string; kurikulumId?: number; className?: string }) {\n const q = useCapaianCplMahasiswa(nim, kurikulumId);\n const [buka, setBuka] = React.useState<number | null>(null);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 260 }} />;\n const d = q.data!;\n const dinilai = d.cpl.filter((c) => c.tercapai != null);\n const ok = d.cpl.filter((c) => c.tercapai).length;\n return (\n <div className={cn('u-cpl-capaian', className)}>\n <div className=\"u-cpl-mhs-head\">\n <ProgressRing value={d.cpl.length ? (ok / d.cpl.length) * 100 : 0} size={72} thickness={7} tone=\"success\" label={<b>{`${ok}/${d.cpl.length}`}</b>} />\n <div>\n <p className=\"u-kur-validasi-title\">{d.mahasiswa.nama}</p>\n <p className=\"u-kur-validasi-sub\">\n {d.mahasiswa.nim} · angkatan {d.mahasiswa.angkatan} · {d.kurikulum.nama}\n </p>\n <p className=\"u-kur-validasi-sub\">\n {ok} CPL tercapai, {dinilai.length - ok} belum, {d.cpl.length - dinilai.length} belum ada nilai\n </p>\n </div>\n </div>\n <ul className=\"u-cpl-bars\">\n {d.cpl.map((c) => (\n <React.Fragment key={c.cpl_id}>\n <BarisCpl\n kode={c.kode}\n deskripsi={c.deskripsi}\n nilai={c.nilai == null ? null : n(c.nilai)}\n target={n(c.target)}\n status={c.tercapai == null ? 'kosong' : c.tercapai ? 'tercapai' : 'belum'}\n kanan={\n <button type=\"button\" className=\"u-cpl-bar-more\" aria-expanded={buka === c.cpl_id} onClick={() => setBuka((b) => (b === c.cpl_id ? null : c.cpl_id))}>\n <b>{c.nilai == null ? '–' : formatNumber(n(c.nilai), { maximumFractionDigits: 1 })}</b>\n <small>\n {c.mk_sudah_dinilai}/{c.mk_total} MK\n </small>\n </button>\n }\n />\n {buka === c.cpl_id && (\n <li className=\"u-cpl-mk\">\n <ul>\n {c.mata_kuliah.map((m) => (\n <li key={m.mk_id}>\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n <span>{m.nama}</span>\n <b>{m.nilai == null ? 'belum dinilai' : formatNumber(n(m.nilai), { maximumFractionDigits: 1 })}</b>\n </li>\n ))}\n </ul>\n </li>\n )}\n </React.Fragment>\n ))}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Migrasi\nconst TAHAP = ['1_belum', '2_dilengkapi', '3_disahkan', '4_diterbitkan'] as const;\nconst LABEL_TAHAP = ['Belum mulai', 'Dilengkapi', 'Disahkan', 'Diterbitkan'];\n// Tahap berurutan: abu-abu → biru makin pekat → hijau saat sudah terbit.\nconst WARNA_TAHAP = ['color-mix(in oklab, var(--u-muted-foreground) 45%, var(--u-muted))', 'color-mix(in oklab, var(--u-primary) 45%, var(--u-card))', 'var(--u-primary)', 'var(--u-success)'];\n/** Kemajuan migrasi kurikulum lama ke OBE per prodi: belum → dilengkapi → disahkan → diterbitkan ke SIAKAD lama. */\nexport function StatusMigrasiKurikulum({ onPilihProdi, className }: { onPilihProdi?: (p: StatusMigrasiProdi) => void; className?: string }) {\n const q = useStatusMigrasiKurikulum();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n const data = q.data ?? [];\n const per = TAHAP.map((t) => data.filter((p) => p.tahap === t).length);\n return (\n <div className={cn('u-migrasi', className)}>\n <SegmentBar data={LABEL_TAHAP.map((l, i) => ({ label: l, value: per[i]!, color: WARNA_TAHAP[i] }))} format={(v) => `${v} prodi`} />\n <ul className=\"u-migrasi-list\">\n {data.map((p) => {\n const idx = TAHAP.indexOf(p.tahap);\n const Tag = onPilihProdi ? 'button' : 'div';\n return (\n <li key={p.kode_prodi}>\n <Tag className=\"u-migrasi-row\" {...(onPilihProdi ? { type: 'button' as const, onClick: () => onPilihProdi(p) } : {})}>\n <span className=\"u-migrasi-prodi\">\n <b>{p.nama_prodi}</b>\n <small>\n {[\n p.jenjang,\n p.lama?.jumlah_semester ? `${p.lama.jumlah_semester} semester data lama` : null,\n p.terbit_terakhir ? `terbit ${p.terbit_terakhir.tahun_id}` : p.impor_terakhir ? `impor ${p.impor_terakhir.tahun_id}` : null,\n ]\n .filter(Boolean)\n .join(' · ')}\n </small>\n </span>\n <span className=\"u-migrasi-steps\" aria-label={`Tahap: ${LABEL_TAHAP[idx]}`}>\n {LABEL_TAHAP.map((l, i) => (\n <span key={l} data-state={i <= idx ? 'done' : 'todo'} title={l} style={i <= idx ? { background: WARNA_TAHAP[idx] } : undefined} />\n ))}\n </span>\n <span className=\"u-migrasi-label\" data-tahap={p.tahap}>\n {LABEL_TAHAP[idx]}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Ekuivalensi & peninjauan\nconst JENIS_EKUIVALENSI: Record<Ekuivalensi['jenis'], { label: string; variant: BadgeVariant }> = {\n setara: { label: 'Setara', variant: 'success' },\n gabung: { label: 'Digabung', variant: 'info' },\n pecah: { label: 'Dipecah', variant: 'warning' },\n dihapus: { label: 'Dihapus', variant: 'danger' },\n};\n/** Tabel ekuivalensi MK kurikulum lama ke MK kurikulum baru (untuk konversi nilai mahasiswa lama). */\nexport function EkuivalensiKurikulum({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = useEkuivalensi(kurikulumId);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 200 }} />;\n if (!q.data?.length) return <Empty icon={<ClipboardList />} title=\"Belum ada ekuivalensi\" description=\"Buat otomatis dari kecocokan kode dan nama MK, lalu periksa satu per satu.\" bordered />;\n return (\n <TableContainer className={className}>\n <Table density=\"compact\">\n <thead>\n <tr>\n <th>MK lama</th>\n <th style={{ width: 56, textAlign: 'right' }}>SKS</th>\n <th style={{ width: 112 }}>Hubungan</th>\n <th>MK baru</th>\n <th style={{ width: 56, textAlign: 'right' }}>SKS</th>\n </tr>\n </thead>\n <tbody>\n {q.data.map((e) => (\n <tr key={e.id}>\n <td>\n <span className=\"u-kur-code\">{e.kode_mk_lama}</span> {e.nama_mk_lama}\n </td>\n <td style={{ textAlign: 'right' }}>{e.sks_lama != null ? formatNumber(n(e.sks_lama)) : '–'}</td>\n <td>\n <Badge variant={JENIS_EKUIVALENSI[e.jenis]?.variant ?? 'neutral'}>{JENIS_EKUIVALENSI[e.jenis]?.label ?? e.jenis}</Badge>\n </td>\n <td>\n {e.kode_mk ? (\n <>\n <span className=\"u-kur-code\">{e.kode_mk}</span> {e.nama_mk}\n </>\n ) : (\n <span className=\"u-muted\">Tidak ada padanan</span>\n )}\n </td>\n <td style={{ textAlign: 'right' }}>{e.sks_mk != null ? formatNumber(n(e.sks_mk)) : '–'}</td>\n </tr>\n ))}\n </tbody>\n </Table>\n </TableContainer>\n );\n}\n\nconst JENIS_PENINJAUAN: Record<string, string> = {\n evaluasi_tahunan: 'Evaluasi tahunan',\n peninjauan: 'Peninjauan kurikulum',\n audit_mutu: 'Audit mutu',\n masukan_pemangku: 'Masukan pemangku kepentingan',\n lainnya: 'Lainnya',\n};\n/** Linimasa evaluasi dan peninjauan kurikulum (bahan akreditasi dan siklus PPEPP). */\nexport function PeninjauanKurikulum({ kurikulumId, className }: { kurikulumId: number | string; className?: string }) {\n const q = usePeninjauan(kurikulumId);\n if (q.error) return <Galat q={q} />;\n return (\n <ActivityFeed\n className={className}\n loading={muatDari(q)}\n empty=\"Belum ada catatan peninjauan.\"\n items={(q.data ?? []).map((p) => ({\n id: p.id,\n title: p.judul,\n icon: p.status === 'selesai' ? <Check /> : p.status === 'berjalan' ? <RefreshCw /> : <ClipboardList />,\n meta: [JENIS_PENINJAUAN[p.jenis] ?? p.jenis, p.pelaksana, p.status === 'selesai' ? null : p.status].filter(Boolean).join(' · '),\n time: p.tanggal ? formatDate(p.tanggal) : undefined,\n }))}\n />\n );\n}\n\n// ================================================================ Tabel struktur per semester\n/** Detail satu MK kurikulum: ringkasan, prasyarat, CPL, lalu CPMK & sub-CPMK. Dipakai di baris terbuka dan popup. */\nexport function DetailMkKurikulum({ mk, judul, className }: { mk: MkKurikulum; judul?: boolean; className?: string }) {\n const cpl = daftar(mk.cpl);\n const prasyarat = daftar(mk.prasyarat);\n return (\n <div className={cn('u-tsk-detail', className)}>\n {judul && (\n <header className=\"u-tsk-detail-head\">\n <span className=\"u-kur-code\">{mk.kode_mk}</span>\n <h3>{mk.nama}</h3>\n <p>{[`${formatNumber(n(mk.sks))} SKS`, mk.semester ? `Semester ${mk.semester}` : 'Pilihan bebas'].join(' · ')}</p>\n {mk.deskripsi && <p className=\"u-tsk-detail-desc\">{mk.deskripsi}</p>}\n </header>\n )}\n {!judul && mk.deskripsi && <p className=\"u-tsk-detail-desc\">{mk.deskripsi}</p>}\n <dl className=\"u-tsk-detail-info\">\n <div>\n <dt>Jenis</dt>\n <dd>{JENIS_MK[mk.jenis] ?? mk.jenis}</dd>\n </div>\n <div>\n <dt>Modalitas</dt>\n <dd>{mk.modalitas ?? '–'}</dd>\n </div>\n <div>\n <dt>Prasyarat</dt>\n <dd>\n {prasyarat.length\n ? prasyarat.map((p) => (\n <span key={p} className=\"u-kur-code\">\n {p}\n </span>\n ))\n : 'Tidak ada'}\n </dd>\n </div>\n <div>\n <dt>CPL didukung</dt>\n <dd>\n {cpl.length ? (\n cpl.map((c) => (\n <Badge key={c} variant=\"secondary\">\n {c}\n </Badge>\n ))\n ) : (\n <span data-warn=\"\">Belum dipetakan</span>\n )}\n </dd>\n </div>\n </dl>\n <CpmkMataKuliah mkId={mk.id} />\n </div>\n );\n}\n\n/** DetailMkKurikulum dalam panel samping. */\nexport function SheetMkKurikulum({ mk, onOpenChange }: { mk: MkKurikulum | null | undefined; onOpenChange: (open: boolean) => void }) {\n return (\n <Sheet open={!!mk} onOpenChange={onOpenChange} title=\"Detail mata kuliah\" size=\"lg\" className=\"u-sheet-detail\">\n {mk && <DetailMkKurikulum mk={mk} judul />}\n </Sheet>\n );\n}\n\nexport interface TabelStrukturKurikulumProps {\n kurikulumId: number | string;\n /** Cara membuka detail MK: 'baris' (lipat di dalam tabel, bawaan), 'popup' (panel samping), atau 'keduanya'. */\n detail?: 'baris' | 'popup' | 'keduanya';\n /** Ganti perilaku klik MK sepenuhnya, mis. pindah ke halaman MK. */\n onPilihMk?: (mk: MkKurikulum) => void;\n /** Semester yang terbuka di awal (bawaan semua). */\n semesterTerbuka?: number[];\n /** ID MK yang detailnya terbuka di awal (mode baris). */\n mkTerbuka?: number[];\n /** Kotak cari kode/nama MK (bawaan true). */\n cari?: boolean;\n className?: string;\n}\n\n/**\n * Struktur kurikulum sebagai tabel dikelompokkan per semester: kepala semester bisa dilipat, total SKS terhadap batas,\n * dan detail tiap MK (CPMK, sub-CPMK, CPL, prasyarat) dibuka di baris atau di panel samping.\n */\nexport function TabelStrukturKurikulum({ kurikulumId, detail = 'baris', onPilihMk, semesterTerbuka, mkTerbuka, cari = true, className }: TabelStrukturKurikulumProps) {\n const q = useMkKurikulum(kurikulumId);\n const [tutup, setTutup] = React.useState<Set<number>>(new Set());\n const [buka, setBuka] = React.useState<Set<number>>(() => new Set(mkTerbuka));\n const [popup, setPopup] = React.useState<MkKurikulum | null>(null);\n const [kata, setKata] = React.useState('');\n const awal = React.useRef(false);\n const mk = q.data ?? [];\n const semester = [...new Set(mk.map((m) => m.semester ?? 0))].sort((a, b) => (a || 99) - (b || 99));\n React.useEffect(() => {\n if (awal.current || !semesterTerbuka || !semester.length) return;\n awal.current = true;\n setTutup(new Set(semester.filter((s) => !semesterTerbuka.includes(s))));\n }, [semester.join(','), semesterTerbuka]); // eslint-disable-line react-hooks/exhaustive-deps\n\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 420 }} />;\n if (!mk.length) return <Empty icon={<BookOpen />} title=\"Belum ada mata kuliah\" bordered />;\n\n const k = kata.trim().toLowerCase();\n const cocok = (m: MkKurikulum) => !k || m.kode_mk.toLowerCase().includes(k) || m.nama.toLowerCase().includes(k);\n const wajib = (m: MkKurikulum) => !(m.jenis === 'B' || m.jenis === 'D');\n const totalWajib = mk.filter(wajib).reduce((a, m) => a + n(m.sks), 0);\n const totalPilihan = mk.filter((m) => !wajib(m)).reduce((a, m) => a + n(m.sks), 0);\n const baris = detail === 'baris' || detail === 'keduanya';\n const pakaiPopup = detail === 'popup' || detail === 'keduanya';\n const klik = (m: MkKurikulum) => (onPilihMk ? onPilihMk(m) : baris ? setBuka((s) => toggle(s, m.id)) : setPopup(m));\n const semuaTutup = tutup.size === semester.length;\n\n return (\n <div className={cn('u-tsk', className)}>\n <div className=\"u-tsk-toolbar\">\n {cari && <input className=\"u-input\" data-size=\"sm\" type=\"search\" placeholder=\"Cari kode atau nama MK\" value={kata} onChange={(e) => setKata(e.target.value)} aria-label=\"Cari mata kuliah\" />}\n <span className=\"u-tsk-total\">\n {mk.length} MK · <b>{formatNumber(totalWajib)}</b> SKS wajib{totalPilihan ? ` · ${formatNumber(totalPilihan)} SKS pilihan` : ''}\n </span>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setTutup(semuaTutup ? new Set() : new Set(semester))}>\n <Layers /> {semuaTutup ? 'Buka semua' : 'Lipat semua'}\n </Button>\n </div>\n <div className=\"u-tabel-nilai-wrap\">\n <table className=\"u-tabel-nilai u-tsk-table\">\n <thead>\n <tr>\n <th aria-label=\"Buka\" />\n <th>Kode</th>\n <th>Mata kuliah</th>\n <th data-angka>SKS</th>\n <th>Jenis</th>\n <th>CPL</th>\n <th>RPS</th>\n {pakaiPopup && baris && <th aria-label=\"Aksi\" />}\n </tr>\n </thead>\n {semester.map((s) => {\n const isi = mk.filter((m) => (m.semester ?? 0) === s);\n const tampil = isi.filter(cocok);\n if (k && !tampil.length) return null;\n const sks = isi.filter(wajib).reduce((a, m) => a + n(m.sks), 0);\n const pilihan = isi.filter((m) => !wajib(m)).reduce((a, m) => a + n(m.sks), 0);\n const maks = s ? maksSksSemester(s) : 0;\n const terlipat = tutup.has(s) && !k;\n const kolom = pakaiPopup && baris ? 8 : 7;\n return (\n <tbody key={s} className=\"u-tsk-group\" data-terlipat={dataFlag(terlipat)}>\n <tr className=\"u-tsk-head\" data-lebih={dataFlag(!!maks && sks > maks)}>\n <td colSpan={kolom}>\n <button type=\"button\" aria-expanded={!terlipat} onClick={() => setTutup((t) => toggle(t, s))}>\n <ChevronRight className=\"u-tsk-chevron\" aria-hidden />\n <b>{s ? `Semester ${s}` : 'Pilihan bebas'}</b>\n <span className=\"u-tsk-head-meta\">\n {isi.length} MK · {formatNumber(sks)}\n {maks ? `/${maks}` : ''} SKS{pilihan ? ` + ${formatNumber(pilihan)} pilihan` : ''}\n </span>\n {!!maks && <Progress value={Math.min(100, (sks / maks) * 100)} size=\"sm\" tone={sks > maks ? 'danger' : 'primary'} className=\"u-tsk-progress\" />}\n </button>\n </td>\n </tr>\n {!terlipat &&\n tampil.map((m) => {\n const cpl = daftar(m.cpl);\n const terbuka = buka.has(m.id);\n return (\n <React.Fragment key={m.id}>\n <tr\n className=\"u-tsk-row\"\n data-terbuka={dataFlag(terbuka)}\n data-jenis={m.jenis}\n tabIndex={0}\n onClick={() => klik(m)}\n onKeyDown={(e) => (e.key === 'Enter' || e.key === ' ') && e.target === e.currentTarget && (e.preventDefault(), klik(m))}\n aria-expanded={baris && !onPilihMk ? terbuka : undefined}\n >\n <td data-tengah>{baris && !onPilihMk ? <ChevronRight className=\"u-tsk-chevron\" aria-hidden /> : null}</td>\n <td>\n <span className=\"u-kur-code\">{m.kode_mk}</span>\n </td>\n <td>\n <span className=\"u-tsk-nama\">{m.nama}</span>\n </td>\n <td data-angka>{formatNumber(n(m.sks))}</td>\n <td>\n <span className=\"u-mk-jenis\" data-jenis={m.jenis}>\n {JENIS_MK[m.jenis] ?? m.jenis}\n </span>\n </td>\n <td>{cpl.length ? <span title={cpl.join(', ')}>{cpl.length} CPL</span> : <span className=\"u-tsk-warn\">belum</span>}</td>\n <td>\n {m.status_rps === 'disahkan' ? (\n <Badge variant=\"success\">Disahkan</Badge>\n ) : (\n <Badge variant=\"warning\">{m.status_rps ? m.status_rps[0]!.toUpperCase() + m.status_rps.slice(1) : 'Belum'}</Badge>\n )}\n </td>\n {pakaiPopup && baris && (\n <td data-tengah onClick={(e) => e.stopPropagation()}>\n <Button variant=\"ghost\" size=\"sm\" iconOnly aria-label={`Detail ${m.nama}`} onClick={() => setPopup(m)}>\n <Maximize2 />\n </Button>\n </td>\n )}\n </tr>\n {baris && terbuka && !onPilihMk && (\n <tr className=\"u-tsk-expand\">\n <td colSpan={kolom}>\n <DetailMkKurikulum mk={m} />\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n })}\n </tbody>\n );\n })}\n </table>\n </div>\n {pakaiPopup && <SheetMkKurikulum mk={popup} onOpenChange={(o) => !o && setPopup(null)} />}\n </div>\n );\n}\nfunction toggle<T>(s: Set<T>, v: T): Set<T> {\n const x = new Set(s);\n if (x.has(v)) x.delete(v);\n else x.add(v);\n return x;\n}\n","'use client';\nimport * as React from 'react';\nimport { BellDot, BookOpen, CalendarClock, ClipboardCheck, FileQuestion, ListTodo, RefreshCw, UserCheck, Video } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen, formatTime } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Empty, Progress, ProgressRing } from '../components/display';\nimport { StatCard, StatGrid } from '../components/charts';\nimport { pesanGalat, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\n\n/*\n * Widget LMS (/v1/lms) untuk e-learning: ringkasan beranda, kartu kelas dengan sampul abstrak dan progres,\n * tugas mendatang dengan hitung mundur tenggat, kuis yang sedang dibuka, agenda (tugas, kuis, kelas daring, presensi),\n * dan progres penyelesaian per mahasiswa untuk pengajar.\n */\n\n// ================================================================ Tipe\ntype Angka = number | string | null | undefined;\nconst n = (v: Angka) => (v == null || v === '' ? 0 : Number(v) || 0);\n\nexport type PeranKelas = 'pengajar' | 'asisten' | 'mahasiswa' | 'pengamat' | 'pengelola' | string;\nexport interface KelasLms {\n id: number;\n idj?: number | null;\n tahun_id?: string | null;\n kode_prodi?: string | null;\n kode_mk?: string | null;\n kelas?: string | null;\n judul: string;\n ringkasan?: string | null;\n format?: 'mingguan' | 'topik';\n status: 'draf' | 'aktif' | 'selesai' | 'arsip';\n mulai?: string | null;\n selesai?: string | null;\n sampul_url?: string | null;\n peran?: PeranKelas | null;\n pengajar?: string | null;\n jumlah_peserta?: Angka;\n}\nexport interface TugasMendatangItem {\n id: number;\n kelas_id: number;\n kelas: string;\n judul: string;\n tenggat: string;\n status_jawaban?: 'draf' | 'dikumpulkan' | 'dinilai' | 'dikembalikan' | null;\n}\nexport interface KuisTerbukaItem {\n id: number;\n kelas_id: number;\n kelas: string;\n judul: string;\n mulai?: string | null;\n selesai?: string | null;\n}\nexport interface LmsSayaData {\n pengguna?: { username?: string; nama?: string; level?: string };\n jumlah_kelas?: number;\n notifikasi_belum_dibaca?: number;\n tugas_mendatang?: TugasMendatangItem[];\n kuis_terbuka?: KuisTerbukaItem[];\n /** Hanya pengajar: jawaban tugas yang menunggu dinilai dan kuis yang perlu dikoreksi. */\n perlu_dinilai?: { tugas?: number; kuis?: number } | null;\n}\nexport interface ProgresMahasiswa {\n nim: string;\n nama?: string | null;\n materi_selesai: number;\n tugas_dikumpulkan: number;\n kuis_dikerjakan: number;\n selesai: number;\n total: number;\n persen: number | null;\n}\nexport interface ProgresKelasData {\n total_aktivitas: { materi_wajib: number; tugas: number; kuis: number };\n mahasiswa: ProgresMahasiswa[];\n}\nexport type JenisAgendaLms = 'tugas' | 'kuis' | 'konferensi' | 'presensi';\nexport interface AgendaLmsItem {\n jenis: JenisAgendaLms;\n id: number;\n kelas_id: number;\n kelas: string;\n judul: string;\n waktu: string;\n selesai?: string | null;\n tautan?: string;\n}\n\n// ================================================================ Hook data\nconst opt = { staleTime: 60_000 };\nexport function useLmsSaya() {\n return useSiakadQuery<LmsSayaData>(['lms-saya'], (s, signal) => s.lms.getSaya({}, { signal }) as never, opt);\n}\nexport function useKelasLms(q: { status?: KelasLms['status']; tahun_id?: string; q?: string } = {}) {\n return useSiakadQuery<KelasLms[]>(['lms-kelas', q], (s, signal) => s.lms.getKelas({ per_page: 50, ...q } as never, { signal }) as never, opt);\n}\nexport function useProgresKelas(kelasId: number | string | undefined) {\n return useSiakadQuery<ProgresKelasData>(['lms-progres', String(kelasId)], (s, signal) => s.lms.getKelasByIdProgres(kelasId!, {}, { signal }) as never, { ...opt, enabled: kelasId != null });\n}\nexport function useAnggotaKelas(kelasId: number | string | undefined, aktif = true) {\n return useSiakadQuery<Array<{ username: string; nama?: string | null; peran: PeranKelas }>>(\n ['lms-peserta', String(kelasId)],\n (s, signal) => s.lms.getKelasByIdPeserta(kelasId!, {}, { signal }) as never,\n {\n ...opt,\n enabled: kelasId != null && aktif,\n },\n );\n}\nexport function useKalenderLms(q: { dari?: string; sampai?: string; kelas_id?: number } = {}) {\n return useSiakadQuery<AgendaLmsItem[]>(['lms-kalender', q], (s, signal) => s.lms.getKalender(q as never, { signal }) as never, opt);\n}\n\n// ================================================================ Bantuan\nfunction Galat({ q }: { q: QueryState<unknown> }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(q.error, { kode: false })}<KodeLaporan error={q.error} /></span>\n <Button size=\"sm\" variant=\"ghost\" onClick={q.refetch}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\nconst muatDari = (q: QueryState<unknown>) => q.loading && !q.data;\nconst tglIso = (d: Date) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n\n/** Sisa waktu ke tenggat dalam bahasa sehari-hari, plus nada warna untuk lencana. */\nexport function sisaTenggat(tenggat: string | Date, now: Date = new Date()): { teks: string; tone: BadgeVariant; lewat: boolean } {\n const t = new Date(typeof tenggat === 'string' ? tenggat.replace(' ', 'T') : tenggat).getTime();\n const menit = Math.round((t - now.getTime()) / 60_000);\n if (menit < 0) return { teks: 'Lewat tenggat', tone: 'danger', lewat: true };\n if (menit < 60) return { teks: `${Math.max(1, menit)} menit lagi`, tone: 'danger', lewat: false };\n const jam = Math.floor(menit / 60);\n if (jam < 24) return { teks: `${jam} jam lagi`, tone: 'danger', lewat: false };\n const hari = Math.floor(jam / 24);\n if (hari === 1) return { teks: 'Besok', tone: 'warning', lewat: false };\n return { teks: `${hari} hari lagi`, tone: hari <= 3 ? 'warning' : 'neutral', lewat: false };\n}\n\n/** 20251 → \"Ganjil 2025/2026\". */\nconst labelTahun = (t: string) =>\n t.length === 5 ? `${({ '1': 'Ganjil', '2': 'Genap', '3': 'Pendek' } as Record<string, string>)[t[4]!] ?? 'Semester'} ${t.slice(0, 4)}/${Number(t.slice(0, 4)) + 1}` : t;\nconst STATUS_JAWABAN: Record<string, { label: string; variant: BadgeVariant }> = {\n draf: { label: 'Draf', variant: 'neutral' },\n dikumpulkan: { label: 'Dikumpulkan', variant: 'info' },\n dinilai: { label: 'Dinilai', variant: 'success' },\n dikembalikan: { label: 'Perlu revisi', variant: 'warning' },\n};\nconst LABEL_PERAN: Record<string, string> = { pengajar: 'Pengajar', asisten: 'Asisten', mahasiswa: 'Mahasiswa', pengamat: 'Pengamat', pengelola: 'Pengelola' };\n\n// ================================================================ Sampul abstrak\nfunction acak(seed: number) {\n // mulberry32: seed berurutan (ID kelas) tetap menghasilkan pola yang berbeda jauh.\n let a = (Math.imul(seed ^ 0x9e3779b9, 0x85ebca6b) ^ 0xc2b2ae35) >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n/** Sampul kelas berupa pola geometris yang ditentukan dari ID kelas: tiap kelas punya warna dan bentuk tetap, tanpa foto. */\nexport function SampulKelas({ seed, className }: { seed: number; className?: string }) {\n const r = acak(seed + 7);\n const hue = Math.floor(r() * 8) + 1;\n const hue2 = ((hue + 2) % 8) + 1;\n const pola = Math.floor(r() * 3);\n const bentuk = Array.from({ length: 5 }, () => ({ x: r() * 320, y: r() * 120, s: 30 + r() * 70 }));\n return (\n <svg className={cn('u-lms-sampul', className)} viewBox=\"0 0 320 120\" preserveAspectRatio=\"xMidYMid slice\" aria-hidden>\n <rect width=\"320\" height=\"120\" fill={`color-mix(in oklab, var(--u-chart-${hue}) 16%, var(--u-card))`} />\n {pola === 0 && bentuk.map((b, i) => <circle key={i} cx={b.x} cy={b.y} r={b.s / 2} fill={`var(--u-chart-${i % 2 ? hue2 : hue})`} opacity={0.18 + i * 0.06} />)}\n {pola === 1 &&\n bentuk.map((b, i) => (\n <rect\n key={i}\n x={b.x - b.s / 2}\n y={b.y - b.s / 2}\n width={b.s}\n height={b.s}\n rx={10}\n transform={`rotate(${i * 17} ${b.x} ${b.y})`}\n fill={`var(--u-chart-${i % 2 ? hue2 : hue})`}\n opacity={0.16 + i * 0.06}\n />\n ))}\n {pola === 2 &&\n Array.from({ length: 9 }, (_, i) => (\n <path key={i} d={`M ${-40 + i * 44} 130 Q ${i * 44} ${40 + r() * 40} ${40 + i * 44} 130`} fill=\"none\" stroke={`var(--u-chart-${i % 3 ? hue : hue2})`} strokeWidth={10} opacity={0.22} />\n ))}\n </svg>\n );\n}\n\n// ================================================================ Ringkasan beranda\n/** Kartu angka beranda LMS: kelas, tugas 14 hari ke depan, kuis dibuka, dan notifikasi (atau antrean penilaian untuk pengajar). */\nexport function RingkasanLms({ className }: { className?: string }) {\n const q = useLmsSaya();\n if (q.error) return <Galat q={q} />;\n const d = q.data;\n const muat = muatDari(q);\n const belum = (d?.tugas_mendatang ?? []).filter((t) => !t.status_jawaban || t.status_jawaban === 'draf' || t.status_jawaban === 'dikembalikan').length;\n const pengajar = d?.perlu_dinilai != null;\n return (\n <StatGrid className={className}>\n <StatCard label=\"Kelas\" value={formatNumber(d?.jumlah_kelas ?? 0)} icon={<BookOpen />} loading={muat} />\n {pengajar ? (\n <StatCard\n label=\"Perlu dinilai\"\n value={formatNumber(n(d?.perlu_dinilai?.tugas) + n(d?.perlu_dinilai?.kuis))}\n hint={`${n(d?.perlu_dinilai?.tugas)} tugas · ${n(d?.perlu_dinilai?.kuis)} kuis`}\n icon={<ClipboardCheck />}\n loading={muat}\n />\n ) : (\n <StatCard label=\"Tugas belum dikumpulkan\" value={formatNumber(belum)} hint=\"tenggat 14 hari ke depan\" icon={<ListTodo />} loading={muat} />\n )}\n <StatCard label=\"Kuis dibuka\" value={formatNumber(d?.kuis_terbuka?.length ?? 0)} icon={<FileQuestion />} loading={muat} />\n <StatCard label=\"Notifikasi baru\" value={formatNumber(d?.notifikasi_belum_dibaca ?? 0)} icon={<BellDot />} loading={muat} />\n </StatGrid>\n );\n}\n\n// ================================================================ Kelas\nexport interface KartuKelasProps {\n kelas: KelasLms;\n /** Persen penyelesaian (0–100). Kosongkan untuk menyembunyikan bilah progres. */\n progres?: number | null;\n href?: string;\n onPilih?: (k: KelasLms) => void;\n className?: string;\n}\n/** Satu kartu kelas: sampul abstrak, kode MK, judul, pengajar, peran, dan progres. */\nexport function KartuKelas({ kelas: k, progres, href, onPilih, className }: KartuKelasProps) {\n const isi = (\n <>\n <span className=\"u-lms-kelas-sampul\">\n {k.sampul_url ? <img src={k.sampul_url} alt=\"\" loading=\"lazy\" /> : <SampulKelas seed={k.id} />}\n {k.status !== 'aktif' && <Badge variant={k.status === 'draf' ? 'warning' : 'neutral'}>{k.status === 'draf' ? 'Draf' : k.status === 'selesai' ? 'Selesai' : 'Arsip'}</Badge>}\n </span>\n <span className=\"u-lms-kelas-body\">\n <span className=\"u-lms-kelas-meta\">\n {k.kode_mk && <span className=\"u-kur-code\">{k.kode_mk}</span>}\n {k.kelas && <span>Kelas {k.kelas}</span>}\n {k.peran && k.peran !== 'mahasiswa' && <span className=\"u-lms-peran\">{LABEL_PERAN[k.peran] ?? k.peran}</span>}\n </span>\n <span className=\"u-lms-kelas-judul\">{k.judul}</span>\n {(k.pengajar || k.tahun_id) && <span className=\"u-lms-kelas-pengajar\">{k.pengajar ?? labelTahun(k.tahun_id!)}</span>}\n {progres != null && (\n <span className=\"u-lms-kelas-progres\">\n <Progress value={progres} size=\"sm\" tone={progres >= 100 ? 'success' : 'primary'} />\n <small>{progres >= 100 ? 'Tuntas' : `${formatPersen(progres, 0)} selesai`}</small>\n </span>\n )}\n </span>\n </>\n );\n if (href)\n return (\n <a className={cn('u-lms-kelas', className)} href={href}>\n {isi}\n </a>\n );\n if (onPilih)\n return (\n <button type=\"button\" className={cn('u-lms-kelas', className)} onClick={() => onPilih(k)}>\n {isi}\n </button>\n );\n return <div className={cn('u-lms-kelas', className)}>{isi}</div>;\n}\n\nfunction KartuKelasDenganProgres(p: KartuKelasProps) {\n const q = useProgresKelas(p.kelas.peran === 'mahasiswa' ? p.kelas.id : undefined);\n const saya = q.data?.mahasiswa?.[0];\n return <KartuKelas {...p} progres={saya?.persen ?? (p.kelas.peran === 'mahasiswa' && q.data ? 0 : null)} />;\n}\n\n/** Kelas milik pengguna. Mahasiswa melihat progres penyelesaiannya di tiap kartu. */\nexport function DaftarKelasLms({\n status = 'aktif',\n href,\n onPilih,\n tampilProgres = true,\n className,\n}: {\n status?: KelasLms['status'];\n href?: (k: KelasLms) => string;\n onPilih?: (k: KelasLms) => void;\n tampilProgres?: boolean;\n className?: string;\n}) {\n const q = useKelasLms({ status });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q))\n return (\n <div className={cn('u-lms-kelas-grid', className)}>\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} style={{ height: 236 }} />\n ))}\n </div>\n );\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<BookOpen />} title=\"Belum ada kelas\" description=\"Kelas muncul di sini setelah KRS disetujui atau dosen menambahkan Anda.\" bordered className={className} />;\n const Kartu = tampilProgres ? KartuKelasDenganProgres : KartuKelas;\n return (\n <div className={cn('u-lms-kelas-grid', className)}>\n {data.map((k) => (\n <Kartu key={k.id} kelas={k} href={href?.(k)} onPilih={onPilih} />\n ))}\n </div>\n );\n}\n\n// ================================================================ Tugas & kuis\n/** Tugas dengan tenggat terdekat dan status pengumpulan. Tenggat < 24 jam ditandai merah. */\nexport function TugasMendatang({ batas = 6, href, className }: { batas?: number; href?: (t: TugasMendatangItem) => string; className?: string }) {\n const q = useLmsSaya();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const data = [...(q.data?.tugas_mendatang ?? [])].sort((a, b) => a.tenggat.localeCompare(b.tenggat)).slice(0, batas);\n if (!data.length) return <Empty icon={<ListTodo />} title=\"Tidak ada tugas mendekati tenggat\" description=\"Tugas dengan tenggat 14 hari ke depan akan muncul di sini.\" className={className} />;\n return (\n <ul className={cn('u-lms-tugas', className)}>\n {data.map((t) => {\n const s = sisaTenggat(t.tenggat);\n const st = t.status_jawaban ? STATUS_JAWABAN[t.status_jawaban] : null;\n const selesai = t.status_jawaban === 'dikumpulkan' || t.status_jawaban === 'dinilai';\n const Tag = href ? 'a' : 'div';\n return (\n <li key={t.id}>\n <Tag className=\"u-lms-tugas-row\" data-selesai={selesai || undefined} {...(href ? { href: href(t) } : {})}>\n <span className=\"u-lms-tugas-tgl\" aria-hidden>\n <b>{new Date(t.tenggat.replace(' ', 'T')).getDate()}</b>\n <small>{new Date(t.tenggat.replace(' ', 'T')).toLocaleDateString('id-ID', { month: 'short' })}</small>\n </span>\n <span className=\"u-lms-tugas-main\">\n <span className=\"u-lms-tugas-judul\">{t.judul}</span>\n <span className=\"u-lms-tugas-kelas\">\n {t.kelas} · {formatTime(t.tenggat)}\n </span>\n </span>\n <span className=\"u-lms-tugas-status\">\n {selesai ? (\n <Badge variant={st!.variant} dot>\n {st!.label}\n </Badge>\n ) : (\n <Badge variant={s.tone}>{s.teks}</Badge>\n )}\n {!selesai && st && <small>{st.label}</small>}\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n );\n}\n\n/** Kuis yang sedang dibuka di kelas pengguna, dengan waktu tutup. */\nexport function KuisTerbuka({ href, className }: { href?: (k: KuisTerbukaItem) => string; className?: string }) {\n const q = useLmsSaya();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 140 }} />;\n const data = q.data?.kuis_terbuka ?? [];\n if (!data.length) return <Empty icon={<FileQuestion />} title=\"Tidak ada kuis yang dibuka\" className={className} />;\n return (\n <ul className={cn('u-lms-kuis', className)}>\n {data.map((k) => {\n const s = k.selesai ? sisaTenggat(k.selesai) : null;\n return (\n <li key={k.id} className=\"u-lms-kuis-row\">\n <span className=\"u-lms-ikon\" data-jenis=\"kuis\">\n <FileQuestion />\n </span>\n <span className=\"u-lms-tugas-main\">\n <span className=\"u-lms-tugas-judul\">{k.judul}</span>\n <span className=\"u-lms-tugas-kelas\">\n {k.kelas}\n {s && ` · ditutup ${s.teks.toLowerCase()}`}\n </span>\n </span>\n {href && (\n <Button size=\"sm\" render={<a href={href(k)} />}>\n Kerjakan\n </Button>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\n// ================================================================ Agenda\nconst IKON_AGENDA: Record<JenisAgendaLms, React.ReactNode> = { tugas: <ListTodo />, kuis: <FileQuestion />, konferensi: <Video />, presensi: <UserCheck /> };\nconst LABEL_AGENDA: Record<JenisAgendaLms, string> = { tugas: 'Tenggat tugas', kuis: 'Kuis', konferensi: 'Kelas daring', presensi: 'Presensi' };\n\n/** Agenda pembelajaran beberapa hari ke depan, dikelompokkan per tanggal. */\nexport function AgendaLms({ hari = 14, kelasId, onPilih, className }: { hari?: number; kelasId?: number; onPilih?: (a: AgendaLmsItem) => void; className?: string }) {\n const [rentang] = React.useState(() => {\n const d = new Date();\n const s = new Date(d.getTime() + hari * 86_400_000);\n return { dari: tglIso(d), sampai: tglIso(s) };\n });\n const q = useKalenderLms({ ...rentang, ...(kelasId ? { kelas_id: kelasId } : {}) });\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 260 }} />;\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<CalendarClock />} title=\"Agenda kosong\" description={`Tidak ada kegiatan ${hari} hari ke depan.`} className={className} />;\n const grup = new Map<string, AgendaLmsItem[]>();\n for (const a of data) {\n const k = a.waktu.slice(0, 10);\n grup.set(k, [...(grup.get(k) ?? []), a]);\n }\n const hariIni = tglIso(new Date());\n return (\n <div className={cn('u-lms-agenda', className)}>\n {[...grup].map(([tgl, isi]) => (\n <section key={tgl}>\n <h4>\n {tgl === hariIni ? 'Hari ini' : formatDate(tgl, 'full').replace(/ \\d{4}$/, '')}\n <span>{isi.length}</span>\n </h4>\n <ul>\n {isi.map((a) => {\n const Tag = onPilih ? 'button' : 'div';\n return (\n <li key={`${a.jenis}-${a.id}`}>\n <Tag className=\"u-lms-agenda-row\" {...(onPilih ? { type: 'button' as const, onClick: () => onPilih(a) } : {})}>\n <span className=\"u-lms-agenda-jam\">{a.waktu.slice(11, 16) === '00:00' ? 'Sehari' : a.waktu.slice(11, 16)}</span>\n <span className=\"u-lms-ikon\" data-jenis={a.jenis}>\n {IKON_AGENDA[a.jenis]}\n </span>\n <span className=\"u-lms-tugas-main\">\n <span className=\"u-lms-tugas-judul\">{a.judul}</span>\n <span className=\"u-lms-tugas-kelas\">\n {LABEL_AGENDA[a.jenis]} · {a.kelas}\n </span>\n </span>\n </Tag>\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\n// ================================================================ Progres kelas\n/**\n * Progres penyelesaian kelas. Untuk mahasiswa tampil cincin progres dirinya; untuk pengajar tampil semua peserta,\n * diurutkan dari yang paling tertinggal agar mudah ditindaklanjuti.\n */\nexport function ProgresKelas({ kelasId, ambang = 50, className }: { kelasId: number; ambang?: number; className?: string }) {\n const q = useProgresKelas(kelasId);\n // Progres hanya memuat NIM; nama diambil dari daftar peserta (hanya untuk tampilan pengajar).\n const banyak = (q.data?.mahasiswa.length ?? 0) > 1;\n const pq = useAnggotaKelas(kelasId, banyak);\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 220 }} />;\n const d = q.data;\n if (!d) return null;\n const nama = new Map((pq.data ?? []).map((a) => [a.username, a.nama]));\n const tot = d.total_aktivitas;\n const rincian = (m: ProgresMahasiswa) => [\n { label: 'Materi wajib', v: m.materi_selesai, t: tot.materi_wajib },\n { label: 'Tugas', v: m.tugas_dikumpulkan, t: tot.tugas },\n { label: 'Kuis', v: m.kuis_dikerjakan, t: tot.kuis },\n ];\n if (d.mahasiswa.length === 1) {\n const m = d.mahasiswa[0]!;\n return (\n <div className={cn('u-lms-progres-saya', className)}>\n <ProgressRing value={m.persen ?? 0} size={96} thickness={8} tone={(m.persen ?? 0) >= 100 ? 'success' : 'primary'} label={<b>{formatPersen(m.persen ?? 0, 0)}</b>} />\n <ul>\n {rincian(m).map((r) => (\n <li key={r.label}>\n <span>{r.label}</span>\n <Progress value={r.t ? (r.v / r.t) * 100 : 0} size=\"sm\" />\n <b>\n {r.v}/{r.t}\n </b>\n </li>\n ))}\n </ul>\n </div>\n );\n }\n const urut = d.mahasiswa.map((m) => ({ ...m, nama: m.nama ?? nama.get(m.nim) ?? null })).sort((a, b) => (a.persen ?? 0) - (b.persen ?? 0));\n const rata = urut.length ? urut.reduce((s, m) => s + (m.persen ?? 0), 0) / urut.length : 0;\n const tertinggal = urut.filter((m) => (m.persen ?? 0) < ambang).length;\n return (\n <div className={cn('u-lms-progres', className)}>\n <div className=\"u-lms-progres-head\">\n <span>\n <b>{formatPersen(rata, 0)}</b> rata-rata penyelesaian\n </span>\n <span>\n {tot.materi_wajib} materi wajib · {tot.tugas} tugas · {tot.kuis} kuis\n </span>\n {tertinggal > 0 && (\n <Badge variant=\"warning\">\n {tertinggal} mahasiswa di bawah {ambang}%\n </Badge>\n )}\n </div>\n <ul className=\"u-lms-progres-list\">\n {urut.map((m) => (\n <li key={m.nim} data-tertinggal={(m.persen ?? 0) < ambang || undefined}>\n <span className=\"u-lms-progres-nama\">\n <span>{m.nama ?? m.nim}</span>\n {m.nama && <small>{m.nim}</small>}\n </span>\n <Progress value={m.persen ?? 0} size=\"sm\" tone={(m.persen ?? 0) < ambang ? 'warning' : (m.persen ?? 0) >= 100 ? 'success' : 'primary'} />\n <span className=\"u-lms-progres-angka\">\n <b>{formatPersen(m.persen ?? 0, 0)}</b>\n <small>\n {m.selesai}/{m.total}\n </small>\n </span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { ArrowLeft, ArrowRight, CalendarClock, CircleCheck, Clock, Flag, KeyRound, LayoutGrid, MonitorCheck, RefreshCw, Send, Timer } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatTime } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Alert, Empty, ProgressRing } from '../components/display';\nimport { Input, Textarea } from '../components/forms';\nimport { ConfirmDialog } from '../components/overlays';\nimport { invalidateSiakad, pesanGalat, useOptionalSiakad, useSiakadQuery, type QueryState } from './provider';\n\n/*\n * Widget CBT (/v1/cbt) untuk peserta ujian: daftar ujian saya dengan masuk token, lembar ujian lengkap\n * (soal per jenis, navigasi nomor, ragu-ragu, hitung mundur, simpan otomatis), dan hasil.\n * Semua panggilan /kerjakan membawa header X-Perangkat (ID acak per peramban) karena ujian bisa dikunci ke satu perangkat.\n */\n\n// ================================================================ Tipe\nexport type JenisSoalCbt = 'pilihan_ganda' | 'pilihan_ganda_banyak' | 'benar_salah' | 'isian_singkat' | 'esai' | 'menjodohkan';\nexport type StatusPesertaCbt = 'terdaftar' | 'mengerjakan' | 'selesai' | 'diskualifikasi' | 'tidak_hadir';\nexport interface UjianSaya {\n id: number;\n status: StatusPesertaCbt;\n nomor_peserta?: string | null;\n mulai_pada?: string | null;\n batas_waktu?: string | null;\n selesai_pada?: string | null;\n ujian_id: number;\n kode?: string | null;\n ujian: string;\n jenis: string;\n kode_mk?: string | null;\n durasi_menit: number;\n petunjuk?: string | null;\n ujian_status: 'siap' | 'selesai';\n sesi_id: number;\n sesi?: string | null;\n mulai: string;\n selesai: string;\n ruang_id?: string | null;\n sesi_status: 'terjadwal' | 'dibuka' | 'ditutup';\n sisa_detik?: number | null;\n bisa_mulai: boolean;\n}\nexport interface OpsiSoal {\n id: string;\n teks: string;\n}\nexport type JawabanCbt = string | string[] | boolean | Record<string, string> | null;\nexport interface SoalCbtData {\n nomor: number;\n soal_id: number;\n jenis: JenisSoalCbt;\n /** HTML yang sudah disaring server. */\n pertanyaan: string;\n opsi: OpsiSoal[] | { kiri: OpsiSoal[]; kanan: OpsiSoal[] } | null;\n poin: number;\n jawaban: JawabanCbt;\n ragu: boolean;\n}\nexport interface LembarUjianData {\n peserta_id: number;\n ujian: { id: number; kode?: string | null; nama: string; jenis: string; petunjuk?: string | null; durasi_menit: number; tampil_hasil?: number | boolean };\n status: StatusPesertaCbt;\n mulai_pada?: string | null;\n batas_waktu?: string | null;\n sisa_detik: number;\n soal?: SoalCbtData[];\n terjawab?: number;\n hasil?: { skor: number | null; skor_maks: number | null; nilai: number | null; lulus: boolean | null; perlu_koreksi: boolean };\n}\n\n// ================================================================ Perangkat & API\nconst KUNCI_PERANGKAT = 'unipo-cbt-perangkat';\nlet perangkatMemori: string | null = null;\n/** ID perangkat acak yang disimpan di peramban. Server mencocokkannya (bersama User-Agent) bila ujian dikunci ke satu perangkat. */\nexport function idPerangkatCbt(): string {\n try {\n const ada = localStorage.getItem(KUNCI_PERANGKAT);\n if (ada) return ada;\n } catch {\n /* penyimpanan diblokir: pakai ID di memori */\n }\n perangkatMemori ??= typeof crypto !== 'undefined' && 'randomUUID' in crypto ? crypto.randomUUID() : `p-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n try {\n localStorage.setItem(KUNCI_PERANGKAT, perangkatMemori);\n } catch {\n /* abaikan */\n }\n return perangkatMemori;\n}\nconst hdr = () => ({ headers: { 'X-Perangkat': idPerangkatCbt() } });\nconst C = '/v1/cbt';\n\nexport function useUjianSaya() {\n return useSiakadQuery<UjianSaya[]>(['cbt-saya'], (s, signal) => s.cbt.getSaya({}, { signal }) as never, { staleTime: 15_000 });\n}\nexport function useLembarUjian(pesertaId: number | undefined) {\n return useSiakadQuery<LembarUjianData>(['cbt-lembar', String(pesertaId)], (s, signal) => s.request({ method: 'GET', path: `${C}/kerjakan/${pesertaId}` }, { ...hdr(), signal }) as never, {\n enabled: pesertaId != null,\n staleTime: Infinity,\n });\n}\n\n// ================================================================ Bantuan\nfunction Galat({ q }: { q: QueryState<unknown> }) {\n return (\n <div className=\"u-widget-error\" role=\"alert\">\n <span>{pesanGalat(q.error)}</span>\n <Button size=\"sm\" variant=\"ghost\" onClick={q.refetch}>\n <RefreshCw /> Muat ulang\n </Button>\n </div>\n );\n}\nconst muatDari = (q: QueryState<unknown>) => q.loading && !q.data;\nconst JENIS_UJIAN: Record<string, string> = { uts: 'UTS', uas: 'UAS', kuis: 'Kuis', pmb: 'Tes PMB', komprehensif: 'Komprehensif', bahasa: 'Tes bahasa', sertifikasi: 'Sertifikasi', lainnya: 'Ujian' };\nconst STATUS_PESERTA: Record<StatusPesertaCbt, { label: string; variant: BadgeVariant }> = {\n terdaftar: { label: 'Terdaftar', variant: 'neutral' },\n mengerjakan: { label: 'Sedang dikerjakan', variant: 'warning' },\n selesai: { label: 'Selesai', variant: 'success' },\n diskualifikasi: { label: 'Didiskualifikasi', variant: 'danger' },\n tidak_hadir: { label: 'Tidak hadir', variant: 'neutral' },\n};\nconst jamMenit = (d: number) => {\n const j = Math.floor(d / 3600);\n const m = Math.floor((d % 3600) / 60);\n const s = d % 60;\n return `${j > 0 ? `${j}:` : ''}${String(m).padStart(j > 0 ? 2 : 1, '0')}:${String(s).padStart(2, '0')}`;\n};\nexport function terjawab(j: JawabanCbt): boolean {\n if (j == null) return false;\n if (typeof j === 'string') return j.trim() !== '';\n if (Array.isArray(j)) return j.length > 0;\n if (typeof j === 'object') return Object.keys(j).length > 0;\n return true;\n}\n\n// ================================================================ Daftar ujian\n/** Ujian tempat pengguna terdaftar. Tombol masuk aktif saat sesi dibuka; peserta memasukkan token dari pengawas. */\nexport function DaftarUjianSaya({ onMulai, className }: { onMulai: (pesertaId: number, lembar: LembarUjianData) => void; className?: string }) {\n const q = useUjianSaya();\n if (q.error) return <Galat q={q} />;\n if (muatDari(q)) return <Skeleton className={className} style={{ height: 240 }} />;\n const data = q.data ?? [];\n if (!data.length) return <Empty icon={<MonitorCheck />} title=\"Belum ada ujian\" description=\"Ujian berbasis komputer yang Anda ikuti akan muncul di sini.\" bordered className={className} />;\n return (\n <div className={cn('u-cbt-ujian-grid', className)}>\n {data.map((u) => (\n <KartuUjian key={u.id} u={u} onMulai={onMulai} />\n ))}\n </div>\n );\n}\n\nfunction KartuUjian({ u, onMulai }: { u: UjianSaya; onMulai: (pesertaId: number, lembar: LembarUjianData) => void }) {\n const siakad = useOptionalSiakad();\n const [token, setToken] = React.useState('');\n const [sibuk, setSibuk] = React.useState(false);\n const [galat, setGalat] = React.useState<string | null>(null);\n const lanjut = u.status === 'mengerjakan';\n const st = STATUS_PESERTA[u.status];\n const mulai = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!siakad) return;\n setSibuk(true);\n setGalat(null);\n try {\n const r = await siakad.request<LembarUjianData>({ method: 'POST', path: `${C}/kerjakan/${u.id}/mulai`, body: lanjut ? {} : { token: token.trim().toUpperCase() } }, hdr());\n invalidateSiakad('cbt-saya');\n onMulai(u.id, r.data);\n } catch (err) {\n setGalat(pesanGalat(err));\n } finally {\n setSibuk(false);\n }\n };\n return (\n <article className=\"u-cbt-ujian\" data-status={u.status}>\n <header>\n <span className=\"u-cbt-ujian-jenis\">{JENIS_UJIAN[u.jenis] ?? u.jenis}</span>\n <Badge variant={st.variant} dot>\n {st.label}\n </Badge>\n </header>\n <h3>{u.ujian}</h3>\n <p className=\"u-cbt-ujian-sub\">{[u.kode_mk, u.sesi, u.nomor_peserta && `No. ${u.nomor_peserta}`].filter(Boolean).join(' · ')}</p>\n <dl className=\"u-cbt-ujian-info\">\n <div>\n <dt>\n <CalendarClock /> Jadwal\n </dt>\n <dd>\n {formatDate(u.mulai, 'medium')}, {formatTime(u.mulai)}–{formatTime(u.selesai)}\n </dd>\n </div>\n <div>\n <dt>\n <Timer /> Durasi\n </dt>\n <dd>{lanjut && u.sisa_detik != null ? `sisa ${jamMenit(u.sisa_detik)}` : `${u.durasi_menit} menit`}</dd>\n </div>\n </dl>\n {u.bisa_mulai ? (\n <form className=\"u-cbt-token\" onSubmit={mulai}>\n {!lanjut && (\n <label className=\"u-cbt-token-input\">\n <KeyRound aria-hidden />\n <Input\n value={token}\n onChange={(e) => setToken(e.target.value.toUpperCase())}\n placeholder=\"Token\"\n aria-label=\"Token ujian dari pengawas\"\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={12}\n />\n </label>\n )}\n <Button type=\"submit\" loading={sibuk} disabled={!lanjut && token.trim().length < 4} fullWidth={lanjut}>\n {lanjut ? 'Lanjutkan ujian' : 'Mulai ujian'}\n </Button>\n </form>\n ) : (\n <p className=\"u-cbt-ujian-note\">\n {u.status === 'selesai'\n ? `Dikumpulkan ${u.selesai_pada ? `${formatDate(u.selesai_pada, 'medium')} ${formatTime(u.selesai_pada)}` : ''}`\n : u.sesi_status === 'terjadwal'\n ? 'Tombol masuk aktif saat pengawas membuka sesi.'\n : u.sesi_status === 'ditutup'\n ? 'Sesi sudah ditutup.'\n : 'Tidak bisa dimulai.'}\n </p>\n )}\n {galat && <p className=\"u-cbt-galat\">{galat}</p>}\n </article>\n );\n}\n\n// ================================================================ Timer\n/** Hitung mundur ujian. Sinkron ulang setiap kali `sisaDetik` dari server berubah; berubah kuning < 10 menit, merah < 5 menit. */\nexport function TimerUjian({ sisaDetik, onHabis, className }: { sisaDetik: number; onHabis?: () => void; className?: string }) {\n const [akhir, setAkhir] = React.useState(() => Date.now() + sisaDetik * 1000);\n const [sisa, setSisa] = React.useState(sisaDetik);\n const habisRef = React.useRef(onHabis);\n habisRef.current = onHabis;\n React.useEffect(() => {\n setAkhir(Date.now() + sisaDetik * 1000);\n setSisa(sisaDetik);\n }, [sisaDetik]);\n React.useEffect(() => {\n let sudah = false;\n const t = setInterval(() => {\n const s = Math.max(0, Math.round((akhir - Date.now()) / 1000));\n setSisa(s);\n if (s === 0 && !sudah) {\n sudah = true;\n habisRef.current?.();\n }\n }, 1000);\n return () => clearInterval(t);\n }, [akhir]);\n const nada = sisa <= 300 ? 'danger' : sisa <= 600 ? 'warning' : undefined;\n return (\n <div\n className={cn('u-cbt-timer', className)}\n data-tone={nada}\n role=\"timer\"\n aria-live={sisa <= 300 && sisa % 60 === 0 ? 'assertive' : 'off'}\n aria-label={`Sisa waktu ${Math.ceil(sisa / 60)} menit`}\n >\n <Clock aria-hidden />\n <span>{jamMenit(sisa)}</span>\n </div>\n );\n}\n\n// ================================================================ Navigasi\n/** Kisi nomor soal: terjawab, ragu-ragu, belum, dan soal aktif. */\nexport function NavigasiSoal({\n soal,\n aktif,\n onPilih,\n className,\n}: {\n soal: Array<Pick<SoalCbtData, 'nomor' | 'jawaban' | 'ragu'>>;\n aktif: number;\n onPilih: (nomor: number) => void;\n className?: string;\n}) {\n const sudah = soal.filter((s) => terjawab(s.jawaban)).length;\n const ragu = soal.filter((s) => s.ragu).length;\n return (\n <nav className={cn('u-cbt-nav', className)} aria-label=\"Nomor soal\">\n <div className=\"u-cbt-nav-grid\">\n {soal.map((s) => (\n <button\n key={s.nomor}\n type=\"button\"\n onClick={() => onPilih(s.nomor)}\n data-state={s.ragu ? 'ragu' : terjawab(s.jawaban) ? 'terjawab' : 'kosong'}\n data-aktif={s.nomor === aktif || undefined}\n aria-current={s.nomor === aktif ? 'step' : undefined}\n aria-label={`Soal ${s.nomor}${s.ragu ? ', ragu-ragu' : terjawab(s.jawaban) ? ', terjawab' : ', belum dijawab'}`}\n >\n {s.nomor}\n </button>\n ))}\n </div>\n <ul className=\"u-cbt-nav-legend\">\n <li data-state=\"terjawab\">Terjawab {sudah}</li>\n <li data-state=\"ragu\">Ragu-ragu {ragu}</li>\n <li data-state=\"kosong\">Belum {soal.length - sudah}</li>\n </ul>\n </nav>\n );\n}\n\n// ================================================================ Soal\nconst HURUF = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n/** Satu soal sesuai jenisnya: pilihan ganda, pilihan ganda banyak, benar/salah, isian singkat, esai, atau menjodohkan. */\nexport function SoalCbt({ soal, onJawab, disabled, className }: { soal: SoalCbtData; onJawab: (jawaban: JawabanCbt) => void; disabled?: boolean; className?: string }) {\n const s = soal;\n const opsi = Array.isArray(s.opsi) ? s.opsi : [];\n const petunjuk: Record<JenisSoalCbt, string> = {\n pilihan_ganda: 'Pilih satu jawaban.',\n pilihan_ganda_banyak: 'Pilih semua jawaban yang benar.',\n benar_salah: 'Tentukan benar atau salah.',\n isian_singkat: 'Ketik jawaban singkat.',\n esai: 'Tulis jawaban Anda. Tersimpan otomatis.',\n menjodohkan: 'Pasangkan tiap pernyataan dengan jawaban yang sesuai.',\n };\n return (\n <section className={cn('u-cbt-soal', className)} aria-labelledby={`soal-${s.soal_id}`}>\n <header>\n <span id={`soal-${s.soal_id}`}>Soal {s.nomor}</span>\n <small>\n {petunjuk[s.jenis]} · {formatNumber(s.poin)} poin\n </small>\n </header>\n <div className=\"u-cbt-pertanyaan\" dangerouslySetInnerHTML={{ __html: s.pertanyaan }} />\n {(s.jenis === 'pilihan_ganda' || s.jenis === 'pilihan_ganda_banyak') && (\n <div className=\"u-cbt-opsi\" role={s.jenis === 'pilihan_ganda' ? 'radiogroup' : 'group'}>\n {opsi.map((o, i) => {\n const banyak = s.jenis === 'pilihan_ganda_banyak';\n const pilih = banyak ? (Array.isArray(s.jawaban) ? (s.jawaban as string[]) : []) : [];\n const aktif = banyak ? pilih.includes(o.id) : s.jawaban === o.id;\n return (\n <button\n key={o.id}\n type=\"button\"\n role={banyak ? 'checkbox' : 'radio'}\n aria-checked={aktif}\n disabled={disabled}\n data-banyak={banyak || undefined}\n onClick={() => onJawab(banyak ? (aktif ? pilih.filter((x) => x !== o.id) : [...pilih, o.id]) : aktif ? null : o.id)}\n >\n <span className=\"u-cbt-huruf\">{HURUF[i]}</span>\n <span dangerouslySetInnerHTML={{ __html: o.teks }} />\n </button>\n );\n })}\n </div>\n )}\n {s.jenis === 'benar_salah' && (\n <div className=\"u-cbt-opsi\" data-dua role=\"radiogroup\">\n {[\n [true, 'Benar'],\n [false, 'Salah'],\n ].map(([v, l]) => (\n <button key={String(v)} type=\"button\" role=\"radio\" aria-checked={s.jawaban === v} disabled={disabled} onClick={() => onJawab(s.jawaban === v ? null : (v as boolean))}>\n <span className=\"u-cbt-huruf\">{v ? 'B' : 'S'}</span>\n <span>{l as string}</span>\n </button>\n ))}\n </div>\n )}\n {s.jenis === 'isian_singkat' && <IsianTeks key={s.soal_id} nilai={(s.jawaban as string) ?? ''} onJawab={onJawab} disabled={disabled} />}\n {s.jenis === 'esai' && <IsianTeks key={s.soal_id} nilai={(s.jawaban as string) ?? ''} onJawab={onJawab} disabled={disabled} panjang />}\n {s.jenis === 'menjodohkan' && s.opsi && !Array.isArray(s.opsi) && <Menjodohkan opsi={s.opsi} nilai={(s.jawaban as Record<string, string>) ?? {}} onJawab={onJawab} disabled={disabled} />}\n </section>\n );\n}\n\nfunction IsianTeks({ nilai, onJawab, disabled, panjang }: { nilai: string; onJawab: (j: JawabanCbt) => void; disabled?: boolean; panjang?: boolean }) {\n const [v, setV] = React.useState(nilai);\n const t = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n const kirim = (x: string) => {\n clearTimeout(t.current);\n t.current = setTimeout(() => onJawab(x.trim() === '' ? null : x), 800);\n };\n React.useEffect(() => () => clearTimeout(t.current), []);\n const ubah = (x: string) => {\n setV(x);\n kirim(x);\n };\n return panjang ? (\n <div className=\"u-cbt-esai\">\n <Textarea value={v} onChange={(e) => ubah(e.target.value)} rows={8} disabled={disabled} aria-label=\"Jawaban esai\" />\n <small>{v.trim() ? v.trim().split(/\\s+/).length : 0} kata</small>\n </div>\n ) : (\n <Input value={v} onChange={(e) => ubah(e.target.value)} disabled={disabled} maxLength={500} aria-label=\"Jawaban singkat\" className=\"u-cbt-isian\" />\n );\n}\n\nfunction Menjodohkan({ opsi, nilai, onJawab, disabled }: { opsi: { kiri: OpsiSoal[]; kanan: OpsiSoal[] }; nilai: Record<string, string>; onJawab: (j: JawabanCbt) => void; disabled?: boolean }) {\n return (\n <ol className=\"u-cbt-jodoh\">\n {opsi.kiri.map((k) => (\n <li key={k.id}>\n <span dangerouslySetInnerHTML={{ __html: k.teks }} />\n <select\n value={nilai[k.id] ?? ''}\n disabled={disabled}\n aria-label={`Pasangan untuk ${k.teks.replace(/<[^>]+>/g, '')}`}\n onChange={(e) => {\n const baru = { ...nilai };\n if (e.target.value) baru[k.id] = e.target.value;\n else delete baru[k.id];\n onJawab(Object.keys(baru).length ? baru : null);\n }}\n >\n <option value=\"\">Pilih pasangan…</option>\n {opsi.kanan.map((r) => (\n <option key={r.id} value={r.id}>\n {r.teks.replace(/<[^>]+>/g, '')}\n </option>\n ))}\n </select>\n </li>\n ))}\n </ol>\n );\n}\n\n// ================================================================ Lembar ujian\ntype StatusSimpan = 'tersimpan' | 'menyimpan' | 'gagal';\n\n/**\n * Lembar ujian lengkap: kepala (nama ujian, jumlah terjawab, hitung mundur), satu soal per layar, tombol ragu-ragu,\n * navigasi nomor, dan kumpulkan. Jawaban dikirim saat dipilih (teks: 0,8 detik setelah berhenti mengetik).\n * Jika waktu habis, lembar dikumpulkan otomatis.\n */\nexport function LembarUjian({ pesertaId, awal, onSelesai, className }: { pesertaId: number; awal?: LembarUjianData; onSelesai?: (hasil: LembarUjianData) => void; className?: string }) {\n const siakad = useOptionalSiakad();\n const q = useLembarUjian(awal ? undefined : pesertaId);\n const [lembar, setLembar] = React.useState<LembarUjianData | undefined>(awal);\n const [nomor, setNomor] = React.useState(1);\n const [simpan, setSimpan] = React.useState<StatusSimpan>('tersimpan');\n const [galat, setGalat] = React.useState<string | null>(null);\n const [konfirmasi, setKonfirmasi] = React.useState(false);\n React.useEffect(() => {\n if (q.data && !lembar) setLembar(q.data);\n }, [q.data, lembar]);\n\n const kirim = React.useCallback(\n async (s: SoalCbtData, perubahan: Partial<Pick<SoalCbtData, 'jawaban' | 'ragu'>>) => {\n const baru = { ...s, ...perubahan };\n setLembar((l) => (l ? { ...l, soal: l.soal?.map((x) => (x.soal_id === s.soal_id ? baru : x)) } : l));\n if (!siakad) return;\n setSimpan('menyimpan');\n try {\n const r = await siakad.request<{ sisa_detik: number }>(\n { method: 'POST', path: `${C}/kerjakan/${pesertaId}/jawab`, body: { soal_id: s.soal_id, jawaban: baru.jawaban, ragu: baru.ragu } },\n hdr(),\n );\n setSimpan('tersimpan');\n setGalat(null);\n if (r.data?.sisa_detik != null) setLembar((l) => (l && Math.abs(l.sisa_detik - r.data.sisa_detik) > 5 ? { ...l, sisa_detik: r.data.sisa_detik } : l));\n } catch (e) {\n setSimpan('gagal');\n setGalat(pesanGalat(e));\n }\n },\n [siakad, pesertaId],\n );\n\n const kumpulkan = React.useCallback(async () => {\n if (!siakad) return;\n try {\n const r = await siakad.request<LembarUjianData>({ method: 'POST', path: `${C}/kerjakan/${pesertaId}/selesai`, body: {} }, hdr());\n setLembar(r.data);\n invalidateSiakad('cbt-saya');\n onSelesai?.(r.data);\n } catch (e) {\n setGalat(pesanGalat(e));\n }\n }, [siakad, pesertaId, onSelesai]);\n\n if (!lembar) {\n if (q.error) return <Galat q={q} />;\n return <Skeleton className={className} style={{ height: 420 }} />;\n }\n if (lembar.status !== 'mengerjakan') return <HasilUjian lembar={lembar} className={className} />;\n const daftar = lembar.soal ?? [];\n const s = daftar.find((x) => x.nomor === nomor) ?? daftar[0];\n const sudah = daftar.filter((x) => terjawab(x.jawaban)).length;\n const ragu = daftar.filter((x) => x.ragu).length;\n if (!s) return <Empty title=\"Soal tidak tersedia\" />;\n\n return (\n <div className={cn('u-cbt-lembar', className)}>\n <header className=\"u-cbt-lembar-head\">\n <div className=\"u-cbt-lembar-judul\">\n <span className=\"u-cbt-ujian-jenis\">{JENIS_UJIAN[lembar.ujian.jenis] ?? lembar.ujian.jenis}</span>\n <h2>{lembar.ujian.nama}</h2>\n </div>\n <span className=\"u-cbt-simpan\" data-status={simpan} aria-live=\"polite\">\n {simpan === 'menyimpan' ? 'Menyimpan…' : simpan === 'gagal' ? 'Gagal menyimpan' : 'Tersimpan'}\n </span>\n <span className=\"u-cbt-hitung\">\n <b>{sudah}</b>/{daftar.length} terjawab\n </span>\n <TimerUjian sisaDetik={lembar.sisa_detik} onHabis={kumpulkan} />\n </header>\n {galat && (\n <Alert variant=\"danger\" title=\"Jawaban terakhir belum tersimpan\">\n {galat} Periksa koneksi; jawaban dikirim lagi saat Anda memilih ulang.\n </Alert>\n )}\n <div className=\"u-cbt-lembar-body\">\n <div className=\"u-cbt-lembar-main\">\n <SoalCbt soal={s} onJawab={(j) => kirim(s, { jawaban: j })} />\n <footer className=\"u-cbt-lembar-foot\">\n <Button variant=\"outline\" onClick={() => setNomor(Math.max(1, s.nomor - 1))} disabled={s.nomor <= 1}>\n <ArrowLeft /> Sebelumnya\n </Button>\n <Button variant={s.ragu ? 'secondary' : 'ghost'} onClick={() => kirim(s, { ragu: !s.ragu })} aria-pressed={s.ragu} className=\"u-cbt-ragu\">\n <Flag /> Ragu-ragu\n </Button>\n {s.nomor < daftar.length ? (\n <Button onClick={() => setNomor(s.nomor + 1)}>\n Berikutnya <ArrowRight />\n </Button>\n ) : (\n <Button onClick={() => setKonfirmasi(true)}>\n <Send /> Kumpulkan\n </Button>\n )}\n </footer>\n </div>\n <aside className=\"u-cbt-lembar-side\">\n <h3>\n <LayoutGrid aria-hidden /> Nomor soal\n </h3>\n <NavigasiSoal soal={daftar} aktif={s.nomor} onPilih={setNomor} />\n <Button variant=\"outline\" fullWidth onClick={() => setKonfirmasi(true)}>\n Kumpulkan jawaban\n </Button>\n </aside>\n </div>\n <ConfirmDialog\n open={konfirmasi}\n onOpenChange={setKonfirmasi}\n tone=\"primary\"\n icon={<Send />}\n title=\"Kumpulkan jawaban sekarang?\"\n description={\n sudah < daftar.length || ragu > 0\n ? `Masih ada ${daftar.length - sudah} soal belum dijawab${ragu ? ` dan ${ragu} ditandai ragu-ragu` : ''}. Setelah dikumpulkan, jawaban tidak bisa diubah.`\n : 'Semua soal sudah dijawab. Setelah dikumpulkan, jawaban tidak bisa diubah.'\n }\n confirmLabel=\"Kumpulkan jawaban\"\n cancelLabel=\"Periksa lagi\"\n onConfirm={kumpulkan}\n />\n </div>\n );\n}\n\n// ================================================================ Hasil\n/** Layar setelah ujian dikumpulkan. Nilai hanya tampil bila pengelola mengizinkan (`tampil_hasil`). */\nexport function HasilUjian({ lembar, className }: { lembar: LembarUjianData; className?: string }) {\n const h = lembar.hasil;\n return (\n <div className={cn('u-cbt-hasil', className)}>\n {h && h.nilai != null ? (\n <ProgressRing value={h.nilai} size={120} thickness={9} tone={h.lulus === false ? 'warning' : 'success'} label={<b>{formatNumber(h.nilai, { maximumFractionDigits: 1 })}</b>} />\n ) : (\n <span className=\"u-cbt-hasil-ikon\">\n <CircleCheck />\n </span>\n )}\n <h2>{lembar.status === 'diskualifikasi' ? 'Anda didiskualifikasi' : 'Jawaban sudah dikumpulkan'}</h2>\n <p>{lembar.ujian.nama}</p>\n {h ? (\n <dl>\n <div>\n <dt>Skor</dt>\n <dd>\n {formatNumber(h.skor ?? 0, { maximumFractionDigits: 1 })} / {formatNumber(h.skor_maks ?? 0)}\n </dd>\n </div>\n {h.lulus != null && (\n <div>\n <dt>Status</dt>\n <dd>\n <Badge variant={h.lulus ? 'success' : 'warning'} dot>\n {h.lulus ? 'Lulus' : 'Belum lulus'}\n </Badge>\n </dd>\n </div>\n )}\n </dl>\n ) : (\n <small>Nilai diumumkan oleh pengelola ujian.</small>\n )}\n {h?.perlu_koreksi && <small>Sebagian soal esai masih dikoreksi; nilai bisa berubah.</small>}\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { AppLogo, UnipoAppLogo, type AppLogoProps, type UnipoApp } from '../components/identity';\nimport { Navbar, type NavbarMenu, type NavbarProps, type NavbarLink } from '../components/navbar';\nimport { Faq, type FaqProps } from '../components/faq';\nimport { useSiakadQuery } from './provider';\n\ntype Row = Record<string, any>;\n\n// ================================================================ Logo situs\nexport interface LogoSitusProps extends Omit<AppLogoProps, 'src' | 'name'> {\n /** Kode situs portal, mis. 'univ', 'fti', 'pmb'. */\n situs: string;\n /** Logo cadangan bila situs belum punya logo atau API belum menjawab. */\n app?: UnipoApp;\n /** Nama pengganti (bawaan: nama situs dari API). */\n name?: React.ReactNode;\n}\n\n/**\n * Logo dari pengaturan situs portal (`/v1/portal/situs/{kode}`): pakai logo unggahan bila ada,\n * bila tidak pakai logo aplikasi UNIPO (`app`). Nama dan tagline mengikuti data situs.\n */\nexport function LogoSitus({ situs, app, name, tagline, ...props }: LogoSitusProps) {\n const q = useSiakadQuery<Row>(['portal-situs', situs], (s, signal) => s.portal.getSitusByKode(situs, {}, { signal }) as never, { staleTime: 10 * 60_000 });\n const d = q.data;\n const nama = name ?? d?.singkatan ?? d?.nama;\n const sub = tagline ?? (d ? (d.tagline ?? (d.jenis === 'universitas' ? undefined : 'Universitas Pohuwato')) : undefined);\n const src = d?.logo?.url as string | undefined;\n if (src) return <AppLogo src={src} name={nama} tagline={sub} {...props} />;\n if (app) return <UnipoAppLogo app={app} {...(nama ? { name: nama } : {})} {...(sub !== undefined ? { tagline: sub } : {})} {...props} />;\n return <AppLogo name={nama ?? 'UNIPO'} tagline={sub} {...props} />;\n}\n\n// ================================================================ Navbar dari menu portal\n/** Item menu `/v1/portal/situs/{kode}/menu` (tabel portal_menu). */\nexport interface MenuPortal {\n id: number;\n label: string;\n label_en?: string | null;\n tipe?: 'halaman' | 'kategori' | 'url' | 'modul';\n ref_id?: number | null;\n url?: string | null;\n tab_baru?: boolean | number;\n anak?: MenuPortal[];\n [k: string]: any;\n}\n\n/** Bawaan: url apa adanya; modul → /{nama-modul}; halaman → /halaman/{id}; kategori → /kategori/{id}. */\nexport function hrefMenuPortal(m: MenuPortal): string | undefined {\n if (m.tipe === 'modul') return `/${String(m.url ?? '').replace(/^\\//, '')}`;\n if (m.tipe === 'halaman' && m.ref_id) return `/halaman/${m.ref_id}`;\n if (m.tipe === 'kategori' && m.ref_id) return `/kategori/${m.ref_id}`;\n return m.url || undefined;\n}\n\n/**\n * Ubah pohon menu portal ke NavbarMenu. Tiga tingkat (induk → judul kolom → tautan) menjadi mega menu;\n * dua tingkat menjadi dropdown biasa.\n */\nexport function keNavbarMenu(items: MenuPortal[], opts: { href?: (m: MenuPortal) => string | undefined; bahasa?: 'id' | 'en'; ekstra?: (m: MenuPortal) => Partial<NavbarMenu> } = {}): NavbarMenu[] {\n const href = opts.href ?? hrefMenuPortal;\n const lbl = (m: MenuPortal) => (opts.bahasa === 'en' && m.label_en) || m.label;\n const link = (m: MenuPortal): NavbarLink => ({ key: String(m.id), label: lbl(m), href: href(m), external: Boolean(Number(m.tab_baru)), description: m.deskripsi ?? undefined });\n return items.map((m) => {\n const anak = m.anak ?? [];\n const base: NavbarMenu = { key: String(m.id), label: lbl(m), href: anak.length ? undefined : href(m), external: Boolean(Number(m.tab_baru)) };\n if (!anak.length) return { ...base, ...opts.ekstra?.(m) };\n const mega = anak.some((a) => a.anak?.length);\n return {\n ...base,\n ...(mega ? { columns: anak.map((a) => ({ title: lbl(a), items: a.anak?.length ? a.anak.map(link) : [link(a)] })) } : { items: anak.map(link) }),\n ...opts.ekstra?.(m),\n };\n });\n}\n\nexport interface NavbarPortalProps extends Omit<NavbarProps, 'menus' | 'brand'> {\n /** Kode situs portal. */\n situs: string;\n /** Lokasi menu (bawaan 'utama'). */\n lokasi?: 'utama' | 'atas' | 'footer' | 'sidebar';\n /** Logo; bawaan <LogoSitus situs={situs} app={app} />. */\n brand?: React.ReactNode;\n app?: UnipoApp;\n /** Pemetaan tautan menu ke URL aplikasi Anda. */\n href?: (m: MenuPortal) => string | undefined;\n bahasa?: 'id' | 'en';\n /** Tambahkan ikon, deskripsi, atau kartu sorotan ke menu tertentu, mis. (m) => m.label === 'Akademik' ? { featured: … } : {}. */\n ekstra?: (m: MenuPortal) => Partial<NavbarMenu>;\n /** Menu tambahan di ujung (mis. tautan aplikasi) atau saat API belum menjawab. */\n menuTambahan?: NavbarMenu[];\n}\n\n/** Navbar portal yang menunya diambil dari pengaturan situs (`/v1/portal/situs/{kode}/menu`), lengkap dengan mega menu. */\nexport function NavbarPortal({ situs, lokasi = 'utama', brand, app, href, bahasa, ekstra, menuTambahan = [], variant = 'portal', ...rest }: NavbarPortalProps) {\n const q = useSiakadQuery<Record<string, MenuPortal[]>>(['portal-menu', situs, lokasi], (s, signal) => s.portal.getSitusByKodeMenu(situs, { lokasi }, { signal }) as never, { staleTime: 5 * 60_000 });\n const menus = React.useMemo(() => [...keNavbarMenu(q.data?.[lokasi] ?? [], { href, bahasa, ekstra }), ...menuTambahan], [q.data, lokasi, href, bahasa, ekstra, menuTambahan]);\n return <Navbar brand={brand ?? <LogoSitus situs={situs} app={app} />} menus={menus} variant={variant} {...rest} />;\n}\n\n// ================================================================ FAQ portal\nexport interface FaqPortalProps extends Omit<FaqProps, 'items' | 'loading' | 'onSearch'> {\n /** Kode situs; kosong = semua situs. */\n situs?: string;\n /** ID atau slug kategori FAQ. */\n kategori?: string;\n /** Sertakan FAQ situs turunan (fakultas, prodi). */\n turunan?: boolean;\n bahasa?: 'id' | 'en';\n /** Maksimal pertanyaan (bawaan 100). */\n jumlah?: number;\n}\n\n/** FAQ dari portal (`/v1/portal/faq`), dikelompokkan per kategori dengan pencarian. */\nexport function FaqPortal({ situs, kategori, turunan, bahasa, jumlah = 100, ...rest }: FaqPortalProps) {\n const query = { ...(situs ? { situs } : {}), ...(kategori ? { kategori } : {}), ...(turunan ? { turunan: '1' } : {}), per_page: jumlah };\n const q = useSiakadQuery<Row[]>(['portal-faq', query], (s, signal) => s.portal.getFaq(query, { signal }) as never, { staleTime: 5 * 60_000 });\n const items = (q.data ?? []).map((f) => ({\n id: f.id,\n question: String((bahasa === 'en' && f.pertanyaan_en) || f.pertanyaan || f.judul || ''),\n answer: String((bahasa === 'en' && f.jawaban_en) || f.jawaban || ''),\n category: f.kategori?.nama ?? undefined,\n }));\n if (q.error && !q.data) return <Faq {...rest} items={[]} />;\n return <Faq {...rest} items={items} loading={q.loading && !q.data} />;\n}\n","'use client';\nimport * as React from 'react';\nimport { Activity, AppWindow, Ban, Gauge, KeyRound, LogIn, LogOut, MonitorSmartphone, Settings2, ShieldAlert, ShieldCheck, TriangleAlert, Users } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber, formatPersen, formatRelative, formatTime } from '../lib/format';\nimport { Badge, Button, Skeleton, type BadgeVariant } from '../components/actions';\nimport { Alert, DescriptionList, Empty, Pagination } from '../components/display';\nimport { BarList, LineChart, Panel, SegmentBar, StatCard, StatGrid } from '../components/charts';\nimport { CopyButton } from '../components/code';\nimport { FilterBar, type FilterValues, type DateRangeValue } from '../components/filter';\nimport { SegmentedControl } from '../components/forms';\nimport { ConfirmDialog, Sheet } from '../components/overlays';\nimport { DataTable, type DataColumn } from '../components/data-table';\nimport { pesanGalat, useSiakadQuery } from './provider';\nimport { KodeLaporan } from '../components/galat';\nimport { invalidateSso, useSsoAdmin, useSsoQuery } from './aplikasi';\n\n/*\n * Log untuk admin: permintaan API SIAKAD (/v1/rbac/log-api, dari storage/logs/api-*.log), ringkasan grafiknya,\n * log aktivitas SSO (/api/admin/audit: login, gagal login, logout, perubahan admin), dan keamanan akun satu pengguna\n * (sesi aktif + riwayat login, keluarkan dari semua perangkat).\n */\n\nconst hariIni = () => new Date().toISOString().slice(0, 10);\nconst mundur = (hari: number) => new Date(Date.now() - (hari - 1) * 86_400_000).toISOString().slice(0, 10);\n\n// ================================================================ Log API\nexport interface BarisLogApi {\n waktu: string;\n request_id?: string | null;\n method: string;\n path: string;\n query?: string | null;\n status: number;\n ms: number;\n client_id?: string | null;\n username?: string | null;\n level?: string | null;\n lingkungan?: string | null;\n ip?: string | null;\n}\n\nexport const nadaStatus = (st: number): BadgeVariant => (st >= 500 ? 'danger' : st >= 400 ? 'warning' : st >= 300 ? 'info' : 'success');\nconst nadaMs = (ms: number) => (ms >= 2000 ? 'danger' : ms >= 800 ? 'warning' : undefined);\n\nexport function LencanaMetode({ method }: { method: string }) {\n return (\n <span className=\"u-http-method\" data-method={method.toUpperCase()}>\n {method.toUpperCase()}\n </span>\n );\n}\n\nexport interface LogApiProps {\n /** Batasi ke satu aplikasi (klien API). */\n clientId?: string;\n username?: string;\n /** Rentang awal dalam hari (bawaan 1 = hari ini, maks 31). */\n hari?: number;\n perPage?: number;\n /** Tampilkan bilah saringan (bawaan true). */\n saringan?: boolean;\n className?: string;\n}\n\n/**\n * Tabel permintaan API terbaru dulu: metode, path, status, durasi, aplikasi, pengguna. Saring status, metode, tanggal,\n * dan path; klik baris untuk rincian (request ID, IP, query, database).\n */\nexport function LogApi({ clientId, username, hari = 1, perPage: pp = 50, saringan = true, className }: LogApiProps) {\n const [f, setF] = React.useState<FilterValues>({});\n const [page, setPage] = React.useState(1);\n const [perPage, setPerPage] = React.useState(pp);\n const [pilih, setPilih] = React.useState<BarisLogApi | null>(null);\n const tgl = (f.tanggal ?? {}) as DateRangeValue;\n const query = {\n dari: tgl.from || (tgl.to ? undefined : mundur(hari)),\n sampai: tgl.to || (tgl.from ? undefined : hariIni()),\n client_id: clientId ?? ((f.client_id as string) || undefined),\n username: username ?? ((f.username as string) || undefined),\n status: (f.status as string) || undefined,\n method: (f.method as string) || undefined,\n path: (f.path as string)?.trim() || undefined,\n page,\n per_page: perPage,\n };\n const q = useSiakadQuery<BarisLogApi[]>(['rbac', 'log-api', query], (s, signal) => s.request({ method: 'GET', path: '/v1/rbac/log-api', query }, { signal }), { staleTime: 15_000 });\n const kolom: DataColumn<BarisLogApi>[] = [\n {\n key: 'waktu',\n header: 'Waktu',\n shrink: true,\n cell: (r) => (\n <time dateTime={r.waktu} title={formatDate(r.waktu, 'long')} className=\"u-log-time\">\n {query.dari !== query.sampai && <small>{formatDate(r.waktu, 'short')}</small>}\n {formatTime(r.waktu)}\n </time>\n ),\n mobile: 'subtitle',\n },\n {\n key: 'path',\n header: 'Endpoint',\n cell: (r) => (\n <span className=\"u-log-path\">\n <LencanaMetode method={r.method} />\n <code>{r.path}</code>\n </span>\n ),\n mobile: 'title',\n },\n {\n key: 'status',\n header: 'Status',\n shrink: true,\n cell: (r) => (\n <Badge variant={nadaStatus(r.status)} shape=\"square\">\n {r.status}\n </Badge>\n ),\n mobile: 'badge',\n },\n {\n key: 'ms',\n header: 'Durasi',\n align: 'end',\n shrink: true,\n cell: (r) => (\n <span className=\"u-log-ms\" data-tone={nadaMs(r.ms)}>\n {formatNumber(r.ms)} ms\n </span>\n ),\n },\n ...(clientId ? [] : [{ key: 'client_id', header: 'Aplikasi', cell: (r: BarisLogApi) => (r.client_id ? <code>{r.client_id}</code> : '–') }]),\n ...(username ? [] : [{ key: 'username', header: 'Pengguna', cell: (r: BarisLogApi) => r.username || <span className=\"u-app-muted\">token aplikasi</span> }]),\n ];\n const ubah = (v: FilterValues) => {\n setF(v);\n setPage(1);\n };\n return (\n <div className={cn('u-log', className)}>\n <DataTable\n columns={kolom}\n rows={q.data}\n rowKey={(r) => `${r.request_id ?? ''}${r.waktu}${r.path}`}\n loading={q.loading}\n error={q.error}\n onRetry={q.refetch}\n page={page}\n perPage={perPage}\n total={Number(q.meta?.total ?? q.data?.length ?? 0)}\n onPageChange={setPage}\n onPerPageChange={(n) => (setPerPage(n), setPage(1))}\n perPageOptions={[25, 50, 100, 200]}\n onRowClick={setPilih}\n defaultDensity=\"compact\"\n columnToggle={false}\n exportCsv=\"log-api\"\n filtered={Object.values(f).some(Boolean)}\n emptyFiltered={{ onReset: () => ubah({}) }}\n empty={{ icon: <Activity />, title: 'Belum ada permintaan', description: 'Tidak ada permintaan API pada rentang tanggal ini.' }}\n toolbar={\n saringan ? (\n <FilterBar\n value={f}\n onValueChange={ubah}\n search={{ placeholder: 'Cari path, mis. /v1/krs', key: 'path' }}\n fields={[\n { key: 'tanggal', label: 'Tanggal', type: 'date-range' },\n {\n key: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { value: 'sukses', label: 'Berhasil (< 400)' },\n { value: 'galat', label: 'Galat (≥ 400)' },\n { value: '4xx', label: '4xx' },\n { value: '5xx', label: '5xx' },\n ],\n },\n { key: 'method', label: 'Metode', type: 'select', options: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].map((m) => ({ value: m, label: m })) },\n ]}\n />\n ) : undefined\n }\n />\n {q.meta?.terpotong ? <Alert variant=\"warning\">Log terlalu besar untuk dibaca sekaligus; persempit rentang tanggal atau saringan.</Alert> : null}\n <Sheet open={pilih != null} onOpenChange={(o) => !o && setPilih(null)} title=\"Rincian permintaan\" size=\"md\">\n {pilih && <RincianLogApi baris={pilih} />}\n </Sheet>\n </div>\n );\n}\n\nexport function RincianLogApi({ baris: r }: { baris: BarisLogApi }) {\n return (\n <div className=\"u-log-detail\">\n <p className=\"u-log-path u-log-path-lg\">\n <LencanaMetode method={r.method} />\n <code>\n {r.path}\n {r.query ? `?${r.query}` : ''}\n </code>\n </p>\n <DescriptionList\n items={[\n { label: 'Waktu', value: `${formatDate(r.waktu, 'long')} ${formatTime(r.waktu)}` },\n { label: 'Status', value: <Badge variant={nadaStatus(r.status)}>{r.status}</Badge> },\n { label: 'Durasi', value: `${formatNumber(r.ms)} ms` },\n {\n label: 'Request ID',\n value: r.request_id ? (\n <span className=\"u-app-id\">\n <code>{r.request_id}</code>\n <CopyButton text={r.request_id} label=\"Salin request ID\" />\n </span>\n ) : null,\n },\n { label: 'Aplikasi', value: r.client_id ? <code>{r.client_id}</code> : null },\n { label: 'Pengguna', value: r.username ? `${r.username}${r.level ? ` (${r.level})` : ''}` : 'Token aplikasi' },\n { label: 'Database', value: r.lingkungan ? (r.lingkungan === 'live' ? 'Live' : 'Development') : null },\n { label: 'IP', value: r.ip ? <code>{r.ip}</code> : null },\n ]}\n />\n <p className=\"u-app-muted\">Log tidak menyimpan token, password, maupun isi permintaan.</p>\n </div>\n );\n}\n\n// ================================================================ Ringkasan log API\nexport interface RingkasanLogApiData {\n dari: string;\n sampai: string;\n per: 'jam' | 'hari';\n jumlah: number;\n galat_4xx: number;\n galat_5xx: number;\n tingkat_galat: number;\n ms_rata: number;\n ms_p50: number;\n ms_p95: number;\n pengguna_unik: number;\n seri: Array<{ waktu: string; jumlah: number; galat: number }>;\n status: Array<{ status: number; jumlah: number }>;\n endpoint_teratas: Array<{ endpoint: string; jumlah: number; galat: number; ms_rata: number }>;\n klien_teratas: Array<{ client_id: string; jumlah: number; galat: number }>;\n terpotong: boolean;\n}\n\nexport interface RingkasanLogApiProps {\n clientId?: string;\n /** Rentang awal: 1, 7, atau 30 hari (bawaan 7). */\n hari?: 1 | 7 | 30;\n /** Hanya kartu angka + grafik (untuk tab detail aplikasi). */\n ringkas?: boolean;\n className?: string;\n}\n\n/** Dasbor log API: angka (permintaan, tingkat galat, p95, pengguna), grafik per jam/hari, sebaran status, endpoint dan aplikasi teratas. */\nexport function RingkasanLogApi({ clientId, hari: awal = 7, ringkas, className }: RingkasanLogApiProps) {\n const [hari, setHari] = React.useState<1 | 7 | 30>(awal);\n const query = { dari: mundur(hari), sampai: hariIni(), client_id: clientId };\n const q = useSiakadQuery<RingkasanLogApiData>(['rbac', 'log-api-ringkasan', query], (s, signal) => s.request({ method: 'GET', path: '/v1/rbac/log-api/ringkasan', query }, { signal }), {\n staleTime: 30_000,\n });\n const d = q.data;\n const muat = q.loading && !d;\n if (q.error && !d)\n return (\n <Alert variant=\"danger\" title=\"Ringkasan log gagal dimuat\">\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n );\n const label = (w: string) => (d?.per === 'jam' ? w.slice(11, 16) : new Date(`${w}T00:00:00`).toLocaleDateString('id-ID', { day: 'numeric', month: 'short' }));\n const statusKel = [2, 3, 4, 5].map((k) => ({ label: `${k}xx`, value: (d?.status ?? []).filter((s) => Math.floor(s.status / 100) === k).reduce((n, s) => n + s.jumlah, 0) }));\n const warna: Record<string, string> = { '2xx': 'var(--u-success)', '3xx': 'var(--u-info)', '4xx': 'var(--u-warning)', '5xx': 'var(--u-danger)' };\n return (\n <div className={cn('u-log-summary', className)}>\n <div className=\"u-log-summary-bar\">\n <SegmentedControl<'1' | '7' | '30'>\n value={String(hari) as '1' | '7' | '30'}\n onValueChange={(v) => setHari(Number(v) as 1 | 7 | 30)}\n options={[\n { value: '1', label: 'Hari ini' },\n { value: '7', label: '7 hari' },\n { value: '30', label: '30 hari' },\n ]}\n aria-label=\"Rentang waktu\"\n />\n {d?.terpotong && <Badge variant=\"warning\">Sebagian log tidak terbaca</Badge>}\n </div>\n <StatGrid>\n <StatCard label=\"Permintaan\" value={formatNumber(d?.jumlah)} icon={<Activity />} loading={muat} trend={d?.seri.map((s) => s.jumlah)} />\n <StatCard\n label=\"Tingkat galat\"\n value={formatPersen((d?.tingkat_galat ?? 0) * 100)}\n hint={d ? `${formatNumber(d.galat_4xx)} 4xx · ${formatNumber(d.galat_5xx)} 5xx` : undefined}\n icon={<TriangleAlert />}\n tone={d && d.tingkat_galat > 0.05 ? 'danger' : 'neutral'}\n loading={muat}\n />\n <StatCard\n label=\"Waktu tanggap p95\"\n value={`${formatNumber(d?.ms_p95)} ms`}\n hint={d ? `median ${formatNumber(d.ms_p50)} ms` : undefined}\n icon={<Gauge />}\n tone={d && d.ms_p95 > 1500 ? 'warning' : 'info'}\n loading={muat}\n />\n <StatCard label=\"Pengguna unik\" value={formatNumber(d?.pengguna_unik)} icon={<Users />} tone=\"neutral\" loading={muat} />\n </StatGrid>\n <Panel title={d?.per === 'jam' ? 'Permintaan per jam' : 'Permintaan per hari'}>\n <LineChart\n labels={(d?.seri ?? []).map((s) => label(s.waktu))}\n series={[\n { label: 'Permintaan', values: (d?.seri ?? []).map((s) => s.jumlah) },\n { label: 'Galat', values: (d?.seri ?? []).map((s) => s.galat), color: 'var(--u-danger)' },\n ]}\n loading={muat}\n height={200}\n />\n </Panel>\n {!ringkas && (\n <div className=\"u-log-summary-grid\">\n <Panel title=\"Endpoint teratas\" description=\"Path dengan ID digabung, mis. /v1/mahasiswa/{id}\">\n <BarList\n loading={muat}\n items={(d?.endpoint_teratas ?? []).map((e) => ({\n label: <code className=\"u-log-endpoint\">{e.endpoint}</code>,\n value: e.jumlah,\n secondary: `${formatNumber(e.ms_rata)} ms${e.galat ? ` · ${formatNumber(e.galat)} galat` : ''}`,\n }))}\n />\n </Panel>\n <div className=\"u-log-summary-col\">\n {!clientId && (\n <Panel title=\"Aplikasi teratas\">\n <BarList\n loading={muat}\n items={(d?.klien_teratas ?? []).map((k) => ({ label: <code>{k.client_id}</code>, value: k.jumlah, secondary: k.galat ? `${formatNumber(k.galat)} galat` : undefined }))}\n />\n </Panel>\n )}\n <Panel title=\"Sebaran status\">\n {muat ? <Skeleton style={{ height: 40 }} /> : <SegmentBar data={statusKel.map((s) => ({ ...s, color: warna[s.label] }))} format={(n) => formatNumber(n)} />}\n <ul className=\"u-log-status\">\n {(d?.status ?? []).map((s) => (\n <li key={s.status}>\n <Badge variant={nadaStatus(s.status)} shape=\"square\">\n {s.status}\n </Badge>\n <span>{formatNumber(s.jumlah)}</span>\n </li>\n ))}\n </ul>\n </Panel>\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ================================================================ Log aktivitas SSO\nexport interface BarisAudit {\n id: number;\n time: string;\n event: string;\n username: string;\n client_id: string;\n ip: string;\n detail: string;\n}\n\ntype Nada = 'success' | 'danger' | 'warning' | 'info' | 'neutral' | 'primary';\n/** Label dan nada tiap peristiwa SSO. */\nexport const PERISTIWA_SSO: Record<string, { label: string; nada: Nada; icon: React.ReactNode }> = {\n login: { label: 'Masuk', nada: 'success', icon: <LogIn /> },\n login_failed: { label: 'Gagal masuk', nada: 'danger', icon: <Ban /> },\n login_locked: { label: 'Akun dikunci sementara', nada: 'danger', icon: <ShieldAlert /> },\n login_suspicious: { label: 'Login mencurigakan', nada: 'warning', icon: <ShieldAlert /> },\n login_confirmed: { label: 'Login dikonfirmasi pengguna', nada: 'success', icon: <ShieldCheck /> },\n login_reported: { label: 'Login dilaporkan bukan pemilik', nada: 'danger', icon: <ShieldAlert /> },\n login_captcha_failed: { label: 'Captcha salah', nada: 'warning', icon: <Ban /> },\n logout: { label: 'Keluar', nada: 'neutral', icon: <LogOut /> },\n authorize: { label: 'Membuka aplikasi', nada: 'info', icon: <AppWindow /> },\n access_denied: { label: 'Akses aplikasi ditolak', nada: 'danger', icon: <Ban /> },\n token_authorization_code: { label: 'Token diterbitkan (login)', nada: 'info', icon: <KeyRound /> },\n token_refresh_token: { label: 'Token diperbarui', nada: 'info', icon: <KeyRound /> },\n password_reset_requested: { label: 'Minta reset password', nada: 'info', icon: <KeyRound /> },\n password_reset: { label: 'Password direset', nada: 'warning', icon: <KeyRound /> },\n password_reset_failed: { label: 'Reset password gagal', nada: 'danger', icon: <KeyRound /> },\n password_reset_mail_failed: { label: 'Email reset gagal terkirim', nada: 'warning', icon: <KeyRound /> },\n password_reset_unknown: { label: 'Reset untuk akun tak dikenal', nada: 'warning', icon: <KeyRound /> },\n session_revoked: { label: 'Sesi diakhiri', nada: 'warning', icon: <MonitorSmartphone /> },\n session_hijack_blocked: { label: 'Pembajakan sesi dicegah', nada: 'danger', icon: <ShieldAlert /> },\n device_trusted: { label: 'Perangkat dipercaya', nada: 'info', icon: <MonitorSmartphone /> },\n device_untrusted: { label: 'Perangkat tidak dipercaya lagi', nada: 'neutral', icon: <MonitorSmartphone /> },\n history_export: { label: 'Riwayat diunduh', nada: 'neutral', icon: <Activity /> },\n admin_client_create: { label: 'Aplikasi dibuat', nada: 'primary', icon: <Settings2 /> },\n admin_client_update: { label: 'Aplikasi diubah', nada: 'primary', icon: <Settings2 /> },\n admin_client_delete: { label: 'Aplikasi dihapus', nada: 'danger', icon: <Settings2 /> },\n admin_client_logo: { label: 'Logo aplikasi diganti', nada: 'primary', icon: <Settings2 /> },\n admin_client_secret: { label: 'Secret aplikasi diganti', nada: 'warning', icon: <KeyRound /> },\n admin_session_revoke: { label: 'Admin mengeluarkan pengguna', nada: 'warning', icon: <MonitorSmartphone /> },\n};\nexport const labelPeristiwa = (e: string) =>\n PERISTIWA_SSO[e] ??\n (e.startsWith('token_')\n ? { label: `Token diterbitkan (${e.slice(6).replace(/_/g, ' ')})`, nada: 'info' as Nada, icon: <KeyRound /> }\n : { label: e.replace(/_/g, ' '), nada: 'neutral' as Nada, icon: <Activity /> });\n\nconst GRUP: Array<{ value: string; label: string }> = [\n { value: 'login', label: 'Masuk & gagal masuk' },\n { value: 'logout', label: 'Keluar' },\n { value: 'authorize', label: 'Membuka aplikasi' },\n { value: 'access', label: 'Akses ditolak' },\n { value: 'password', label: 'Password' },\n { value: 'session', label: 'Sesi' },\n { value: 'token', label: 'Token' },\n { value: 'device', label: 'Perangkat' },\n { value: 'admin', label: 'Perubahan admin' },\n];\n\nexport interface LogAktivitasProps {\n username?: string;\n /** Batasi ke satu aplikasi SSO. */\n clientId?: string;\n /** Kelompok awal, mis. 'login' atau 'admin'. */\n grup?: string;\n perPage?: number;\n saringan?: boolean;\n /** Klik nama pengguna (mis. buka KeamananPengguna). */\n onPilihPengguna?: (username: string) => void;\n className?: string;\n}\n\n/**\n * Linimasa aktivitas SSO terbaru dulu: masuk, gagal masuk, keluar, membuka aplikasi, reset password, sesi dicabut,\n * dan perubahan aplikasi oleh admin. Chip jumlah per peristiwa bisa diklik untuk menyaring.\n */\nexport function LogAktivitas({ username, clientId, grup, perPage = 30, saringan = true, onPilihPengguna, className }: LogAktivitasProps) {\n const [f, setF] = React.useState<FilterValues>(grup ? { grup } : {});\n const [event, setEvent] = React.useState<string | null>(null);\n const [page, setPage] = React.useState(1);\n const tgl = (f.tanggal ?? {}) as DateRangeValue;\n const query = {\n username: username ?? ((f.username as string) || undefined),\n client_id: clientId,\n grup: (f.grup as string) || undefined,\n event: event ?? undefined,\n q: (f.q as string)?.trim() || undefined,\n dari: tgl.from,\n sampai: tgl.to,\n page,\n per_page: perPage,\n };\n const q = useSsoQuery<BarisAudit[]>(['audit', query], (sso, signal) => sso.request('GET', '/audit', { query, signal }));\n const meta = q.meta as { total?: number; last_page?: number; per_event?: Array<{ event: string; jumlah: number }> } | undefined;\n const ubah = (v: FilterValues) => {\n setF(v);\n setEvent(null);\n setPage(1);\n };\n return (\n <div className={cn('u-audit', className)}>\n {saringan && (\n <FilterBar\n value={f}\n onValueChange={ubah}\n search={{ placeholder: 'Cari pengguna, aplikasi, IP', key: 'q' }}\n resultCount={meta?.total}\n resultLabel=\"peristiwa\"\n fields={[\n { key: 'grup', label: 'Jenis', type: 'select', options: GRUP },\n { key: 'tanggal', label: 'Tanggal', type: 'date-range' },\n ]}\n />\n )}\n {meta?.per_event && meta.per_event.length > 1 && (\n <div className=\"u-audit-chips\" role=\"group\" aria-label=\"Saring per peristiwa\">\n {meta.per_event.slice(0, 8).map((p) => {\n const l = labelPeristiwa(p.event);\n const on = event === p.event;\n return (\n <button key={p.event} type=\"button\" data-on={on ? '' : undefined} data-tone={l.nada} onClick={() => (setEvent(on ? null : p.event), setPage(1))}>\n {l.label}\n <span>{formatNumber(p.jumlah)}</span>\n </button>\n );\n })}\n </div>\n )}\n {q.error && !q.data ? (\n <Alert\n variant=\"danger\"\n title=\"Log aktivitas gagal dimuat\"\n actions={\n <Button size=\"sm\" variant=\"outline\" onClick={q.refetch}>\n Coba lagi\n </Button>\n }\n >\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n ) : q.loading && !q.data ? (\n <div className=\"u-audit-list\">\n {[0, 1, 2, 3].map((i) => (\n <Skeleton key={i} style={{ height: 52 }} />\n ))}\n </div>\n ) : !q.data?.length ? (\n <Empty bordered icon={<Activity />} title=\"Belum ada aktivitas\" description=\"Tidak ada peristiwa yang cocok dengan saringan ini.\" />\n ) : (\n <ol className=\"u-audit-list\" data-loading={q.loading ? '' : undefined}>\n {q.data.map((r) => {\n const l = labelPeristiwa(r.event);\n return (\n <li key={r.id}>\n <span className=\"u-audit-icon\" data-tone={l.nada} aria-hidden>\n {l.icon}\n </span>\n <div className=\"u-audit-body\">\n <p>\n <strong>{l.label}</strong>\n {r.username && (\n <>\n {' · '}\n {onPilihPengguna ? (\n <button type=\"button\" className=\"u-audit-user\" onClick={() => onPilihPengguna(r.username)}>\n {r.username}\n </button>\n ) : (\n <span className=\"u-audit-user\">{r.username}</span>\n )}\n </>\n )}\n </p>\n <p className=\"u-audit-meta\">\n {r.client_id && !clientId && <code>{r.client_id}</code>}\n {r.ip && <span>{r.ip}</span>}\n {r.detail && <span className=\"u-audit-detail\">{r.detail}</span>}\n </p>\n </div>\n <time dateTime={r.time} title={`${formatDate(r.time, 'long')} ${formatTime(r.time)}`}>\n {formatRelative(r.time)}\n </time>\n </li>\n );\n })}\n </ol>\n )}\n {(meta?.last_page ?? 1) > 1 && <Pagination page={page} totalPages={meta!.last_page!} total={meta?.total} perPage={perPage} onPageChange={setPage} />}\n </div>\n );\n}\n\n// ================================================================ Keamanan akun pengguna\nexport interface KeamananPenggunaData {\n username: string;\n sessions: Array<{ id: string; device: string; user_agent: string; ip: string; last_ip?: string; auth_time: string; last_seen: string; expires_at: string }>;\n history: Array<{ time: string; status: string; device: string; ip: string; flags: string[]; suspicious: boolean }>;\n}\n\nconst STATUS_LOGIN: Record<string, { label: string; nada: BadgeVariant }> = {\n ok: { label: 'Berhasil', nada: 'success' },\n gagal: { label: 'Gagal', nada: 'danger' },\n diblokir: { label: 'Diblokir', nada: 'danger' },\n diakhiri: { label: 'Sesi diakhiri', nada: 'neutral' },\n};\nconst FLAG: Record<string, string> = {\n perangkat_baru: 'Perangkat baru',\n jaringan_baru: 'Jaringan baru',\n setelah_gagal: 'Setelah gagal',\n dipercaya: 'Perangkat tepercaya',\n ip_berubah: 'IP berubah',\n browser_lain: 'Browser lain',\n};\n\n/**\n * Keamanan akun satu pengguna untuk admin/helpdesk: sesi SSO aktif per perangkat, riwayat login dengan tanda mencurigakan,\n * dan tombol keluarkan dari semua perangkat.\n */\nexport function KeamananPengguna({ username, limit = 30, className }: { username: string; limit?: number; className?: string }) {\n const sso = useSsoAdmin();\n const q = useSsoQuery<KeamananPenggunaData>(['security', username, limit], (s, signal) => s.request('GET', `/users/${encodeURIComponent(username)}/security`, { query: { limit }, signal }));\n const [cabut, setCabut] = React.useState(false);\n const [info, setInfo] = React.useState<string | null>(null);\n const d = q.data;\n const kolom: DataColumn<KeamananPenggunaData['history'][number]>[] = [\n { key: 'time', header: 'Waktu', cell: (r) => `${formatDate(r.time, 'medium')} ${formatTime(r.time)}`, mobile: 'subtitle' },\n {\n key: 'status',\n header: 'Hasil',\n shrink: true,\n cell: (r) => {\n const s = STATUS_LOGIN[r.status] ?? { label: r.status, nada: 'neutral' as BadgeVariant };\n return <Badge variant={s.nada}>{s.label}</Badge>;\n },\n mobile: 'badge',\n },\n { key: 'device', header: 'Perangkat', mobile: 'title' },\n { key: 'ip', header: 'IP', cell: (r) => <code>{r.ip}</code> },\n {\n key: 'flags',\n header: 'Tanda',\n cell: (r) =>\n r.suspicious || r.flags.length ? (\n <span className=\"u-app-badges\">\n {r.suspicious && <Badge variant=\"warning\">Mencurigakan</Badge>}\n {r.flags.map((x) => (\n <Badge key={x} variant=\"outline\">\n {FLAG[x] ?? x}\n </Badge>\n ))}\n </span>\n ) : (\n '–'\n ),\n },\n ];\n if (q.error && !d)\n return (\n <Alert variant=\"danger\" title=\"Data keamanan akun gagal dimuat\">\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n );\n return (\n <div className={cn('u-security', className)}>\n {info && (\n <Alert variant=\"success\" onClick={() => setInfo(null)}>\n {info}\n </Alert>\n )}\n <Panel\n title=\"Sesi aktif\"\n description={d ? `${d.sessions.length} perangkat sedang masuk sebagai ${username}` : undefined}\n actions={\n <Button variant=\"destructive-soft\" size=\"sm\" disabled={!d?.sessions.length || !sso} onClick={() => setCabut(true)}>\n <LogOut /> Keluarkan dari semua perangkat\n </Button>\n }\n >\n {q.loading && !d ? (\n <Skeleton style={{ height: 96 }} />\n ) : d?.sessions.length ? (\n <ul className=\"u-sessions\">\n {d.sessions.map((s) => (\n <li key={s.id}>\n <span className=\"u-sessions-icon\" aria-hidden>\n <MonitorSmartphone />\n </span>\n <div>\n <strong>{s.device}</strong>\n <p>\n <code>{s.last_ip || s.ip}</code> · masuk {formatRelative(s.auth_time)} · aktif {formatRelative(s.last_seen)}\n </p>\n </div>\n <small>berakhir {formatDate(s.expires_at, 'medium')}</small>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"u-app-muted\">Tidak ada sesi aktif.</p>\n )}\n </Panel>\n <Panel title=\"Riwayat login\" description=\"Termasuk percobaan yang gagal dan tanda mencurigakan.\">\n <DataTable\n columns={kolom}\n rows={d?.history}\n rowKey={(r) => `${r.time}${r.ip}${r.status}`}\n loading={q.loading}\n columnToggle={false}\n densityToggle={false}\n defaultDensity=\"compact\"\n empty={{ title: 'Belum ada riwayat login' }}\n />\n </Panel>\n <ConfirmDialog\n open={cabut}\n onOpenChange={setCabut}\n title={`Keluarkan ${username} dari semua perangkat?`}\n description=\"Semua sesi SSO pengguna ini berakhir; mereka harus memasukkan password lagi. Sesi yang sudah terbuka di aplikasi lain tetap berjalan sampai sesi aplikasi itu berakhir.\"\n confirmLabel=\"Keluarkan\"\n tone=\"danger\"\n onConfirm={async () => {\n const r = await sso!.request<{ revoked: number }>('POST', `/users/${encodeURIComponent(username)}/revoke`);\n setInfo(`${formatNumber(r.data.revoked)} sesi diakhiri.`);\n invalidateSso();\n }}\n />\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { AppWindow, Eye, EyeOff, Globe, ImagePlus, KeyRound, LayoutGrid, List, Lock, Pencil, Plus, RefreshCw, Search, Server, ShieldCheck, Smartphone, TriangleAlert, Users } from 'lucide-react';\nimport type { Siakad } from 'unipo-siakad-sdk';\nimport { cn } from '../lib/cn';\nimport { formatDate, formatNumber } from '../lib/format';\nimport { Badge, Button, Skeleton } from '../components/actions';\nimport { Alert, Avatar, Card, DescriptionList, Empty, Tabs } from '../components/display';\nimport { StatCard, StatGrid } from '../components/charts';\nimport { CodeBlock, CopyButton } from '../components/code';\nimport { Checkbox, Field, Input, InputGroup, SegmentedControl, Switch, Textarea } from '../components/forms';\nimport { ConfirmDialog, Dialog, Sheet } from '../components/overlays';\nimport { Wizard, WizardReview, FormGrid } from '../components/wizard';\nimport { DataTable, type DataColumn } from '../components/data-table';\nimport { invalidateSiakad, pesanGalat, useOptionalSiakad, useSiakadQuery, type QueryState } from './provider';\nimport { KodeLaporan } from '../components/galat';\nimport { LogAktivitas, LogApi, RingkasanLogApi } from './log';\n\n/*\n * Komponen pengelolaan aplikasi integrasi (Pustikom): satu aplikasi = entri katalog hak akses SIAKAD (/v1/rbac/aplikasi)\n * + klien login SSO (API admin SSO, lewat BFF) + klien API SIAKAD (/v1/rbac/klien-api). Daftar, kartu, detail, ubah,\n * wizard pembuatan, tampilan secret sekali lihat, dan pemilih scope.\n */\n\n// ================================================================ Klien API admin SSO\nexport class SsoAdminError extends Error {\n constructor(\n public status: number,\n public code: string,\n message: string,\n ) {\n super(message);\n this.name = 'SsoAdminError';\n }\n}\n\nexport interface SsoAdminClient {\n request<T = unknown>(\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n path: string,\n opts?: { query?: Record<string, unknown>; body?: unknown; signal?: AbortSignal },\n ): Promise<{ data: T; meta?: Record<string, any> }>;\n}\n\nexport interface SsoAdminOptions {\n /** Alamat BFF yang meneruskan ke /api/admin SSO (bawaan '/bff/sso'). Jangan panggil SSO langsung dari browser: butuh client secret. */\n baseUrl?: string;\n /** Header tambahan per permintaan, mis. () => ({ 'X-CSRF-Token': csrf }). */\n headers?: () => Record<string, string>;\n /** Kirim PUT/PATCH/DELETE sebagai POST + X-HTTP-Method-Override (untuk hosting yang menolak metode itu). */\n methodOverride?: boolean;\n fetch?: typeof fetch;\n}\n\n/** Klien API admin SSO lewat BFF aplikasi Anda (cookie sesi + CSRF). */\nexport function createSsoAdmin({ baseUrl = '/bff/sso', headers, methodOverride, fetch: f }: SsoAdminOptions = {}): SsoAdminClient {\n return {\n async request(method, path, opts = {}) {\n const q = Object.entries(opts.query ?? {}).filter(([, v]) => v != null && v !== '');\n const url = `${baseUrl.replace(/\\/$/, '')}${path}${q.length ? `?${new URLSearchParams(q.map(([k, v]) => [k, String(v)]))}` : ''}`;\n const h: Record<string, string> = { Accept: 'application/json', ...headers?.() };\n if (opts.body !== undefined) h['Content-Type'] = 'application/json';\n let m: string = method;\n if (methodOverride && method !== 'GET' && method !== 'POST') {\n h['X-HTTP-Method-Override'] = method;\n m = 'POST';\n }\n const res = await (f ?? fetch)(url, { method: m, headers: h, body: opts.body === undefined ? undefined : JSON.stringify(opts.body), credentials: 'same-origin', signal: opts.signal });\n const json = (await res.json().catch(() => null)) as { data?: unknown; meta?: Record<string, any>; error?: { code?: string; message?: string } } | null;\n if (!res.ok) throw new SsoAdminError(res.status, json?.error?.code ?? 'error', json?.error?.message ?? `SSO menjawab ${res.status}.`);\n return { data: json?.data as never, meta: json?.meta };\n },\n };\n}\n\nconst SsoContext = React.createContext<SsoAdminClient | null>(null);\n/** Pasang klien admin SSO untuk komponen aplikasi, log aktivitas, dan keamanan pengguna. */\nexport function SsoAdminProvider({ client, children }: { client: SsoAdminClient; children: React.ReactNode }) {\n return <SsoContext.Provider value={client}>{children}</SsoContext.Provider>;\n}\nexport function useSsoAdmin(): SsoAdminClient | null {\n return React.useContext(SsoContext);\n}\n\nconst ssoListeners = new Set<() => void>();\n/** Muat ulang semua data SSO yang tampil (setelah menyimpan). */\nexport function invalidateSso() {\n ssoListeners.forEach((l) => l());\n}\n\n/** Query sederhana ke API admin SSO (tanpa cache bersama). */\nexport function useSsoQuery<T>(\n key: ReadonlyArray<unknown>,\n fn: (sso: SsoAdminClient, signal: AbortSignal) => Promise<{ data: T; meta?: Record<string, any> }>,\n opts: { enabled?: boolean } = {},\n): QueryState<T> {\n const sso = useSsoAdmin();\n const k = JSON.stringify(key);\n const enabled = opts.enabled ?? true;\n const [nonce, setNonce] = React.useState(0);\n const [st, setSt] = React.useState<{ r?: { data: T; meta?: Record<string, any> }; loading: boolean; error: Error | null }>({ loading: enabled, error: null });\n const fnRef = React.useRef(fn);\n fnRef.current = fn;\n React.useEffect(() => {\n const l = () => setNonce((n) => n + 1);\n ssoListeners.add(l);\n return () => void ssoListeners.delete(l);\n }, []);\n React.useEffect(() => {\n if (!enabled) return void setSt((s) => ({ ...s, loading: false }));\n if (!sso) return void setSt({ loading: false, error: new SsoAdminError(0, 'no_client', 'Klien admin SSO belum dipasang (<SsoAdminProvider>).') });\n const ctrl = new AbortController();\n setSt((s) => ({ ...s, loading: true, error: null }));\n fnRef\n .current(sso, ctrl.signal)\n .then((r) => !ctrl.signal.aborted && setSt({ r, loading: false, error: null }))\n .catch((e: Error) => !ctrl.signal.aborted && e?.name !== 'AbortError' && setSt((s) => ({ ...s, loading: false, error: e })));\n return () => ctrl.abort();\n }, [k, sso, enabled, nonce]);\n return { data: st.r?.data, meta: st.r?.meta as never, loading: st.loading, error: st.error, refetch: () => setNonce((n) => n + 1) };\n}\n\n// ================================================================ Tipe\nexport type JenisAplikasi = 'web' | 'mobile' | 'layanan' | 'api';\n\n/** Aplikasi di katalog hak akses SIAKAD (/v1/rbac/aplikasi). */\nexport interface AplikasiRbac {\n id: number;\n kode: string;\n nama: string;\n keterangan?: string | null;\n jenis: JenisAplikasi;\n url?: string | null;\n client_id_api?: string | null;\n client_id_sso?: string | null;\n sistem?: boolean;\n aktif: boolean;\n urut?: number;\n created_at?: string | null;\n}\n\n/** Klien login SSO (/api/admin/clients). */\nexport interface KlienSso {\n id: string;\n name: string;\n description?: string;\n redirect_uris: string[];\n post_logout_redirect_uris: string[];\n frontchannel_logout_uri?: string;\n levels?: string[];\n permission?: string;\n portal_url?: string;\n active: boolean;\n logo_url?: string | null;\n admin?: boolean;\n created_at?: string;\n updated_at?: string;\n}\n\n/** Klien API SIAKAD (/v1/rbac/klien-api). */\nexport interface KlienApi {\n id: string;\n name: string;\n scopes: string[];\n allow_user_login: boolean;\n trust_user_ip?: boolean;\n sso_audience?: string | null;\n allowed_ips: string[];\n allowed_origins: string[];\n prodi?: string[];\n rate_limit?: number | null;\n active: boolean;\n created_at?: string;\n logo_uri?: string | null;\n lingkungan?: 'live' | 'development' | string;\n}\n\n/** Satu aplikasi nyata: gabungan katalog, klien SSO, dan klien API. */\nexport interface AplikasiTerpadu {\n kunci: string;\n kode: string;\n nama: string;\n keterangan?: string | null;\n jenis: JenisAplikasi;\n url: string | null;\n logo: string | null;\n aktif: boolean;\n bawaan: boolean;\n /** Login SSO dibatasi izin <kode>.akses. */\n terbatas: boolean;\n rbac?: AplikasiRbac;\n sso?: KlienSso;\n api?: KlienApi;\n}\n\n// ================================================================ Data\nconst A = '/v1/rbac';\nconst sekali = { staleTime: 60_000 };\n\nexport function useAplikasiRbac() {\n return useSiakadQuery<AplikasiRbac[]>(['rbac', 'aplikasi'], (s, signal) => s.request({ method: 'GET', path: `${A}/aplikasi`, query: { per_page: 100 } }, { signal }), sekali);\n}\nexport function useKlienApi() {\n return useSiakadQuery<KlienApi[]>(['rbac', 'klien-api'], (s, signal) => s.request({ method: 'GET', path: `${A}/klien-api` }, { signal }), sekali);\n}\n/** Katalog scope API: { 'krs:read': 'Baca KRS', ... }. */\nexport function useKatalogScope() {\n return useSiakadQuery<Record<string, string>>(['rbac', 'scope'], (s, signal) => s.request({ method: 'GET', path: `${A}/klien-api/scope` }, { signal }), { staleTime: 10 * 60_000 });\n}\nexport function usePeranRbac() {\n return useSiakadQuery<Array<{ id: number; kode: string; nama: string; aktif: boolean; level_siakad?: string | null }>>(\n ['rbac', 'peran'],\n (s, signal) => s.request({ method: 'GET', path: `${A}/peran`, query: { per_page: 100 } }, { signal }),\n sekali,\n );\n}\nexport function useKlienSso() {\n return useSsoQuery<KlienSso[]>(['clients'], (sso, signal) => sso.request('GET', '/clients', { signal }));\n}\n\n/** Client ID SSO dari kode aplikasi (SSO hanya menerima huruf kecil, angka, garis bawah). */\nexport const idSsoDariKode = (kode: string) => kode.replace(/-/g, '_');\n\n/**\n * Gabungkan katalog, klien SSO, dan klien API menjadi satu baris per aplikasi. Urutan pencocokan: tautan tersimpan\n * (client_id_sso / client_id_api), client ID sama dengan kode, lalu sso_audience klien API. Klien tanpa pasangan tampil sendiri.\n */\nexport function gabungAplikasi(rbac: AplikasiRbac[], sso: KlienSso[], api: KlienApi[]): AplikasiTerpadu[] {\n const pakaiSso = new Set<string>();\n const pakaiApi = new Set<string>();\n const hasil: AplikasiTerpadu[] = rbac.map((a) => {\n const s = sso.find((c) => c.id === a.client_id_sso) ?? sso.find((c) => !a.client_id_sso && c.id === idSsoDariKode(a.kode));\n if (s) pakaiSso.add(s.id);\n const k = api.find((c) => c.id === a.client_id_api) ?? (a.client_id_api ? undefined : api.find((c) => !pakaiApi.has(c.id) && (c.id === a.kode || (s && c.sso_audience === s.id))));\n if (k) pakaiApi.add(k.id);\n return {\n kunci: a.kode,\n kode: a.kode,\n nama: a.nama,\n keterangan: a.keterangan,\n jenis: a.jenis,\n url: a.url || s?.portal_url || null,\n logo: s?.logo_url ?? k?.logo_uri ?? null,\n aktif: a.aktif && (s ? s.active : true) && (k ? k.active : true),\n bawaan: !!a.sistem,\n terbatas: !!s?.permission,\n rbac: a,\n sso: s,\n api: k,\n };\n });\n for (const s of sso) {\n if (pakaiSso.has(s.id) || s.admin) continue;\n hasil.push({\n kunci: `sso:${s.id}`,\n kode: s.id,\n nama: s.name,\n keterangan: s.description,\n jenis: 'web',\n url: s.portal_url || null,\n logo: s.logo_url ?? null,\n aktif: s.active,\n bawaan: false,\n terbatas: !!s.permission,\n sso: s,\n });\n }\n for (const k of api) {\n if (pakaiApi.has(k.id)) continue;\n hasil.push({ kunci: `api:${k.id}`, kode: k.id, nama: k.name, jenis: 'api', url: null, logo: k.logo_uri ?? null, aktif: k.active, bawaan: false, terbatas: false, api: k });\n }\n return hasil;\n}\n\nexport interface AplikasiTerpaduState {\n data: AplikasiTerpadu[] | undefined;\n loading: boolean;\n error: Error | null;\n /** Galat sumber yang tidak wajib (SSO atau klien API), ditampilkan sebagai peringatan. */\n peringatan: string[];\n refetch: () => void;\n}\n\n/** Semua aplikasi integrasi, sudah digabung. Bila SSO belum terpasang, daftar tetap tampil dari SIAKAD. */\nexport function useAplikasiTerpadu(): AplikasiTerpaduState {\n const rbac = useAplikasiRbac();\n const sso = useKlienSso();\n const api = useKlienApi();\n const data = React.useMemo(() => (rbac.data ? gabungAplikasi(rbac.data, sso.data ?? [], api.data ?? []) : undefined), [rbac.data, sso.data, api.data]);\n const peringatan = [sso.error && `Data login SSO tidak terbaca: ${pesanGalat(sso.error)}`, api.error && `Klien API tidak terbaca: ${pesanGalat(api.error)}`].filter(Boolean) as string[];\n return {\n data,\n loading: rbac.loading || (sso.loading && !sso.data) || (api.loading && !api.data),\n error: rbac.error,\n peringatan,\n refetch: () => {\n rbac.refetch();\n sso.refetch();\n api.refetch();\n },\n };\n}\n\nconst daftarTeks = (t: string) =>\n t\n .split(/[\\n,]+/)\n .map((x) => x.trim())\n .filter(Boolean);\nconst hostDari = (u?: string | null) => (u ? u.replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '') : '');\nconst JENIS: Record<JenisAplikasi, { label: string; pendek: string; icon: React.ReactNode }> = {\n web: { label: 'Aplikasi web', pendek: 'Web', icon: <Globe /> },\n mobile: { label: 'Aplikasi mobile', pendek: 'Mobile', icon: <Smartphone /> },\n layanan: { label: 'Layanan server', pendek: 'Server', icon: <Server /> },\n api: { label: 'Integrasi API', pendek: 'API', icon: <KeyRound /> },\n};\n\n// ================================================================ Tampilan kecil\n/** Logo aplikasi; tanpa gambar memakai inisial berwarna tetap. */\nexport function IkonAplikasi({ nama, src, size = 'md', className }: { nama: string; src?: string | null; size?: 'sm' | 'md' | 'lg' | 'xl'; className?: string }) {\n return <Avatar name={nama || '?'} src={src ?? undefined} size={size} shape=\"square\" className={cn('u-app-icon', className)} />;\n}\n\n/** Lencana status aplikasi: aktif/nonaktif, login SSO, klien API, login terbatas, bawaan, lingkungan data. */\nexport function LencanaAplikasi({ aplikasi: a, className }: { aplikasi: AplikasiTerpadu; className?: string }) {\n return (\n <span className={cn('u-app-badges', className)}>\n <Badge variant={a.aktif ? 'success' : 'neutral'} dot>\n {a.aktif ? 'Aktif' : 'Nonaktif'}\n </Badge>\n {a.sso && <Badge variant=\"info\">SSO</Badge>}\n {a.api && <Badge variant=\"primary\">API</Badge>}\n {a.terbatas && (\n <Badge variant=\"warning\">\n <Lock aria-hidden /> Terbatas\n </Badge>\n )}\n {a.api?.lingkungan && a.api.lingkungan !== 'live' && <Badge variant=\"outline\">Development</Badge>}\n {a.bawaan && <Badge variant=\"outline\">Bawaan</Badge>}\n </span>\n );\n}\n\nexport interface KartuAplikasiProps {\n aplikasi: AplikasiTerpadu;\n onPilih?: (a: AplikasiTerpadu) => void;\n href?: string;\n /** Isi kaki kartu (tombol). */\n aksi?: React.ReactNode;\n className?: string;\n}\n\n/** Kartu satu aplikasi: logo, nama, alamat, lencana, dan ringkasan scope/redirect. */\nexport function KartuAplikasi({ aplikasi: a, onPilih, href, aksi, className }: KartuAplikasiProps) {\n const isi = (\n <>\n <div className=\"u-app-card-head\">\n <IkonAplikasi nama={a.nama} src={a.logo} size=\"lg\" />\n <div className=\"u-app-card-title\">\n <strong>{a.nama}</strong>\n <span>{a.url ? hostDari(a.url) : <code>{a.kode}</code>}</span>\n </div>\n </div>\n {a.keterangan && <p className=\"u-app-card-desc\">{a.keterangan}</p>}\n <LencanaAplikasi aplikasi={a} />\n <dl className=\"u-app-card-meta\">\n <div>\n <dt>Jenis</dt>\n <dd>{JENIS[a.jenis]?.label ?? a.jenis}</dd>\n </div>\n <div>\n <dt>Scope API</dt>\n <dd>{a.api ? formatNumber(a.api.scopes.length) : '–'}</dd>\n </div>\n <div>\n <dt>Callback</dt>\n <dd>{a.sso ? formatNumber(a.sso.redirect_uris.length) : '–'}</dd>\n </div>\n </dl>\n {aksi && <div className=\"u-app-card-actions\">{aksi}</div>}\n </>\n );\n if (href)\n return (\n <Card render={<a href={href} />} interactive className={cn('u-app-card', className)}>\n {isi}\n </Card>\n );\n return (\n <Card\n interactive={!!onPilih}\n className={cn('u-app-card', className)}\n {...(onPilih ? { role: 'button', tabIndex: 0, onClick: () => onPilih(a), onKeyDown: (e: React.KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && (e.preventDefault(), onPilih(a)) } : {})}\n >\n {isi}\n </Card>\n );\n}\n\n// ================================================================ Daftar aplikasi\ntype Saring = 'semua' | 'sso' | 'api' | 'nonaktif';\n\nexport interface DaftarAplikasiProps {\n /** Klik kartu/baris. Bawaan: buka panel detail. */\n onPilih?: (a: AplikasiTerpadu) => void;\n /** Tautan per aplikasi (mengganti panel detail). */\n href?: (a: AplikasiTerpadu) => string;\n /** Tampilan awal. */\n tampilan?: 'kartu' | 'tabel';\n /** Tombol \"Aplikasi baru\" membuka wizard (bawaan true). */\n bolehBuat?: boolean;\n /** Dipanggil setelah wizard membuat aplikasi. */\n onDibuat?: (h: HasilAplikasiBaru) => void;\n /** Tampilkan kartu angka di atas (bawaan true). */\n statistik?: boolean;\n className?: string;\n}\n\n/**\n * Daftar aplikasi integrasi untuk admin: angka ringkas, pencarian, saringan (SSO, API, nonaktif), kartu atau tabel,\n * panel detail, dan wizard aplikasi baru.\n */\nexport function DaftarAplikasi({ onPilih, href, tampilan: awal = 'kartu', bolehBuat = true, onDibuat, statistik = true, className }: DaftarAplikasiProps) {\n const q = useAplikasiTerpadu();\n const [cari, setCari] = React.useState('');\n const [saring, setSaring] = React.useState<Saring>('semua');\n const [tampilan, setTampilan] = React.useState(awal);\n const [pilih, setPilih] = React.useState<string | null>(null);\n const [wizard, setWizard] = React.useState(false);\n const semua = q.data ?? [];\n const kata = cari.trim().toLowerCase();\n const baris = semua.filter(\n (a) =>\n (saring === 'semua' || (saring === 'sso' && a.sso) || (saring === 'api' && a.api) || (saring === 'nonaktif' && !a.aktif)) &&\n (!kata || [a.nama, a.kode, a.url, a.sso?.id, a.api?.id].some((x) => x?.toLowerCase().includes(kata))),\n );\n const buka = (a: AplikasiTerpadu) => (onPilih ? onPilih(a) : setPilih(a.kunci));\n\n const kolom: DataColumn<AplikasiTerpadu>[] = [\n {\n key: 'nama',\n header: 'Aplikasi',\n value: (a) => a.nama,\n sortable: true,\n cell: (a) => (\n <span className=\"u-app-cell\">\n <IkonAplikasi nama={a.nama} src={a.logo} size=\"sm\" />\n <span>\n <strong>{a.nama}</strong>\n <small>{a.url ? hostDari(a.url) : a.kode}</small>\n </span>\n </span>\n ),\n },\n { key: 'jenis', header: 'Jenis', value: (a) => JENIS[a.jenis]?.label ?? a.jenis, mobile: 'meta' },\n { key: 'sso', header: 'Client SSO', value: (a) => a.sso?.id ?? '', cell: (a) => (a.sso ? <code>{a.sso.id}</code> : '–'), mobile: 'meta' },\n { key: 'api', header: 'Klien API', value: (a) => a.api?.id ?? '', cell: (a) => (a.api ? <code>{a.api.id}</code> : '–'), mobile: 'meta' },\n { key: 'status', header: 'Status', value: (a) => (a.aktif ? 'Aktif' : 'Nonaktif'), cell: (a) => <LencanaAplikasi aplikasi={a} />, mobile: 'badge' },\n ];\n\n return (\n <div className={cn('u-app-list', className)}>\n {statistik && (\n <StatGrid>\n <StatCard label=\"Aplikasi\" value={formatNumber(semua.length)} icon={<AppWindow />} loading={q.loading && !q.data} />\n <StatCard label=\"Aktif\" value={formatNumber(semua.filter((a) => a.aktif).length)} icon={<ShieldCheck />} tone=\"success\" loading={q.loading && !q.data} />\n <StatCard label=\"Login SSO\" value={formatNumber(semua.filter((a) => a.sso).length)} icon={<Users />} tone=\"info\" loading={q.loading && !q.data} />\n <StatCard label=\"Klien API\" value={formatNumber(semua.filter((a) => a.api).length)} icon={<KeyRound />} tone=\"warning\" loading={q.loading && !q.data} />\n </StatGrid>\n )}\n {q.peringatan.map((p) => (\n <Alert key={p} variant=\"warning\">\n {p}\n </Alert>\n ))}\n <div className=\"u-app-toolbar\">\n <InputGroup start={<Search />} className=\"u-app-search\">\n <Input value={cari} onChange={(e) => setCari(e.target.value)} placeholder=\"Cari nama, kode, client ID\" aria-label=\"Cari aplikasi\" />\n </InputGroup>\n <SegmentedControl<Saring>\n value={saring}\n onValueChange={setSaring}\n options={[\n { value: 'semua', label: 'Semua' },\n { value: 'sso', label: 'SSO' },\n { value: 'api', label: 'API' },\n { value: 'nonaktif', label: 'Nonaktif' },\n ]}\n aria-label=\"Saring aplikasi\"\n />\n <span className=\"u-app-toolbar-end\">\n <SegmentedControl<'kartu' | 'tabel'>\n value={tampilan}\n onValueChange={setTampilan}\n options={[\n { value: 'kartu', label: <LayoutGrid />, 'aria-label': 'Tampilan kartu' },\n { value: 'tabel', label: <List />, 'aria-label': 'Tampilan tabel' },\n ]}\n />\n {bolehBuat && (\n <Button onClick={() => setWizard(true)}>\n <Plus /> Aplikasi baru\n </Button>\n )}\n </span>\n </div>\n\n {q.error ? (\n <Alert\n variant=\"danger\"\n title=\"Daftar aplikasi gagal dimuat\"\n actions={\n <Button size=\"sm\" variant=\"outline\" onClick={q.refetch}>\n Coba lagi\n </Button>\n }\n >\n {pesanGalat(q.error, { kode: false })}\n <KodeLaporan error={q.error} />\n </Alert>\n ) : tampilan === 'kartu' ? (\n q.loading && !q.data ? (\n <div className=\"u-app-grid\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} style={{ height: 196 }} />\n ))}\n </div>\n ) : baris.length ? (\n <div className=\"u-app-grid\">\n {baris.map((a) => (\n <KartuAplikasi key={a.kunci} aplikasi={a} href={href?.(a)} onPilih={href ? undefined : buka} />\n ))}\n </div>\n ) : (\n <Empty\n bordered\n icon={<AppWindow />}\n title={semua.length ? 'Tidak ada aplikasi yang cocok' : 'Belum ada aplikasi'}\n description={semua.length ? 'Ubah kata kunci atau saringan.' : 'Daftarkan aplikasi pertama untuk memberi login SSO dan akses API.'}\n actions={\n semua.length ? (\n <Button variant=\"outline\" onClick={() => (setCari(''), setSaring('semua'))}>\n Hapus saringan\n </Button>\n ) : bolehBuat ? (\n <Button onClick={() => setWizard(true)}>\n <Plus /> Aplikasi baru\n </Button>\n ) : undefined\n }\n />\n )\n ) : (\n <DataTable\n columns={kolom}\n rows={baris}\n rowKey={(a) => a.kunci}\n loading={q.loading}\n onRowClick={href ? (a) => (window.location.href = href(a)) : buka}\n columnToggle={false}\n filtered={!!kata || saring !== 'semua'}\n emptyFiltered={{ onReset: () => (setCari(''), setSaring('semua')) }}\n empty={{ icon: <AppWindow />, title: 'Belum ada aplikasi' }}\n />\n )}\n\n {!onPilih && !href && <SheetDetailAplikasi kode={pilih} open={pilih != null} onOpenChange={(o) => !o && setPilih(null)} />}\n {bolehBuat && (\n <WizardAplikasi\n open={wizard}\n onOpenChange={setWizard}\n onSelesai={(h) => {\n onDibuat?.(h);\n q.refetch();\n }}\n />\n )}\n </div>\n );\n}\n\n// ================================================================ Detail aplikasi\nexport type TabDetailAplikasi = 'ringkasan' | 'sso' | 'api' | 'log' | 'aktivitas';\n\nexport interface DetailAplikasiProps {\n /** Kode aplikasi (atau `sso:<id>` / `api:<id>` untuk klien tanpa katalog). */\n kode?: string | null;\n /** Data siap pakai (mis. dari daftar); tanpa ini diambil dari API. */\n aplikasi?: AplikasiTerpadu;\n tab?: TabDetailAplikasi;\n onTabChange?: (t: TabDetailAplikasi) => void;\n /** Tombol \"Ubah\" (bawaan: panel FormAplikasi). */\n onUbah?: (a: AplikasiTerpadu) => void;\n className?: string;\n}\n\n/** Halaman detail aplikasi: kepala dengan aksi, lalu tab ringkasan, login SSO, klien API, log API, dan log aktivitas. */\nexport function DetailAplikasi({ kode, aplikasi, tab, onTabChange, onUbah, className }: DetailAplikasiProps) {\n const q = useAplikasiTerpadu();\n const a = aplikasi ?? q.data?.find((x) => x.kunci === kode || x.kode === kode);\n const [ubah, setUbah] = React.useState(false);\n if (!a) {\n if (q.loading) return <Skeleton style={{ height: 320 }} />;\n return <Empty bordered icon={<AppWindow />} title=\"Aplikasi tidak ditemukan\" description={q.error ? pesanGalat(q.error) : `Tidak ada aplikasi dengan kode ${kode ?? ''}.`} />;\n }\n const items: Array<{ value: TabDetailAplikasi; label: string; content: React.ReactNode; disabled?: boolean }> = [\n { value: 'ringkasan', label: 'Ringkasan', content: <TabRingkasan a={a} /> },\n { value: 'sso', label: 'Login SSO', content: <TabSso a={a} /> },\n { value: 'api', label: 'Klien API', content: <TabApi a={a} /> },\n {\n value: 'log',\n label: 'Log API',\n content: a.api ? <LogApi clientId={a.api.id} /> : <Empty title=\"Belum punya klien API\" description=\"Log permintaan API muncul setelah aplikasi memakai klien API SIAKAD.\" />,\n disabled: !a.api,\n },\n { value: 'aktivitas', label: 'Aktivitas login', content: a.sso ? <LogAktivitas clientId={a.sso.id} /> : <Empty title=\"Belum memakai login SSO\" />, disabled: !a.sso },\n ];\n return (\n <div className={cn('u-app-detail', className)}>\n <header className=\"u-app-detail-head\">\n <IkonAplikasi nama={a.nama} src={a.logo} size=\"xl\" />\n <div className=\"u-app-detail-title\">\n <h2>{a.nama}</h2>\n <p>\n {a.url ? (\n <a href={a.url} target=\"_blank\" rel=\"noreferrer\">\n {hostDari(a.url)}\n </a>\n ) : (\n <code>{a.kode}</code>\n )}\n <span aria-hidden> · </span>\n {JENIS[a.jenis]?.label ?? a.jenis}\n </p>\n <LencanaAplikasi aplikasi={a} />\n </div>\n <div className=\"u-app-detail-actions\">\n <GantiSecret aplikasi={a} />\n <Button variant=\"outline\" onClick={() => (onUbah ? onUbah(a) : setUbah(true))}>\n <Pencil /> Ubah\n </Button>\n </div>\n </header>\n <Tabs items={items} value={tab} defaultValue={tab ? undefined : 'ringkasan'} onValueChange={onTabChange} />\n {!onUbah && <SheetUbahAplikasi aplikasi={ubah ? a : null} onOpenChange={(o) => !o && setUbah(false)} onTersimpan={q.refetch} />}\n </div>\n );\n}\n\n/** DetailAplikasi di panel samping. */\nexport function SheetDetailAplikasi({ kode, open, onOpenChange, aplikasi }: { kode?: string | null; aplikasi?: AplikasiTerpadu; open: boolean; onOpenChange: (o: boolean) => void }) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange} title=\"Detail aplikasi\" size=\"xl\">\n {open && <DetailAplikasi kode={kode} aplikasi={aplikasi} />}\n </Sheet>\n );\n}\n\nfunction Daftar({ isi, kosong = '–' }: { isi?: string[] | null; kosong?: string }) {\n if (!isi?.length) return <span className=\"u-app-muted\">{kosong}</span>;\n return (\n <ul className=\"u-app-uris\">\n {isi.map((x) => (\n <li key={x}>\n <code>{x}</code>\n </li>\n ))}\n </ul>\n );\n}\n\nfunction IdSalin({ id }: { id: string }) {\n return (\n <span className=\"u-app-id\">\n <code>{id}</code>\n <CopyButton text={id} label=\"Salin client ID\" />\n </span>\n );\n}\n\nfunction TabRingkasan({ a }: { a: AplikasiTerpadu }) {\n return (\n <div className=\"u-app-tab\">\n <DescriptionList\n items={[\n { label: 'Kode', value: <code>{a.kode}</code> },\n { label: 'Jenis', value: JENIS[a.jenis]?.label ?? a.jenis },\n {\n label: 'Alamat',\n value: a.url ? (\n <a href={a.url} target=\"_blank\" rel=\"noreferrer\">\n {a.url}\n </a>\n ) : null,\n },\n { label: 'Keterangan', value: a.keterangan || null },\n { label: 'Login SSO', value: a.sso ? <IdSalin id={a.sso.id} /> : 'Belum dipasang' },\n { label: 'Klien API', value: a.api ? <IdSalin id={a.api.id} /> : 'Belum dipasang' },\n {\n label: 'Siapa boleh login',\n value: a.sso ? (\n a.terbatas ? (\n <>\n Pemegang izin <code>{a.sso.permission}</code>\n </>\n ) : (\n 'Semua pengguna SIAKAD'\n )\n ) : null,\n },\n { label: 'Didaftarkan', value: a.rbac?.created_at || a.sso?.created_at || a.api?.created_at ? formatDate(a.rbac?.created_at || a.sso?.created_at || a.api?.created_at, 'long') : null },\n ]}\n />\n {a.api && (\n <section>\n <h3 className=\"u-app-subtitle\">Pemakaian API 7 hari terakhir</h3>\n <RingkasanLogApi clientId={a.api.id} ringkas />\n </section>\n )}\n </div>\n );\n}\n\nfunction TabSso({ a }: { a: AplikasiTerpadu }) {\n const s = a.sso;\n if (!s) return <Empty icon={<ShieldCheck />} title=\"Belum memakai login SSO\" description=\"Ubah aplikasi ini untuk memasang login lewat sso.unipo.ac.id.\" />;\n return (\n <DescriptionList\n className=\"u-app-tab\"\n items={[\n { label: 'Client ID', value: <IdSalin id={s.id} /> },\n {\n label: 'Status',\n value: (\n <Badge variant={s.active ? 'success' : 'neutral'} dot>\n {s.active ? 'Aktif' : 'Nonaktif'}\n </Badge>\n ),\n },\n { label: 'Alamat callback', value: <Daftar isi={s.redirect_uris} /> },\n { label: 'Setelah keluar', value: <Daftar isi={s.post_logout_redirect_uris} /> },\n { label: 'Logout serentak', value: s.frontchannel_logout_uri ? <code>{s.frontchannel_logout_uri}</code> : null },\n { label: 'Izin wajib', value: s.permission ? <code>{s.permission}</code> : 'Tidak ada (semua pengguna)' },\n { label: 'Level SIAKAD', value: s.levels?.length ? s.levels.join(', ') : 'Semua level' },\n { label: 'Alamat portal', value: s.portal_url || null },\n { label: 'Diubah', value: s.updated_at ? formatDate(s.updated_at, 'long') : null },\n ]}\n />\n );\n}\n\n/** Kelompokkan scope per sumber data: krs:read, krs:write → krs. */\nfunction kelompokScope(scopes: string[]): Array<[string, string[]]> {\n const m = new Map<string, string[]>();\n for (const s of scopes) {\n const [g] = s.split(':');\n m.set(g!, [...(m.get(g!) ?? []), s]);\n }\n return [...m.entries()].sort((x, y) => x[0].localeCompare(y[0]));\n}\n\nfunction TabApi({ a }: { a: AplikasiTerpadu }) {\n const k = a.api;\n if (!k) return <Empty icon={<KeyRound />} title=\"Belum punya klien API\" description=\"Ubah aplikasi ini untuk memberi akses API SIAKAD.\" />;\n return (\n <DescriptionList\n className=\"u-app-tab\"\n items={[\n { label: 'Client ID', value: <IdSalin id={k.id} /> },\n {\n label: 'Status',\n value: (\n <Badge variant={k.active ? 'success' : 'neutral'} dot>\n {k.active ? 'Aktif' : 'Nonaktif'}\n </Badge>\n ),\n },\n { label: 'Database', value: k.lingkungan ? (k.lingkungan === 'live' ? 'Live' : 'Development (data tiruan)') : null },\n {\n label: `Scope (${k.scopes.length})`,\n value: (\n <span className=\"u-scope-chips\">\n {k.scopes.map((s) => (\n <Badge key={s} variant={s.endsWith(':write') ? 'warning' : 'neutral'} shape=\"square\">\n {s}\n </Badge>\n ))}\n </span>\n ),\n },\n {\n label: 'Token pengguna',\n value: [k.sso_audience && `tukar login SSO (${k.sso_audience})`, k.allow_user_login && 'login username/password'].filter(Boolean).join(', ') || 'Tidak (hanya token aplikasi)',\n },\n { label: 'Batas IP', value: <Daftar isi={k.allowed_ips} kosong=\"Semua IP\" /> },\n { label: 'Origin browser', value: <Daftar isi={k.allowed_origins} kosong=\"Tidak ada (CORS tertutup)\" /> },\n { label: 'Batas permintaan', value: k.rate_limit ? `${formatNumber(k.rate_limit)} per menit` : 'Bawaan server' },\n ]}\n />\n );\n}\n\n// ================================================================ Secret sekali lihat\nexport interface IsiRahasia {\n label: string;\n nilai: string;\n /** Disamarkan sampai ditampilkan. */\n rahasia?: boolean;\n}\n\nexport interface SecretSekaliProps {\n open: boolean;\n onOpenChange: (o: boolean) => void;\n judul?: React.ReactNode;\n isi: IsiRahasia[];\n /** Isi .env siap tempel. */\n env?: string;\n}\n\n/**\n * Menampilkan client secret yang hanya muncul sekali: tersamar, bisa ditampilkan dan disalin, isi .env siap tempel,\n * dan tombol tutup baru aktif setelah admin mencentang \"sudah saya simpan\".\n */\nexport function SecretSekali({ open, onOpenChange, judul = 'Simpan kredensial ini', isi, env }: SecretSekaliProps) {\n const [simpan, setSimpan] = React.useState(false);\n const [lihat, setLihat] = React.useState<Record<number, boolean>>({});\n React.useEffect(() => {\n if (open) (setSimpan(false), setLihat({}));\n }, [open]);\n return (\n <Dialog\n open={open}\n onOpenChange={(o) => (o || simpan) && onOpenChange(o)}\n title={judul}\n description=\"Secret hanya ditampilkan sekali. Setelah dialog ini ditutup, secret tidak bisa dilihat lagi; yang bisa dilakukan hanya membuat secret baru.\"\n size=\"lg\"\n footer={\n <>\n <label className=\"u-secret-ack\">\n <Checkbox checked={simpan} onCheckedChange={(v) => setSimpan(v === true)} /> Sudah saya simpan di tempat aman\n </label>\n <Button disabled={!simpan} onClick={() => onOpenChange(false)}>\n Selesai\n </Button>\n </>\n }\n >\n <div className=\"u-secret\">\n {isi.map((r, i) => (\n <Field key={r.label} label={r.label}>\n <InputGroup\n end={\n <span className=\"u-secret-tools\">\n {r.rahasia && (\n <Button variant=\"ghost\" size=\"xs\" iconOnly aria-label={lihat[i] ? 'Sembunyikan' : 'Tampilkan'} onClick={() => setLihat((l) => ({ ...l, [i]: !l[i] }))}>\n {lihat[i] ? <EyeOff /> : <Eye />}\n </Button>\n )}\n <CopyButton text={r.nilai} label={`Salin ${r.label}`} />\n </span>\n }\n >\n <Input readOnly value={r.rahasia && !lihat[i] ? '•'.repeat(Math.min(32, r.nilai.length)) : r.nilai} className=\"u-mono\" onFocus={(e) => e.currentTarget.select()} />\n </InputGroup>\n </Field>\n ))}\n {env && <CodeBlock code={env} language=\"bash\" filename=\".env\" lineNumbers={false} />}\n </div>\n </Dialog>\n );\n}\n\n/** Isi .env untuk aplikasi integrasi. */\nexport function teksEnv(o: { issuer?: string; siakad?: string; sso?: { id: string; secret: string }; api?: { id: string; secret: string } }): string {\n const b: string[] = [];\n if (o.sso) b.push(`SSO_ISSUER=${o.issuer ?? 'https://sso.unipo.ac.id'}`, `SSO_CLIENT_ID=${o.sso.id}`, `SSO_CLIENT_SECRET=${o.sso.secret}`);\n if (o.api) b.push(`SIAKAD_API_URL=${(o.siakad ?? 'https://siakad.unipo.ac.id').replace(/\\/$/, '')}/api`, `SIAKAD_API_CLIENT_ID=${o.api.id}`, `SIAKAD_API_CLIENT_SECRET=${o.api.secret}`);\n return b.join('\\n');\n}\n\n/** Tombol ganti secret SSO/API dengan konfirmasi, lalu tampilkan secret baru sekali. */\nexport function GantiSecret({ aplikasi: a, issuer, siakadUrl }: { aplikasi: AplikasiTerpadu; issuer?: string; siakadUrl?: string }) {\n const siakad = useOptionalSiakad();\n const sso = useSsoAdmin();\n const [target, setTarget] = React.useState<'sso' | 'api' | null>(null);\n const [hasil, setHasil] = React.useState<{ judul: string; isi: IsiRahasia[]; env: string } | null>(null);\n const [galat, setGalat] = React.useState<string | null>(null);\n if (!a.sso && !a.api) return null;\n const jalan = async () => {\n setGalat(null);\n try {\n if (target === 'sso' && a.sso && sso) {\n const r = await sso.request<{ client_secret: string }>('POST', `/clients/${a.sso.id}/secret`);\n setHasil({\n judul: `Secret SSO baru ${a.nama}`,\n isi: [\n { label: 'Client ID SSO', nilai: a.sso.id },\n { label: 'Client secret SSO', nilai: r.data.client_secret, rahasia: true },\n ],\n env: teksEnv({ issuer, sso: { id: a.sso.id, secret: r.data.client_secret } }),\n });\n } else if (target === 'api' && a.api && siakad) {\n const r = await siakad.request<{ client_secret: string }>({ method: 'POST', path: `${A}/klien-api/${a.api.id}/secret` });\n setHasil({\n judul: `Secret API baru ${a.nama}`,\n isi: [\n { label: 'Client ID API', nilai: a.api.id },\n { label: 'Client secret API', nilai: r.data.client_secret, rahasia: true },\n ],\n env: teksEnv({ siakad: siakadUrl, api: { id: a.api.id, secret: r.data.client_secret } }),\n });\n }\n } catch (e) {\n setGalat(pesanGalat(e));\n }\n };\n return (\n <>\n {a.sso && (\n <Button variant=\"outline\" onClick={() => setTarget('sso')}>\n <RefreshCw /> Secret SSO\n </Button>\n )}\n {a.api && (\n <Button variant=\"outline\" onClick={() => setTarget('api')}>\n <RefreshCw /> Secret API\n </Button>\n )}\n <ConfirmDialog\n open={target != null}\n onOpenChange={(o) => !o && setTarget(null)}\n title={`Ganti secret ${target === 'sso' ? 'SSO' : 'API'} ${a.nama}?`}\n description=\"Secret lama langsung tidak berlaku. Aplikasi berhenti bisa login/memanggil API sampai .env-nya diisi secret baru.\"\n confirmLabel=\"Ganti secret\"\n tone=\"warning\"\n icon={<TriangleAlert />}\n onConfirm={jalan}\n />\n {galat && (\n <Alert variant=\"danger\" className=\"u-app-inline-alert\">\n {galat}\n </Alert>\n )}\n <SecretSekali open={hasil != null} onOpenChange={(o) => !o && setHasil(null)} judul={hasil?.judul} isi={hasil?.isi ?? []} env={hasil?.env} />\n </>\n );\n}\n\n// ================================================================ Pemilih scope\nconst AKSI: Record<string, string> = { read: 'Baca', write: 'Tulis', admin: 'Kelola' };\nconst kapital = (t: string) => t.charAt(0).toUpperCase() + t.slice(1);\n\nexport interface PilihScopeProps {\n value: string[];\n onValueChange: (v: string[]) => void;\n /** Katalog { scope: keterangan }; bawaan diambil dari /v1/rbac/klien-api/scope. */\n katalog?: Record<string, string>;\n /** Tinggi maksimum daftar (bawaan 22rem). */\n maxHeight?: string;\n className?: string;\n}\n\n/** Pilih scope API per sumber data: baris per sumber (krs, nilai, mahasiswa) dengan centang Baca/Tulis, pencarian, dan jumlah terpilih. */\nexport function PilihScope({ value, onValueChange, katalog: katalogProp, maxHeight = '22rem', className }: PilihScopeProps) {\n const q = useKatalogScope();\n const katalog = katalogProp ?? q.data ?? {};\n const [cari, setCari] = React.useState('');\n const kata = cari.trim().toLowerCase();\n const grup = kelompokScope(Object.keys(katalog)).filter(([g, list]) => !kata || g.includes(kata) || list.some((s) => katalog[s]?.toLowerCase().includes(kata)));\n const pilih = new Set(value);\n const ganti = (s: string, on: boolean) => onValueChange(on ? [...value, s] : value.filter((x) => x !== s));\n if (!katalogProp && q.loading && !q.data) return <Skeleton style={{ height: 160 }} />;\n if (!katalogProp && q.error) return <Alert variant=\"danger\">{pesanGalat(q.error, { kode: false })}<KodeLaporan error={q.error} /></Alert>;\n return (\n <div className={cn('u-scope-picker', className)}>\n <div className=\"u-scope-picker-head\">\n <InputGroup start={<Search />} size=\"sm\">\n <Input value={cari} onChange={(e) => setCari(e.target.value)} placeholder=\"Cari scope\" aria-label=\"Cari scope\" size=\"sm\" />\n </InputGroup>\n <span className=\"u-scope-count\">{formatNumber(value.length)} dipilih</span>\n {value.length > 0 && (\n <Button variant=\"ghost\" size=\"xs\" onClick={() => onValueChange([])}>\n Kosongkan\n </Button>\n )}\n </div>\n <ul className=\"u-scope-rows\" style={{ maxHeight }}>\n {grup.map(([g, list]) => (\n <li key={g}>\n <span className=\"u-scope-name\">\n <strong>{g}</strong>\n <small>{kapital(katalog[list[0]!]?.replace(/^(Baca|Tulis|Ubah|Kelola|Impor)\\s+/i, '') ?? '')}</small>\n </span>\n <span className=\"u-scope-actions\">\n {list.map((s) => {\n const aksi = s.split(':')[1] ?? s;\n return (\n <label key={s} title={katalog[s]} data-tulis={aksi !== 'read' ? '' : undefined} style={{ gridColumn: aksi === 'read' ? 1 : 2 }}>\n <Checkbox checked={pilih.has(s)} onCheckedChange={(v) => ganti(s, v === true)} aria-label={s} />\n {AKSI[aksi] ?? aksi}\n </label>\n );\n })}\n </span>\n </li>\n ))}\n {!grup.length && <li className=\"u-scope-empty\">Tidak ada scope yang cocok.</li>}\n </ul>\n </div>\n );\n}\n\n// ================================================================ Wizard aplikasi baru\nexport interface InputAplikasiBaru {\n kode: string;\n nama: string;\n keterangan: string;\n jenis: JenisAplikasi;\n url: string;\n logo?: string | null;\n sso?: { redirect_uris: string[]; post_logout_redirect_uris: string[]; frontchannel_logout_uri: string; portal_url: string } | null;\n batasiLogin: boolean;\n peranAkses: number[];\n api?: { scopes: string[]; allow_user_login: boolean; tukarSso: boolean; allowed_ips: string[]; allowed_origins: string[] } | null;\n}\n\nexport interface HasilAplikasiBaru {\n aplikasi: AplikasiRbac;\n sso?: { id: string; secret: string };\n api?: { id: string; secret: string };\n peringatan: string[];\n}\n\n/**\n * Buat aplikasi lengkap: katalog → izin <kode>.akses + peran → klien SSO (+ logo) → klien API → tautan.\n * Langkah setelah katalog yang gagal tidak membatalkan semuanya; dikembalikan sebagai peringatan.\n */\nexport async function buatAplikasiLengkap(siakad: Siakad, sso: SsoAdminClient | null, x: InputAplikasiBaru): Promise<HasilAplikasiBaru> {\n const peringatan: string[] = [];\n const req = <T,>(method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', path: string, body?: unknown, query?: Record<string, string | number>) => siakad.request<T>({ method, path, body, query });\n let app = (await req<AplikasiRbac>('POST', `${A}/aplikasi`, { kode: x.kode, nama: x.nama, keterangan: x.keterangan || null, jenis: x.jenis, url: x.url || null, aktif: true })).data;\n const hasil: HasilAplikasiBaru = { aplikasi: app, peringatan };\n const tautan: Partial<AplikasiRbac> = {};\n const galat = (e: unknown) => (e instanceof Error ? e.message : String(e));\n let izin = '';\n if (x.batasiLogin || x.peranAkses.length) {\n try {\n izin = `${x.kode}.akses`;\n const ada = await req<unknown[]>('GET', `${A}/izin`, undefined, { kode: izin, per_page: 1 });\n if (!ada.data.length)\n await req('POST', `${A}/izin`, {\n aplikasi_id: app.id,\n kode: izin,\n jenis: 'akses',\n grup: 'Akses',\n nama: `Masuk ${x.nama}`,\n keterangan: `Boleh login ke ${x.nama} lewat SSO`,\n berlingkup: false,\n });\n for (const p of x.peranAkses) await req('POST', `${A}/peran-izin`, { peran_id: p, izin });\n } catch (e) {\n peringatan.push(`Hak akses login belum lengkap: ${galat(e)}`);\n }\n }\n if (x.sso) {\n if (!sso) peringatan.push('Klien SSO belum dibuat: klien admin SSO belum dipasang.');\n else\n try {\n const r = await sso.request<KlienSso & { client_secret: string }>('POST', '/clients', {\n body: { id: idSsoDariKode(x.kode), name: x.nama, description: x.keterangan, ...x.sso, permission: x.batasiLogin ? izin : '' },\n });\n hasil.sso = { id: r.data.id, secret: r.data.client_secret };\n tautan.client_id_sso = r.data.id;\n if (x.logo) await sso.request('POST', `/clients/${r.data.id}/logo`, { body: { data: x.logo } }).catch((e) => peringatan.push(`Logo belum terpasang: ${galat(e)}`));\n } catch (e) {\n peringatan.push(`Klien SSO gagal dibuat: ${galat(e)}`);\n }\n }\n if (x.api) {\n try {\n const { tukarSso, ...input } = x.api;\n const r = await req<KlienApi & { client_id: string; client_secret: string }>('POST', `${A}/klien-api`, { name: x.nama, ...input, sso_audience: tukarSso && hasil.sso ? hasil.sso.id : null });\n hasil.api = { id: r.data.client_id ?? r.data.id, secret: r.data.client_secret };\n tautan.client_id_api = hasil.api.id;\n } catch (e) {\n peringatan.push(`Klien API gagal dibuat: ${galat(e)}`);\n }\n }\n if (Object.keys(tautan).length) {\n try {\n app = (await req<AplikasiRbac>('PUT', `${A}/aplikasi/${app.id}`, tautan)).data;\n hasil.aplikasi = app;\n } catch (e) {\n peringatan.push(`Klien belum tertaut ke aplikasi: ${galat(e)}`);\n }\n }\n return hasil;\n}\n\nconst slug = (t: string) =>\n t\n .toLowerCase()\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 40);\n\nfunction bacaDataUri(f: File): Promise<string> {\n return new Promise((ok, gagal) => {\n const r = new FileReader();\n r.onload = () => ok(String(r.result));\n r.onerror = () => gagal(new Error('Berkas tidak bisa dibaca.'));\n r.readAsDataURL(f);\n });\n}\n\n/** Pilihan besar dengan sakelar: ikon, judul, penjelasan. */\nfunction Opsi({ icon, judul, teks, value, onChange }: { icon: React.ReactNode; judul: string; teks: string; value: boolean; onChange: (v: boolean) => void }) {\n return (\n <label className=\"u-app-option\" data-on={value ? '' : undefined}>\n <span className=\"u-app-option-icon\">{icon}</span>\n <span className=\"u-app-option-text\">\n <strong>{judul}</strong>\n <span>{teks}</span>\n </span>\n <Switch checked={value} onCheckedChange={onChange} />\n </label>\n );\n}\n\nfunction PilihLogo({ value, onChange, nama }: { value: string | null; onChange: (v: string | null) => void; nama: string }) {\n return (\n <div className=\"u-app-logo-pick\">\n <IkonAplikasi nama={nama || '?'} src={value} size=\"xl\" />\n <label className=\"u-button\" data-variant=\"outline\" data-size=\"sm\">\n <ImagePlus /> {value ? 'Ganti logo' : 'Pilih logo'}\n <input\n type=\"file\"\n accept=\"image/png,image/jpeg,image/webp\"\n className=\"u-sr-only\"\n onChange={async (e) => {\n const f = e.target.files?.[0];\n if (f) onChange(await bacaDataUri(f));\n }}\n />\n </label>\n {value && (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => onChange(null)}>\n Hapus\n </Button>\n )}\n <small>PNG, JPG, atau WebP, maks 2 MB.</small>\n </div>\n );\n}\n\nexport interface WizardAplikasiProps {\n open: boolean;\n onOpenChange: (o: boolean) => void;\n onSelesai?: (h: HasilAplikasiBaru) => void;\n /** Ganti cara membuat (mis. lewat endpoint BFF sendiri). Bawaan: buatAplikasiLengkap. */\n buat?: (x: InputAplikasiBaru) => Promise<HasilAplikasiBaru>;\n /** Kode yang sudah dipakai (validasi). Bawaan dari katalog. */\n kodeTerpakai?: string[];\n issuer?: string;\n siakadUrl?: string;\n /** 'dialog' (bawaan) atau 'halaman' untuk dipasang langsung di halaman (mis. /aplikasi/baru); `open` diabaikan. */\n tampilan?: 'dialog' | 'halaman';\n}\n\n/**\n * Wizard modal membuat aplikasi integrasi: identitas → login SSO → hak akses login → akses API → periksa,\n * lalu secret ditampilkan sekali beserta isi .env.\n */\nexport function WizardAplikasi({ open: openProp, onOpenChange, onSelesai, buat, kodeTerpakai, issuer, siakadUrl, tampilan = 'dialog' }: WizardAplikasiProps) {\n const open = tampilan === 'halaman' || openProp;\n const siakad = useOptionalSiakad();\n const sso = useSsoAdmin();\n const rbac = useAplikasiRbac();\n const peran = usePeranRbac();\n const [step, setStep] = React.useState(0);\n const [hasil, setHasil] = React.useState<HasilAplikasiBaru | null>(null);\n const [nama, setNama] = React.useState('');\n const [kode, setKode] = React.useState('');\n const [kodeManual, setKodeManual] = React.useState(false);\n const [jenis, setJenis] = React.useState<JenisAplikasi>('web');\n const [url, setUrl] = React.useState('https://');\n const [ket, setKet] = React.useState('');\n const [logo, setLogo] = React.useState<string | null>(null);\n const [pakaiSso, setPakaiSso] = React.useState(true);\n const [callback, setCallback] = React.useState('');\n const [keluar, setKeluar] = React.useState('');\n const [fc, setFc] = React.useState('');\n const [batasi, setBatasi] = React.useState(true);\n const [peranAkses, setPeranAkses] = React.useState<number[]>([]);\n const [pakaiApi, setPakaiApi] = React.useState(false);\n const [scopes, setScopes] = React.useState<string[]>(['referensi:read']);\n const [tukar, setTukar] = React.useState(true);\n const [langsung, setLangsung] = React.useState(false);\n const [ips, setIps] = React.useState('');\n const [origins, setOrigins] = React.useState('');\n\n React.useEffect(() => {\n if (!open) return;\n setStep(0);\n setHasil(null);\n }, [open]);\n\n const dasar = url.replace(/\\/+$/, '');\n const urlValid = /^https?:\\/\\/[^\\s/]+\\.[^\\s/]+/.test(dasar);\n const cb = callback || (urlValid ? `${dasar}/sso/callback` : '');\n const terpakai = kodeTerpakai ?? rbac.data?.map((a) => a.kode) ?? [];\n const daftarPeran = (peran.data ?? []).filter((p) => p.aktif);\n\n const input = (): InputAplikasiBaru => ({\n kode,\n nama: nama.trim(),\n keterangan: ket.trim(),\n jenis,\n url: urlValid ? dasar : '',\n logo,\n sso: pakaiSso ? { redirect_uris: daftarTeks(cb), post_logout_redirect_uris: daftarTeks(keluar || `${dasar}/`), frontchannel_logout_uri: fc.trim(), portal_url: dasar } : null,\n batasiLogin: pakaiSso && batasi,\n peranAkses: pakaiSso && batasi ? peranAkses : [],\n api: pakaiApi ? { scopes, allow_user_login: langsung, tukarSso: pakaiSso && tukar, allowed_ips: daftarTeks(ips), allowed_origins: daftarTeks(origins) } : null,\n });\n\n const steps = [\n {\n id: 'identitas',\n title: 'Identitas',\n description: 'Nama, kode, dan alamat',\n icon: <AppWindow />,\n onNext: () => {\n if (!nama.trim()) return 'Nama aplikasi wajib diisi.';\n if (!/^[a-z0-9][a-z0-9_-]{1,39}$/.test(kode)) return 'Kode: huruf kecil, angka, - atau _, 2 sampai 40 karakter.';\n if (terpakai.includes(kode)) return `Kode ${kode} sudah dipakai aplikasi lain.`;\n if (pakaiSso && !urlValid) return 'Alamat aplikasi wajib diisi (https://...).';\n },\n content: (\n <FormGrid>\n <div className=\"u-span-2\">\n <PilihLogo value={logo} onChange={setLogo} nama={nama} />\n </div>\n <Field label=\"Nama aplikasi\" required className=\"u-span-2\">\n <Input\n value={nama}\n placeholder=\"mis. E-Learning UNIPO\"\n onChange={(e) => {\n setNama(e.target.value);\n if (!kodeManual) setKode(slug(e.target.value));\n }}\n />\n </Field>\n <Field label=\"Kode\" required description={`Awalan izin (${kode || 'kode'}.akses) dan client ID SSO. Tidak bisa diganti.`}>\n <Input value={kode} className=\"u-mono\" placeholder=\"elearning\" onChange={(e) => (setKode(e.target.value.toLowerCase()), setKodeManual(true))} />\n </Field>\n <Field label=\"Jenis\">\n <SegmentedControl<JenisAplikasi>\n value={jenis}\n onValueChange={setJenis}\n fullWidth\n options={(Object.keys(JENIS) as JenisAplikasi[]).map((j) => ({ value: j, label: JENIS[j].pendek, icon: JENIS[j].icon, 'aria-label': JENIS[j].label }))}\n />\n </Field>\n <Field label=\"Alamat aplikasi\" className=\"u-span-2\" description=\"Dipakai untuk portal SSO dan alamat callback bawaan.\">\n <Input value={url} onChange={(e) => setUrl(e.target.value)} placeholder=\"https://elearning.unipo.ac.id\" />\n </Field>\n <Field label=\"Keterangan\" optional className=\"u-span-2\">\n <Textarea value={ket} onChange={(e) => setKet(e.target.value)} rows={2} maxLength={255} />\n </Field>\n </FormGrid>\n ),\n },\n {\n id: 'sso',\n title: 'Login SSO',\n description: 'Masuk dengan akun SIAKAD',\n icon: <ShieldCheck />,\n onNext: () => (pakaiSso && !daftarTeks(cb).length ? 'Alamat callback wajib diisi.' : undefined),\n content: (\n <div className=\"u-app-step\">\n <Opsi\n icon={<ShieldCheck />}\n judul=\"Login lewat SSO UNIPO\"\n teks=\"Pengguna masuk dengan akun SIAKAD di sso.unipo.ac.id dan aplikasi tampil di portal SSO.\"\n value={pakaiSso}\n onChange={setPakaiSso}\n />\n {pakaiSso && (\n <FormGrid>\n <Field label=\"Alamat callback\" required className=\"u-span-2\" description=\"Satu per baris. Harus persis sama dengan yang dipakai aplikasi.\">\n <Textarea value={cb} onChange={(e) => setCallback(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Alamat setelah keluar\">\n <Input value={keluar || (urlValid ? `${dasar}/` : '')} onChange={(e) => setKeluar(e.target.value)} className=\"u-mono\" />\n </Field>\n <Field label=\"Logout serentak\" optional description=\"Dibuka SSO saat pengguna keluar dari aplikasi lain.\">\n <Input value={fc} onChange={(e) => setFc(e.target.value)} placeholder={urlValid ? `${dasar}/sso/logout` : ''} className=\"u-mono\" />\n </Field>\n </FormGrid>\n )}\n </div>\n ),\n },\n {\n id: 'hak',\n title: 'Hak akses',\n description: 'Siapa yang boleh masuk',\n icon: <Lock />,\n optional: true,\n content: !pakaiSso ? (\n <Empty title=\"Tanpa login SSO\" description=\"Aplikasi ini tidak memakai login SSO, jadi tidak perlu batas pengguna. Lanjutkan ke akses API.\" />\n ) : (\n <div className=\"u-app-step\">\n <Opsi\n icon={<Lock />}\n judul=\"Hanya peran tertentu yang boleh login\"\n teks={`Pengguna wajib memegang izin ${kode || 'kode'}.akses; aplikasi juga disembunyikan dari portal pengguna lain.`}\n value={batasi}\n onChange={setBatasi}\n />\n {batasi && (\n <Field label=\"Peran yang boleh masuk\" description=\"Administrator selalu bisa masuk. Peran turunan ikut mewarisi.\">\n {peran.loading && !peran.data ? (\n <Skeleton style={{ height: 120 }} />\n ) : (\n <div className=\"u-app-roles\">\n {daftarPeran.map((p) => (\n <label key={p.id}>\n <Checkbox checked={peranAkses.includes(p.id)} onCheckedChange={(v) => setPeranAkses(v === true ? [...peranAkses, p.id] : peranAkses.filter((x) => x !== p.id))} />\n <span>\n <strong>{p.nama}</strong>\n <code>{p.kode}</code>\n </span>\n </label>\n ))}\n </div>\n )}\n </Field>\n )}\n </div>\n ),\n },\n {\n id: 'api',\n title: 'Akses API',\n description: 'Data SIAKAD yang boleh dipakai',\n icon: <KeyRound />,\n onNext: () => (pakaiApi && !scopes.length ? 'Pilih minimal satu scope.' : undefined),\n content: (\n <div className=\"u-app-step\">\n <Opsi icon={<KeyRound />} judul=\"Butuh akses API SIAKAD\" teks=\"Membuat klien API untuk membaca atau menulis data SIAKAD sesuai scope yang dipilih.\" value={pakaiApi} onChange={setPakaiApi} />\n {pakaiApi && (\n <>\n <Field label=\"Scope\">\n <PilihScope value={scopes} onValueChange={setScopes} maxHeight=\"15rem\" />\n </Field>\n <div className=\"u-app-checks\">\n {pakaiSso && (\n <label>\n <Checkbox checked={tukar} onCheckedChange={(v) => setTukar(v === true)} />\n <span>\n <strong>Tukar login SSO menjadi token API pengguna</strong>\n <small>Disarankan: aplikasi memakai id_token SSO untuk token API atas nama pengguna.</small>\n </span>\n </label>\n )}\n <label>\n <Checkbox checked={langsung} onCheckedChange={(v) => setLangsung(v === true)} />\n <span>\n <strong>Izinkan login username/password langsung ke API</strong>\n <small>Hanya untuk aplikasi tepercaya; lebih aman lewat SSO.</small>\n </span>\n </label>\n </div>\n <FormGrid>\n <Field label=\"Batas IP server\" optional description=\"IP atau CIDR, satu per baris.\">\n <Textarea value={ips} onChange={(e) => setIps(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Origin browser\" optional description=\"Untuk memanggil API dari browser (CORS).\">\n <Textarea value={origins} onChange={(e) => setOrigins(e.target.value)} rows={2} className=\"u-mono\" placeholder={urlValid ? dasar : ''} />\n </Field>\n </FormGrid>\n </>\n )}\n </div>\n ),\n },\n {\n id: 'periksa',\n title: 'Periksa',\n description: 'Tinjau sebelum dibuat',\n icon: <AppWindow />,\n content: hasil ? (\n <div className=\"u-app-step\">\n <Alert variant=\"success\" title={`${hasil.aplikasi.nama} sudah terdaftar`}>\n {hasil.sso ? `Login SSO aktif (client ${hasil.sso.id}). ` : ''}\n {hasil.api ? `Klien API ${hasil.api.id} dibuat. ` : ''}\n Pengaturan lain bisa diubah di halaman aplikasi.\n </Alert>\n {hasil.peringatan.map((p) => (\n <Alert key={p} variant=\"warning\">\n {p}\n </Alert>\n ))}\n </div>\n ) : (\n <div className=\"u-app-step\">\n <div className=\"u-app-review-head\">\n <IkonAplikasi nama={nama} src={logo} size=\"lg\" />\n <div>\n <strong>{nama || 'Tanpa nama'}</strong>\n <span>\n <code>{kode}</code> · {JENIS[jenis].label}\n </span>\n </div>\n </div>\n <WizardReview\n sections={[\n {\n title: 'Identitas',\n onEdit: () => setStep(0),\n items: [\n { label: 'Alamat', value: urlValid ? dasar : '–' },\n { label: 'Keterangan', value: ket || '–' },\n ],\n },\n {\n title: 'Login SSO',\n onEdit: () => setStep(1),\n items: pakaiSso\n ? [\n { label: 'Client ID', value: idSsoDariKode(kode) },\n { label: 'Callback', value: daftarTeks(cb).join(', ') },\n ]\n : [{ label: 'Login SSO', value: 'Tidak dipakai' }],\n },\n {\n title: 'Hak akses',\n onEdit: () => setStep(2),\n items: [\n {\n label: 'Boleh login',\n value: pakaiSso\n ? batasi\n ? `Pemegang ${kode}.akses${\n peranAkses.length\n ? `: ${daftarPeran\n .filter((p) => peranAkses.includes(p.id))\n .map((p) => p.nama)\n .join(', ')}`\n : ' (administrator)'\n }`\n : 'Semua pengguna SIAKAD'\n : '–',\n },\n ],\n },\n {\n title: 'Akses API',\n onEdit: () => setStep(3),\n items: pakaiApi\n ? [\n { label: 'Scope', value: scopes.join(', ') },\n { label: 'Token pengguna', value: [pakaiSso && tukar && 'tukar SSO', langsung && 'login langsung'].filter(Boolean).join(', ') || 'Tidak' },\n ]\n : [{ label: 'API SIAKAD', value: 'Tidak dipakai' }],\n },\n ]}\n />\n <Alert variant=\"info\">Secret SSO dan API hanya ditampilkan sekali setelah dibuat. Siapkan tempat menyimpannya.</Alert>\n </div>\n ),\n },\n ];\n\n const selesai = async () => {\n if (hasil) {\n onOpenChange(false);\n return;\n }\n if (!buat && !siakad) return 'SDK SIAKAD belum dipasang.';\n try {\n const h = await (buat ? buat(input()) : buatAplikasiLengkap(siakad!, sso, input()));\n setHasil(h);\n invalidateSiakad('rbac');\n invalidateSso();\n onSelesai?.(h);\n } catch (e) {\n return pesanGalat(e);\n }\n };\n\n return (\n <>\n {tampilan === 'halaman' ? (\n <Wizard\n steps={steps}\n step={step}\n onStepChange={setStep}\n onFinish={selesai}\n finishLabel={hasil ? 'Selesai' : 'Buat aplikasi'}\n nextLabel=\"Lanjut\"\n title=\"Aplikasi baru\"\n description=\"Login SSO, hak akses, dan akses API SIAKAD.\"\n />\n ) : (\n <Dialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Aplikasi baru\"\n description=\"Daftarkan aplikasi integrasi: login SSO, hak akses, dan akses API SIAKAD.\"\n size=\"xl\"\n className=\"u-app-wizard\"\n >\n <Wizard steps={steps} step={step} onStepChange={setStep} onFinish={selesai} finishLabel={hasil ? 'Tutup' : 'Buat aplikasi'} nextLabel=\"Lanjut\" />\n </Dialog>\n )}\n <SecretSekali\n open={!!hasil && !!(hasil.sso || hasil.api) && open}\n onOpenChange={() => setHasil((h) => (h ? { ...h, sso: undefined, api: undefined } : h))}\n judul={hasil ? `Kredensial ${hasil.aplikasi.nama}` : undefined}\n isi={[\n ...(hasil?.sso\n ? [\n { label: 'Client ID SSO', nilai: hasil.sso.id },\n { label: 'Client secret SSO', nilai: hasil.sso.secret, rahasia: true },\n ]\n : []),\n ...(hasil?.api\n ? [\n { label: 'Client ID API SIAKAD', nilai: hasil.api.id },\n { label: 'Client secret API SIAKAD', nilai: hasil.api.secret, rahasia: true },\n ]\n : []),\n ]}\n env={hasil ? teksEnv({ issuer, siakad: siakadUrl, sso: hasil.sso, api: hasil.api }) : undefined}\n />\n </>\n );\n}\n\n// ================================================================ Ubah aplikasi\nexport interface FormAplikasiProps {\n aplikasi: AplikasiTerpadu;\n onTersimpan?: () => void;\n onBatal?: () => void;\n className?: string;\n}\n\n/**\n * Formulir ubah aplikasi: identitas (katalog), login SSO (callback, logout, batas izin, aktif), dan klien API\n * (scope, IP, origin, batas permintaan, aktif). Hanya bagian yang berubah yang dikirim.\n */\nexport function FormAplikasi({ aplikasi: a, onTersimpan, onBatal, className }: FormAplikasiProps) {\n const siakad = useOptionalSiakad();\n const sso = useSsoAdmin();\n const [nama, setNama] = React.useState(a.nama);\n const [ket, setKet] = React.useState(a.keterangan ?? '');\n const [url, setUrl] = React.useState(a.url ?? '');\n const [aktif, setAktif] = React.useState(a.aktif);\n const [logo, setLogo] = React.useState<string | null>(a.logo);\n const [cb, setCb] = React.useState(a.sso?.redirect_uris.join('\\n') ?? '');\n const [keluar, setKeluar] = React.useState(a.sso?.post_logout_redirect_uris.join('\\n') ?? '');\n const [fc, setFc] = React.useState(a.sso?.frontchannel_logout_uri ?? '');\n const [batasi, setBatasi] = React.useState(a.terbatas);\n const [scopes, setScopes] = React.useState(a.api?.scopes ?? []);\n const [ips, setIps] = React.useState(a.api?.allowed_ips.join('\\n') ?? '');\n const [origins, setOrigins] = React.useState(a.api?.allowed_origins.join('\\n') ?? '');\n const [rate, setRate] = React.useState(a.api?.rate_limit ? String(a.api.rate_limit) : '');\n const [langsung, setLangsung] = React.useState(a.api?.allow_user_login ?? false);\n const [kirim, setKirim] = React.useState(false);\n const [galat, setGalat] = React.useState<string[]>([]);\n const sama = (x: string[], y: string[]) => x.length === y.length && x.every((v, i) => v === y[i]);\n\n const simpan = async (e: React.FormEvent) => {\n e.preventDefault();\n setKirim(true);\n const g: string[] = [];\n const req = (method: 'PUT' | 'PATCH', path: string, body: unknown) => siakad!.request({ method, path, body });\n if (a.rbac && siakad && (nama !== a.rbac.nama || ket !== (a.rbac.keterangan ?? '') || url !== (a.rbac.url ?? '') || aktif !== a.rbac.aktif))\n await req('PUT', `${A}/aplikasi/${a.rbac.id}`, { nama, keterangan: ket || null, url: url || null, aktif }).catch((x) => g.push(`Katalog: ${pesanGalat(x)}`));\n if (a.sso && sso) {\n const ubah: Record<string, unknown> = {};\n if (nama !== a.sso.name) ubah.name = nama;\n if (ket !== (a.sso.description ?? '')) ubah.description = ket;\n if (!sama(daftarTeks(cb), a.sso.redirect_uris)) ubah.redirect_uris = daftarTeks(cb);\n if (!sama(daftarTeks(keluar), a.sso.post_logout_redirect_uris)) ubah.post_logout_redirect_uris = daftarTeks(keluar);\n if (fc !== (a.sso.frontchannel_logout_uri ?? '')) ubah.frontchannel_logout_uri = fc;\n if (url && url !== (a.sso.portal_url ?? '')) ubah.portal_url = url;\n if (batasi !== a.terbatas) ubah.permission = batasi ? `${a.kode}.akses` : '';\n if (aktif !== a.sso.active && !a.sso.admin) ubah.active = aktif;\n if (Object.keys(ubah).length) await sso.request('PATCH', `/clients/${a.sso.id}`, { body: ubah }).catch((x) => g.push(`Login SSO: ${pesanGalat(x)}`));\n if (logo !== a.logo) await sso.request(logo ? 'POST' : 'DELETE', `/clients/${a.sso.id}/logo`, logo ? { body: { data: logo } } : {}).catch((x) => g.push(`Logo: ${pesanGalat(x)}`));\n }\n if (a.api && siakad) {\n const ubah: Record<string, unknown> = {};\n if (nama !== a.api.name) ubah.name = nama;\n if (!sama([...scopes].sort(), [...a.api.scopes].sort())) ubah.scopes = scopes;\n if (!sama(daftarTeks(ips), a.api.allowed_ips)) ubah.allowed_ips = daftarTeks(ips);\n if (!sama(daftarTeks(origins), a.api.allowed_origins)) ubah.allowed_origins = daftarTeks(origins);\n if ((rate ? Number(rate) : null) !== (a.api.rate_limit ?? null)) ubah.rate_limit = rate ? Number(rate) : null;\n if (langsung !== a.api.allow_user_login) ubah.allow_user_login = langsung;\n if (aktif !== a.api.active) ubah.active = aktif;\n if (Object.keys(ubah).length) await req('PATCH', `${A}/klien-api/${a.api.id}`, ubah).catch((x) => g.push(`Klien API: ${pesanGalat(x)}`));\n }\n setKirim(false);\n setGalat(g);\n invalidateSiakad('rbac');\n invalidateSso();\n if (!g.length) onTersimpan?.();\n };\n\n return (\n <form className={cn('u-app-form', className)} onSubmit={simpan}>\n {galat.length > 0 && (\n <Alert variant=\"danger\" title=\"Sebagian perubahan belum tersimpan\">\n <ul>\n {galat.map((x) => (\n <li key={x}>{x}</li>\n ))}\n </ul>\n </Alert>\n )}\n <fieldset>\n <legend>Identitas</legend>\n {a.sso && <PilihLogo value={logo} onChange={setLogo} nama={nama} />}\n <FormGrid>\n <Field label=\"Nama\" required>\n <Input value={nama} onChange={(e) => setNama(e.target.value)} />\n </Field>\n <Field label=\"Kode\" description=\"Tidak bisa diganti.\">\n <Input value={a.kode} readOnly className=\"u-mono\" />\n </Field>\n <Field label=\"Alamat aplikasi\" className=\"u-span-2\">\n <Input value={url} onChange={(e) => setUrl(e.target.value)} placeholder=\"https://\" />\n </Field>\n <Field label=\"Keterangan\" optional className=\"u-span-2\">\n <Textarea value={ket} onChange={(e) => setKet(e.target.value)} rows={2} maxLength={255} />\n </Field>\n </FormGrid>\n <Opsi icon={<ShieldCheck />} judul=\"Aplikasi aktif\" teks=\"Nonaktif: login SSO dan token API aplikasi ini ditolak sampai diaktifkan lagi.\" value={aktif} onChange={setAktif} />\n </fieldset>\n {a.sso && (\n <fieldset>\n <legend>Login SSO</legend>\n <Field label=\"Alamat callback\" required description=\"Satu per baris.\">\n <Textarea value={cb} onChange={(e) => setCb(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <FormGrid>\n <Field label=\"Setelah keluar\">\n <Textarea value={keluar} onChange={(e) => setKeluar(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Logout serentak\" optional>\n <Input value={fc} onChange={(e) => setFc(e.target.value)} className=\"u-mono\" />\n </Field>\n </FormGrid>\n <Opsi icon={<Lock />} judul=\"Hanya pemegang izin yang boleh login\" teks={`Pengguna wajib memegang ${a.kode}.akses.`} value={batasi} onChange={setBatasi} />\n </fieldset>\n )}\n {a.api && (\n <fieldset>\n <legend>Klien API</legend>\n <Field label=\"Scope\">\n <PilihScope value={scopes} onValueChange={setScopes} maxHeight=\"16rem\" />\n </Field>\n <FormGrid>\n <Field label=\"Batas IP\" optional description=\"Satu per baris.\">\n <Textarea value={ips} onChange={(e) => setIps(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Origin browser\" optional>\n <Textarea value={origins} onChange={(e) => setOrigins(e.target.value)} rows={2} className=\"u-mono\" />\n </Field>\n <Field label=\"Batas permintaan per menit\" optional description=\"Kosong = bawaan server.\">\n <Input value={rate} onChange={(e) => setRate(e.target.value.replace(/\\D/g, ''))} inputMode=\"numeric\" />\n </Field>\n </FormGrid>\n <label className=\"u-app-checks\">\n <span>\n <Checkbox checked={langsung} onCheckedChange={(v) => setLangsung(v === true)} />\n <span>\n <strong>Izinkan login username/password langsung ke API</strong>\n </span>\n </span>\n </label>\n </fieldset>\n )}\n <div className=\"u-app-form-actions\">\n {onBatal && (\n <Button variant=\"outline\" type=\"button\" onClick={onBatal}>\n Batal\n </Button>\n )}\n <Button type=\"submit\" loading={kirim}>\n Simpan perubahan\n </Button>\n </div>\n </form>\n );\n}\n\n/** FormAplikasi di panel samping. Buka dengan memberi `aplikasi`, tutup dengan null. */\nexport function SheetUbahAplikasi({ aplikasi, onOpenChange, onTersimpan }: { aplikasi: AplikasiTerpadu | null; onOpenChange: (o: boolean) => void; onTersimpan?: () => void }) {\n return (\n <Sheet open={aplikasi != null} onOpenChange={onOpenChange} title={aplikasi ? `Ubah ${aplikasi.nama}` : 'Ubah aplikasi'} size=\"lg\">\n {aplikasi && (\n <FormAplikasi\n key={aplikasi.kunci}\n aplikasi={aplikasi}\n onBatal={() => onOpenChange(false)}\n onTersimpan={() => {\n onTersimpan?.();\n onOpenChange(false);\n }}\n />\n )}\n </Sheet>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport type { Siakad } from 'unipo-siakad-sdk';\nimport { Dropzone, FileList, type UploadedFile } from '../components/calendar';\nimport { pesanGalat, useSiakad, useSiakadQuery } from './provider';\n\n/** Data berkas dari /v1/berkas (subset yang dipakai komponen). */\nexport interface BerkasTerunggah {\n id: string;\n nama: string;\n ekstensi?: string | null;\n mime?: string | null;\n ukuran: number;\n status: 'mengunggah' | 'menunggu_unggah' | 'tersedia';\n kategori?: string | null;\n url?: string | null;\n sesi?: { ukuran_potongan: number; jumlah_potongan: number; diterima: number[] };\n}\n\n/** Batas dari GET /v1/berkas/info. */\nexport interface InfoBerkas {\n maks_byte: number;\n batas_sekali_unggah_byte: number;\n ukuran_potongan: number;\n ekstensi: string[];\n penyimpanan: { driver: string; kode: string; nama: string };\n}\n\nexport interface OpsiUnggahBerkas {\n kategori?: string;\n modul?: string;\n folder?: string;\n keterangan?: string;\n visibilitas?: 'privat' | 'publik';\n /** Potongan yang dikirim bersamaan pada unggah bertahap (bawaan 3). */\n paralel?: number;\n}\n\nconst tunggu = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\n/**\n * Unggah satu File ke /v1/berkas: sekali kirim bila muat dalam batas unggah server, selain itu bertahap per\n * potongan (paralel, diulang 3 kali bila gagal). Sama dengan `unggahBerkas()` di unipo-siakad-sdk 1.2+.\n */\nexport async function unggahKeBerkas(\n siakad: Siakad,\n info: InfoBerkas,\n file: File,\n opsi: OpsiUnggahBerkas = {},\n onProgress?: (persen: number) => void,\n signal?: AbortSignal,\n): Promise<BerkasTerunggah> {\n const { paralel = 3, ...atribut } = opsi;\n const attr = Object.fromEntries(Object.entries(atribut).filter(([, v]) => v !== undefined));\n if (file.size <= info.batas_sekali_unggah_byte) {\n onProgress?.(0);\n const r = await siakad.request<BerkasTerunggah>({ method: 'POST', path: '/v1/berkas', body: { berkas: file, ...attr }, multipart: true }, { signal, timeout: 300_000 });\n onProgress?.(100);\n return r.data;\n }\n const sesi = (await siakad.request<BerkasTerunggah>({ method: 'POST', path: '/v1/berkas/bertahap', body: { nama: file.name, ukuran: file.size, ...attr } }, { signal })).data;\n const { ukuran_potongan: ukuran, jumlah_potongan: jumlah } = sesi.sesi!;\n const antre = Array.from({ length: jumlah }, (_, i) => i);\n let terkirim = 0;\n const kirim = async (ke: number) => {\n const bagian = file.slice(ke * ukuran, Math.min(file.size, (ke + 1) * ukuran));\n for (let coba = 0; ; coba++) {\n try {\n await siakad.request({ method: 'POST', path: `/v1/berkas/${sesi.id}/potongan/${ke}`, body: { potongan: { data: bagian, filename: `${ke}.part` } }, multipart: true }, { signal, timeout: 300_000 });\n terkirim += bagian.size;\n onProgress?.(Math.min(99, Math.round((terkirim / file.size) * 100)));\n return;\n } catch (e) {\n if (coba >= 3 || signal?.aborted) throw e;\n await tunggu(500 * 2 ** coba);\n }\n }\n };\n await Promise.all(\n Array.from({ length: Math.max(1, Math.min(paralel, jumlah)) }, async () => {\n for (let ke = antre.shift(); ke !== undefined; ke = antre.shift()) await kirim(ke);\n }),\n );\n const hasil = (await siakad.request<BerkasTerunggah>({ method: 'POST', path: `/v1/berkas/${sesi.id}/selesai` }, { signal, timeout: 300_000 })).data;\n onProgress?.(100);\n return hasil;\n}\n\n/** Batas unggah server (GET /v1/berkas/info), di-cache 10 menit. */\nexport function useInfoBerkas() {\n return useSiakadQuery<InfoBerkas>(['berkas-info'], (s, signal) => s.request<InfoBerkas>({ method: 'GET', path: '/v1/berkas/info' }, { signal }), { staleTime: 600_000 });\n}\n\n/** Fungsi unggah siap pakai: `const unggah = useUnggahBerkas({ kategori: 'dokumen' }); const b = await unggah(file, setPersen);` */\nexport function useUnggahBerkas(opsi: OpsiUnggahBerkas = {}) {\n const siakad = useSiakad();\n const { data: info } = useInfoBerkas();\n const ref = React.useRef(opsi);\n ref.current = opsi;\n return React.useCallback(\n async (file: File, onProgress?: (persen: number) => void, signal?: AbortSignal) => {\n const i = info ?? (await siakad.request<InfoBerkas>({ method: 'GET', path: '/v1/berkas/info' })).data;\n return unggahKeBerkas(siakad, i, file, ref.current, onProgress, signal);\n },\n [siakad, info],\n );\n}\n\n/** Tautan unduh sementara (tanpa token) untuk <img>, <a>, atau pratinjau PDF. */\nexport function useUrlBerkas(id: string | null | undefined, ttl = 900) {\n return useSiakadQuery<{ url: string }>(\n ['berkas-url', id ?? '', ttl],\n (s, signal) => s.request<{ url: string }>({ method: 'GET', path: `/v1/berkas/${encodeURIComponent(id ?? '')}/url`, query: { ttl } }, { signal }),\n { enabled: Boolean(id), staleTime: Math.max(30, ttl - 60) * 1000 },\n );\n}\n\nexport interface UnggahBerkasProps extends OpsiUnggahBerkas {\n /** Dipanggil untuk setiap berkas yang selesai; `berkas.id` dipakai sebagai `berkas_id` di endpoint modul. */\n onSelesai?: (berkas: BerkasTerunggah) => void;\n onGalat?: (pesan: string, file: File) => void;\n /** Ekstensi yang diterima, mis. \".pdf,.jpg,.png\". */\n accept?: string;\n multiple?: boolean;\n /** Batas ukuran (byte); bawaan dari server (BERKAS_MAKS_MB). */\n maxSize?: number;\n disabled?: boolean;\n title?: React.ReactNode;\n hint?: React.ReactNode;\n /** Sembunyikan daftar berkas setelah selesai (bawaan false). */\n sembunyikanSelesai?: boolean;\n className?: string;\n}\n\n/**\n * Kotak unggah yang terhubung ke /v1/berkas: progres per berkas, unggah bertahap otomatis untuk file besar\n * (hosting dengan upload_max_filesize kecil), dan berkas tersimpan di penyimpanan aktif (S3/R2/MinIO/Google Drive\n * atau disk server).\n */\nexport function UnggahBerkas({\n onSelesai,\n onGalat,\n accept,\n multiple,\n maxSize,\n disabled,\n title,\n hint,\n sembunyikanSelesai,\n className,\n ...opsi\n}: UnggahBerkasProps) {\n const unggah = useUnggahBerkas(opsi);\n const { data: info } = useInfoBerkas();\n const [daftar, setDaftar] = React.useState<UploadedFile[]>([]);\n const batal = React.useRef(new Map<string, AbortController>());\n React.useEffect(() => () => batal.current.forEach((c) => c.abort()), []);\n\n const ubah = (id: string, p: Partial<UploadedFile>) => setDaftar((d) => d.map((f) => (f.id === id ? { ...f, ...p } : f)));\n const mulai = (files: File[]) => {\n for (const file of files) {\n const id = `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const ctl = new AbortController();\n batal.current.set(id, ctl);\n setDaftar((d) => [...(multiple ? d : d.filter((f) => f.progress != null)), { id, name: file.name, size: file.size, progress: 0 }]);\n unggah(file, (persen) => ubah(id, { progress: persen }), ctl.signal)\n .then((b) => {\n ubah(id, { progress: undefined, url: b.url ?? undefined });\n if (sembunyikanSelesai) setDaftar((d) => d.filter((f) => f.id !== id));\n onSelesai?.(b);\n })\n .catch((e) => {\n if (ctl.signal.aborted) return;\n const pesan = pesanGalat(e);\n ubah(id, { progress: undefined, error: pesan });\n onGalat?.(pesan, file);\n })\n .finally(() => batal.current.delete(id));\n }\n };\n\n return (\n <div className={className} style={{ display: 'grid', gap: 'var(--u-space-3, 12px)' }}>\n <Dropzone\n onFiles={mulai}\n accept={accept}\n multiple={multiple}\n maxSize={maxSize ?? info?.maks_byte}\n disabled={disabled}\n title={title}\n hint={hint}\n onReject={(m) => onGalat?.(m, new File([], ''))}\n />\n <FileList\n files={daftar}\n onRemove={(id) => {\n batal.current.get(id)?.abort();\n setDaftar((d) => d.filter((f) => f.id !== id));\n }}\n />\n </div>\n );\n}\n"]}