1import{j as a}from"./vendor-mui-pzAHH9Px.js";import{a as c,L as aa}from"./vendor-react-khHHqPIU.js";import{n as ca,al as ua,am as ea,an as sa,ao as na,g as F,a7 as ma,ae as ha,a8 as pa,ap as xa,aq as ga}from"./index-BKlU2-ad.js";import{B as z}from"./badge-CEkOwAKT.js";import{B as j}from"./button-B__KXJKn.js";import{C as y,a as S,b as C,d as T,c as w}from"./card-itfuPoYn.js";import{D as fa,b as ba,c as ja,d as ka,e as ya,f as va}from"./dialog-D2gF9MQO.js";import{A as Na,a as wa,b as Sa,c as Ca,d as Ta,e as Da,f as Aa,g as Pa}from"./alert-dialog-BYj2px7F.js";import{I}from"./input-Cb9axp0j.js";import{L as x}from"./label-D7RLqSGc.js";import{S as J}from"./skeleton-DvybJgiA.js";import{S as Ba}from"./switch-CLHbz0Ar.js";import{T as $a,a as Fa,b as q,c as X}from"./tabs-VYX1X8Gh.js";import{T as ta}from"./textarea-CCr3lUdq.js";import{C as Ia}from"./checkbox-DLZaEQgl.js";import{S as G,a as R,b as V,c as _,d as L}from"./select-BpN5RP8C.js";import{g as La,a as za,C as Ea,b as Ma,A as Ha}from"./AccessibilitySectionNav-Cxt6Gy0K.js";import{P as Ka}from"./plus-CrgguSQy.js";import{T as Oa}from"./trash-2-KzCV3G7N.js";import{S as Wa}from"./save-D7xFBIg_.js";import{E as Ga}from"./external-link-CvcT_48A.js";import{C as Ra}from"./check-D2IyaXV3.js";import{C as Va}from"./copy-3S_eot4d.js";import"./index-Cr7U6S9d.js";import"./index-DvVtr4Gm.js";import"./index-DM9HOgI6.js";import"./index-CEyMD-YA.js";import"./index-D2shsKci.js";import"./chevron-up-C5jj7mp5.js";import"./sliders-horizontal-jzovNnhm.js";/** 2 * @license lucide-react v0.488.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const _a=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],Ua=ca("globe",_a),Ja=[{id:"seizure",icon:"zapOff",label:"Profil Aman untuk Kejang",desc:"Menghentikan animasi & mengurangi warna."},{id:"blind",icon:"eyeOff",label:"Profil untuk Tunanetra",desc:"Mengaktifkan pembaca teks (suara)."},{id:"lowVision",icon:"glasses",label:"Profil untuk Rabun",desc:"Kontras tinggi, teks tebal & lebih besar."},{id:"adhd",icon:"target",label:"Profil Ramah ADHD",desc:"Kurangi gangguan agar lebih fokus."},{id:"cognitive",icon:"bookOpen",label:"Profil Kognitif & Pembelajaran",desc:"Font mudah baca & jarak baris lega."},{id:"motor",icon:"keyboard",label:"Profil Disabilitas Motorik",desc:"Kursor besar & tautan lebih jelas."}],qa=[{id:"content",title:"Penyesuaian Konten",hasFontSize:!0,items:[{key:"readableFont",icon:"type",label:"Font Mudah Baca",desc:"Font yang lebih mudah dibaca."},{key:"underlineLinks",icon:"link",label:"Sorot Tautan",desc:"Garis bawah semua tautan."},{key:"highlightHeadings",icon:"heading",label:"Sorot Judul",desc:"Tandai heading di halaman."},{key:"boldText",icon:"bold",label:"Ketebalan Font",desc:"Tebalkan semua teks."},{key:"lineHeight",icon:"alignVerticalSpaceAround",label:"Tinggi Baris",desc:"Perlebar jarak antar baris."},{key:"letterSpacing",icon:"moveHorizontal",label:"Jarak Huruf",desc:"Perlebar jarak antar huruf."}]},{id:"navigation",title:"Alat Bantu Visual dan Navigasi",hasSpeechPanel:!0,items:[{key:"bigCursor",icon:"mousePointer2",label:"Kursor Besar",desc:"Perbesar penunjuk mouse."},{key:"textToSpeech",icon:"volume2",iconOff:"volumeX",label:"Mode Suara",desc:"Bacakan teks yang ditunjuk kursor."},{key:"readingGuide",icon:"ruler",label:"Panduan Membaca",desc:"Pita penanda mengikuti kursor."}]},{id:"color",title:"Penyesuaian Warna",items:[{key:"highContrast",icon:"contrast",label:"Kontras Tinggi",desc:"Tingkatkan kontras warna."},{key:"grayscale",icon:"eye",label:"Monokrom",desc:"Ubah ke hitam putih."},{key:"negativeContrast",icon:"palette",label:"Kontras Negatif",desc:"Balik warna (invert)."}
6,{key:"lightBackground",icon:"sun",label:"Latar Terang",desc:"Latar belakang cerah."}]},{id:"extra",title:"Alat Tambahan",items:[{key:"stopAnimations",icon:"ban",label:"Hentikan Animasi",desc:"Bekukan gerakan & animasi."}]}],Xa=qa.map(e=>({title:e.title,items:[...e.hasFontSize?[{key:"fontSize",label:"Ukuran Font",desc:"Tombol perbesar & perkecil teks."}]:[],...e.items.map(({key:i,label:o,desc:t})=>({key:i,label:o,desc:t}))]})),ia={position:{left:"Kiri",right:"Kanan"},vertical:{top:"Atas",middle:"Tengah",bottom:"Bawah"},buttonSize:{small:"Kecil (48px)",medium:"Sedang (56px)",large:"Besar (64px)"},fontScale:{element:"Per elemen â situs berbasis px (Joomla, tema lama)",root:"Akar dokumen â situs berbasis rem (Tailwind, Bootstrap 5)"}},Qa=[{value:"#0066cc",label:"Biru (bawaan)"},{value:"#146bac",label:"Biru Menpan (menpan-600)"},{value:"#0f4a77",label:"Biru Menpan tua (menpan-800)"},{value:"#1d4ed8",label:"Biru tua"},{value:"#047857",label:"Hijau"},{value:"#b45309",label:"Jingga"},{value:"#7c3aed",label:"Ungu"},{value:"#be123c",label:"Merah"}],Ya=` 7 <h1>Beranda Instansi</h1> 8 <p>Halaman contoh untuk melihat posisi dan warna tombol aksesibilitas. 9 Cobalah membukanya, lalu nyalakan salah satu fitur.</p> 10 <h2>Berita Terbaru</h2> 11 <p>Sebagian isi dengan <a href="#lihat">tautan contoh</a> dan teks biasa, 12 supaya efek kontras serta ukuran huruf terlihat.</p> 13 <ul><li>Pengumuman seleksi</li><li>Rilis kebijakan</li><li>
13Agenda pimpinan</li></ul> 14`;function Za({config:e,onChange:i,widgetSrc:o}){const t=c.useMemo(()=>ua(e.accent),[e.accent]),u=c.useMemo(()=>ea(e.features),[e.features]),m=s=>i({...e,...s}),l=(s,n)=>{const h=n?[...e.features,s]:e.features.filter(f=>f!==s),D=e.defaultProfile&&ea(h).includes(e.defaultProfile);i({...e,features:h,defaultProfile:D?e.defaultProfile:null})};return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[a.jsxs(y,{className:"min-w-0",children:[a.jsxs(S,{children:[a.jsx(C,{children:"Tampilan tombol"}),a.jsx(T,{children:"Berlaku untuk domain yang sedang dipilih saja."})]}),a.jsxs(w,{className:"space-y-4",children:[a.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[["position","vertical","buttonSize"].map(s=>a.jsxs("div",{className:"space-y-2",children:[a.jsx(x,{htmlFor:`opt-${s}`,children:{position:"Sisi layar",vertical:"Posisi vertikal",buttonSize:"Ukuran tombol"}[s]}),a.jsxs(G,{value:e[s],onValueChange:n=>m({[s]:n}),children:[a.jsx(R,{id:`opt-${s}`,children:a.jsx(V,{})}),a.jsx(_,{children:sa[s].values.map(n=>a.jsx(L,{value:n,children:ia[s][n]},n))})]})]},s)),a.jsxs("div",{className:"space-y-2",children:[a.jsx(x,{htmlFor:"opt-zindex",children:"Lapisan (z-index)"}),a.jsx(I,{id:"opt-zindex",type:"number",min:1,max:2147483647,value:e.zIndex,onChange:s=>m({zIndex:Number(s.target.value)})}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Turunkan bila widget menutupi menu atau dialog situs."})]})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsx(x,{htmlFor:"opt-accent",children:"Warna aksen"}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(I,{id:"opt-accent",type:"color",value:e.accent,onChange:s=>m({accent:s.target.value}),className:"h-10 w-16 cursor-pointer p-1"}),a.jsx(I,{value:e.accent,onChange:s=>m({accent:s.target.value}),className:"max-w-[140px] font-mono","aria-label":"Kode warna aksen"}),a.jsx("div",{className:"flex flex-wrap gap-1",children:Qa.map(s=>a.jsx("button",{type:"button",onClick:()=>m({accent:s.value}),className:"h-7 w-7 rounded-full border-2 border-white shadow ring-1 ring-border",style:{background:s.value},"aria-label":s.label,title:s.label},s.value))})]}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Hanya warna tombol dan panel. Warna mode kontras tidak bisa diubah karena rasionya mengikuti standar WCAG."}),t&&a.jsxs("div",{className:"space-y-2 rounded-md border p-3",children:[a.jsx("p",{className:"text-xs font-medium",children:"Palet turunan yang dipakai widget"}),a.jsx("ul",{className:"flex flex-wrap gap-3 text-xs",children:[["Tombol",t.accent],["Hover",t.accentDark],["Teks aksen",t.accentText],["Kartu aktif",t.soft],["Latar ikon",t.subtle],["Border hover",t.border]].map(([s,n])=>a.jsxs("li",{className:"flex items-center gap-1.5",children:[a.jsx("span",{className:"h-5 w-5 rounded border",style:{background:n},"aria-hidden":"true"}),a.jsxs("span",{children:[s," ",a.jsx("span",{className:"font-mono text-muted-foreground",children:n})]})]},s))}),t.adjusted&&a.jsxs("p",{className:"text-xs text-amber-700",role:"status",children:["Warna ",t.original," terlalu terang untuk ikon putih (kontras ",t.contrast,":1, minimal 4.5:1). Widget otomatis memakai ",t.accent," dengan hue yang sama."]})]})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsx(x,{htmlFor:"opt-fontscale",children:"Cara memperbesar teks"}),a.jsxs(G,{value:e.fontScale,onValueChange:s=>m({fontScale:s}),children:[a.jsx(R,{id:"opt-fontscale",children:a.jsx(V,{})}),a.jsx(_,{children:sa.fontScale.values.map(s=>a.jsx(L,{value:s,children:ia.fontScale[s]},s))})]}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Pilih âper elemenâ bila tipografi situsnya ditulis dalam px â mode akar dokumen tidak berpengaruh di situs seperti itu."})]})]})]}),a.jsxs(y,{className:"min-w-0",children:[a.jsxs(S,{children:[a.jsx(C,{children:"Pratinjau"}),a.jsx(T,{children:"Halaman contoh yang memuat berkas widget yang sama persis dengan yang dipasang instansi."})]}),a.jsx(w,{children:a.jsx(ae,{src:o,config:e})})]})]}),a.jsxs(y,{children:[a.jsxs(S,{children:[a.jsx(C,{children:"Fitur yang ditampilkan"}
14),a.jsx(T,{children:"Fitur yang dilepas centangnya tidak dirender sama sekali â tidak terbaca pembaca layar dan tidak ikut navigasi Tab."})]}),a.jsxs(w,{className:"space-y-6",children:[a.jsx("div",{className:"grid gap-6 md:grid-cols-2 xl:grid-cols-4",children:Xa.map(s=>a.jsxs("div",{className:"space-y-3",children:[a.jsx("h3",{className:"text-sm font-semibold",children:s.title}),s.items.map(n=>a.jsxs("div",{className:"flex items-start gap-2",children:[a.jsx(Ia,{id:`fitur-${n.key}`,checked:e.features.includes(n.key),onCheckedChange:h=>l(n.key,h===!0),className:"mt-0.5"}),a.jsxs(x,{htmlFor:`fitur-${n.key}`,className:"cursor-pointer font-normal leading-snug",children:[n.label,a.jsx("span",{className:"block text-xs text-muted-foreground",children:n.desc})]})]},n.key))]},s.title))}),a.jsxs("div",{className:"max-w-md space-y-2 border-t pt-4",children:[a.jsx(x,{htmlFor:"opt-profile",children:"Profil bawaan"}),a.jsxs(G,{value:e.defaultProfile??"none",onValueChange:s=>m({defaultProfile:s==="none"?null:s}),children:[a.jsx(R,{id:"opt-profile",children:a.jsx(V,{})}),a.jsxs(_,{children:[a.jsx(L,{value:"none",children:"Tidak ada"}),Ja.filter(s=>u.includes(s.id)).map(s=>a.jsx(L,{value:s.id,children:s.label},s.id))]})]}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Berlaku bagi pengunjung yang belum pernah mengatur apa pun. Begitu ia mengubah satu tombol, pilihannya sendiri yang dipakai. Profil hanya bisa dipilih bila seluruh fitur penyusunnya dicentang."})]})]})]})]})}function ae({src:e,config:i}){const o=c.useMemo(()=>{const t=Object.entries(ee(i)).map(([u,m])=>`${u}="${m}"`).join(" ");return`<!doctype html><html lang="id"><head><meta charset="utf-8"> 15<meta name="viewport" content="width=device-width,initial-scale=1"> 16<style> 17 body { font-family: Georgia, serif; margin: 0; padding: 20px 24px; color: #1f2937; background: #fff; font-size: 15px; } 18 h1 { font-size: 22px; margin: 0 0 8px; } 19 h2 { font-size: 17px; margin: 20px 0 6px; } 20 p, li { line-height: 1.6; } 21 a { color: #0b5ed7; } 22</style></head><body> 23${Ya} 24<script src="${e}" defer ${t}><\/script> 25</body></html>`},[e,i]);return a.jsx("iframe",{title:"Pratinjau widget aksesibilitas",srcDoc:o,sandbox:"allow-scripts",className:"h-[420px] w-full rounded-lg border bg-white"},o)}function ee(e){const i=na(e);return{"data-position":i.position,"data-vertical":i.vertical,"data-button-size":i.buttonSize,"data-accent":i.accent,"data-z-index":String(i.zIndex),"data-font-scale":i.fontScale,"data-features":i.features.join(","),...i.defaultProfile?{"data-default-profile":i.defaultProfile}:{},"data-remote":"false","data-storage-prefix":"menpan-a11y-preview"}}const se=1e4,ie={off:"Nonaktif â tidak pernah dipindai",weekly:"Terjadwal â seminggu sekali",manual:"Manual saja â lewat tombol Audit sekarang"};function ne({site:e,value:i,onChange:o,apiUrl:t,auth:u,toast:m}){var P,H,K;const[l,s]=c.useState(null),[n,h]=c.useState(null),[D,f]=c.useState(!1),v=c.useRef(e.id),N=c.useCallback(async()=>{var g;v.current=e.id;try{const b=await F.get(`${t}/api/a11y/sites/${e.id}/audit/runs`,u);if(v.current!==e.id)return;const A=b.data.data||[];s(A.find(d=>d.status==="done")||null),h(((g=A.find(d=>["queued","running"].includes(d.status)))==null?void 0:g.status)||null)}catch{}},[t,u,e.id]);c.useEffect(()=>{s(null),h(null),N()},[N]),c.useEffect(()=>{var b;if(!n&&!((b=l==null?void 0:l.recommendations)!=null&&b.pending))return;const g=setInterval(N,se);return()=>clearInterval(g)},[n,(P=l==null?void 0:l.recommendations)==null?void 0:P.pending,N]);const U=async()=>{var g,b;f(!0);try{await F.post(`${t}/api/a11y/sites/${e.id}/audit`,{},u),h("queued"),m({title:"Audit masuk antrean",description:"Worker memprosesnya bergiliran; status di kartu ini ikut diperbarui sampai selesai."})}catch(A){m({title:"Audit tidak bisa dimulai",description:((b=(g=A.response)==null?void 0:g.data)==null?void 0:b.message)||"Terjadi kesalahan",variant:"destructive"})}finally{f(!1)}},E=La(l==null?void 0:l.score),M=a.jsxs(S,{className:"flex flex-row flex-wrap items-start justify-between gap-3 space-y-0",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx(C,{children:"Audit WCAG"}),a.jsx(T,{children:"Perayap kami membuka halaman domain ini seperti pengunjung biasa, lalu menghitung skor indikatif â menangkap sebagian kriteria WCAG, bukan seluruhnya."})]}),a.jsx(j,{variant:"outline",asChild:!0,children:a.jsxs(aa,{to:"/admin/settings/accessibility/audit",children:[a.jsx(Ma,{className:"mr-2 h-4 w-4"}),"Dasbor audit"]})})]});return e.isDefault?a.jsxs(y,{children:[M,a.jsx(w,{children:a.jsx("p",{className:"rounded-lg border bg-muted/40 px-4 py-3 text-sm text-muted-foreground",children:"Audit WCAG hanya bisa dijalankan pada domain yang terdaftar. Silakan daftarkan domain terlebih dahulu untuk bisa menjalankan proses Audit."})})]}):a.jsxs(y,{children:[M,a.jsxs(w,{className:"space-y-4",children:[a.jsxs("div",{className:"max-w-md
25space-y-2",children:[a.jsx(x,{htmlFor:"audit-schedule",children:"Jadwal audit"}),a.jsxs(G,{value:i,onValueChange:o,children:[a.jsx(R,{id:"audit-schedule",children:a.jsx(V,{})}),a.jsx(_,{children:Object.entries(ie).map(([g,b])=>a.jsx(L,{value:g,children:b},g))})]}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Bawaannya nonaktif: memindai situs instansi lain harus dinyalakan sadar. Jangan lupa tekan Simpan setelah mengubahnya."})]}),a.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border bg-muted/40 px-4 py-3",children:[a.jsx("div",{className:"text-sm",children:l?a.jsxs(a.Fragment,{children:["Audit terakhir"," ",new Date(l.finishedAt).toLocaleDateString("id-ID",{day:"numeric",month:"long",year:"numeric"})," ","· skor"," ",a.jsxs("span",{className:`font-semibold ${za(l.score)}`,children:[l.score," · ",E]})," ","· ",l.pagesDone," halaman diperiksa ·"," ",l.issues.critical," isu Critical"]}):a.jsxs("span",{className:"text-muted-foreground",children:["Belum pernah diaudit",i==="off"?" â jadwalnya masih nonaktif":"","."]})}),a.jsxs("div",{className:"flex items-center gap-2",children:[n&&a.jsx(z,{variant:"secondary",children:n==="running"?"Sedang diauditâ¦":"Menunggu antrean"}),a.jsxs(j,{size:"sm",onClick:U,disabled:D||!!n||i==="off",children:[a.jsx(Ea,{className:"mr-2 h-4 w-4"}),"Audit sekarang"]})]})]}),l&&a.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border px-4 py-3",children:[a.jsxs("div",{children:[a.jsx("p",{className:"text-sm font-medium",children:"Rekomendasi perbaikan"}),a.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:(H=l.engineVersion)!=null&&H.endsWith("+stable1")?(K=l.recommendations)!=null&&K.total?`${l.recommendations.ready} dari ${l.recommendations.total} panduan siap${l.recommendations.pending?" · sedang diproses":""}${l.recommendations.unconfigured?" · AI belum dikonfigurasi":""}`:"Rekomendasi belum disiapkan.":"Audit ulang diperlukan untuk menyiapkan saran dari pengukuran yang stabil."})]}),a.jsx(j,{variant:"outline",size:"sm",asChild:!0,children:a.jsx(aa,{to:`/admin/settings/accessibility/audit?site=${e.id}`,children:"Lihat temuan â"})})]})]})]})}const ra=e=>String(e).split(/[\s,]+/).map(i=>i.trim()).filter(Boolean);function He(){const{toast:e}=ma(),i="https://menpan.go.id",o=localStorage.getItem("token"),t=c.useMemo(()=>({headers:{Authorization:`Bearer ${o}`}}),[o]),[u,m]=c.useState([]),[l,s]=c.useState(null),[n,h]=c.useState(null),[D,f]=c.useState(!0),[v,N]=c.useState(!1),[U,E]=c.useState(!1),[M,P]=c.useState(!1),[H,K]=c.useState("identity"),[g,b]=c.useState(""),A=`${window.location.origin}/widget/a11y.js`,d=u.find(r=>r.id===l)||null,Y=u.filter(r=>{const p=g.trim().toLocaleLowerCase("id-ID");return p?`${r.name} ${r.domains.join(" ")}`.toLocaleLowerCase("id-ID").includes(p):!0}),O=(r,p)=>{var k,B,$,Z;return((B=(k=r.response)==null?void 0:k.data)==null?void 0:B.message)||((Z=($=r.response)==null?void 0:$.data)==null?void 0:Z.msg)||p},W=async(r=null)=>{try{const k=(await F.get(`${i}/api/a11y/sites`,t)).data.data||[];m(k);const B=k.find($=>$.id===r)||k.find($=>$.id===l)||k[0]||null;return s((B==null?void 0:B.id)??null),k}catch(p){return e({title:"Gagal memuat daftar situs",description:O(p,"Terjadi kesalahan saat memuat data"),variant:"destructive"}),[]}};c.useEffect(()=>{W().finally(()=>f(!1))},[]),c.useEffect(()=>{if(!d){h(null);return}h({name:d.name,domainText:d.domains.join(` 26`),active:d.active,auditSchedule:d.auditSchedule||"off",config:na(d.config)})},[l,u]);const da=async()=>{if(!d||!n)return;if(!n.name.trim()){e({title:"Nama situs wajib diisi",description:"Dipakai untuk mengenali entri ini di daftar.",variant:"destructive"});return}const r=ra(n.domainText);if(!d.isDefault&&!r.length){e({title:"Minimal satu domain",description:"Tanpa domain, tidak ada situs yang bisa dicocokkan dengan entri ini.",variant:"destructive"});return}if(!n.config.features.length){e({title:"Minimal satu fitur",description:"Panel tanpa fitur sama sekali tidak ada gunanya bagi pengunjung.",variant:"destructive"});return}N(!0);try{const p={name:n.name.trim(),active:n.active,auditSchedule:n.auditSchedule,config:n.config};d.isDefault||(p.domains=r),await F.patch(`${i}/api/a11y/sites/${d.id}
26`,p,t),await W(d.id),e({title:"Tersimpan",description:"Situs yang memasang widget mengikuti pengaturan baru dalam beberapa menit, atau seketika saat pengunjung membuka halaman berikutnya."})}catch(p){e({title:"Gagal menyimpan",description:O(p,"Terjadi kesalahan"),variant:"destructive"})}finally{N(!1)}},oa=async()=>{if(d)try{await F.delete(`${i}/api/a11y/sites/${d.id}`,t),s(null),await W(),e({title:"Situs dihapus",description:"Widget di domain itu kembali memakai pengaturan bawaan, bukan hilang."})}catch(r){e({title:"Gagal menghapus",description:O(r,"Terjadi kesalahan"),variant:"destructive"})}finally{P(!1)}};return D?a.jsxs("div",{className:"space-y-4",children:[a.jsx(J,{className:"h-9 w-72"}),a.jsx(J,{className:"h-10 w-96"}),a.jsx(J,{className:"h-96 w-full"})]}):a.jsxs("div",{className:"space-y-6 pb-20",children:[a.jsxs("header",{className:"flex flex-wrap items-start justify-between gap-3",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Widget Aksesibilitas"}),a.jsx("p",{className:"text-sm text-muted-foreground",children:"Kelola pemasangan widget dan pemeriksaan aksesibilitas situs."})]}),a.jsxs(j,{onClick:()=>E(!0),children:[a.jsx(Ka,{className:"mr-2 h-4 w-4"}),"Tambah domain"]})]}),a.jsx(Ha,{}),!!u.length&&a.jsxs("div",{className:"space-y-2 lg:hidden",children:[a.jsx(x,{htmlFor:"mobile-site-select",children:"Domain aktif"}),a.jsx("select",{id:"mobile-site-select",value:String(l??""),onChange:r=>{const p=u.find(k=>String(k.id)===r.target.value);p&&s(p.id)},className:"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm r
26ing-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",children:u.map(r=>a.jsxs("option",{value:String(r.id),children:[r.name,r.isDefault?" â Bawaan":` â ${r.domains.join(", ")}`]},r.id))})]}),a.jsxs("div",{className:"grid gap-6 lg:grid-cols-[280px_minmax(0,1fr)]",children:[a.jsxs(y,{className:"hidden h-fit lg:block",children:[a.jsxs(S,{className:"pb-3",children:[a.jsxs("div",{className:"flex items-center justify-between gap-3",children:[a.jsx(C,{className:"text-base",children:"Domain"}),a.jsx(z,{variant:"secondary",children:u.length})]}),a.jsx(T,{children:"Pilih situs yang ingin dikelola."})]}),a.jsx("div",{className:"border-y p-3",children:a.jsxs("div",{className:"relative",children:[a.jsx(ha,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),a.jsx(I,{value:g,onChange:r=>b(r.target.value),placeholder:"Cari domainâ¦","aria-label":"Cari domain",className:"pl-9"})]})}),a.jsxs(w,{className:"space-y-1 p-2",children:[Y.map(r=>a.jsx(te,{site:r,active:r.id===l,onClick:()=>s(r.id)},r.id)),!Y.length&&a.jsx("p",{className:"px-3 py-8 text-center text-xs text-muted-foreground",children:"Domain tidak ditemukan."})]})]}),d&&n?a.jsxs("div",{className:"min-w-0",children:[a.jsxs($a,{value:H,onValueChange:K,children:[a.jsxs(y,{children:[a.jsx(S,{className:"pb-4",children:a.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx(C,{children:d.name}),a.jsxs(T,{className:"break-words",children:[d.isDefault?"Domain yang belum terdaftar":d.domains.join(", "),d.lastSeenAt&&a.jsxs(a.Fragment,{children:[" · terakhir terhubung ",new Date(d.lastSeenAt).toLocaleString("id-ID")]})]})]}),a.jsx(la,{site:d,active:n.active})]})}),a.jsx(w,{className:"pt-0",children:a.jsxs(Fa,{className:"grid h-auto w-full grid-cols-3",children:[a.jsx(q,{value:"identity",className:"whitespace-normal py-2",children:"Identitas & status"}),a.jsx(q,{value:"appearance",className:"whitespace-normal py-2",children:"Tampilan & fitur"}),a.jsx(q,{value:"installation",className:"whitespace-normal py-2",children:"Instalasi"})]})})]}),a.jsxs(X,{value:"identity",className:"mt-4 space-y-6",children:[a.jsx(re,{selected:d,draft:n,setDraft:h}),a.jsx(ne,{site:d,value:n.auditSchedule,onChange:r=>h({...n,auditSchedule:r}),apiUrl:i,auth:t,toast:e}),!d.isDefault&&a.jsxs(j,{variant:"ghost",className:"text-destructive hover:text-destructive",onClick:()=>P(!0),children:[a.jsx(Oa,{className:"mr-2 h-4 w-4"}),"Hapus domain ini"]})]}),a.jsxs(X,{value:"appearance",className:"mt-4 space-y-4",children:[a.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border bg-muted/30 p-3",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Atur tampilan dan fitur untuk domain ini saja."}),a.jsxs(j,{variant:"outline",size:"sm",onClick:()=>h({...n,config:xa()}),disabled:v,children:[a.jsx(pa,{className:"mr-2 h-4 w-4"}),"Pulihkan bawaan"]})]}),a.jsx(Za,{config:n.config,onChange:r=>h({...n,config:r}),widgetSrc:A})]}),a.jsx(X,{value:"installation",className:"mt-4",children:a.jsx(de,{site:d,widgetSrc:A})})]}),a.jsxs("div",{className:"sticky bottom-3 z-10 mt-6 flex flex-wrap items-center justify-between gap-3 rounded-lg border border-primary/20 bg-background/95 p-3 shadow-lg backdrop-blur supports-[backdrop-filter]:bg-background/85",children:[a.jsxs("p",{className:"text-xs text-muted-foreground",children:["Perubahan hanya berlaku untuk ",a.jsx("strong",{children:d.name}),"."]}),a.jsxs(j,{onClick:da,disabled:v,children:[a.jsx(Wa,{className:"mr-2 h-4 w-4"}),v?"Menyimpanâ¦":"Simpan perubahan"]})]})]}):a.jsx(y,{className:"flex min-w-0 items-center justify-center p-10",children:a.jsx("p",{className:"text-sm text-muted-foreground",children:"Pilih domain, atau tambahkan yang baru."})})]}),a.jsx(le,{open:U,onOpenChange:E,onCreate:async r=>{const p=await F.post(`${i}/api/a11y/sites`,r,t);await W(p.data.data.id),e({title:"Domain ditambahkan",description:"Silakan atur tampilan dan fiturnya, lalu simpan."})},onError:r=>e({title:"Gagal menambahkan",description:O(r,"Terjadi kesalahan"),variant:"destructive"})}),a.jsx(Na,{open:M,onOpenChange:P,children:a.jsxs(wa,{children:[a.jsxs(Sa,{children:[a.jsxs(Ca,{children:["Hapus ",d==null?void 0:d.name,"?"]}),a.jsx(Ta,{children:"Widget di domain itu tidak hilang â ia kembali memakai pengaturan bawaan. Pengaturan khusus domain ini y
26ang hilang, dan tidak bisa dikembalikan."})]}),a.jsxs(Da,{children:[a.jsx(Aa,{children:"Batal"}),a.jsx(Pa,{onClick:oa,children:"Hapus"})]})]})})]})}function te({site:e,active:i,onClick:o}){return a.jsxs("button",{type:"button",onClick:o,"aria-current":i,className:`w-full rounded-md px-3 py-2 text-left transition-colors ${i?"bg-primary/10 ring-1 ring-primary/30":"hover:bg-muted"}`,children:[a.jsxs("span",{className:"flex items-center gap-2 text-sm font-medium",children:[a.jsx(Ua,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}),a.jsx("span",{className:"truncate",children:e.name})]}),a.jsx("span",{className:"mt-1 block truncate text-xs text-muted-foreground",children:e.isDefault?"Domain yang belum terdaftar":e.domains.join(", ")}),a.jsx(la,{site:e,active:e.active,compact:!0})]})}function la({site:e,active:i,compact:o=!1}){return a.jsxs("span",{className:`flex flex-wrap gap-1 ${o?"mt-1.5":""}`,children:[e.isDefault&&a.jsx(z,{variant:"secondary",className:o?"text-[10px]":"",children:"Bawaan"}),!e.isDefault&&a.jsx(z,{variant:i?"default":"outline",className:o?"text-[10px]":"",children:i?"Aktif":"Nonaktif"}),e.lastSeenAt&&a.jsx(z,{variant:"outline",className:o?"text-[10px]":"",children:"Terpasang"})]})}function re({selected:e,draft:i,setDraft:o}){return a.jsxs(y,{children:[a.jsxs(S,{children:[a.jsx(C,{children:"Identitas & status"}),a.jsx(T,{children:e.isDefault?"Dipakai setiap domain yang belum punya entri sendiri.":"Widget mencocokkan hostname situs pemasang dengan daftar ini."})]}),a.jsxs(w,{className:"grid gap-4 md:grid-cols-2",children:[a.jsxs("div",{className:"min-w-0 space-y-2",children:[a.jsx(x,{htmlFor:"site-name",children:"Nama situs"}),a.jsx(I,{id:"site-name",value:i.name,onChange:t=>o({...i,name:t.target.value}),placeholder:"mis. Portal Instansi X"})]}),!e.isDefault&&a.jsxs("div",{className:"min-w-0 space-y-2",children:[a.jsx(x,{htmlFor:"site-domains",children:"Domain"}),a.jsx(ta,{id:"site-domains",value:i.domainText,onChange:t=>o({...i,domainText:t.target.value}),rows:3,className:"font-mono text-sm",placeholder:`instansi.go.id 27*.instansi.go.id`}),a.jsxs("p",{className:"text-xs text-muted-foreground",children:["Satu per baris. ",a.jsx("code",{children:"www."})," tidak perlu ditulis. Gunakan"," ",a.jsx("code",{children:"*.instansi.go.id"})," untuk mencakup semua subdomain."]})]}),a.jsxs("div",{className:"flex items-center gap-3 border-t pt-4 md:col-span-2",children:[a.jsx(Ba,{id:"site-active",checked:i.active,disabled:e.isDefault,onCheckedChange:t=>o({...i,active:t})}),a.jsxs(x,{htmlFor:"site-active",className:"font-normal",children:["Widget aktif di domain ini",a.jsx("span",{className:"block text-xs text-muted-foreground",children:"Saat dimatikan, widget melepas dirinya dari halaman tanpa perlu mencabut snippet."})]})]}),e.lastSeenAt&&a.jsxs("p",{className:"break-words text-xs text-muted-foreground md:col-span-2",children:["Terakhir mengambil konfigurasi"," ",new Date(e.lastSeenAt).toLocaleString("id-ID"),e.lastSeenHost?` dari ${e.lastSeenHost}`:"","."]})]})]})}function le({open:e,onOpenChange:i,onCreate:o,onError:t}){const[u,m]=c.useState(""),[l,s]=c.useState(""),[n,h]=c.useState(!1),D=async f=>{f.preventDefault();const v=ra(l);if(!(!u.trim()||!v.length)){h(!0);try{await o({name:u.trim(),domains:v}),m(""),s(""),i(!1)}catch(N){t(N)}finally{h(!1)}}};return a.jsx(fa,{open:e,onOpenChange:i,children:a.jsx(ba,{children:a.jsxs("form",{onSubmit:D,children:[a.jsxs(ja,{children:[a.jsx(ka,{children:"Tambah domain"}),a.jsx(ya,{children:"Setelah ditambahkan, tampilan dan fitur widget dapat diatur khusus untuk domain ini."})]}),a.jsxs("div",{className:"space-y-4 py-4",children:[a.jsxs("div",{className:"space-y-2",children:[a.jsx(x,{htmlFor:"new-name",children:"Nama situs"}),a.jsx(I,{id:"new-name",value:u,onChange:f=>m(f.target.value),placeholder:"mis. Portal Instansi X",autoFocus:!0})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsx(x,{htmlFor:"new-domains",children:"Domain"}),a.jsx(ta,{id:"new-domains",value:l,onChange:f=>s(f.target.value),rows:3,className:"font-mono text-sm",placeholder:`instansi.go.id 28*.instansi.go.id`}),a.jsxs("p",{className:"text-xs text-muted-foreground",children:["Satu per baris. ",a.jsx("code",{children:"www."})," tidak perlu ditulis."]})]})]}),a.jsxs(va,{children:[a.jsx(j,{type:"button",variant:"outline",onClick:()=>i(!1),children:"Batal"}
28),a.jsx(j,{type:"submit",disabled:n,children:n?"Menambahkanâ¦":"Tambah"})]})]})})})}function de({site:e,widgetSrc:i}){const o=`<script src="${i}" defer><\/script>`,t=`<script src="${i}" data-site="${e.siteKey}" defer><\/script>`,u=ga(i,e.config).replace("<script ",'<script data-remote="false" ');return a.jsxs(y,{children:[a.jsxs(S,{children:[a.jsx(C,{children:"Snippet pemasangan"}),a.jsxs(T,{children:["Tempel sekali sebelum ",a.jsx("code",{children:"</body>"}),". Perubahan konfigurasi selanjutnya diambil widget secara otomatis."]})]}),a.jsxs(w,{className:"space-y-5",children:[a.jsx(Q,{label:"Snippet standar",hint:"Pilihan yang direkomendasikan untuk domain terdaftar.",code:o}),a.jsxs("details",{className:"group border-t pt-4",children:[a.jsx("summary",{className:"cursor-pointer text-sm font-semibold outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",children:"Opsi pemasangan lanjutan"}),a.jsxs("div",{className:"mt-5 space-y-5",children:[a.jsx(Q,{label:"Bila hostname tidak tetap",hint:"Untuk lingkungan uji atau aplikasi yang dibuka dari beberapa host.",code:t}),a.jsx(Q,{label:"Mode luring",hint:"Tidak menghubungi server; konfigurasi hanya berubah bila snippet diganti.",code:u})]})]}),a.jsx(j,{variant:"ghost",asChild:!0,className:"px-0",children:a.jsxs("a",{href:"/widget/",target:"_blank",rel:"noreferrer",children:[a.jsx(Ga,{className:"mr-2 h-4 w-4"}),"Halaman panduan pemasangan"]})})]})]})}function Q({label:e,hint:i,code:o}){const[t,u]=c.useState(!1),m=async()=>{try{await navigator.clipboard.writeText(o),u(!0),setTimeout(()=>u(!1),2e3)}catch{}};return a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between gap-3",children:[a.jsx(x,{className:"text-sm",children:e}),a.jsxs(j,{variant:"outline",size:"sm",onClick:m,children:[t?a.jsx(Ra,{className:"mr-2 h-3.5 w-3.5 text-emerald-600"}):a.jsx(Va,{className:"mr-2 h-3.5 w-3.5"}
28),t?"Tersalin":"Salin"]})]}),a.jsx("pre",{className:"overflow-x-auto rounded-lg bg-slate-900 p-4 text-xs leading-relaxed text-slate-100",children:a.jsx("code",{children:o})}),a.jsx("p",{className:"text-xs text-muted-foreground",children:i})]})}export{He as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.