unipo-ui 1.6.0 → 1.7.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.
@@ -376,17 +376,39 @@ function UnipoMark({ size = 32, shape = "square", tone = "brand", color, accent,
376
376
  ] });
377
377
  }
378
378
  var MARK_SIZE = { sm: 24, md: 32, lg: 40, xl: 56 };
379
- function AppLogo({ name = "UNIPO", tagline, src, layout = "horizontal", shape = "square", tone = "brand", size = "md", color, glyph, className, ...props }) {
379
+ function AppLogo({ name = "UNIPO", tagline, src, layout = "horizontal", shape = "square", tone = "brand", size = "md", color, glyph, fit, onSrcError, className, ...props }) {
380
380
  const px = MARK_SIZE[size];
381
- const mark = src ? /* @__PURE__ */ jsx("img", { src, alt: "", width: px, height: px, style: { objectFit: "contain" } }) : /* @__PURE__ */ jsx(UnipoMark, { size: px, shape, tone, color, glyph, title: typeof name === "string" ? name : "UNIPO" });
382
- return /* @__PURE__ */ jsxs("span", { className: cn("u-app-logo", className), "data-layout": layout, "data-size": size, "data-tone": tone, ...props, children: [
383
- layout !== "wordmark" && mark,
384
- layout !== "mark" && /* @__PURE__ */ jsxs("span", { className: "u-app-logo-text", children: [
381
+ const judul = typeof name === "string" ? name : "UNIPO";
382
+ const tata = layout === "full" && !src ? "horizontal" : layout;
383
+ if (layout === "full" && src) {
384
+ return /* @__PURE__ */ jsx("span", { className: cn("u-app-logo", className), "data-layout": "full", "data-size": size, "data-tone": tone, ...props, children: /* @__PURE__ */ jsx("img", { className: "u-app-logo-full", src, alt: judul, height: px, onError: onSrcError }) });
385
+ }
386
+ const mark = src ? /* @__PURE__ */ jsx(LogoGambar, { src, size: px, shape, tone, color, fit, title: judul, onGagal: onSrcError }) : /* @__PURE__ */ jsx(UnipoMark, { size: px, shape, tone, color, glyph, title: judul });
387
+ return /* @__PURE__ */ jsxs("span", { className: cn("u-app-logo", className), "data-layout": tata, "data-size": size, "data-tone": tone, ...props, children: [
388
+ tata !== "wordmark" && mark,
389
+ tata !== "mark" && /* @__PURE__ */ jsxs("span", { className: "u-app-logo-text", children: [
385
390
  /* @__PURE__ */ jsx("span", { className: "u-app-logo-name", children: name }),
386
391
  tagline && /* @__PURE__ */ jsx("span", { className: "u-app-logo-tagline", children: tagline })
387
392
  ] })
388
393
  ] });
389
394
  }
395
+ function LogoGambar({ src, size = 32, shape = "square", tone = "brand", color, fit, title, onGagal, className, style, ...props }) {
396
+ const cara = fit ?? (color || tone === "inverse" ? "contain" : "cover");
397
+ return /* @__PURE__ */ jsx(
398
+ "span",
399
+ {
400
+ className: cn("u-logo-gambar", className),
401
+ "data-shape": shape,
402
+ "data-tone": tone,
403
+ "data-fit": cara,
404
+ role: "img",
405
+ "aria-label": title,
406
+ style: { width: size, height: size, ...color ? { ["--u-logo-pelat"]: color } : {}, ...style },
407
+ ...props,
408
+ children: /* @__PURE__ */ jsx("img", { src, alt: "", width: size, height: size, draggable: false, onError: onGagal })
409
+ }
410
+ );
411
+ }
390
412
  var G = (d, extra) => /* @__PURE__ */ jsxs(Fragment, { children: [
391
413
  /* @__PURE__ */ jsx("path", { d, stroke: "#fff", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
392
414
  extra
@@ -436,6 +458,87 @@ var APP_NAMES = {
436
458
  function UnipoAppLogo({ app, tagline = "Universitas Pohuwato", ...props }) {
437
459
  return /* @__PURE__ */ jsx(AppLogo, { name: APP_NAMES[app], tagline, glyph: APP_GLYPHS[app], color: props.color ?? APP_COLORS[app], ...props });
438
460
  }
461
+ var WARNA_INISIAL = ["#244ce6", "#0f8a6a", "#d9541e", "#6d4fd1", "#0e7490", "#c2416b", "#8a5a12", "#5b6b7f"];
462
+ function glyphInisial(nama) {
463
+ const kata = nama.replace(/[^\p{L}\p{N} ]/gu, " ").trim().split(/\s+/).filter(Boolean);
464
+ const teks = (kata.length > 1 ? kata[0][0] + kata[1][0] : (kata[0] ?? "?").slice(0, 2)).toUpperCase();
465
+ return /* @__PURE__ */ jsx(
466
+ "text",
467
+ {
468
+ x: "16",
469
+ y: "16.5",
470
+ textAnchor: "middle",
471
+ dominantBaseline: "central",
472
+ fill: "#fff",
473
+ fontSize: teks.length > 1 ? 12.5 : 15,
474
+ fontWeight: 800,
475
+ fontFamily: "var(--u-font-heading, inherit)",
476
+ letterSpacing: "-0.02em",
477
+ children: teks
478
+ }
479
+ );
480
+ }
481
+ function warnaAplikasi(kode) {
482
+ if (kode in APP_COLORS) return APP_COLORS[kode];
483
+ let h = 0;
484
+ for (const c of kode) h = h * 31 + c.charCodeAt(0) >>> 0;
485
+ return WARNA_INISIAL[h % WARNA_INISIAL.length];
486
+ }
487
+ function urlLogoSso(kode, ssoUrl = "https://sso.unipo.ac.id") {
488
+ const id = kode.toLowerCase().replace(/-/g, "_");
489
+ if (!/^[a-z0-9_]{3,64}$/.test(id)) return [];
490
+ const dasar = ssoUrl.replace(/\/+$/, "");
491
+ return ["png", "webp", "jpg"].map((x) => `${dasar}/logos/${id}.${x}`);
492
+ }
493
+ var cacheLogo = /* @__PURE__ */ new Map();
494
+ function useLogoTersedia(calon) {
495
+ const daftar = calon.filter((x) => !!x);
496
+ const kunci = daftar.join("|");
497
+ const [hasil, setHasil] = React.useState(() => cacheLogo.has(kunci) ? { kunci, src: cacheLogo.get(kunci) } : null);
498
+ React.useEffect(() => {
499
+ if (cacheLogo.has(kunci)) {
500
+ setHasil({ kunci, src: cacheLogo.get(kunci) });
501
+ return;
502
+ }
503
+ if (!daftar.length || typeof Image === "undefined") {
504
+ setHasil({ kunci, src: null });
505
+ return;
506
+ }
507
+ let batal = false;
508
+ const coba = (i) => {
509
+ if (batal) return;
510
+ if (i >= daftar.length) {
511
+ cacheLogo.set(kunci, null);
512
+ setHasil({ kunci, src: null });
513
+ return;
514
+ }
515
+ const img = new Image();
516
+ img.onload = () => {
517
+ if (batal) return;
518
+ cacheLogo.set(kunci, daftar[i]);
519
+ setHasil({ kunci, src: daftar[i] });
520
+ };
521
+ img.onerror = () => coba(i + 1);
522
+ img.src = daftar[i];
523
+ };
524
+ coba(0);
525
+ return () => {
526
+ batal = true;
527
+ };
528
+ }, [kunci]);
529
+ const ok = hasil?.kunci === kunci;
530
+ return { src: ok ? hasil.src : null, memuat: !ok };
531
+ }
532
+ function LogoAplikasi({ kode, name, src, ssoUrl = "https://sso.unipo.ac.id", tagline = "Universitas Pohuwato", color, ...props }) {
533
+ const calon = React.useMemo(() => [src, ...ssoUrl ? urlLogoSso(kode, ssoUrl) : []], [src, kode, ssoUrl]);
534
+ const logo = useLogoTersedia(calon);
535
+ const bawaan = kode.toLowerCase() in APP_GLYPHS ? kode.toLowerCase() : null;
536
+ const nama = name ?? (bawaan ? APP_NAMES[bawaan] : kode);
537
+ if (logo.src) return /* @__PURE__ */ jsx(AppLogo, { name: nama, tagline, src: logo.src, color, ...props });
538
+ const glyph = bawaan ? APP_GLYPHS[bawaan] : glyphInisial(typeof nama === "string" ? nama : kode);
539
+ const layout = props.layout === "full" ? "horizontal" : props.layout;
540
+ return /* @__PURE__ */ jsx(AppLogo, { name: nama, tagline, glyph, color: color ?? warnaAplikasi(kode.toLowerCase()), ...props, layout, "data-memuat": logo.memuat || void 0 });
541
+ }
439
542
  var LABEL = { ok: "Normal", degraded: "Lambat", down: "Gangguan", maintenance: "Pemeliharaan", off: "Nonaktif", checking: "Memeriksa" };
440
543
  var ICON = {
441
544
  ok: /* @__PURE__ */ jsx(CheckCircle2, {}),
@@ -1002,6 +1105,6 @@ function Hero({ eyebrow, title, description, actions, stats, media, image, varia
1002
1105
  ] }) });
1003
1106
  }
1004
1107
 
1005
- export { APP_COLORS, APP_GLYPHS, AgendaList, AnnouncementList, AppLogo, DateTile, EVENT_COLORS, EventCalendar, EventCard, EventLegend, Faq, Hero, LatencyIndicator, Navbar, NewsCard, NewsCardSkeleton, NewsGrid, RankedList, Section, ServiceList, ServiceStatusBadge, ServiceStatusPanel, StatusBanner, UnipoAppLogo, UnipoMark, UptimeBar, eventColor, eventsByDay, formatEventRange, overallStatus, useServiceChecks };
1006
- //# sourceMappingURL=chunk-KF7SZPEH.js.map
1007
- //# sourceMappingURL=chunk-KF7SZPEH.js.map
1108
+ export { APP_COLORS, APP_GLYPHS, AgendaList, AnnouncementList, AppLogo, DateTile, EVENT_COLORS, EventCalendar, EventCard, EventLegend, Faq, Hero, LatencyIndicator, LogoAplikasi, LogoGambar, Navbar, NewsCard, NewsCardSkeleton, NewsGrid, RankedList, Section, ServiceList, ServiceStatusBadge, ServiceStatusPanel, StatusBanner, UnipoAppLogo, UnipoMark, UptimeBar, eventColor, eventsByDay, formatEventRange, glyphInisial, overallStatus, urlLogoSso, useLogoTersedia, useServiceChecks, warnaAplikasi };
1109
+ //# sourceMappingURL=chunk-UEOAVWAZ.js.map
1110
+ //# sourceMappingURL=chunk-UEOAVWAZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navbar.tsx","../src/components/faq.tsx","../src/components/identity.tsx","../src/components/status.tsx","../src/components/schedule.tsx","../src/components/content.tsx"],"names":["Menu","BaseCollapsible","MenuIcon","React2","jsxs","jsx","Fragment","React3","React4","React5","Clock","MapPin","ArrowRight"],"mappings":"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","file":"chunk-UEOAVWAZ.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { NavigationMenu } from '@base-ui/react/navigation-menu';\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\nimport { ArrowRight, ChevronDown, Menu as MenuIcon } from 'lucide-react';\nimport { cn, dataFlag } from '../lib/cn';\nimport { Button } from './actions';\nimport { Avatar } from './display';\nimport { Dialog, Menu } from './overlays';\nimport type { SidebarUser } from './layout';\n\n// ================================================================ Tipe\nexport interface NavbarLink {\n key?: string;\n label: React.ReactNode;\n href?: string;\n onClick?: () => void;\n icon?: React.ReactNode;\n /** Satu baris penjelasan di bawah label (dropdown dan mega menu). */\n description?: React.ReactNode;\n badge?: React.ReactNode;\n /** Buka di tab baru. */\n external?: boolean;\n}\n\nexport interface NavbarColumn {\n title?: React.ReactNode;\n items: NavbarLink[];\n}\n\nexport interface NavbarFeatured {\n eyebrow?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n href: string;\n /** Gambar sampul; tanpa gambar dipakai latar warna primer. */\n image?: string;\n cta?: React.ReactNode;\n}\n\nexport interface NavbarMenu {\n /** Kunci unik; dicocokkan dengan `activeKey`. */\n key: string;\n label: React.ReactNode;\n href?: string;\n onClick?: () => void;\n /** Dropdown satu kolom. */\n items?: NavbarLink[];\n /** Mega menu: beberapa kolom berjudul. */\n columns?: NavbarColumn[];\n /** Kartu sorotan di kanan mega menu (berita, pendaftaran dibuka, dll.). */\n featured?: NavbarFeatured;\n /** Baris bawah panel, mis. tautan \"Semua program studi\". */\n footer?: React.ReactNode;\n external?: boolean;\n}\n\nexport interface NavbarProps {\n /** Logo + nama aplikasi (<AppLogo />, <UnipoAppLogo />, atau <LogoSitus /> dari unipo-ui/siakad). */\n brand: React.ReactNode;\n /** Tujuan klik logo (bawaan \"/\"). */\n brandHref?: string;\n menus: NavbarMenu[];\n activeKey?: string;\n /** Tombol di kanan, mis. \"Masuk\" dan \"Daftar\". */\n actions?: React.ReactNode;\n /** Profil + menu pengguna di kanan (aplikasi yang sudah masuk). */\n user?: SidebarUser;\n /** Slot di antara menu dan aksi, mis. <SearchTrigger />. */\n search?: React.ReactNode;\n /** Pita tipis di atas navbar: kontak, bahasa, tautan cepat. */\n topbar?: React.ReactNode;\n /**\n * app (bawaan): latar solid, garis bawah, cocok untuk aplikasi.\n * portal: lebih tinggi; dengan `transparent` tembus pandang di atas hero lalu solid saat digulir.\n * ringkas: tinggi 48px, teks kecil.\n */\n variant?: 'app' | 'portal' | 'ringkas';\n /** Tembus pandang sampai halaman digulir (untuk hero bergambar). */\n transparent?: boolean;\n /** Menempel di atas saat digulir (bawaan true). */\n sticky?: boolean;\n /** Letak menu: tengah atau setelah logo (bawaan). */\n align?: 'start' | 'center';\n /** Lebar maksimum isi (bawaan 80rem). */\n maxWidth?: string;\n /** Kunci menu yang terbuka di awal (untuk pratinjau atau tur). */\n defaultOpen?: string;\n /** Lebar navbar (px) saat berubah ke tombol menu ponsel (bawaan 960). */\n mobileBreakpoint?: number;\n /** Renderer tautan kustom, mis. <Link> Next.js/React Router. */\n renderLink?: (link: { href: string; external?: boolean }, props: React.AnchorHTMLAttributes<HTMLAnchorElement> & { children: React.ReactNode }) => React.ReactElement;\n className?: string;\n}\n\n// ================================================================ Utilitas\nfunction useScrolled(on: boolean, threshold = 8) {\n const [s, setS] = React.useState(false);\n React.useEffect(() => {\n if (!on) return;\n const f = () => setS(window.scrollY > threshold);\n f();\n window.addEventListener('scroll', f, { passive: true });\n return () => window.removeEventListener('scroll', f);\n }, [on, threshold]);\n return s;\n}\n\n/** Lebar cukup bila header >= breakpoint dan menu tidak berdesakan (lebar yang dibutuhkan diingat saat masih lebar). */\nfunction useWide(ref: React.RefObject<HTMLElement | null>, px: number, versi: string) {\n const [m, setM] = React.useState(true);\n const butuh = React.useRef(0);\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n const f = () => {\n const bar = el.querySelector<HTMLElement>('.u-navbar-bar');\n const list = bar?.querySelector<HTMLElement>('.u-navbar-list');\n const w = el.getBoundingClientRect().width;\n if (bar && list) {\n // Lebar total yang dibutuhkan agar semua menu muat; disimpan untuk dipakai saat sudah mode ponsel.\n const cs = getComputedStyle(bar);\n const brand = bar.querySelector<HTMLElement>('.u-navbar-brand')?.offsetWidth ?? 0;\n const end = bar.querySelector<HTMLElement>('.u-navbar-end')?.scrollWidth ?? 0;\n butuh.current = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight) + brand + list.scrollWidth + end + 2 * (parseFloat(cs.columnGap) || 24) + 8;\n }\n setM(w >= px && w >= butuh.current);\n };\n f();\n const ro = new ResizeObserver(f);\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, px, versi]);\n return m;\n}\n\ntype RenderLink = NavbarProps['renderLink'];\nfunction Anchor({\n href,\n external,\n renderLink,\n ...props\n}: { href: string; external?: boolean; renderLink?: RenderLink } & React.AnchorHTMLAttributes<HTMLAnchorElement> & { children: React.ReactNode }) {\n const p = { ...props, href, ...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {}) };\n return renderLink ? renderLink({ href, external }, p) : <a {...p} />;\n}\n\nconst hasPanel = (m: NavbarMenu) => Boolean(m.items?.length || m.columns?.length);\nconst columnsOf = (m: NavbarMenu): NavbarColumn[] => m.columns ?? (m.items ? [{ items: m.items }] : []);\n\nfunction LinkBody({ link }: { link: NavbarLink }) {\n return (\n <>\n {link.icon && <span className=\"u-navbar-link-icon\">{link.icon}</span>}\n <span className=\"u-navbar-link-text\">\n <span className=\"u-navbar-link-label\">\n {link.label}\n {link.badge != null && <span className=\"u-navbar-link-badge\">{link.badge}</span>}\n </span>\n {link.description && <span className=\"u-navbar-link-desc\">{link.description}</span>}\n </span>\n </>\n );\n}\n\nfunction PanelLink({ link, renderLink }: { link: NavbarLink; renderLink?: RenderLink }) {\n if (!link.href)\n return (\n <button type=\"button\" className=\"u-navbar-link\" onClick={link.onClick}>\n <LinkBody link={link} />\n </button>\n );\n return (\n <NavigationMenu.Link\n className=\"u-navbar-link\"\n render={(props) => (\n <Anchor {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)} href={link.href!} external={link.external} renderLink={renderLink} onClick={link.onClick}>\n <LinkBody link={link} />\n </Anchor>\n )}\n />\n );\n}\n\nfunction Featured({ f, renderLink }: { f: NavbarFeatured; renderLink?: RenderLink }) {\n return (\n <Anchor href={f.href} renderLink={renderLink} className=\"u-navbar-featured\" data-image={dataFlag(Boolean(f.image))}>\n {f.image && <img src={f.image} alt=\"\" loading=\"lazy\" />}\n <span className=\"u-navbar-featured-body\">\n {f.eyebrow && <span className=\"u-navbar-featured-eyebrow\">{f.eyebrow}</span>}\n <b>{f.title}</b>\n {f.description && <span className=\"u-navbar-featured-desc\">{f.description}</span>}\n <span className=\"u-navbar-featured-cta\">\n {f.cta ?? 'Selengkapnya'} <ArrowRight aria-hidden />\n </span>\n </span>\n </Anchor>\n );\n}\n\nfunction Panel({ menu, renderLink }: { menu: NavbarMenu; renderLink?: RenderLink }) {\n const cols = columnsOf(menu);\n const mega = Boolean(menu.columns?.length) || Boolean(menu.featured);\n return (\n <div className=\"u-navbar-panel\" data-mega={dataFlag(mega)} style={mega ? ({ '--u-navbar-cols': cols.length } as React.CSSProperties) : undefined}>\n <div className=\"u-navbar-panel-main\">\n <div className=\"u-navbar-cols\">\n {cols.map((c, i) => (\n <div key={i} className=\"u-navbar-col\">\n {c.title && <p className=\"u-navbar-col-title\">{c.title}</p>}\n <ul>\n {c.items.map((l, j) => (\n <li key={l.key ?? j}>\n <PanelLink link={l} renderLink={renderLink} />\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n {menu.featured && <Featured f={menu.featured} renderLink={renderLink} />}\n </div>\n {menu.footer && <div className=\"u-navbar-panel-footer\">{menu.footer}</div>}\n </div>\n );\n}\n\nfunction UserMenu({ user }: { user: SidebarUser }) {\n return (\n <Menu\n align=\"end\"\n trigger={\n <button type=\"button\" className=\"u-navbar-user\" aria-label={`Menu ${user.name}`}>\n <Avatar name={user.name} src={user.avatar} size=\"sm\" />\n <span className=\"u-navbar-user-text\">\n <b>{user.name}</b>\n {user.subtitle && <small>{user.subtitle}</small>}\n </span>\n <ChevronDown aria-hidden />\n </button>\n }\n items={user.menu ?? []}\n />\n );\n}\n\n// ================================================================ Navbar ponsel\nfunction MobileNav({\n brand,\n menus,\n activeKey,\n actions,\n user,\n renderLink,\n open,\n onOpenChange,\n}: Pick<NavbarProps, 'brand' | 'menus' | 'activeKey' | 'actions' | 'user' | 'renderLink'> & { open: boolean; onOpenChange: (o: boolean) => void }) {\n const close = () => onOpenChange(false);\n const item = (l: NavbarLink | NavbarMenu, depth: number, k: React.Key) => {\n const active = activeKey != null && 'key' in l && l.key === activeKey;\n const cls = 'u-navbar-m-link';\n const body = (\n <>\n {'icon' in l && l.icon && <span className=\"u-navbar-link-icon\">{l.icon}</span>}\n <span className=\"u-navbar-link-label\">{l.label}</span>\n </>\n );\n return l.href ? (\n <Anchor\n key={k}\n href={l.href}\n external={l.external}\n renderLink={renderLink}\n className={cls}\n data-depth={depth}\n data-active={dataFlag(active)}\n aria-current={active ? 'page' : undefined}\n onClick={() => (l.onClick?.(), close())}\n >\n {body}\n </Anchor>\n ) : (\n <button key={k} type=\"button\" className={cls} data-depth={depth} onClick={() => (l.onClick?.(), close())}>\n {body}\n </button>\n );\n };\n return (\n <Dialog open={open} onOpenChange={onOpenChange} side=\"right\" title={brand} className=\"u-navbar-sheet\">\n <nav className=\"u-navbar-m\" aria-label=\"Menu utama\">\n {menus.map((m) =>\n hasPanel(m) ? (\n <BaseCollapsible.Root key={m.key} defaultOpen={activeKey != null && (m.key === activeKey || columnsOf(m).some((c) => c.items.some((l) => l.key === activeKey)))}>\n <BaseCollapsible.Trigger className=\"u-navbar-m-link\" data-depth={0}>\n <span className=\"u-navbar-link-label\">{m.label}</span>\n <ChevronDown className=\"u-navbar-m-chevron\" aria-hidden />\n </BaseCollapsible.Trigger>\n <BaseCollapsible.Panel className=\"u-collapsible-panel\">\n <div className=\"u-navbar-m-sub\">\n {columnsOf(m).map((c, i) => (\n <div key={i}>\n {c.title && <p className=\"u-navbar-col-title\">{c.title}</p>}\n {c.items.map((l, j) => item(l, 1, l.key ?? j))}\n </div>\n ))}\n {m.featured && item({ label: m.featured.title, href: m.featured.href }, 1, 'featured')}\n </div>\n </BaseCollapsible.Panel>\n </BaseCollapsible.Root>\n ) : (\n item(m, 0, m.key)\n ),\n )}\n </nav>\n {(actions || user) && (\n <div className=\"u-navbar-m-foot\">\n {user && (\n <div className=\"u-navbar-m-user\">\n <Avatar name={user.name} src={user.avatar} size=\"md\" />\n <span className=\"u-navbar-user-text\">\n <b>{user.name}</b>\n {user.subtitle && <small>{user.subtitle}</small>}\n </span>\n </div>\n )}\n {actions && <div className=\"u-navbar-m-actions\">{actions}</div>}\n </div>\n )}\n </Dialog>\n );\n}\n\n// ================================================================ Navbar\n/**\n * Navbar responsif untuk aplikasi dan portal: tautan, dropdown, mega menu (kolom + kartu sorotan),\n * slot pencarian, tombol aksi, menu pengguna, dan panel samping di ponsel.\n */\nexport function Navbar({\n brand,\n brandHref = '/',\n menus,\n activeKey,\n actions,\n user,\n search,\n topbar,\n variant = 'app',\n transparent,\n sticky = true,\n align = 'start',\n maxWidth,\n mobileBreakpoint = 960,\n defaultOpen,\n renderLink,\n className,\n}: NavbarProps) {\n const scrolled = useScrolled(sticky);\n const ref = React.useRef<HTMLElement>(null);\n const wide = useWide(ref, mobileBreakpoint, menus.map((m) => m.key).join('|'));\n const [open, setOpen] = React.useState(false);\n const childActive = (m: NavbarMenu) => activeKey != null && (m.key === activeKey || columnsOf(m).some((c) => c.items.some((l) => l.key === activeKey)));\n return (\n <header\n ref={ref}\n className={cn('u-navbar', className)}\n data-variant={variant}\n data-sticky={dataFlag(sticky)}\n data-transparent={dataFlag(Boolean(transparent) && !scrolled && !open)}\n data-scrolled={dataFlag(scrolled)}\n style={maxWidth ? ({ '--u-navbar-max': maxWidth } as React.CSSProperties) : undefined}\n >\n {topbar && wide && (\n <div className=\"u-navbar-topbar\">\n <div className=\"u-navbar-inner\">{topbar}</div>\n </div>\n )}\n <div className=\"u-navbar-inner u-navbar-bar\" data-align={align}>\n <Anchor href={brandHref} renderLink={renderLink} className=\"u-navbar-brand\">\n {brand}\n </Anchor>\n {wide ? (\n <NavigationMenu.Root className=\"u-navbar-nav\" aria-label=\"Menu utama\" defaultValue={defaultOpen}>\n <NavigationMenu.List className=\"u-navbar-list\">\n {menus.map((m) => (\n <NavigationMenu.Item key={m.key} value={m.key}>\n {hasPanel(m) ? (\n <>\n <NavigationMenu.Trigger className=\"u-navbar-item\" data-active={dataFlag(childActive(m))}>\n {m.label}\n <NavigationMenu.Icon className=\"u-navbar-chevron\">\n <ChevronDown />\n </NavigationMenu.Icon>\n </NavigationMenu.Trigger>\n <NavigationMenu.Content className=\"u-navbar-content\">\n <Panel menu={m} renderLink={renderLink} />\n </NavigationMenu.Content>\n </>\n ) : m.href ? (\n <NavigationMenu.Link\n className=\"u-navbar-item\"\n active={m.key === activeKey}\n render={(props) => (\n <Anchor\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n href={m.href!}\n external={m.external}\n renderLink={renderLink}\n data-active={dataFlag(m.key === activeKey)}\n aria-current={m.key === activeKey ? 'page' : undefined}\n >\n {m.label}\n </Anchor>\n )}\n />\n ) : (\n <button type=\"button\" className=\"u-navbar-item\" onClick={m.onClick}>\n {m.label}\n </button>\n )}\n </NavigationMenu.Item>\n ))}\n </NavigationMenu.List>\n <NavigationMenu.Portal>\n <NavigationMenu.Positioner className=\"u-navbar-positioner\" sideOffset={8} collisionPadding={16} collisionAvoidance={{ side: 'none' }}>\n <NavigationMenu.Popup className=\"u-navbar-popup\">\n <NavigationMenu.Viewport className=\"u-navbar-viewport\" />\n </NavigationMenu.Popup>\n </NavigationMenu.Positioner>\n </NavigationMenu.Portal>\n </NavigationMenu.Root>\n ) : (\n <span className=\"u-navbar-spacer\" />\n )}\n <div className=\"u-navbar-end\">\n {search}\n {wide && actions}\n {user && <UserMenu user={user} />}\n {!wide && (\n <Button variant=\"ghost\" size=\"sm\" iconOnly aria-label=\"Buka menu\" aria-expanded={open} onClick={() => setOpen(true)}>\n <MenuIcon />\n </Button>\n )}\n </div>\n </div>\n {!wide && <MobileNav brand={brand} menus={menus} activeKey={activeKey} actions={actions} user={undefined} renderLink={renderLink} open={open} onOpenChange={setOpen} />}\n </header>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { MessageCircleQuestion, Search, SearchX } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { Button, Skeleton } from './actions';\nimport { Accordion, Empty } from './display';\n\nexport interface FaqItem {\n id?: string | number;\n question: React.ReactNode;\n /** Teks biasa (baris baru dipertahankan) atau elemen. */\n answer: React.ReactNode;\n category?: string;\n /** Teks untuk pencarian bila question/answer berupa elemen. */\n searchText?: string;\n}\n\nexport interface FaqProps {\n items: FaqItem[];\n title?: React.ReactNode;\n description?: React.ReactNode;\n /** Kotak cari (bawaan true bila lebih dari 5 pertanyaan). */\n searchable?: boolean;\n /** Pil kategori (bawaan true bila ada lebih dari satu kategori). */\n categories?: boolean;\n /** stack: judul di atas; split: judul + kategori di kiri, pertanyaan di kanan (halaman FAQ). */\n layout?: 'stack' | 'split';\n variant?: 'line' | 'card';\n /** Buka pertanyaan pertama. */\n openFirst?: boolean;\n loading?: boolean;\n /** Kotak \"Masih ada pertanyaan?\" di bawah. */\n contact?: { title?: React.ReactNode; description?: React.ReactNode; action: React.ReactNode };\n /** Pencarian di server: dipanggil saat kata kunci berubah (sudah ditunda 300 ms). Tanpa ini disaring di browser. */\n onSearch?: (q: string) => void;\n className?: string;\n}\n\nconst textOf = (n: React.ReactNode): string => (typeof n === 'string' || typeof n === 'number' ? String(n) : '');\nconst norm = (s: string) => s.toLocaleLowerCase('id').normalize('NFD').replace(/[̀-ͯ]/g, '');\n\n/** Tanya jawab: pencarian, pil kategori, akordeon, dan kotak kontak. Untuk portal, PMB, LMS, layanan akademik. */\nexport function Faq({ items, title, description, searchable, categories, layout = 'stack', variant = 'line', openFirst, loading, contact, onSearch, className }: FaqProps) {\n const [q, setQ] = React.useState('');\n const [kat, setKat] = React.useState<string | null>(null);\n const cats = React.useMemo(() => [...new Set(items.map((i) => i.category).filter(Boolean) as string[])], [items]);\n const showCats = (categories ?? cats.length > 1) && cats.length > 0;\n const showSearch = searchable ?? (items.length > 5 || Boolean(onSearch));\n\n React.useEffect(() => {\n if (!onSearch) return;\n const t = setTimeout(() => onSearch(q.trim()), 300);\n return () => clearTimeout(t);\n }, [q, onSearch]);\n\n const shown = items.filter((i) => {\n if (kat && i.category !== kat) return false;\n if (!q.trim() || onSearch) return true;\n const hay = norm(`${textOf(i.question)} ${textOf(i.answer)} ${i.searchText ?? ''}`);\n return norm(q.trim())\n .split(/\\s+/)\n .every((w) => hay.includes(w));\n });\n const count = (c: string | null) => (c ? items.filter((i) => i.category === c).length : items.length);\n\n const head = (title || description) && (\n <div className=\"u-faq-head\">\n {title && <h2>{title}</h2>}\n {description && <p>{description}</p>}\n </div>\n );\n const search = showSearch && (\n <label className=\"u-faq-search\">\n <Search aria-hidden />\n <input type=\"search\" value={q} onChange={(e) => setQ(e.target.value)} placeholder=\"Cari pertanyaan…\" aria-label=\"Cari pertanyaan\" />\n </label>\n );\n const pills = showCats && (\n <div className=\"u-faq-cats\" role=\"tablist\" aria-label=\"Kategori\">\n {[null, ...cats].map((c) => (\n <button key={c ?? '_semua'} type=\"button\" role=\"tab\" aria-selected={kat === c} onClick={() => setKat(c)}>\n {c ?? 'Semua'}\n <span>{count(c)}</span>\n </button>\n ))}\n </div>\n );\n const list = loading ? (\n <div className=\"u-faq-loading\">\n {Array.from({ length: 5 }, (_, i) => (\n <Skeleton key={i} style={{ height: 52 }} />\n ))}\n </div>\n ) : shown.length ? (\n <Accordion\n key={`${kat}|${q}`}\n variant={variant}\n defaultValue={openFirst ? [String(shown[0]!.id ?? 0)] : undefined}\n items={shown.map((i, idx) => ({\n value: String(i.id ?? idx),\n title: i.question,\n content: typeof i.answer === 'string' ? <p className=\"u-faq-answer\">{i.answer}</p> : i.answer,\n }))}\n />\n ) : (\n <Empty\n icon={<SearchX />}\n title={items.length ? 'Tidak ada pertanyaan yang cocok' : 'Belum ada tanya jawab'}\n description={items.length ? 'Coba kata lain atau pilih kategori Semua.' : undefined}\n actions={\n items.length ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setQ('');\n setKat(null);\n }}\n >\n Atur ulang\n </Button>\n ) : undefined\n }\n />\n );\n const kontak = contact && (\n <div className=\"u-faq-contact\">\n <span className=\"u-faq-contact-icon\" aria-hidden>\n <MessageCircleQuestion />\n </span>\n <div>\n <b>{contact.title ?? 'Masih ada pertanyaan?'}</b>\n {contact.description && <p>{contact.description}</p>}\n </div>\n <div className=\"u-faq-contact-action\">{contact.action}</div>\n </div>\n );\n\n if (layout === 'split')\n return (\n <section className={cn('u-faq', className)} data-layout=\"split\">\n <aside className=\"u-faq-side\">\n {head}\n {search}\n {pills}\n </aside>\n <div className=\"u-faq-main\">\n {list}\n {kontak}\n </div>\n </section>\n );\n return (\n <section className={cn('u-faq', className)} data-layout=\"stack\">\n {head}\n {(search || pills) && (\n <div className=\"u-faq-tools\">\n {search}\n {pills}\n </div>\n )}\n {list}\n {kontak}\n </section>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { cn } from '../lib/cn';\n\n// ================================================================ Tanda (mark) UNIPO\nexport type MarkShape = 'square' | 'circle' | 'shield' | 'plain';\nexport type LogoTone = 'brand' | 'mono' | 'inverse';\n\nexport interface UnipoMarkProps extends Omit<React.SVGProps<SVGSVGElement>, 'children'> {\n size?: number;\n shape?: MarkShape;\n tone?: LogoTone;\n /** Warna dasar; bawaan var(--u-primary). */\n color?: string;\n /** Warna aksen (palang atas); bawaan var(--u-secondary). */\n accent?: string;\n /** Glyph pengganti \"U\" (mis. ikon aplikasi). Koordinat 0–32. */\n glyph?: React.ReactNode;\n title?: string;\n}\n\n/**\n * Tanda grafis UNIPO: huruf U bergaya toga (palang emas di atas).\n * Sepenuhnya vektor dan mengikuti tema (--u-primary / --u-secondary). Ganti dengan logo resmi lewat <AppLogo src=\"…\" />.\n */\nexport function UnipoMark({ size = 32, shape = 'square', tone = 'brand', color, accent, glyph, title = 'UNIPO', ...props }: UnipoMarkProps) {\n const bg = tone === 'inverse' ? '#fff' : tone === 'mono' ? 'currentColor' : (color ?? 'var(--u-primary)');\n const fg = tone === 'inverse' ? (color ?? 'var(--u-primary)') : tone === 'mono' ? 'var(--u-background, #fff)' : '#fff';\n const acc = tone === 'brand' ? (accent ?? 'var(--u-secondary)') : fg;\n const plain = shape === 'plain';\n const stroke = plain ? bg : fg;\n return (\n <svg width={size} height={size} viewBox=\"0 0 32 32\" role=\"img\" aria-label={title} {...props}>\n {shape === 'square' && <rect width=\"32\" height=\"32\" rx=\"8.5\" fill={bg} />}\n {shape === 'circle' && <circle cx=\"16\" cy=\"16\" r=\"16\" fill={bg} />}\n {shape === 'shield' && <path d=\"M16 1.5 29 5.6v10.2c0 7.6-5.3 12.6-13 14.7C8.3 28.4 3 23.4 3 15.8V5.6Z\" fill={bg} />}\n {shape !== 'plain' && shape !== 'shield' && <path d=\"M0 8.5A8.5 8.5 0 0 1 8.5 0h15A8.5 8.5 0 0 1 32 8.5V11C21 9 11 9 0 13Z\" fill=\"#fff\" fillOpacity={tone === 'brand' ? 0.08 : 0} />}\n {glyph ?? (\n <>\n <path d=\"M9.5 9.5h13\" stroke={acc} strokeWidth=\"2.6\" strokeLinecap=\"round\" />\n <path d=\"M10.5 13.2v4.6a5.5 5.5 0 0 0 11 0v-4.6\" stroke={stroke} strokeWidth=\"3\" strokeLinecap=\"round\" fill=\"none\" />\n </>\n )}\n </svg>\n );\n}\n\n// ================================================================ Logo aplikasi\nexport interface AppLogoProps extends Omit<React.ComponentProps<'span'>, 'title'> {\n /** Nama utama, mis. \"SIAKAD\" atau \"UNIPO\". */\n name?: React.ReactNode;\n /** Baris kedua kecil, mis. \"Universitas Pohuwato\". */\n tagline?: React.ReactNode;\n /** Logo resmi (gambar). Bila diisi, menggantikan UnipoMark. */\n src?: string;\n /**\n * horizontal (bawaan), stacked (tanda di tengah, teks di bawah), mark (tanda saja), wordmark (teks saja),\n * full (gambar logo utuh apa adanya, tanpa teks; tanpa `src` sama dengan horizontal).\n */\n layout?: 'horizontal' | 'stacked' | 'mark' | 'wordmark' | 'full';\n shape?: MarkShape;\n tone?: LogoTone;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Warna tanda khusus aplikasi (mis. PMB oranye, LMS hijau). Untuk logo gambar: warna pelat di belakang gambar. */\n color?: string;\n glyph?: React.ReactNode;\n /**\n * Cara gambar `src` mengisi bentuk: cover (memenuhi bentuk, bawaan tanpa `color`) atau contain (utuh dengan jarak,\n * bawaan bila `color` diisi, cocok untuk logo PNG transparan).\n */\n fit?: 'cover' | 'contain';\n /** Dipanggil bila gambar `src` gagal dimuat. */\n onSrcError?: () => void;\n}\n\nconst MARK_SIZE = { sm: 24, md: 32, lg: 40, xl: 56 };\n\n/** Logo aplikasi UNIPO dengan banyak varian: tata letak, bentuk, nada warna, ukuran. */\nexport function AppLogo({ name = 'UNIPO', tagline, src, layout = 'horizontal', shape = 'square', tone = 'brand', size = 'md', color, glyph, fit, onSrcError, className, ...props }: AppLogoProps) {\n const px = MARK_SIZE[size];\n const judul = typeof name === 'string' ? name : 'UNIPO';\n const tata = layout === 'full' && !src ? 'horizontal' : layout;\n if (layout === 'full' && src) {\n return (\n <span className={cn('u-app-logo', className)} data-layout=\"full\" data-size={size} data-tone={tone} {...props}>\n <img className=\"u-app-logo-full\" src={src} alt={judul} height={px} onError={onSrcError} />\n </span>\n );\n }\n const mark = src ? (\n <LogoGambar src={src} size={px} shape={shape} tone={tone} color={color} fit={fit} title={judul} onGagal={onSrcError} />\n ) : (\n <UnipoMark size={px} shape={shape} tone={tone} color={color} glyph={glyph} title={judul} />\n );\n return (\n <span className={cn('u-app-logo', className)} data-layout={tata} data-size={size} data-tone={tone} {...props}>\n {tata !== 'wordmark' && mark}\n {tata !== 'mark' && (\n <span className=\"u-app-logo-text\">\n <span className=\"u-app-logo-name\">{name}</span>\n {tagline && <span className=\"u-app-logo-tagline\">{tagline}</span>}\n </span>\n )}\n </span>\n );\n}\n\n// ================================================================ Logo gambar dalam bentuk tanda\nexport interface LogoGambarProps extends Omit<React.ComponentProps<'span'>, 'title'> {\n src: string;\n size?: number;\n shape?: MarkShape;\n tone?: LogoTone;\n /** Warna pelat di belakang gambar. */\n color?: string;\n fit?: 'cover' | 'contain';\n title?: string;\n /** Dipanggil bila gambar gagal dimuat (mis. untuk beralih ke logo cadangan). */\n onGagal?: () => void;\n}\n\n/**\n * Logo unggahan (PNG/JPG/WebP) yang dipotong mengikuti bentuk tanda UNIPO: square, circle, shield, atau plain.\n * tone mono membuat gambar abu-abu, inverse memberi pelat putih untuk latar gelap.\n */\nexport function LogoGambar({ src, size = 32, shape = 'square', tone = 'brand', color, fit, title, onGagal, className, style, ...props }: LogoGambarProps) {\n const cara = fit ?? (color || tone === 'inverse' ? 'contain' : 'cover');\n return (\n <span\n className={cn('u-logo-gambar', className)}\n data-shape={shape}\n data-tone={tone}\n data-fit={cara}\n role=\"img\"\n aria-label={title}\n style={{ width: size, height: size, ...(color ? { ['--u-logo-pelat' as string]: color } : {}), ...style }}\n {...props}\n >\n <img src={src} alt=\"\" width={size} height={size} draggable={false} onError={onGagal} />\n </span>\n );\n}\n\n// ================================================================ Logo per aplikasi ekosistem UNIPO\nconst G = (d: string, extra?: React.ReactNode) => (\n <>\n <path d={d} stroke=\"#fff\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\n {extra}\n </>\n);\n\n/** Glyph khas tiap aplikasi (dalam kotak 32×32). */\nexport const APP_GLYPHS = {\n siakad: G('M9.5 9.5h13M10.5 13.2v4.6a5.5 5.5 0 0 0 11 0v-4.6'),\n pmb: G('M16 8.5v15M8.5 16h15', <circle cx=\"16\" cy=\"16\" r=\"10\" stroke=\"#fff\" strokeOpacity=\".35\" strokeWidth=\"1.6\" fill=\"none\" />),\n lms: G('M8 11.5 16 8l8 3.5-8 3.5Zm3.5 2v5c0 1.6 2 3 4.5 3s4.5-1.4 4.5-3v-5'),\n cbt: G('M9 9.5h14v10H9ZM13 23h6M16 19.5V23M12.5 14.5l2.2 2.2 4.3-4.3'),\n tracer: G('M8.5 22.5 13 17l3.5 3 7-8.5M19 11.5h4.5V16'),\n humas: G('M9 13.5v5l3 .5 1.5 4h2l-1-3.6L23 22V10l-11 3.5Z'),\n pustikom: G('M9 9h14v9H9ZM12.5 23h7M16 18v5'),\n sso: G('M12 15v-2.5a4 4 0 0 1 8 0V15M10.5 15h11v8h-11ZM16 18.3v1.7'),\n api: G('M12.5 10.5 8 16l4.5 5.5M19.5 10.5 24 16l-4.5 5.5M17.5 9l-3 14'),\n fakultas: G('M8 13 16 9l8 4M9.5 13v8M22.5 13v8M13 13.5v7M19 13.5v7M8 22.5h16'),\n alumni: G('M16 9a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7ZM9.5 23a6.5 6.5 0 0 1 13 0'),\n arsip: G('M8.5 10h15v4h-15ZM9.5 14v8.5h13V14M14 17.5h4'),\n} satisfies Record<string, React.ReactNode>;\n\nexport type UnipoApp = keyof typeof APP_GLYPHS;\n\n/** Warna bawaan tiap aplikasi; bisa ditimpa lewat prop `color`. */\nexport const APP_COLORS: Record<UnipoApp, string> = {\n siakad: 'var(--u-primary)',\n pmb: '#d9541e',\n lms: '#0f8a6a',\n cbt: '#6d4fd1',\n tracer: '#0e7490',\n humas: '#c2416b',\n pustikom: '#1f2937',\n sso: '#244ce6',\n api: '#0f172a',\n fakultas: '#8a5a12',\n alumni: '#7c3aed',\n arsip: '#5b6b7f',\n};\n\nconst APP_NAMES: Record<UnipoApp, string> = {\n siakad: 'SIAKAD',\n pmb: 'PMB',\n lms: 'E-Learning',\n cbt: 'CBT',\n tracer: 'Tracer Study',\n humas: 'Humas',\n pustikom: 'Pustikom',\n sso: 'SSO',\n api: 'API',\n fakultas: 'Fakultas',\n alumni: 'Alumni',\n arsip: 'Arsip',\n};\n\n/** Logo siap pakai untuk aplikasi di ekosistem UNIPO: <UnipoAppLogo app=\"pmb\" />. */\nexport function UnipoAppLogo({ app, tagline = 'Universitas Pohuwato', ...props }: { app: UnipoApp } & Omit<AppLogoProps, 'glyph'>) {\n return <AppLogo name={APP_NAMES[app]} tagline={tagline} glyph={APP_GLYPHS[app]} color={props.color ?? APP_COLORS[app]} {...props} />;\n}\n\n// ================================================================ Logo aplikasi terdaftar (Pustikom)\nconst WARNA_INISIAL = ['#244ce6', '#0f8a6a', '#d9541e', '#6d4fd1', '#0e7490', '#c2416b', '#8a5a12', '#5b6b7f'];\n\n/** Inisial nama aplikasi sebagai glyph tanda (koordinat 0–32), untuk aplikasi tanpa logo dan tanpa glyph bawaan. */\nexport function glyphInisial(nama: string): React.ReactNode {\n const kata = nama\n .replace(/[^\\p{L}\\p{N} ]/gu, ' ')\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n const teks = (kata.length > 1 ? kata[0]![0]! + kata[1]![0]! : (kata[0] ?? '?').slice(0, 2)).toUpperCase();\n return (\n <text\n x=\"16\"\n y=\"16.5\"\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"#fff\"\n fontSize={teks.length > 1 ? 12.5 : 15}\n fontWeight={800}\n fontFamily=\"var(--u-font-heading, inherit)\"\n letterSpacing=\"-0.02em\"\n >\n {teks}\n </text>\n );\n}\n\n/** Warna tetap dari kode aplikasi, agar aplikasi tanpa logo tetap punya warna yang konsisten. */\nexport function warnaAplikasi(kode: string): string {\n if (kode in APP_COLORS) return APP_COLORS[kode as UnipoApp];\n let h = 0;\n for (const c of kode) h = (h * 31 + c.charCodeAt(0)) >>> 0;\n return WARNA_INISIAL[h % WARNA_INISIAL.length]!;\n}\n\n/** Alamat logo publik klien SSO (sso.unipo.ac.id/logos/<client_id>.png|webp|jpg), urut dari yang paling mungkin. */\nexport function urlLogoSso(kode: string, ssoUrl = 'https://sso.unipo.ac.id'): string[] {\n const id = kode.toLowerCase().replace(/-/g, '_');\n if (!/^[a-z0-9_]{3,64}$/.test(id)) return [];\n const dasar = ssoUrl.replace(/\\/+$/, '');\n return ['png', 'webp', 'jpg'].map((x) => `${dasar}/logos/${id}.${x}`);\n}\n\nconst cacheLogo = new Map<string, string | null>();\n\n/** Muat calon logo satu per satu dan kembalikan yang pertama berhasil (null bila tidak ada). Hasil disimpan per sesi. */\nexport function useLogoTersedia(calon: Array<string | null | undefined>): { src: string | null; memuat: boolean } {\n const daftar = calon.filter((x): x is string => !!x);\n const kunci = daftar.join('|');\n const [hasil, setHasil] = React.useState<{ kunci: string; src: string | null } | null>(() => (cacheLogo.has(kunci) ? { kunci, src: cacheLogo.get(kunci)! } : null));\n React.useEffect(() => {\n if (cacheLogo.has(kunci)) {\n setHasil({ kunci, src: cacheLogo.get(kunci)! });\n return;\n }\n if (!daftar.length || typeof Image === 'undefined') {\n setHasil({ kunci, src: null });\n return;\n }\n let batal = false;\n const coba = (i: number) => {\n if (batal) return;\n if (i >= daftar.length) {\n cacheLogo.set(kunci, null);\n setHasil({ kunci, src: null });\n return;\n }\n const img = new Image();\n img.onload = () => {\n if (batal) return;\n cacheLogo.set(kunci, daftar[i]!);\n setHasil({ kunci, src: daftar[i]! });\n };\n img.onerror = () => coba(i + 1);\n img.src = daftar[i]!;\n };\n coba(0);\n return () => {\n batal = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [kunci]);\n const ok = hasil?.kunci === kunci;\n return { src: ok ? hasil!.src : null, memuat: !ok };\n}\n\nexport interface LogoAplikasiProps extends Omit<AppLogoProps, 'glyph' | 'name' | 'src'> {\n /** Kode aplikasi yang terdaftar di Pustikom (katalog RBAC / client ID SSO), mis. \"pmb\" atau \"kuliahku\". */\n kode: string;\n /** Nama tampilan. Bawaan: nama aplikasi bawaan UNIPO atau kode. */\n name?: React.ReactNode;\n /** Logo yang sudah diketahui, mis. `aplikasi.logo` dari useAplikasiTerpadu(). Dicoba lebih dulu. */\n src?: string | null;\n /**\n * Alamat SSO untuk mengambil logo publik klien (`/logos/<client_id>.png`). Bawaan https://sso.unipo.ac.id;\n * isi null agar hanya memakai `src`.\n */\n ssoUrl?: string | null;\n}\n\n/**\n * Logo aplikasi yang terdaftar di Pustikom: bila aplikasinya punya logo unggahan (klien SSO / klien API), logo itu\n * dipakai, dipotong mengikuti `shape` dan `tone` yang sama dengan logo vektor. Bila belum ada logo, dipakai glyph\n * bawaan aplikasi UNIPO, atau inisial nama dengan warna tetap. Semua `layout` AppLogo berlaku, termasuk `full`.\n */\nexport function LogoAplikasi({ kode, name, src, ssoUrl = 'https://sso.unipo.ac.id', tagline = 'Universitas Pohuwato', color, ...props }: LogoAplikasiProps) {\n const calon = React.useMemo(() => [src, ...(ssoUrl ? urlLogoSso(kode, ssoUrl) : [])], [src, kode, ssoUrl]);\n const logo = useLogoTersedia(calon);\n const bawaan = (kode.toLowerCase() in APP_GLYPHS ? kode.toLowerCase() : null) as UnipoApp | null;\n const nama = name ?? (bawaan ? APP_NAMES[bawaan] : kode);\n if (logo.src) return <AppLogo name={nama} tagline={tagline} src={logo.src} color={color} {...props} />;\n const glyph = bawaan ? APP_GLYPHS[bawaan] : glyphInisial(typeof nama === 'string' ? nama : kode);\n const layout = props.layout === 'full' ? 'horizontal' : props.layout;\n return <AppLogo name={nama} tagline={tagline} glyph={glyph} color={color ?? warnaAplikasi(kode.toLowerCase())} {...props} layout={layout} data-memuat={logo.memuat || undefined} />;\n}\n","'use client';\nimport * as React from 'react';\nimport { AlertTriangle, CheckCircle2, Clock, Loader2, RefreshCw, XCircle, Wrench } from 'lucide-react';\nimport { cn } from '../lib/cn';\nimport { formatTime } from '../lib/format';\nimport { Button } from './actions';\nimport { Tooltip } from './overlays';\n\n// ================================================================ Tipe\n/** ok = normal, degraded = lambat/sebagian, down = gangguan, maintenance = pemeliharaan, off = tidak aktif, checking = sedang diperiksa. */\nexport type ServiceState = 'ok' | 'degraded' | 'down' | 'maintenance' | 'off' | 'checking';\n\nexport interface ServiceInfo {\n key: string;\n name: React.ReactNode;\n /** Baris kedua: alamat, keterangan, atau pesan galat. */\n description?: React.ReactNode;\n icon?: React.ReactNode;\n status: ServiceState;\n /** Ganti teks lencana, mis. \"Aktif\". */\n statusLabel?: string;\n /** Waktu tanggap dalam milidetik. */\n latency?: number | null;\n /** Kode HTTP atau pesan singkat saat gangguan. */\n detail?: React.ReactNode;\n /** Riwayat 30–90 hari terakhir untuk bilah uptime (urutan lama → baru). */\n history?: Array<{ date: string; status: Exclude<ServiceState, 'checking' | 'off'>; note?: string }>;\n href?: string;\n}\n\nconst LABEL: Record<ServiceState, string> = { ok: 'Normal', degraded: 'Lambat', down: 'Gangguan', maintenance: 'Pemeliharaan', off: 'Nonaktif', checking: 'Memeriksa' };\nconst ICON: Record<ServiceState, React.ReactNode> = {\n ok: <CheckCircle2 />,\n degraded: <AlertTriangle />,\n down: <XCircle />,\n maintenance: <Wrench />,\n off: <XCircle />,\n checking: <Loader2 className=\"u-spin\" />,\n};\n\n/** Status gabungan: gangguan > lambat > pemeliharaan > memeriksa > normal. */\nexport function overallStatus(states: ServiceState[]): ServiceState {\n for (const s of ['down', 'degraded', 'maintenance', 'checking'] as const) if (states.includes(s)) return s;\n return 'ok';\n}\n\n// ================================================================ Lencana & latensi\nexport function ServiceStatusBadge({ status, children, className }: { status: ServiceState; children?: React.ReactNode; className?: string }) {\n return (\n <span className={cn('u-svc-badge', className)} data-status={status}>\n <span className=\"u-svc-dot\" aria-hidden />\n {children ?? LABEL[status]}\n </span>\n );\n}\n\n/** Waktu tanggap dengan warna: < lambat (bawaan 800 ms) netral, di atasnya kuning, di atas 3× merah. */\nexport function LatencyIndicator({ ms, slow = 800, className }: { ms?: number | null; slow?: number; className?: string }) {\n if (ms == null) return null;\n const tone = ms >= slow * 3 ? 'down' : ms >= slow ? 'degraded' : 'ok';\n return (\n <span className={cn('u-svc-latency', className)} data-tone={tone} title=\"Waktu tanggap\">\n <Clock aria-hidden />\n {ms.toLocaleString('id-ID')} ms\n </span>\n );\n}\n\n// ================================================================ Banner\nexport interface StatusBannerProps {\n status: ServiceState;\n title?: React.ReactNode;\n /** Waktu pemeriksaan terakhir. */\n checkedAt?: Date | null;\n /** Teks tambahan, mis. \"diperbarui tiap menit\". */\n note?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\nconst TITLE: Record<ServiceState, string> = {\n ok: 'Semua layanan berjalan normal',\n degraded: 'Sebagian layanan melambat',\n down: 'Sebagian layanan terganggu',\n maintenance: 'Sedang ada pemeliharaan terjadwal',\n off: 'Layanan tidak aktif',\n checking: 'Memeriksa layanan…',\n};\n/** Spanduk status keseluruhan, seperti halaman status layanan. */\nexport function StatusBanner({ status, title, checkedAt, note, action, className }: StatusBannerProps) {\n return (\n <div className={cn('u-status-banner', className)} data-status={status} role=\"status\" aria-live=\"polite\">\n <span className=\"u-status-banner-icon\">{ICON[status]}</span>\n <div className=\"u-status-banner-text\">\n <p className=\"u-status-banner-title\">{title ?? TITLE[status]}</p>\n {(checkedAt || note) && (\n <p className=\"u-status-banner-note\">\n {checkedAt && <>Diperiksa {formatTime(checkedAt)}</>}\n {checkedAt && note && ' · '}\n {note}\n </p>\n )}\n </div>\n {action && <div className=\"u-status-banner-action\">{action}</div>}\n </div>\n );\n}\n\n// ================================================================ Bilah uptime\nexport function UptimeBar({ history, label }: { history: NonNullable<ServiceInfo['history']>; label?: string }) {\n const ok = history.filter((h) => h.status === 'ok').length;\n const pct = history.length ? (ok / history.length) * 100 : 100;\n return (\n <div className=\"u-uptime\">\n <div className=\"u-uptime-bars\" role=\"img\" aria-label={`${label ?? 'Ketersediaan'} ${pct.toFixed(2)}% dalam ${history.length} hari`}>\n {history.map((h) => (\n <Tooltip key={h.date} content={`${h.date}: ${h.note ?? LABEL[h.status]}`}>\n <span className=\"u-uptime-bar\" data-status={h.status} />\n </Tooltip>\n ))}\n </div>\n <div className=\"u-uptime-legend\">\n <span>{history.length} hari lalu</span>\n <span>{pct.toFixed(pct === 100 ? 0 : 2)}% tersedia</span>\n <span>Hari ini</span>\n </div>\n </div>\n );\n}\n\n// ================================================================ Daftar layanan\nexport interface ServiceListProps {\n services: ServiceInfo[];\n /** Ambang lambat untuk warna latensi. */\n slowMs?: number;\n className?: string;\n}\n/** Daftar layanan: ikon, nama, alamat/keterangan, latensi, dan lencana status. */\nexport function ServiceList({ services, slowMs, className }: ServiceListProps) {\n return (\n <ul className={cn('u-svc-list', className)}>\n {services.map((s) => (\n <li key={s.key} className=\"u-svc-row\" data-status={s.status}>\n <div className=\"u-svc-main\">\n {s.icon && <span className=\"u-svc-icon\">{s.icon}</span>}\n <div className=\"u-svc-text\">\n <p className=\"u-svc-name\">{s.href ? <a href={s.href}>{s.name}</a> : s.name}</p>\n {s.description && <p className=\"u-svc-desc\">{s.description}</p>}\n </div>\n <LatencyIndicator ms={s.status === 'checking' ? null : s.latency} slow={slowMs} className=\"u-svc-hide-sm\" />\n <ServiceStatusBadge status={s.status}>\n {s.statusLabel ?? LABEL[s.status]}\n {s.detail && s.status !== 'ok' ? <span className=\"u-svc-detail\"> ({s.detail})</span> : null}\n </ServiceStatusBadge>\n </div>\n {s.history && s.history.length > 0 && <UptimeBar history={s.history} label={typeof s.name === 'string' ? s.name : undefined} />}\n </li>\n ))}\n </ul>\n );\n}\n\n// ================================================================ Pemeriksa\nexport interface ServiceCheck {\n key: string;\n name: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n href?: string;\n /**\n * Fungsi pemeriksa. Lempar galat bila gagal; kembalikan objek untuk menimpa hasil\n * (mis. { status: 'degraded', detail: 'antrean penuh' }). Latensi diukur otomatis.\n */\n check: (signal: AbortSignal) => Promise<void | Partial<Pick<ServiceInfo, 'status' | 'detail' | 'description'>>>;\n}\n\n/** Periksa beberapa layanan sekaligus, ukur latensi, dan ulangi tiap `intervalMs` (0 = tidak otomatis). */\nexport function useServiceChecks(checks: ServiceCheck[], { intervalMs = 60_000, timeoutMs = 10_000, slowMs = 2_000 }: { intervalMs?: number; timeoutMs?: number; slowMs?: number } = {}) {\n const [results, setResults] = React.useState<Record<string, Partial<ServiceInfo>>>({});\n const [checking, setChecking] = React.useState(false);\n const [checkedAt, setCheckedAt] = React.useState<Date | null>(null);\n const ref = React.useRef(checks);\n ref.current = checks;\n const run = React.useCallback(async () => {\n setChecking(true);\n const out: Record<string, Partial<ServiceInfo>> = {};\n await Promise.all(\n ref.current.map(async (c) => {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n const t = performance.now();\n try {\n const r = (await c.check(ctrl.signal)) || {};\n const ms = Math.round(performance.now() - t);\n out[c.key] = { status: ms > slowMs ? 'degraded' : 'ok', latency: ms, ...r };\n } catch (e) {\n const err = e as { status?: number; name?: string; message?: string };\n out[c.key] = { status: 'down', latency: Math.round(performance.now() - t), detail: ctrl.signal.aborted ? 'waktu habis' : err?.status ? String(err.status) : err?.message?.slice(0, 40) };\n } finally {\n clearTimeout(timer);\n }\n }),\n );\n setResults(out);\n setCheckedAt(new Date());\n setChecking(false);\n }, [timeoutMs, slowMs]);\n React.useEffect(() => {\n void run();\n if (!intervalMs) return;\n const id = setInterval(() => void run(), intervalMs);\n return () => clearInterval(id);\n }, [run, intervalMs]);\n const services: ServiceInfo[] = checks.map((c) => ({ key: c.key, name: c.name, description: c.description, icon: c.icon, href: c.href, status: 'checking', ...results[c.key] }) as ServiceInfo);\n return { services, checking, checkedAt, recheck: run, status: checkedAt ? overallStatus(services.map((s) => s.status)) : ('checking' as ServiceState) };\n}\n\n// ================================================================ Panel lengkap\nexport interface ServiceStatusPanelProps {\n checks: ServiceCheck[];\n intervalMs?: number;\n /** Ambang lambat (ms). Bawaan 2000. */\n slowMs?: number;\n title?: React.ReactNode;\n className?: string;\n}\n/** Panel status siap pakai: banner + daftar layanan + tombol Periksa ulang, dengan pemeriksaan otomatis. */\nexport function ServiceStatusPanel({ checks, intervalMs = 60_000, slowMs = 2_000, title, className }: ServiceStatusPanelProps) {\n const { services, checking, checkedAt, recheck, status } = useServiceChecks(checks, { intervalMs, slowMs });\n const tiap = intervalMs >= 60_000 ? `tiap ${Math.round(intervalMs / 60_000)} menit` : `tiap ${Math.round(intervalMs / 1000)} detik`;\n return (\n <div className={cn('u-status-panel', className)}>\n <StatusBanner status={status} title={title} checkedAt={checkedAt} note={intervalMs ? `diperbarui ${tiap.replace('tiap 1 menit', 'tiap menit')}` : undefined} />\n <ServiceList services={services} slowMs={slowMs / 2} />\n <div className=\"u-status-panel-footer\">\n <Button variant=\"outline\" size=\"sm\" loading={checking} onClick={() => void recheck()}>\n {!checking && <RefreshCw />} Periksa ulang\n </Button>\n </div>\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { CalendarDays, ChevronLeft, ChevronRight, Clock, MapPin } from 'lucide-react';\nimport { cn, dataFlag } from '../lib/cn';\nimport { Button, Skeleton } from './actions';\nimport { monthMatrix, parseISODate, toISODate } from './calendar';\n\n// ================================================================ Tipe\nexport interface CalendarEvent {\n id?: string | number;\n title: React.ReactNode;\n /** Tanggal mulai, YYYY-MM-DD atau ISO lengkap. */\n start: string;\n /** Tanggal selesai (inklusif). Kosong = satu hari. */\n end?: string | null;\n /** Jenis kegiatan: menentukan warna bila `color` kosong. */\n kind?: string;\n color?: string;\n location?: React.ReactNode;\n /** Jam, mis. \"08.00–10.00\". */\n time?: React.ReactNode;\n description?: React.ReactNode;\n href?: string;\n /** Hari libur: tanggalnya diberi warna merah. */\n holiday?: boolean;\n}\n\n/** Warna bawaan per jenis kegiatan (jenis dari kalender SIAKAD). Bisa ditimpa lewat prop `colors`. */\nexport const EVENT_COLORS: Record<string, string> = {\n akademik: 'var(--u-primary)',\n perkuliahan: '#0891b2',\n ujian: '#7c3aed',\n krs: 'var(--u-info)',\n nilai: '#0d9488',\n libur: 'var(--u-danger)',\n cuti_bersama: 'var(--u-danger)',\n wisuda: '#c026d3',\n pmb: 'var(--u-secondary, #f59e0b)',\n keuangan: 'var(--u-warning)',\n kemahasiswaan: '#16a34a',\n rapat: '#64748b',\n lainnya: '#64748b',\n};\n\nconst BULAN = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];\nconst BULAN_PENDEK = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agu', 'Sep', 'Okt', 'Nov', 'Des'];\nconst HARI = ['Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab', 'Min'];\nconst HARI_PANJANG = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'];\n\nconst iso = (s: string) => s.slice(0, 10);\nexport function eventColor(e: CalendarEvent, colors: Record<string, string> = EVENT_COLORS): string {\n return e.color ?? (e.kind ? colors[e.kind] : undefined) ?? 'var(--u-primary)';\n}\n\n/** Kelompokkan kegiatan per tanggal ISO (kegiatan beberapa hari muncul di tiap harinya). */\nexport function eventsByDay(events: CalendarEvent[], from?: string, to?: string): Map<string, CalendarEvent[]> {\n const map = new Map<string, CalendarEvent[]>();\n for (const e of events) {\n const a = iso(e.start);\n const b = e.end ? iso(e.end) : a;\n const d = parseISODate(from && a < from ? from : a);\n const last = to && b > to ? to : b;\n for (let i = 0; i < 400 && toISODate(d) <= last; i++) {\n const k = toISODate(d);\n (map.get(k) ?? map.set(k, []).get(k)!).push(e);\n d.setDate(d.getDate() + 1);\n }\n }\n return map;\n}\n\n/** \"12–14 Nov 2026\", \"12 Nov – 3 Des 2026\", atau \"Selasa, 12 November 2026\". */\nexport function formatEventRange(start: string, end?: string | null, long = false): string {\n const a = parseISODate(iso(start));\n const b = end && iso(end) !== iso(start) ? parseISODate(iso(end)) : null;\n if (!b) return long ? `${HARI_PANJANG[a.getDay()]}, ${a.getDate()} ${BULAN[a.getMonth()]} ${a.getFullYear()}` : `${a.getDate()} ${BULAN_PENDEK[a.getMonth()]} ${a.getFullYear()}`;\n const M = long ? BULAN : BULAN_PENDEK;\n if (a.getFullYear() !== b.getFullYear()) return `${a.getDate()} ${M[a.getMonth()]} ${a.getFullYear()} – ${b.getDate()} ${M[b.getMonth()]} ${b.getFullYear()}`;\n if (a.getMonth() !== b.getMonth()) return `${a.getDate()} ${M[a.getMonth()]} – ${b.getDate()} ${M[b.getMonth()]} ${b.getFullYear()}`;\n return `${a.getDate()}–${b.getDate()} ${M[a.getMonth()]} ${a.getFullYear()}`;\n}\n\n// ================================================================ Tile tanggal\n/** Tile tanggal (bulan + angka) untuk daftar agenda dan kartu acara. */\nexport function DateTile({ date, tone, size = 'md', className }: { date: string | Date; tone?: string; size?: 'sm' | 'md' | 'lg'; className?: string }) {\n const d = typeof date === 'string' ? parseISODate(iso(date)) : date;\n return (\n <span className={cn('u-date-tile', className)} data-size={size} style={tone ? ({ '--tone': tone } as React.CSSProperties) : undefined}>\n <span className=\"u-date-tile-month\">{BULAN_PENDEK[d.getMonth()]}</span>\n <span className=\"u-date-tile-day\">{d.getDate()}</span>\n </span>\n );\n}\n\n// ================================================================ Kalender acara (bulanan)\nexport interface EventCalendarProps {\n events: CalendarEvent[];\n /** Bulan yang ditampilkan (terkendali). */\n month?: Date;\n onMonthChange?: (month: Date) => void;\n selected?: string | null;\n onSelect?: (isoDate: string, events: CalendarEvent[]) => void;\n onEventClick?: (event: CalendarEvent) => void;\n /** Maksimal baris acara per minggu sebelum \"+n lagi\". Bawaan 3. */\n maxPerDay?: number;\n loading?: boolean;\n colors?: Record<string, string>;\n /** Isi tambahan di kanan judul bulan (filter, tombol unduh .ics, dll). */\n toolbar?: React.ReactNode;\n className?: string;\n}\n\ninterface Segmen {\n e: CalendarEvent;\n from: number;\n to: number;\n lane: number;\n head: boolean;\n tail: boolean;\n}\n\n/** Susun acara satu minggu ke jalur (lane): acara beberapa hari jadi satu bilah memanjang. */\nfunction susunMinggu(events: CalendarEvent[], days: string[]): Segmen[] {\n const a = days[0]!;\n const b = days[6]!;\n const segs = events\n .filter((e) => iso(e.start) <= b && (e.end ? iso(e.end) : iso(e.start)) >= a)\n .map((e) => {\n const s = iso(e.start);\n const t = e.end ? iso(e.end) : s;\n return {\n e,\n from: s < a ? 0 : days.indexOf(s),\n to: t > b ? 6 : days.indexOf(t),\n lane: 0,\n head: s >= a,\n tail: t <= b,\n };\n })\n .sort((x, y) => x.from - y.from || y.to - y.from - (x.to - x.from));\n const lanes: number[] = [];\n for (const s of segs) {\n let l = lanes.findIndex((end) => end < s.from);\n if (l < 0) l = lanes.push(-1) - 1;\n lanes[l] = s.to;\n s.lane = l;\n }\n return segs;\n}\n\n/** Kalender bulanan: acara beberapa hari tampil sebagai satu bilah memanjang, \"+n lagi\" per hari, hari libur merah, titik warna di ponsel. */\nexport function EventCalendar({ events, month: monthProp, onMonthChange, selected, onSelect, onEventClick, maxPerDay = 3, loading, colors, toolbar, className }: EventCalendarProps) {\n const [monthState, setMonthState] = React.useState(() => monthProp ?? new Date());\n const month = monthProp ?? monthState;\n const setMonth = (m: Date) => {\n setMonthState(m);\n onMonthChange?.(m);\n };\n const days = monthMatrix(month.getFullYear(), month.getMonth());\n const from = toISODate(days[0]!);\n const to = toISODate(days[41]!);\n const byDay = React.useMemo(() => eventsByDay(events, from, to), [events, from, to]);\n const today = toISODate(new Date());\n const go = (n: number) => setMonth(new Date(month.getFullYear(), month.getMonth() + n, 1));\n const rows = days[35]!.getMonth() !== month.getMonth() ? 5 : 6;\n\n return (\n <div className={cn('u-evcal', className)} data-loading={dataFlag(loading)}>\n <div className=\"u-evcal-head\">\n <div className=\"u-evcal-nav\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setMonth(new Date(new Date().getFullYear(), new Date().getMonth(), 1))}>\n Hari ini\n </Button>\n <Button variant=\"ghost\" size=\"sm\" iconOnly aria-label=\"Bulan sebelumnya\" onClick={() => go(-1)}>\n <ChevronLeft />\n </Button>\n <Button variant=\"ghost\" size=\"sm\" iconOnly aria-label=\"Bulan berikutnya\" onClick={() => go(1)}>\n <ChevronRight />\n </Button>\n </div>\n <h3 className=\"u-evcal-title\" aria-live=\"polite\">\n {BULAN[month.getMonth()]} <span>{month.getFullYear()}</span>\n </h3>\n {toolbar && <div className=\"u-evcal-toolbar\">{toolbar}</div>}\n </div>\n <div className=\"u-evcal-grid\" role=\"grid\" aria-label={`${BULAN[month.getMonth()]} ${month.getFullYear()}`}>\n <div className=\"u-evcal-weekdays\" role=\"row\">\n {HARI.map((h) => (\n <span key={h} role=\"columnheader\">\n {h}\n </span>\n ))}\n </div>\n {Array.from({ length: rows }, (_, r) => {\n const week = days.slice(r * 7, r * 7 + 7);\n const keys = week.map(toISODate);\n const segs = loading ? [] : susunMinggu(events, keys);\n const shown = segs.filter((s) => s.lane < maxPerDay - 1 || (s.lane === maxPerDay - 1 && keys.slice(s.from, s.to + 1).every((k) => (byDay.get(k)?.length ?? 0) <= maxPerDay)));\n return (\n <div className=\"u-evcal-week\" role=\"row\" key={r} style={{ '--lanes': maxPerDay } as React.CSSProperties}>\n {week.map((d, c) => {\n const k = keys[c]!;\n const list = byDay.get(k) ?? [];\n const hidden = list.length - shown.filter((s) => s.from <= c && s.to >= c).length;\n return (\n <div\n key={k}\n role=\"gridcell\"\n className=\"u-evcal-day\"\n style={{ gridColumn: c + 1 }}\n data-outside={dataFlag(d.getMonth() !== month.getMonth())}\n data-today={dataFlag(k === today)}\n data-selected={dataFlag(k === selected)}\n data-weekend={dataFlag(d.getDay() === 0)}\n data-holiday={dataFlag(list.some((e) => e.holiday))}\n aria-selected={k === selected}\n >\n <button type=\"button\" className=\"u-evcal-date\" onClick={() => onSelect?.(k, list)} aria-label={`${formatEventRange(k, null, true)}, ${list.length} kegiatan`}>\n {d.getDate()}\n </button>\n {loading && (r + c) % 4 === 1 && <Skeleton className=\"u-evcal-skel\" />}\n {hidden > 0 && (\n <button type=\"button\" className=\"u-evcal-more\" onClick={() => onSelect?.(k, list)}>\n +{hidden} lagi\n </button>\n )}\n {list.length > 0 && (\n <span className=\"u-evcal-dots\" aria-hidden>\n {list.slice(0, 3).map((e, i) => (\n <i key={i} style={{ background: eventColor(e, colors) }} />\n ))}\n </span>\n )}\n </div>\n );\n })}\n {shown.map((s, i) => (\n <button\n key={`${s.e.id ?? i}-${i}`}\n type=\"button\"\n className=\"u-evcal-chip\"\n title={typeof s.e.title === 'string' ? s.e.title : undefined}\n data-span={dataFlag(!!s.e.end && iso(s.e.end) !== iso(s.e.start))}\n data-head={dataFlag(s.head)}\n data-tail={dataFlag(s.tail)}\n style={\n {\n gridColumn: `${s.from + 1} / ${s.to + 2}`,\n gridRow: s.lane + 2,\n '--tone': eventColor(s.e, colors),\n } as React.CSSProperties\n }\n onClick={() => (onEventClick ? onEventClick(s.e) : onSelect?.(keys[s.from]!, byDay.get(keys[s.from]!) ?? []))}\n >\n {s.e.time && !s.e.end ? <span className=\"u-evcal-chip-time\">{s.e.time}</span> : null}\n {s.e.title}\n </button>\n ))}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ================================================================ Daftar agenda\nexport interface AgendaListProps {\n events: CalendarEvent[];\n /** 'day' = dikelompokkan per tanggal; 'none' = daftar datar dengan tile tanggal. */\n groupBy?: 'day' | 'none';\n colors?: Record<string, string>;\n /** Label jenis untuk lencana kecil. */\n kindLabels?: Record<string, string>;\n onEventClick?: (event: CalendarEvent) => void;\n empty?: React.ReactNode;\n loading?: boolean;\n /** Tampilan rapat untuk sidebar. */\n compact?: boolean;\n limit?: number;\n className?: string;\n}\n\n/** Daftar agenda: tile tanggal, garis warna per jenis, rentang tanggal, lokasi, dan jam. */\nexport function AgendaList({ events, groupBy = 'none', colors, kindLabels, onEventClick, empty, loading, compact, limit, className }: AgendaListProps) {\n if (loading)\n return (\n <ul className={cn('u-agenda', className)} data-compact={dataFlag(compact)} aria-busy>\n {Array.from({ length: compact ? 3 : 4 }, (_, i) => (\n <li key={i} className=\"u-agenda-item\">\n <Skeleton className=\"u-agenda-skel-tile\" />\n <div style={{ flex: 1, display: 'grid', gap: 6 }}>\n <Skeleton style={{ height: 14, width: '70%' }} />\n <Skeleton style={{ height: 12, width: '40%' }} />\n </div>\n </li>\n ))}\n </ul>\n );\n const list = limit ? events.slice(0, limit) : events;\n if (!list.length)\n return (\n <div className={cn('u-agenda-empty', className)}>\n {empty ?? (\n <>\n <CalendarDays aria-hidden /> Tidak ada kegiatan.\n </>\n )}\n </div>\n );\n\n const item = (e: CalendarEvent, i: number, tile: boolean) => {\n const color = eventColor(e, colors);\n const Tag = e.href ? 'a' : onEventClick ? 'button' : 'div';\n return (\n <li key={`${e.id ?? i}-${i}`} className=\"u-agenda-item\" style={{ '--tone': color } as React.CSSProperties}>\n <Tag className=\"u-agenda-link\" {...(e.href ? { href: e.href } : onEventClick ? { type: 'button' as const, onClick: () => onEventClick(e) } : {})}>\n {tile ? <DateTile date={e.start} tone={color} size={compact ? 'sm' : 'md'} /> : <span className=\"u-agenda-bar\" aria-hidden />}\n <span className=\"u-agenda-body\">\n <span className=\"u-agenda-title\">{e.title}</span>\n <span className=\"u-agenda-meta\">\n {(tile || e.end) && <span>{formatEventRange(e.start, e.end)}</span>}\n {e.time && (\n <span>\n <Clock aria-hidden />\n {e.time}\n </span>\n )}\n {e.location && (\n <span>\n <MapPin aria-hidden />\n {e.location}\n </span>\n )}\n </span>\n {!compact && e.description && <span className=\"u-agenda-desc\">{e.description}</span>}\n </span>\n {e.kind && kindLabels?.[e.kind] && !compact && <span className=\"u-agenda-kind\">{kindLabels[e.kind]}</span>}\n </Tag>\n </li>\n );\n };\n\n if (groupBy === 'none')\n return (\n <ul className={cn('u-agenda', className)} data-compact={dataFlag(compact)}>\n {list.map((e, i) => item(e, i, true))}\n </ul>\n );\n\n const groups = new Map<string, CalendarEvent[]>();\n for (const e of list) (groups.get(iso(e.start)) ?? groups.set(iso(e.start), []).get(iso(e.start))!).push(e);\n return (\n <div className={cn('u-agenda-groups', className)} data-compact={dataFlag(compact)}>\n {[...groups].map(([day, evs]) => (\n <section key={day} className=\"u-agenda-group\">\n <h4 className=\"u-agenda-day\">{formatEventRange(day, null, true)}</h4>\n <ul className=\"u-agenda\">{evs.map((e, i) => item(e, i, false))}</ul>\n </section>\n ))}\n </div>\n );\n}\n\n// ================================================================ Legenda\nexport function EventLegend({\n kinds,\n labels,\n colors = EVENT_COLORS,\n hidden,\n onToggle,\n className,\n}: {\n kinds: string[];\n labels?: Record<string, string>;\n colors?: Record<string, string>;\n /** Jenis yang disembunyikan; bila `onToggle` diisi, legenda jadi filter. */\n hidden?: string[];\n onToggle?: (kind: string) => void;\n className?: string;\n}) {\n return (\n <div className={cn('u-ev-legend', className)} role={onToggle ? 'group' : undefined} aria-label=\"Jenis kegiatan\">\n {kinds.map((k) => {\n const off = hidden?.includes(k);\n const content = (\n <>\n <i style={{ background: colors[k] ?? 'var(--u-primary)' }} aria-hidden />\n {labels?.[k] ?? k}\n </>\n );\n return onToggle ? (\n <button key={k} type=\"button\" className=\"u-ev-legend-item\" aria-pressed={!off} data-off={dataFlag(off)} onClick={() => onToggle(k)}>\n {content}\n </button>\n ) : (\n <span key={k} className=\"u-ev-legend-item\">\n {content}\n </span>\n );\n })}\n </div>\n );\n}\n","'use client';\nimport * as React from 'react';\nimport { ArrowRight, ArrowUpRight, Clock, Eye, MapPin, Megaphone, Pin, Users, Video } from 'lucide-react';\nimport { cn, dataFlag } from '../lib/cn';\nimport { formatCompact, formatDate, formatRelative } from '../lib/format';\nimport { Skeleton } from './actions';\nimport { DateTile } from './schedule';\n\n// ================================================================ Berita\nexport interface NewsItem {\n id: string | number;\n title: React.ReactNode;\n href?: string;\n excerpt?: React.ReactNode;\n image?: string | null;\n imageAlt?: string;\n category?: { name: string; color?: string | null; href?: string } | null;\n author?: React.ReactNode;\n date?: string | Date | null;\n views?: number | null;\n /** Lencana kecil, mis. \"Prestasi\". */\n badge?: React.ReactNode;\n}\n\nexport interface NewsCardProps {\n item: NewsItem;\n /** vertical = gambar di atas; horizontal = gambar di kiri; overlay = teks di atas gambar (sorotan); minimal = tanpa gambar. */\n variant?: 'vertical' | 'horizontal' | 'overlay' | 'minimal';\n /** Tampilkan tanggal relatif (\"3 jam lalu\") untuk berita kurang dari seminggu. Bawaan true. */\n relativeDate?: boolean;\n className?: string;\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\nfunction tanggal(d: NewsItem['date'], relative: boolean) {\n if (!d) return null;\n const date = typeof d === 'string' ? new Date(d.replace(' ', 'T')) : d;\n if (relative && Date.now() - date.getTime() < 7 * 864e5) return formatRelative(date);\n return formatDate(date, 'medium');\n}\n\n/** Kartu berita: gambar 16:9 dengan cadangan pola, kategori berwarna, judul dua baris, ringkasan, penulis, tanggal, dan jumlah dilihat. */\nexport function NewsCard({ item, variant = 'vertical', relativeDate = true, className, headingLevel = 'h3' }: NewsCardProps) {\n const H = headingLevel;\n const tgl = tanggal(item.date, relativeDate);\n const tone = item.category?.color ?? 'var(--u-primary)';\n return (\n <article className={cn('u-news', className)} data-variant={variant} style={{ '--tone': tone } as React.CSSProperties}>\n {variant !== 'minimal' && (\n <div className=\"u-news-media\">{item.image ? <img src={item.image} alt={item.imageAlt ?? ''} loading=\"lazy\" decoding=\"async\" /> : <span className=\"u-news-placeholder\" aria-hidden />}</div>\n )}\n <div className=\"u-news-body\">\n {(item.category || item.badge) && (\n <div className=\"u-news-eyebrow\">\n {item.category && <span className=\"u-news-cat\">{item.category.name}</span>}\n {item.badge && <span className=\"u-news-badge\">{item.badge}</span>}\n </div>\n )}\n <H className=\"u-news-title\">\n {item.href ? (\n <a href={item.href} className=\"u-news-link\">\n {item.title}\n </a>\n ) : (\n item.title\n )}\n </H>\n {item.excerpt && variant !== 'minimal' && <p className=\"u-news-excerpt\">{item.excerpt}</p>}\n {(item.author || tgl || item.views != null) && (\n <div className=\"u-news-meta\">\n {item.author && <span className=\"u-news-author\">{item.author}</span>}\n {tgl && <time dateTime={typeof item.date === 'string' ? item.date : item.date?.toISOString()}>{tgl}</time>}\n {item.views != null && (\n <span title=\"Dilihat\">\n <Eye aria-hidden />\n {formatCompact(item.views)}\n </span>\n )}\n </div>\n )}\n </div>\n </article>\n );\n}\n\nexport function NewsCardSkeleton({ variant = 'vertical' }: { variant?: NewsCardProps['variant'] }) {\n return (\n <div className=\"u-news\" data-variant={variant} aria-hidden>\n {variant !== 'minimal' && <Skeleton className=\"u-news-media\" />}\n <div className=\"u-news-body\">\n <Skeleton style={{ height: 12, width: 72 }} />\n <Skeleton style={{ height: 16, width: '92%' }} />\n <Skeleton style={{ height: 16, width: '64%' }} />\n <Skeleton style={{ height: 12, width: 120 }} />\n </div>\n </div>\n );\n}\n\nexport interface NewsGridProps {\n items: NewsItem[];\n /** grid = kartu sama besar; featured = satu besar + sisanya di samping; list = daftar horizontal. */\n layout?: 'grid' | 'featured' | 'list';\n /** Kolom minimum (px) untuk mode grid. Bawaan 260. */\n minColumn?: number;\n loading?: boolean;\n /** Jumlah kerangka saat memuat. */\n skeletonCount?: number;\n empty?: React.ReactNode;\n className?: string;\n}\n\n/** Kumpulan kartu berita dengan tiga tata letak; responsif tanpa media query (container query). */\nexport function NewsGrid({ items, layout = 'grid', minColumn = 260, loading, skeletonCount = 6, empty, className }: NewsGridProps) {\n const style = { '--min': `${minColumn}px` } as React.CSSProperties;\n if (loading)\n return (\n <div className={cn('u-news-grid', className)} data-layout={layout} style={style} aria-busy>\n {Array.from({ length: layout === 'featured' ? 4 : skeletonCount }, (_, i) => (\n <NewsCardSkeleton key={i} variant={layout === 'list' || (layout === 'featured' && i > 0) ? 'horizontal' : layout === 'featured' ? 'overlay' : 'vertical'} />\n ))}\n </div>\n );\n if (!items.length) return <div className=\"u-agenda-empty\">{empty ?? 'Belum ada berita.'}</div>;\n if (layout === 'featured') {\n const [first, ...rest] = items;\n return (\n <div className={cn('u-news-wrap', className)}>\n <div className=\"u-news-grid\" data-layout=\"featured\" style={style}>\n <NewsCard item={first!} variant=\"overlay\" headingLevel=\"h2\" />\n <div className=\"u-news-side\">\n {rest.slice(0, 4).map((it) => (\n <NewsCard key={it.id} item={it} variant=\"horizontal\" />\n ))}\n </div>\n </div>\n </div>\n );\n }\n return (\n <div className={cn('u-news-grid', className)} data-layout={layout} style={style}>\n {items.map((it) => (\n <NewsCard key={it.id} item={it} variant={layout === 'list' ? 'horizontal' : 'vertical'} />\n ))}\n </div>\n );\n}\n\n/** Daftar bernomor \"Terpopuler\" untuk sidebar. */\nexport function RankedList({ items, loading, className }: { items: NewsItem[]; loading?: boolean; className?: string }) {\n return (\n <ol className={cn('u-ranked', className)} aria-busy={loading || undefined}>\n {loading\n ? Array.from({ length: 5 }, (_, i) => (\n <li key={i}>\n <span className=\"u-ranked-no\">{i + 1}</span>\n <div style={{ flex: 1, display: 'grid', gap: 6 }}>\n <Skeleton style={{ height: 14 }} />\n <Skeleton style={{ height: 12, width: '50%' }} />\n </div>\n </li>\n ))\n : items.map((it, i) => (\n <li key={it.id}>\n <span className=\"u-ranked-no\">{i + 1}</span>\n <div className=\"u-ranked-body\">\n {it.href ? (\n <a href={it.href} className=\"u-ranked-title\">\n {it.title}\n </a>\n ) : (\n <span className=\"u-ranked-title\">{it.title}</span>\n )}\n <span className=\"u-news-meta\">\n {it.category && <span style={{ color: it.category.color ?? undefined }}>{it.category.name}</span>}\n {it.views != null && (\n <span>\n <Eye aria-hidden />\n {formatCompact(it.views)}\n </span>\n )}\n </span>\n </div>\n </li>\n ))}\n </ol>\n );\n}\n\n// ================================================================ Pengumuman\nexport interface AnnouncementItem {\n id: string | number;\n title: React.ReactNode;\n href?: string;\n number?: React.ReactNode;\n priority?: 'biasa' | 'penting' | 'darurat' | string;\n date?: string | null;\n until?: string | null;\n pinned?: boolean;\n}\nconst PRIORITAS: Record<string, string> = {\n penting: 'Penting',\n darurat: 'Darurat',\n};\n\n/** Daftar pengumuman: ikon prioritas, nomor surat, berlaku sampai, dan sematan. */\nexport function AnnouncementList({ items, loading, className, empty }: { items: AnnouncementItem[]; loading?: boolean; className?: string; empty?: React.ReactNode }) {\n if (loading)\n return (\n <ul className={cn('u-announce', className)} aria-busy>\n {Array.from({ length: 4 }, (_, i) => (\n <li key={i} className=\"u-announce-item\">\n <Skeleton style={{ width: 36, height: 36, borderRadius: 10 }} />\n <div style={{ flex: 1, display: 'grid', gap: 6 }}>\n <Skeleton style={{ height: 14, width: '80%' }} />\n <Skeleton style={{ height: 12, width: '40%' }} />\n </div>\n </li>\n ))}\n </ul>\n );\n if (!items.length) return <div className=\"u-agenda-empty\">{empty ?? 'Belum ada pengumuman.'}</div>;\n return (\n <ul className={cn('u-announce', className)}>\n {items.map((a) => {\n const Tag = a.href ? 'a' : 'div';\n return (\n <li key={a.id} className=\"u-announce-item\" data-priority={a.priority ?? 'biasa'} data-pinned={dataFlag(a.pinned)}>\n <Tag className=\"u-announce-link\" {...(a.href ? { href: a.href } : {})}>\n <span className=\"u-announce-icon\" aria-hidden>\n {a.pinned ? <Pin /> : <Megaphone />}\n </span>\n <span className=\"u-announce-body\">\n <span className=\"u-announce-title\">\n {a.priority && PRIORITAS[a.priority] && <span className=\"u-announce-flag\">{PRIORITAS[a.priority]}</span>}\n {a.title}\n </span>\n <span className=\"u-news-meta\">\n {a.number && <span>{a.number}</span>}\n {a.date && <span>{formatDate(a.date.replace(' ', 'T'), 'medium')}</span>}\n {a.until && (\n <span>\n <Clock aria-hidden />\n Berlaku s.d. {formatDate(a.until, 'medium')}\n </span>\n )}\n </span>\n </span>\n {a.href && <ArrowUpRight className=\"u-announce-arrow\" aria-hidden />}\n </Tag>\n </li>\n );\n })}\n </ul>\n );\n}\n\n// ================================================================ Acara\nexport interface EventCardItem {\n id: string | number;\n title: React.ReactNode;\n href?: string;\n /** \"YYYY-MM-DD HH:MM:SS\" atau ISO. */\n start: string;\n end?: string | null;\n allDay?: boolean;\n mode?: 'luring' | 'daring' | 'hibrida' | string | null;\n location?: React.ReactNode;\n organizer?: React.ReactNode;\n image?: string | null;\n /** Pendaftaran dibuka. */\n registration?: boolean;\n}\nconst MODE: Record<string, string> = {\n luring: 'Luring',\n daring: 'Daring',\n hibrida: 'Hibrida',\n};\nconst jam = (s?: string | null) => (s && s.length > 10 ? s.slice(11, 16).replace(':', '.') : null);\n\n/** Kartu acara: tile tanggal, jam, mode (luring/daring/hibrida), lokasi, penyelenggara, dan tanda pendaftaran. */\nexport function EventCard({ item, variant = 'row', className }: { item: EventCardItem; variant?: 'row' | 'card'; className?: string }) {\n const j1 = jam(item.start);\n const j2 = jam(item.end);\n const beda = item.end && item.end.slice(0, 10) !== item.start.slice(0, 10);\n return (\n <article className={cn('u-event', className)} data-variant={variant}>\n {variant === 'card' && item.image && (\n <div className=\"u-news-media\">\n <img src={item.image} alt=\"\" loading=\"lazy\" />\n </div>\n )}\n <div className=\"u-event-main\">\n <DateTile date={item.start.slice(0, 10)} size={variant === 'card' ? 'md' : 'lg'} />\n <div className=\"u-event-body\">\n <h3 className=\"u-news-title\">\n {item.href ? (\n <a href={item.href} className=\"u-news-link\">\n {item.title}\n </a>\n ) : (\n item.title\n )}\n </h3>\n <div className=\"u-news-meta\">\n <span>\n <Clock aria-hidden />\n {beda ? `${formatDate(item.start.slice(0, 10), 'medium')} – ${formatDate(item.end!.slice(0, 10), 'medium')}` : item.allDay || !j1 ? 'Sepanjang hari' : `${j1}${j2 ? `–${j2}` : ''} WITA`}\n </span>\n {item.location && (\n <span>\n {item.mode === 'daring' ? <Video aria-hidden /> : <MapPin aria-hidden />}\n {item.location}\n </span>\n )}\n {item.organizer && (\n <span>\n <Users aria-hidden />\n {item.organizer}\n </span>\n )}\n </div>\n {(item.mode || item.registration) && (\n <div className=\"u-event-tags\">\n {item.mode && MODE[item.mode] && (\n <span className=\"u-event-tag\" data-mode={item.mode}>\n {MODE[item.mode]}\n </span>\n )}\n {item.registration && (\n <span className=\"u-event-tag\" data-mode=\"daftar\">\n Pendaftaran dibuka\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n </article>\n );\n}\n\n// ================================================================ Bagian landing\nexport interface SectionProps extends Omit<React.ComponentProps<'section'>, 'title'> {\n eyebrow?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n /** Tautan \"Lihat semua\". */\n href?: string;\n linkLabel?: React.ReactNode;\n /** Aksi lain di kanan judul. */\n actions?: React.ReactNode;\n align?: 'start' | 'center';\n}\n\n/** Kepala bagian halaman (eyebrow, judul, deskripsi, tautan) + isi. Dipakai di landing page dan beranda portal. */\nexport function Section({ eyebrow, title, description, href, linkLabel = 'Lihat semua', actions, align = 'start', className, children, ...props }: SectionProps) {\n return (\n <section className={cn('u-section', className)} data-align={align} {...props}>\n <header className=\"u-section-head\">\n <div className=\"u-section-text\">\n {eyebrow && <p className=\"u-section-eyebrow\">{eyebrow}</p>}\n <h2 className=\"u-section-title\">{title}</h2>\n {description && <p className=\"u-section-desc\">{description}</p>}\n </div>\n {(href || actions) && (\n <div className=\"u-section-actions\">\n {actions}\n {href && (\n <a href={href} className=\"u-section-link\">\n {linkLabel} <ArrowRight aria-hidden />\n </a>\n )}\n </div>\n )}\n </header>\n {children}\n </section>\n );\n}\n\nexport interface HeroProps {\n eyebrow?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n /** Angka singkat di bawah aksi, mis. [{ value: '12', label: 'Program studi' }]. */\n stats?: Array<{ value: React.ReactNode; label: React.ReactNode }>;\n /** Gambar atau ilustrasi di kanan (atau latar untuk variant=\"image\"). */\n media?: React.ReactNode;\n image?: string;\n /** split = teks kiri, media kanan; image = teks di atas foto lebar; plain = teks tengah. */\n variant?: 'split' | 'image' | 'plain';\n /** Kartu/pengumuman kecil di atas judul, mis. \"Pendaftaran gelombang I dibuka\". */\n announcement?: React.ReactNode;\n className?: string;\n}\n\n/** Hero landing page kampus: tiga varian, angka singkat, dan pengumuman kecil. */\nexport function Hero({ eyebrow, title, description, actions, stats, media, image, variant = 'split', announcement, className }: HeroProps) {\n return (\n <section className={cn('u-hero', className)} data-variant={variant} style={variant === 'image' && image ? ({ '--hero-image': `url(\"${image}\")` } as React.CSSProperties) : undefined}>\n <div className=\"u-hero-grid\">\n <div className=\"u-hero-text\">\n {announcement && <div className=\"u-hero-announce\">{announcement}</div>}\n {eyebrow && <p className=\"u-section-eyebrow\">{eyebrow}</p>}\n <h1 className=\"u-hero-title\">{title}</h1>\n {description && <p className=\"u-hero-desc\">{description}</p>}\n {actions && <div className=\"u-hero-actions\">{actions}</div>}\n {stats && (\n <dl className=\"u-hero-stats\">\n {stats.map((s, i) => (\n <div key={i}>\n <dt>{s.label}</dt>\n <dd>{s.value}</dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n {variant === 'split' && (media || image) && <div className=\"u-hero-media\">{media ?? <img src={image} alt=\"\" />}</div>}\n </div>\n </section>\n );\n}\n"]}