@safetype/dom 1.6.0 → 1.8.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.
@@ -1,9 +1,9 @@
1
- "use strict";var SafeType=(()=>{var ie=Object.defineProperty;var Be=Object.getOwnPropertyDescriptor;var Ue=Object.getOwnPropertyNames;var Ve=Object.prototype.hasOwnProperty;var Ke=(e,t)=>{for(var n in t)ie(e,n,{get:t[n],enumerable:!0})},We=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ue(t))!Ve.call(e,o)&&o!==n&&ie(e,o,{get:()=>t[o],enumerable:!(r=Be(t,o))||r.enumerable});return e};var Ge=e=>We(ie({},"__esModule",{value:!0}),e);var Jt={};Ke(Jt,{DEFAULT_MESSAGES:()=>Ee,DEFAULT_SELECTOR:()=>Q,MANAGED_EDITOR_SELECTOR:()=>X,createModerationEngine:()=>q,createSafeType:()=>He,getMessageLevel:()=>ee,isEligible:()=>K,resolveMessage:()=>be});var ze=[{id:"en.profanity.fuck",pattern:"fuck*",category:"profanity",severity:"high",replacement:"heck"},{id:"en.profanity.motherfucker",pattern:"motherfuck*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.shit",pattern:"shit*",category:"profanity",severity:"medium",replacement:"shoot"},{id:"en.profanity.bullshit",pattern:"(bullshit*|horseshit*)",category:"profanity",severity:"medium",replacement:"nonsense"},{id:"en.profanity.bitch",pattern:"bitch*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.ass",pattern:"(ass|arse)",category:"profanity",severity:"medium",replacement:"butt"},{id:"en.profanity.asshole",pattern:"(asshole*|arsehole*|jackass*|dumbass*)",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.bastard",pattern:"bastard*",category:"profanity",severity:"medium",replacement:"jerk"},{id:"en.profanity.cunt",pattern:"cunt*",category:"profanity",severity:"critical",replacement:"jerk"},{id:"en.profanity.dickhead",pattern:"dickhead*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.cocksucker",pattern:"cocksuck*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.wanker",pattern:"wank*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.twat",pattern:"twat*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.slut",pattern:"slut*",category:"profanity",severity:"high"},{id:"en.profanity.whore",pattern:"whore*",category:"profanity",severity:"high"},{id:"en.profanity.douche",pattern:"douche*",category:"profanity",severity:"medium",replacement:"jerk"},{id:"en.profanity.bollocks",pattern:"bollocks",category:"profanity",severity:"medium",replacement:"nonsense"},{id:"en.profanity.piss",pattern:"(piss|pisses|pissing)",category:"profanity",severity:"medium"},{id:"en.profanity.pissed",pattern:"pissed",category:"profanity",severity:"low",replacement:"annoyed"},{id:"en.profanity.damn",pattern:"(damn*|goddamn*)",category:"profanity",severity:"low",replacement:"darn"},{id:"en.profanity.crap",pattern:"crap*",category:"profanity",severity:"low",replacement:"junk"}],Ye=[...["nigger*","faggot*","kike*","wetback*","raghead*","towelhead*"].map(e=>({id:`en.hate.slur.${e.replace("*","")}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"en.hate.group-violence",pattern:"(jews|muslims|christians|blacks|whites|asians|mexicans|immigrants|gays|lesbians|trans|women|arabs|africans|hindus|sikhs|refugees) (should|must|need|deserve) (to)? (be)? (die|burn|hang|rot|killed|exterminated|gassed|eradicated)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],qe="(idiot*|moron*|stupid|dumb|loser*|worthless|pathetic|ugly|imbecile*|retard*|trash|garbage|scum|disgusting|failure|freak|clown)",Xe=[{id:"en.harassment.insult",pattern:`(you|u|ur|youre|yall) (are|re|r)? (such)? (a|an)? (so|fucking|complete|total|absolute)? ${qe}`,category:"harassment",severity:"medium",confidence:.8,label:"insult",replacement:"I disagree with you"},{id:"en.harassment.piece-of",pattern:"(you|u|ur|youre) (are|re|r)? (a)? piece of (shit|crap|garbage|trash)",category:"harassment",severity:"high",confidence:.85,label:"insult",replacement:"I disagree with you"},{id:"en.harassment.you-suck",pattern:"(you|u) (suck|stink)",category:"harassment",severity:"low",confidence:.7,label:"insult"},{id:"en.harassment.self-harm",pattern:"(kill|hang) (yourself|urself|yourselves)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"en.harassment.kys",pattern:"kys",category:"harassment",severity:"critical",confidence:.8,label:"self-harm-incitement"},{id:"en.harassment.go-die",pattern:"go (die|rot)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"en.harassment.threat",pattern:"(i|ill|imma|im) (ll|will|am|m|gonna)? (going)? (to)? (kill|murder|hurt|stab|shoot) (you|u)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"en.harassment.nobody-likes",pattern:"(nobody|noone) (likes|loves|cares|wants) (about)? (you|u)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],se={language:"en",boundary:"word",rules:[...ze,...Ye,...Xe],allowList:["shiitake","shitake"]};var Qe=[{id:"hi-latn.profanity.behenchod",pattern:"(behenchod*|behanchod*|bahenchod*|bahanchod*|bhenchod*|bhanchod*|benchod*|bhenchud*|behenchood*|bhencho|behencho)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.madarchod",pattern:"(madarchod*|maderchod*|madharchod*|maadarchod*|madarchood*|madrchod*|maderjaat|madarjaat)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.betichod",pattern:"(betichod*|betichood*)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.beti-chod",pattern:"beti (chod*|chood*)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.chut",pattern:"(chut|choot|chuth|chooth)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.loda",pattern:"(loda|lauda|lavda|lawda|laude|lavde|lawde|laudu|lavdu|lund|lundd)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.lodu",pattern:"(lodu|lodoo|loduchand|lodus)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.bhosda",pattern:"(bhosd*|bhosad*|bhosid*|bhosri*|bhosdk)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.abbreviations",pattern:"(bsdk|bkl|mkc)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.chutiya",pattern:"(chutiya*|chutiye*|chutia*|chootiya*|chutya*|chutiye)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.gandu",pattern:"(gandu|gaandu|gandoo|gaandoo|gaand*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.randi",pattern:"(randiya|randwa|randibaaz*|randibaz*|randikhana)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.harami",pattern:"(harami|haraami|haramkhor*|haraamkhor*|haramzad*|haraamzad*|haramjad*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.bhadwa",pattern:"(bhadwa|bhadwe|bhadva|bhadve|bhadwi|bhadwaa)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.jhaatu",pattern:"(jhaat*|jhant*|jhaant*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.kutiya",pattern:"(kutiya|kuttiya|kutiyaa)",category:"profanity",severity:"high"}],Ze="(teri|tere|tera|tumhari|tumhara|tumhare|uski|uske|iski|apni)",Te="(maa|ma|mai|behen|bahen|behan|bahan|bhen|beti)",Je=[{id:"hi-latn.harassment.family-insult",pattern:`${Ze} ${Te} (ka|ki|ke|ko) (bhosd*|bhosad*|chut|choot|lund|loda|lauda|lavda|lawda)`,category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"hi-latn.harassment.family-abuse",pattern:`${Te} (ko|ki)? (chod*|chud*|chood*)`,category:"harassment",severity:"high",confidence:.85,label:"insult"}],ce={language:"hi-Latn",boundary:"word",rules:[...Qe,...Je],allowList:[]};var le={allow:0,mask:1,suggest:2,warn:3,block:4},z={low:0,medium:1,high:2,critical:3},U=["profanity","hate","harassment","custom"];var et={direct:1,quoted:.5,mention:.4},tt=new Set(["word","words","term","slur","phrase","say","said","saying","says","spell","spelled","called","calling","means","meaning","define","definition","using","use"]),nt=[['"','"'],["\u201C","\u201D"],["\u2018","\u2019"],["\xAB","\xBB"],["\u300C","\u300D"]];function rt(e){let t=[];for(let[n,r]of nt){let o=0;for(;o<e.length;){let a=e.indexOf(n,o);if(a===-1)break;let i=e.indexOf(r,a+1);if(i===-1)break;let l=e.indexOf(`
2
- `,a);if(l!==-1&&l<i){o=l+1;continue}t.push([a+1,i]),o=i+1}}return t}function ot(e,t,n){if(e.tokenIndex!==void 0)for(let r=1;r<=2;r++){let o=t[e.tokenIndex-r];if(o&&tt.has(o.value))return"mention"}for(let[r,o]of n)if(e.start>=r&&e.end<=o)return"quoted";return"direct"}var at=class{constructor(e){this.onListenerError=e,this.handlers=new Map}on(e,t){let n=this.handlers.get(e);return n||(n=new Set,this.handlers.set(e,n)),n.add(t),()=>{n.delete(t)}}emit(e,t){let n=this.handlers.get(e);if(n)for(let r of[...n])try{r(t)}catch(o){this.onListenerError&&this.onListenerError(o,e)}}clear(){this.handlers.clear()}},it=new RegExp("^[\u200B-\u200D\u2060\uFEFF\xAD\u180E]$"),st=/\p{M}/gu,ct={\u0430:"a",\u0432:"b",\u0435:"e",\u0451:"e",\u043A:"k",\u043C:"m",\u043D:"h",\u043E:"o",\u0440:"p",\u0441:"c",\u0442:"t",\u0443:"y",\u0445:"x",\u0455:"s",\u0456:"i",\u0457:"i",\u0458:"j",\u04BB:"h","\u0501":"d","\u051B":"q","\u051D":"w",\u04AF:"y",\u03B1:"a",\u03B2:"b",\u03B5:"e",\u03B7:"n",\u03B9:"i",\u03BA:"k",\u03BD:"v",\u03BF:"o",\u03C1:"p",\u03C4:"t",\u03C5:"u",\u03C7:"x",\u03C9:"w"},Ce={"@":"a",4:"a",$:"s",5:"s",0:"o",1:"i","!":"i","|":"i",3:"e","\u20AC":"e",7:"t"},de=new Map;function Ie(e){let t=de.get(e);if(t!==void 0)return t;let n;if(it.test(e))n="";else{let r=e.toLowerCase().normalize("NFKD").replace(st,"").toLowerCase();n="";for(let o of r)n+=ct[o]??o}return de.size<1e4&&de.set(e,n),n}function Oe(e){let t="",n=[],r=[],o=0;for(;o<e.length;){let a=e.codePointAt(o),i=String.fromCodePoint(a),l=o+i.length,c=Ie(i);for(let f=0;f<c.length;f++)n.push(o),r.push(l);t+=c,o=l}return{text:t,starts:n,ends:r}}function Y(e){return De(Oe(e).text)}var lt=/\p{L}/u;function De(e){if(!lt.test(e))return e;let t="";for(let n of e)t+=Ce[n]??n;return t}function Ne(e){let t=[];for(let n of e){let r=t[t.length-1];r&&r[0]===n?r[1]++:t.push([n,1])}return t}function dt(e){let t="";for(let[n]of e)t+=n;return t}function me(e,t){let n=t.runs;if(t.prefix?e.length<n.length:e.length!==n.length)return!1;for(let r=0;r<n.length;r++){let o=e[r],a=n[r];if(o[0]!==a[0]||o[1]<a[1])return!1}return!0}var $=class extends Error{constructor(){super(...arguments),this.name="PatternError"}};function ut(e,t){let n=e.endsWith("*"),r=Y(n?e.slice(0,-1):e);if(!r||/\s/.test(r))throw new $(`Invalid token "${e}" in pattern "${t}"`);let o=Ne(r);return{value:r,prefix:n,runs:o,key:dt(o)}}function ft(e){let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)throw new $("Pattern must not be empty");return t.map((n,r)=>{let o=n,a=o.endsWith("?");if(a&&(o=o.slice(0,-1)),a&&r===0)throw new $(`First token cannot be optional in "${e}"`);if(o.startsWith("(")){if(!o.endsWith(")"))throw new $(`Unclosed group "${n}" in "${e}"`);o=o.slice(1,-1)}return{alternatives:o.split("|").map(l=>ut(l,e)),optional:a}})}var _e={custom:40,hate:30,harassment:20,profanity:10},ht=new Set(["profanity","hate","harassment","custom"]),pt=new Set(["low","medium","high","critical"]);function mt(e,t="word"){if(!e||typeof e.id!="string"||e.id.length===0)throw new TypeError("Rule requires a non-empty id");if(typeof e.pattern!="string")throw new TypeError(`Rule "${e.id}" requires a pattern`);if(!ht.has(e.category))throw new TypeError(`Rule "${e.id}" has unknown category "${String(e.category)}"`);if(e.severity!==void 0&&!pt.has(e.severity))throw new TypeError(`Rule "${e.id}" has unknown severity "${String(e.severity)}"`);let n=e.confidence??1;if(!(n>=0&&n<=1))throw new RangeError(`Rule "${e.id}" confidence must be within [0, 1]`);let r;try{r=ft(e.pattern)}catch(o){throw o instanceof $?new $(`Rule "${e.id}": ${o.message}`):o}if(t==="substring"&&r.length!==1)throw new $(`Rule "${e.id}": substring packs support single-token patterns only`);return{id:e.id,category:e.category,severity:e.severity??"medium",confidence:n,priority:e.priority??_e[e.category],replacement:e.replacement,label:e.label,boundary:t,elements:r}}var yt=class{constructor(e){this.exact=new Map,this.prefix=new Map,this.substring=[];for(let t of e){if(t.boundary==="substring"){this.substring.push(t);continue}for(let n of t.elements[0].alternatives){let r=n.prefix?this.prefix:this.exact,o=n.prefix?n.key[0]:n.key,a=r.get(o);a?a.push({rule:t,alt:n}):r.set(o,[{rule:t,alt:n}])}}}candidates(e,t){let n=[];for(let r of this.exact.get(t)??[])me(e,r.alt)&&n.push(r);for(let r of this.prefix.get(t[0]??"")??[])me(e,r.alt)&&n.push(r);return n}get substringRules(){return this.substring}};function Se(e,t){let n=Ne(e.value),r="";for(let[o]of n)r+=o;return{runs:n,key:r,blocked:e.masked||t.has(e.value)}}function gt(e,t){return t.blocked?!1:e.alternatives.some(n=>me(t.runs,n))}function ye(e,t,n,r){if(t===e.length)return r-1;let o=e[t],a=-1;return r<n.length&&gt(o,n[r])&&(a=ye(e,t+1,n,r+1)),o.optional&&(a=Math.max(a,ye(e,t+1,n,r))),a}function vt(e,t){let{tokens:n,spaced:r,allowList:o,normalized:a}=t,i=n.map(m=>Se(m,o)),l=[],c=new Set,f=m=>{let b=`${m.rule.id}:${m.start}:${m.end}`;c.has(b)||(c.add(b),l.push(m))};for(let m=0;m<n.length;m++){let b=i[m];if(b.blocked)continue;let S=new Set;for(let{rule:x}of e.candidates(b.runs,b.key)){if(S.has(x.id))continue;S.add(x.id);let N=ye(x.elements,1,i,m+1);N<m||f({start:n[m].start,end:n[N].end,rule:x,confidence:x.confidence,tokenIndex:m})}}for(let m of r){let b=Se(m,o);if(!b.blocked)for(let{rule:S}of e.candidates(b.runs,b.key))S.elements.length===1&&f({start:m.start,end:m.end,rule:S,confidence:S.confidence,tokenIndex:m.firstIndex})}let E=a.text;for(let m of e.substringRules)for(let b of m.elements[0].alternatives)for(let S=E.indexOf(b.value);S!==-1;S=E.indexOf(b.value,S+1)){let x=S+b.value.length;f({start:a.starts[S],end:a.ends[x-1],rule:m,confidence:m.confidence})}return l}var Et=new Set(["allow","mask","suggest","warn","block"]);function ge(e){if(!Et.has(e))throw new TypeError(`Unknown moderation action "${String(e)}"`)}function ue(e,t){let n=new Set(t),r=(o,a)=>({enabled:n.has(o),...a});return{profanity:r("profanity",{action:e,minConfidence:0,minSeverity:"medium"}),custom:r("custom",{action:e,minConfidence:0,minSeverity:"low"}),hate:r("hate",{action:e,minConfidence:.6,minSeverity:"low"}),harassment:r("harassment",{action:e==="mask"?"warn":e,minConfidence:.6,minSeverity:"low"})}}function fe(e,t){let n={...e};if(!t)return n;for(let r of U){let o=t[r];if(o){if(o.action!==void 0&&ge(o.action),o.minConfidence!==void 0&&!(o.minConfidence>=0&&o.minConfidence<=1))throw new RangeError(`minConfidence for "${r}" must be within [0, 1]`);if(o.minSeverity!==void 0&&!(o.minSeverity in z))throw new TypeError(`Unknown severity "${String(o.minSeverity)}"`);n[r]={...n[r],...bt(o)}}}return n}function bt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function wt(e,t,n){return!e.enabled||z[t]<z[e.minSeverity]?{keep:!1,action:"allow",requiresReview:!1}:n<e.minConfidence?{keep:!0,action:"allow",requiresReview:!0}:{keep:!0,action:e.action,requiresReview:!1}}function Tt(e){let t="allow";for(let n of e)le[n]>le[t]&&(t=n);return t}function St(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function kt(e,t={}){let n=Math.max(0,t.debounceMs??0),r=0,o,a,i,l=()=>{r++,a!==void 0&&clearTimeout(a),a=void 0,i?.(void 0),i=void 0,o?.abort(),o=void 0};return{moderate(c){l();let f=r;return new Promise((E,m)=>{i=E;let b=()=>{a=void 0;let S=new AbortController;o=S,e(c,{signal:S.signal}).then(x=>{f===r&&(i=void 0,o=void 0,E(x))},x=>{f===r&&(i=void 0,o=void 0,St(x)?E(void 0):m(x))})};n>0?a=setTimeout(b,n):b()})},cancel:l}}var ke=new Set(["*","!","|"]),xt=new Set([" ",".","-","_"]),xe=new Map;function Rt(e){let t=xe.get(e);if(!t){let n=e.replace(/[\\\]^-]/g,"\\$&");t=new RegExp(`[\\p{L}\\p{N}@$!|*\u20AC${n}]+`,"gu"),xe.set(e,t)}return t}function Mt(e,t="*"){let{text:n,starts:r,ends:o}=e,a=[],i=Rt(t);i.lastIndex=0;for(let l=i.exec(n);l!==null;l=i.exec(n)){let c=l.index,f=l.index+l[0].length;for(;c<f&&ke.has(n[c]);)c++;for(;f>c&&ke.has(n[f-1]);)f--;if(c===f)continue;let E=n.slice(c,f);a.push({start:r[c],end:o[f-1],nStart:c,nEnd:f,value:De(E),masked:E.includes(t),firstIndex:a.length})}return a}function Lt(e,t){let n=[],r=0;for(;r<e.length;){let o=r;for(;o+1<e.length&&e[o].value.length===1&&e[o+1].value.length===1&&e[o+1].nStart-e[o].nEnd===1&&xt.has(t[e[o].nEnd]);)o++;if(o-r+1>=3){let a=e.slice(r,o+1);n.push({start:a[0].start,end:a[a.length-1].end,nStart:a[0].nStart,nEnd:a[a.length-1].nEnd,value:a.map(i=>i.value).join(""),masked:a.some(i=>i.masked),firstIndex:r}),r=o+1}else r++}return n}var At=new RegExp("[\\p{L}\\p{N}@$!|\u20AC]","u"),Ct=new Set(["a","e","i","o","u"]);function It(e){return At.test(e)}function Re(e,t="vowels",n="*"){if(typeof t=="function")return t(e);let r=Array.from(e),o=r.map((c,f)=>It(c)?f:-1).filter(c=>c>=0);if(o.length===0)return e;let a=r.slice(),i=o[0],l=o[o.length-1];if(t==="full"){for(let c of o)a[c]=n;return a.join("")}if(t==="vowels"){let c=0;for(let f of o){if(f===i)continue;let E=Ie(r[f]);Ct.has(Ce[E]??E)&&(a[f]=n,c++)}if(c>0)return a.join("")}for(let c of o)c!==i&&(c===l&&o.length>2||(a[c]=n));return a.join("")}function Ot(e,t){let n=e.replace(/[^\p{L}]/gu,"");if(n.length>1&&n===n.toUpperCase()&&n!==n.toLowerCase())return t.toUpperCase();let r=n[0];return r&&r!==r.toLowerCase()?t.charAt(0).toUpperCase()+t.slice(1):t}function V(e,t){let n=[...t].sort((a,i)=>a.start-i.start);for(let a=1;a<n.length;a++)if(n[a].start<n[a-1].end)throw new RangeError("Edits must not overlap");let r="",o=0;for(let a of n)r+=e.slice(o,a.start)+a.replacement,o=a.end;return r+=e.slice(o),{text:r,mapping:Dt(n,e.length,r.length)}}function Dt(e,t,n){let r=Object.freeze(e.map(a=>Object.freeze({...a}))),o=(a,i)=>Math.min(Math.max(0,Math.trunc(a)),i);return{edits:r,toTransformed(a){let i=o(a,t),l=0;for(let c of r){if(i<=c.start)return i+l;if(i<c.end)return c.start+l+Math.min(i-c.start,c.replacement.length);l+=c.replacement.length-(c.end-c.start)}return i+l},toOriginal(a){let i=o(a,n),l=0;for(let c of r){let f=c.start+l,E=f+c.replacement.length;if(i<=f)return i-l;if(i<E)return c.start+Math.min(i-f,c.end-c.start);l+=c.replacement.length-(c.end-c.start)}return i-l}}}var Me={en:se,"hi-latn":ce},Nt={en:["en","hi-latn"]};function _t(e,t){return(t??Nt[e.toLowerCase().split("-")[0]]??[e]).map(r=>{let o=r.toLowerCase(),a=Me[o]??Me[o.split("-")[0]];if(!a)throw new Error(`No built-in dictionary pack for language "${r}". Pass one via the \`packs\` option.`);return a})}function he(e){return e?.reason!==void 0?e.reason:new DOMException("The operation was aborted.","AbortError")}function pe(e){return Math.round(e*1e4)/1e4}function Le(e){return Math.min(1,Math.max(0,e))}var Ae=new Set(U);function q(e={}){let t=e.mode??"mask";ge(t);let n=e.language??"en",r=e.categories??U;for(let s of r)if(!Ae.has(s))throw new TypeError(`Unknown category "${String(s)}"`);let o=e.maskChar??"*";if(Array.from(o).length!==1||/[\p{L}\p{N}\s]/u.test(o))throw new TypeError("maskChar must be a single non-letter, non-digit, non-space character");let a=e.maskStyle??"vowels",i=e.detectSpacedLetters??!0,l=e.classifiers??[],c=e.classifierTimeoutMs??3e3,f=new at((s,u)=>{u!=="error"&&f.emit("error",{error:s})});e.onModerated&&f.on("moderated",e.onModerated),e.onViolation&&f.on("violation",e.onViolation),e.onBlocked&&f.on("blocked",e.onBlocked),e.onWarning&&f.on("warning",e.onWarning),e.onError&&f.on("error",e.onError);let E=new Map,m=new Set,b=null,S=(s,u="word")=>{E.set(s.id,{source:{...s},compiled:mt(s,u)}),b=null};for(let s of e.packs??_t(n,e.languages)){for(let u of s.rules)S(u,s.boundary??"word");for(let u of s.allowList??[])m.add(Y(u))}for(let s of e.customWords??[]){let u=s.replace(/[()|?]/g,"").trim().split(/\s+/).join(" ");u&&S({id:`custom.${Y(u).replace(/\s+/g,"-")}`,pattern:u,category:"custom",severity:"medium"})}for(let s of e.rules??[])S(s);for(let s of e.allowList??[])m.add(Y(s));let x={...e.policy},N=fe(ue(t,r),x),W=()=>(b||(b=new yt(Array.from(E.values(),s=>s.compiled))),b);function F(s){let u=Oe(s),g=Mt(u,o),y=i?Lt(g,u.text):[],h=vt(W(),{normalized:u,tokens:g,spaced:y,allowList:m});if(h.length===0)return[];let k=rt(s);return h.map(R=>{let C=ot(R,g,k);return{...R,context:C,confidence:pe(R.confidence*et[C])}})}function G(s){let u=[...s].sort((y,h)=>h.priority-y.priority||h.end-h.start-(y.end-y.start)||y.start-h.start||(y.ruleId<h.ruleId?-1:y.ruleId>h.ruleId?1:0)),g=[];for(let y of u)g.every(h=>y.end<=h.start||y.start>=h.end)&&g.push(y);return g}function _(s,u,g){let y=[];for(let p of u){let w=p.rule,D=wt(N[w.category],w.severity,p.confidence);if(!D.keep)continue;let P=g&&D.action!=="allow"?g:D.action;P==="mask"&&w.elements.length>1&&(w.category==="hate"||w.category==="harassment")&&(P="warn");let B=s.slice(p.start,p.end),d={start:p.start,end:p.end,text:B,category:w.category,ruleId:w.id,severity:w.severity,confidence:p.confidence,priority:w.priority,context:p.context,action:P,requiresReview:D.requiresReview,applied:!1};w.replacement!==void 0?d.suggestedReplacement=Ot(B,w.replacement):P==="suggest"&&(d.suggestedReplacement=Re(B,a,o)),w.label!==void 0&&(d.label=w.label),p.source!==void 0&&(d.source=p.source),y.push(d)}y.sort((p,w)=>p.start-w.start||p.end-w.end||w.priority-p.priority);let h=G(y.filter(p=>p.action==="mask")),k=G(y.filter(p=>p.action==="mask"||p.action==="suggest")),R=p=>({start:p.start,end:p.end,replacement:p.action==="suggest"&&p.suggestedReplacement!==void 0?p.suggestedReplacement:Re(p.text,a,o)});for(let p of h)p.applied=!0;for(let p of k)p.action==="suggest"&&(p.applied=!0);let C=V(s,h.map(R)),O=V(s,k.map(R)),I=Tt(y.map(p=>p.action));return{originalText:s,text:C.text,suggestedText:O.text,matches:y,allowed:I!=="block",action:I,requiresReview:y.some(p=>p.requiresReview),mapping:C.mapping}}function j(s){f.emit("moderated",s),s.matches.some(u=>u.action!=="allow")&&f.emit("violation",s),s.action==="block"&&f.emit("blocked",s),s.matches.some(u=>u.action==="warn")&&f.emit("warning",s)}async function A(s,u,g,y){let h=new AbortController,k=()=>h.abort(he(y));y?.addEventListener("abort",k,{once:!0});let R;try{return await new Promise((C,O)=>{h.signal.addEventListener("abort",()=>O(h.signal.reason),{once:!0}),R=setTimeout(()=>{let I=new Error(`Classifier "${s.name}" timed out after ${g}ms`);I.name="TimeoutError",h.abort(I)},g),Promise.resolve().then(()=>s.classify({...u,signal:h.signal})).then(C,O)})}finally{R!==void 0&&clearTimeout(R),y?.removeEventListener("abort",k)}}function H(s,u,g,y){for(let h of y.adjustments??[]){let k=u.find(R=>R.rule.id===h.ruleId&&R.start===h.start);k&&Number.isFinite(h.confidence)&&(k.confidence=pe(Le(h.confidence)))}for(let h of y.matches??[]){if(!Ae.has(h.category)||!(Number.isInteger(h.start)&&Number.isInteger(h.end)&&h.start>=0&&h.end<=s.length&&h.start<h.end))continue;let k={id:`${g}:${h.label??h.category}`,category:h.category,severity:h.severity??"medium",confidence:Le(h.confidence),priority:_e[h.category],replacement:h.replacement,label:h.label,boundary:"word",elements:[]};u.push({start:h.start,end:h.end,rule:k,confidence:pe(k.confidence),context:"direct",source:g})}}let M={moderate(s){let u=_(s,F(s));return j(u),u},async moderateAsync(s,u={}){let{signal:g}=u;if(g?.aborted)throw he(g);let y=F(s),h=[],k=[];if(l.length>0){let C=_(s,y),O=u.timeoutMs??c,I=await Promise.all(l.map(p=>A(p,{text:s,matches:C.matches,language:n},O,g).then(w=>({classifier:p,output:w,error:void 0}),w=>({classifier:p,output:void 0,error:w}))));if(g?.aborted)throw he(g);for(let{classifier:p,output:w,error:D}of I)w?(H(s,y,p.name,w),h.push(p.name)):(k.push(p.name),f.emit("error",{error:D,provider:p.name}))}let R={..._(s,y),providers:h,failedProviders:k};return j(R),R},mask(s){return _(s,F(s),"mask").text},validate(s){let u=M.moderate(s);return{valid:u.allowed,result:u,violations:u.matches.filter(g=>g.action!=="allow")}},addRule(s){S(s)},removeRule(s){let u=E.delete(s);return u&&(b=null),u},getRules(){return Array.from(E.values(),s=>({...s.source}))},setPolicy(s){let u={...x};for(let g of U){let y=s[g];y&&(u[g]={...u[g],...y})}N=fe(ue(t,r),u),x=u},setMode(s){ge(s),t=s,N=fe(ue(t,r),x)},on(s,u){return f.on(s,u)},createSession(s){return kt((u,g)=>M.moderateAsync(u,g),s)}};return M}var Q="input, textarea, [contenteditable]",Pt=new Set(["text","search"]),$t=new Set(["current-password","new-password","one-time-code","email","username","tel","cc-name","cc-given-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type"]),Ft=/pass(word|wd)?|pwd|secret|token|otp|one.?time|cvv|cvc|card.?num|cc.?num|iban|ssn|social.?sec|pin(code)?$/i,X=[".ProseMirror","[data-lexical-editor]",".ql-editor",".cm-content",".monaco-editor","[data-slate-editor]",".public-DraftEditor-content",".ck-editor__editable"].join(", ");function Z(e){return e.tagName==="INPUT"||e.tagName==="TEXTAREA"}function Pe(e){let t=e;if(typeof t.isContentEditable=="boolean")return t.isContentEditable;for(let n=e;n;n=n.parentElement){let r=n.getAttribute("contenteditable");if(r!==null)return r===""||r==="true"||r==="plaintext-only"}return!1}function jt(e){return Z(e)||!Pe(e)?!1:!e.parentElement||!Pe(e.parentElement)}function ve(e){return(e.getAttribute("autocomplete")??"").toLowerCase().split(/\s+/).some(r=>$t.has(r))?!0:[e.getAttribute("name"),e.id,e.getAttribute("inputmode")==="numeric"?"pin":null].some(r=>r!==null&&r!==""&&Ft.test(r))}function K(e,t){if(e.nodeType!==1||e.closest('[data-safetype="off"]'))return!1;for(let n of t)if(e.matches(n))return!1;if(e.tagName==="INPUT"){let n=e,r=(n.getAttribute("type")??"text").toLowerCase();return!Pt.has(r)||n.readOnly||n.disabled?!1:!ve(e)}if(e.tagName==="TEXTAREA"){let n=e;return n.readOnly||n.disabled?!1:!ve(e)}return!jt(e)||e.matches(X)||e.closest(X)?!1:!ve(e)}var Ee={warn:"This may come across as hurtful. Please consider rephrasing.",block:"This can't be sent because it contains language that breaks the community guidelines."},$e=`
1
+ "use strict";var SafeType=(()=>{var ie=Object.defineProperty;var Be=Object.getOwnPropertyDescriptor;var Ue=Object.getOwnPropertyNames;var Ve=Object.prototype.hasOwnProperty;var Ke=(e,t)=>{for(var n in t)ie(e,n,{get:t[n],enumerable:!0})},We=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ue(t))!Ve.call(e,o)&&o!==n&&ie(e,o,{get:()=>t[o],enumerable:!(r=Be(t,o))||r.enumerable});return e};var Ge=e=>We(ie({},"__esModule",{value:!0}),e);var Jt={};Ke(Jt,{DEFAULT_MESSAGES:()=>Ee,DEFAULT_SELECTOR:()=>Q,MANAGED_EDITOR_SELECTOR:()=>X,createModerationEngine:()=>q,createSafeType:()=>He,getMessageLevel:()=>ee,isEligible:()=>V,resolveMessage:()=>be});var ze=[{id:"en.profanity.fuck",pattern:"fuck*",category:"profanity",severity:"high",replacement:"heck"},{id:"en.profanity.motherfucker",pattern:"motherfuck*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.shit",pattern:"shit*",category:"profanity",severity:"medium",replacement:"shoot"},{id:"en.profanity.bullshit",pattern:"(bullshit*|horseshit*)",category:"profanity",severity:"medium",replacement:"nonsense"},{id:"en.profanity.bitch",pattern:"bitch*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.ass",pattern:"(ass|arse)",category:"profanity",severity:"medium",replacement:"butt"},{id:"en.profanity.asshole",pattern:"(asshole*|arsehole*|jackass*|dumbass*)",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.bastard",pattern:"bastard*",category:"profanity",severity:"medium",replacement:"jerk"},{id:"en.profanity.cunt",pattern:"cunt*",category:"profanity",severity:"critical",replacement:"jerk"},{id:"en.profanity.dickhead",pattern:"dickhead*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.cocksucker",pattern:"cocksuck*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.wanker",pattern:"wank*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.twat",pattern:"twat*",category:"profanity",severity:"high",replacement:"jerk"},{id:"en.profanity.slut",pattern:"slut*",category:"profanity",severity:"high"},{id:"en.profanity.whore",pattern:"whore*",category:"profanity",severity:"high"},{id:"en.profanity.douche",pattern:"douche*",category:"profanity",severity:"medium",replacement:"jerk"},{id:"en.profanity.bollocks",pattern:"bollocks",category:"profanity",severity:"medium",replacement:"nonsense"},{id:"en.profanity.piss",pattern:"(piss|pisses|pissing)",category:"profanity",severity:"medium"},{id:"en.profanity.pissed",pattern:"pissed",category:"profanity",severity:"low",replacement:"annoyed"},{id:"en.profanity.damn",pattern:"(damn*|goddamn*)",category:"profanity",severity:"low",replacement:"darn"},{id:"en.profanity.crap",pattern:"crap*",category:"profanity",severity:"low",replacement:"junk"}],Ye=[...["nigger*","faggot*","kike*","wetback*","raghead*","towelhead*"].map(e=>({id:`en.hate.slur.${e.replace("*","")}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"en.hate.group-violence",pattern:"(jews|muslims|christians|blacks|whites|asians|mexicans|immigrants|gays|lesbians|trans|women|arabs|africans|hindus|sikhs|refugees) (should|must|need|deserve) (to)? (be)? (die|burn|hang|rot|killed|exterminated|gassed|eradicated)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],qe="(idiot*|moron*|stupid|dumb|loser*|worthless|pathetic|ugly|imbecile*|retard*|trash|garbage|scum|disgusting|failure|freak|clown)",Xe=[{id:"en.harassment.insult",pattern:`(you|u|ur|youre|yall) (are|re|r)? (such)? (a|an)? (so|fucking|complete|total|absolute)? ${qe}`,category:"harassment",severity:"medium",confidence:.8,label:"insult",replacement:"I disagree with you"},{id:"en.harassment.piece-of",pattern:"(you|u|ur|youre) (are|re|r)? (a)? piece of (shit|crap|garbage|trash)",category:"harassment",severity:"high",confidence:.85,label:"insult",replacement:"I disagree with you"},{id:"en.harassment.you-suck",pattern:"(you|u) (suck|stink)",category:"harassment",severity:"low",confidence:.7,label:"insult"},{id:"en.harassment.self-harm",pattern:"(kill|hang) (yourself|urself|yourselves)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"en.harassment.kys",pattern:"kys",category:"harassment",severity:"critical",confidence:.8,label:"self-harm-incitement"},{id:"en.harassment.go-die",pattern:"go (die|rot)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"en.harassment.threat",pattern:"(i|ill|imma|im) (ll|will|am|m|gonna)? (going)? (to)? (kill|murder|hurt|stab|shoot) (you|u)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"en.harassment.nobody-likes",pattern:"(nobody|noone) (likes|loves|cares|wants) (about)? (you|u)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],se={language:"en",boundary:"word",rules:[...ze,...Ye,...Xe],allowList:["shiitake","shitake"]};var Qe=[{id:"hi-latn.profanity.behenchod",pattern:"(behenchod*|behanchod*|bahenchod*|bahanchod*|bhenchod*|bhanchod*|benchod*|bhenchud*|behenchood*|bhencho|behencho)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.madarchod",pattern:"(madarchod*|maderchod*|madharchod*|maadarchod*|madarchood*|madrchod*|maderjaat|madarjaat)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.betichod",pattern:"(betichod*|betichood*)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.beti-chod",pattern:"beti (chod*|chood*)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.chut",pattern:"(chut|choot|chuth|chooth)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.loda",pattern:"(loda|lauda|lavda|lawda|laude|lavde|lawde|laudu|lavdu|lund|lundd)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.lodu",pattern:"(lodu|lodoo|loduchand|lodus)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.bhosda",pattern:"(bhosd*|bhosad*|bhosid*|bhosri*|bhosdk)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.abbreviations",pattern:"(bsdk|bkl|mkc)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.chutiya",pattern:"(chutiya*|chutiye*|chutia*|chootiya*|chutya*|chutiye)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.gandu",pattern:"(gandu|gaandu|gandoo|gaandoo|gaand*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.randi",pattern:"(randiya|randwa|randibaaz*|randibaz*|randikhana)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.harami",pattern:"(harami|haraami|haramkhor*|haraamkhor*|haramzad*|haraamzad*|haramjad*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.bhadwa",pattern:"(bhadwa|bhadwe|bhadva|bhadve|bhadwi|bhadwaa)",category:"profanity",severity:"high"},{id:"hi-latn.profanity.jhaatu",pattern:"(jhaat*|jhant*|jhaant*)",category:"profanity",severity:"medium"},{id:"hi-latn.profanity.kutiya",pattern:"(kutiya|kuttiya|kutiyaa)",category:"profanity",severity:"high"}],Ze="(teri|tere|tera|tumhari|tumhara|tumhare|uski|uske|iski|apni)",Te="(maa|ma|mai|behen|bahen|behan|bahan|bhen|beti)",Je=[{id:"hi-latn.harassment.family-insult",pattern:`${Ze} ${Te} (ka|ki|ke|ko) (bhosd*|bhosad*|chut|choot|lund|loda|lauda|lavda|lawda)`,category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"hi-latn.harassment.family-abuse",pattern:`${Te} (ko|ki)? (chod*|chud*|chood*)`,category:"harassment",severity:"high",confidence:.85,label:"insult"}],ce={language:"hi-Latn",boundary:"word",rules:[...Qe,...Je],allowList:[]};var le={allow:0,mask:1,suggest:2,warn:3,block:4},z={low:0,medium:1,high:2,critical:3},B=["profanity","hate","harassment","custom"];var et={direct:1,quoted:.5,mention:.4},tt=new Set(["word","words","term","slur","phrase","say","said","saying","says","spell","spelled","called","calling","means","meaning","define","definition","using","use"]),nt=[['"','"'],["\u201C","\u201D"],["\u2018","\u2019"],["\xAB","\xBB"],["\u300C","\u300D"]];function rt(e){let t=[];for(let[n,r]of nt){let o=0;for(;o<e.length;){let a=e.indexOf(n,o);if(a===-1)break;let i=e.indexOf(r,a+1);if(i===-1)break;let l=e.indexOf(`
2
+ `,a);if(l!==-1&&l<i){o=l+1;continue}t.push([a+1,i]),o=i+1}}return t}function ot(e,t,n){if(e.tokenIndex!==void 0)for(let r=1;r<=2;r++){let o=t[e.tokenIndex-r];if(o&&tt.has(o.value))return"mention"}for(let[r,o]of n)if(e.start>=r&&e.end<=o)return"quoted";return"direct"}var at=class{constructor(e){this.onListenerError=e,this.handlers=new Map}on(e,t){let n=this.handlers.get(e);return n||(n=new Set,this.handlers.set(e,n)),n.add(t),()=>{n.delete(t)}}emit(e,t){let n=this.handlers.get(e);if(n)for(let r of[...n])try{r(t)}catch(o){this.onListenerError&&this.onListenerError(o,e)}}clear(){this.handlers.clear()}},it=new RegExp("^[\u200B-\u200D\u2060\uFEFF\xAD\u180E]$"),st=/\p{M}/gu,ct={\u0430:"a",\u0432:"b",\u0435:"e",\u0451:"e",\u043A:"k",\u043C:"m",\u043D:"h",\u043E:"o",\u0440:"p",\u0441:"c",\u0442:"t",\u0443:"y",\u0445:"x",\u0455:"s",\u0456:"i",\u0457:"i",\u0458:"j",\u04BB:"h","\u0501":"d","\u051B":"q","\u051D":"w",\u04AF:"y",\u03B1:"a",\u03B2:"b",\u03B5:"e",\u03B7:"n",\u03B9:"i",\u03BA:"k",\u03BD:"v",\u03BF:"o",\u03C1:"p",\u03C4:"t",\u03C5:"u",\u03C7:"x",\u03C9:"w"},Ce={"@":"a",4:"a",$:"s",5:"s",0:"o",1:"i","!":"i","|":"i",3:"e","\u20AC":"e",7:"t"},de=new Map;function Ie(e){let t=de.get(e);if(t!==void 0)return t;let n;if(it.test(e))n="";else{let r=e.toLowerCase().normalize("NFKD").replace(st,"").toLowerCase();n="";for(let o of r)n+=ct[o]??o}return de.size<1e4&&de.set(e,n),n}function Oe(e){let t="",n=[],r=[],o=0;for(;o<e.length;){let a=e.codePointAt(o),i=String.fromCodePoint(a),l=o+i.length,c=Ie(i);for(let f=0;f<c.length;f++)n.push(o),r.push(l);t+=c,o=l}return{text:t,starts:n,ends:r}}function Y(e){return De(Oe(e).text)}var lt=/\p{L}/u;function De(e){if(!lt.test(e))return e;let t="";for(let n of e)t+=Ce[n]??n;return t}function Ne(e){let t=[];for(let n of e){let r=t[t.length-1];r&&r[0]===n?r[1]++:t.push([n,1])}return t}function dt(e){let t="";for(let[n]of e)t+=n;return t}function me(e,t){let n=t.runs;if(t.prefix?e.length<n.length:e.length!==n.length)return!1;for(let r=0;r<n.length;r++){let o=e[r],a=n[r];if(o[0]!==a[0]||o[1]<a[1])return!1}return!0}var $=class extends Error{constructor(){super(...arguments),this.name="PatternError"}};function ut(e,t){let n=e.endsWith("*"),r=Y(n?e.slice(0,-1):e);if(!r||/\s/.test(r))throw new $(`Invalid token "${e}" in pattern "${t}"`);let o=Ne(r);return{value:r,prefix:n,runs:o,key:dt(o)}}function ft(e){let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)throw new $("Pattern must not be empty");return t.map((n,r)=>{let o=n,a=o.endsWith("?");if(a&&(o=o.slice(0,-1)),a&&r===0)throw new $(`First token cannot be optional in "${e}"`);if(o.startsWith("(")){if(!o.endsWith(")"))throw new $(`Unclosed group "${n}" in "${e}"`);o=o.slice(1,-1)}return{alternatives:o.split("|").map(l=>ut(l,e)),optional:a}})}var _e={custom:40,hate:30,harassment:20,profanity:10},ht=new Set(["profanity","hate","harassment","custom"]),pt=new Set(["low","medium","high","critical"]);function mt(e,t="word"){if(!e||typeof e.id!="string"||e.id.length===0)throw new TypeError("Rule requires a non-empty id");if(typeof e.pattern!="string")throw new TypeError(`Rule "${e.id}" requires a pattern`);if(!ht.has(e.category))throw new TypeError(`Rule "${e.id}" has unknown category "${String(e.category)}"`);if(e.severity!==void 0&&!pt.has(e.severity))throw new TypeError(`Rule "${e.id}" has unknown severity "${String(e.severity)}"`);let n=e.confidence??1;if(!(n>=0&&n<=1))throw new RangeError(`Rule "${e.id}" confidence must be within [0, 1]`);let r;try{r=ft(e.pattern)}catch(o){throw o instanceof $?new $(`Rule "${e.id}": ${o.message}`):o}if(t==="substring"&&r.length!==1)throw new $(`Rule "${e.id}": substring packs support single-token patterns only`);return{id:e.id,category:e.category,severity:e.severity??"medium",confidence:n,priority:e.priority??_e[e.category],replacement:e.replacement,label:e.label,boundary:t,elements:r}}var yt=class{constructor(e){this.exact=new Map,this.prefix=new Map,this.substring=[];for(let t of e){if(t.boundary==="substring"){this.substring.push(t);continue}for(let n of t.elements[0].alternatives){let r=n.prefix?this.prefix:this.exact,o=n.prefix?n.key[0]:n.key,a=r.get(o);a?a.push({rule:t,alt:n}):r.set(o,[{rule:t,alt:n}])}}}candidates(e,t){let n=[];for(let r of this.exact.get(t)??[])me(e,r.alt)&&n.push(r);for(let r of this.prefix.get(t[0]??"")??[])me(e,r.alt)&&n.push(r);return n}get substringRules(){return this.substring}};function Se(e,t){let n=Ne(e.value),r="";for(let[o]of n)r+=o;return{runs:n,key:r,blocked:e.masked||t.has(e.value)}}function gt(e,t){return t.blocked?!1:e.alternatives.some(n=>me(t.runs,n))}function ye(e,t,n,r){if(t===e.length)return r-1;let o=e[t],a=-1;return r<n.length&&gt(o,n[r])&&(a=ye(e,t+1,n,r+1)),o.optional&&(a=Math.max(a,ye(e,t+1,n,r))),a}function vt(e,t){let{tokens:n,spaced:r,allowList:o,normalized:a}=t,i=n.map(m=>Se(m,o)),l=[],c=new Set,f=m=>{let b=`${m.rule.id}:${m.start}:${m.end}`;c.has(b)||(c.add(b),l.push(m))};for(let m=0;m<n.length;m++){let b=i[m];if(b.blocked)continue;let S=new Set;for(let{rule:x}of e.candidates(b.runs,b.key)){if(S.has(x.id))continue;S.add(x.id);let N=ye(x.elements,1,i,m+1);N<m||f({start:n[m].start,end:n[N].end,rule:x,confidence:x.confidence,tokenIndex:m})}}for(let m of r){let b=Se(m,o);if(!b.blocked)for(let{rule:S}of e.candidates(b.runs,b.key))S.elements.length===1&&f({start:m.start,end:m.end,rule:S,confidence:S.confidence,tokenIndex:m.firstIndex})}let E=a.text;for(let m of e.substringRules)for(let b of m.elements[0].alternatives)for(let S=E.indexOf(b.value);S!==-1;S=E.indexOf(b.value,S+1)){let x=S+b.value.length;f({start:a.starts[S],end:a.ends[x-1],rule:m,confidence:m.confidence})}return l}var Et=new Set(["allow","mask","suggest","warn","block"]);function ge(e){if(!Et.has(e))throw new TypeError(`Unknown moderation action "${String(e)}"`)}function ue(e,t){let n=new Set(t),r=(o,a)=>({enabled:n.has(o),...a});return{profanity:r("profanity",{action:e,minConfidence:0,minSeverity:"medium"}),custom:r("custom",{action:e,minConfidence:0,minSeverity:"low"}),hate:r("hate",{action:e,minConfidence:.6,minSeverity:"low"}),harassment:r("harassment",{action:e==="mask"?"warn":e,minConfidence:.6,minSeverity:"low"})}}function fe(e,t){let n={...e};if(!t)return n;for(let r of B){let o=t[r];if(o){if(o.action!==void 0&&ge(o.action),o.minConfidence!==void 0&&!(o.minConfidence>=0&&o.minConfidence<=1))throw new RangeError(`minConfidence for "${r}" must be within [0, 1]`);if(o.minSeverity!==void 0&&!(o.minSeverity in z))throw new TypeError(`Unknown severity "${String(o.minSeverity)}"`);n[r]={...n[r],...bt(o)}}}return n}function bt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function wt(e,t,n){return!e.enabled||z[t]<z[e.minSeverity]?{keep:!1,action:"allow",requiresReview:!1}:n<e.minConfidence?{keep:!0,action:"allow",requiresReview:!0}:{keep:!0,action:e.action,requiresReview:!1}}function Tt(e){let t="allow";for(let n of e)le[n]>le[t]&&(t=n);return t}function St(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function kt(e,t={}){let n=Math.max(0,t.debounceMs??0),r=0,o,a,i,l=()=>{r++,a!==void 0&&clearTimeout(a),a=void 0,i?.(void 0),i=void 0,o?.abort(),o=void 0};return{moderate(c){l();let f=r;return new Promise((E,m)=>{i=E;let b=()=>{a=void 0;let S=new AbortController;o=S,e(c,{signal:S.signal}).then(x=>{f===r&&(i=void 0,o=void 0,E(x))},x=>{f===r&&(i=void 0,o=void 0,St(x)?E(void 0):m(x))})};n>0?a=setTimeout(b,n):b()})},cancel:l}}var ke=new Set(["*","!","|"]),xt=new Set([" ",".","-","_"]),xe=new Map;function Rt(e){let t=xe.get(e);if(!t){let n=e.replace(/[\\\]^-]/g,"\\$&");t=new RegExp(`[\\p{L}\\p{N}@$!|*\u20AC${n}]+`,"gu"),xe.set(e,t)}return t}function Mt(e,t="*"){let{text:n,starts:r,ends:o}=e,a=[],i=Rt(t);i.lastIndex=0;for(let l=i.exec(n);l!==null;l=i.exec(n)){let c=l.index,f=l.index+l[0].length;for(;c<f&&ke.has(n[c]);)c++;for(;f>c&&ke.has(n[f-1]);)f--;if(c===f)continue;let E=n.slice(c,f);a.push({start:r[c],end:o[f-1],nStart:c,nEnd:f,value:De(E),masked:E.includes(t),firstIndex:a.length})}return a}function Lt(e,t){let n=[],r=0;for(;r<e.length;){let o=r;for(;o+1<e.length&&e[o].value.length===1&&e[o+1].value.length===1&&e[o+1].nStart-e[o].nEnd===1&&xt.has(t[e[o].nEnd]);)o++;if(o-r+1>=3){let a=e.slice(r,o+1);n.push({start:a[0].start,end:a[a.length-1].end,nStart:a[0].nStart,nEnd:a[a.length-1].nEnd,value:a.map(i=>i.value).join(""),masked:a.some(i=>i.masked),firstIndex:r}),r=o+1}else r++}return n}var At=new RegExp("[\\p{L}\\p{N}@$!|\u20AC]","u"),Ct=new Set(["a","e","i","o","u"]);function It(e){return At.test(e)}function Re(e,t="vowels",n="*"){if(typeof t=="function")return t(e);let r=Array.from(e),o=r.map((c,f)=>It(c)?f:-1).filter(c=>c>=0);if(o.length===0)return e;let a=r.slice(),i=o[0],l=o[o.length-1];if(t==="full"){for(let c of o)a[c]=n;return a.join("")}if(t==="vowels"){let c=0;for(let f of o){if(f===i)continue;let E=Ie(r[f]);Ct.has(Ce[E]??E)&&(a[f]=n,c++)}if(c>0)return a.join("")}for(let c of o)c!==i&&(c===l&&o.length>2||(a[c]=n));return a.join("")}function Ot(e,t){let n=e.replace(/[^\p{L}]/gu,"");if(n.length>1&&n===n.toUpperCase()&&n!==n.toLowerCase())return t.toUpperCase();let r=n[0];return r&&r!==r.toLowerCase()?t.charAt(0).toUpperCase()+t.slice(1):t}function U(e,t){let n=[...t].sort((a,i)=>a.start-i.start);for(let a=1;a<n.length;a++)if(n[a].start<n[a-1].end)throw new RangeError("Edits must not overlap");let r="",o=0;for(let a of n)r+=e.slice(o,a.start)+a.replacement,o=a.end;return r+=e.slice(o),{text:r,mapping:Dt(n,e.length,r.length)}}function Dt(e,t,n){let r=Object.freeze(e.map(a=>Object.freeze({...a}))),o=(a,i)=>Math.min(Math.max(0,Math.trunc(a)),i);return{edits:r,toTransformed(a){let i=o(a,t),l=0;for(let c of r){if(i<=c.start)return i+l;if(i<c.end)return c.start+l+Math.min(i-c.start,c.replacement.length);l+=c.replacement.length-(c.end-c.start)}return i+l},toOriginal(a){let i=o(a,n),l=0;for(let c of r){let f=c.start+l,E=f+c.replacement.length;if(i<=f)return i-l;if(i<E)return c.start+Math.min(i-f,c.end-c.start);l+=c.replacement.length-(c.end-c.start)}return i-l}}}var Me={en:se,"hi-latn":ce},Nt={en:["en","hi-latn"]};function _t(e,t){return(t??Nt[e.toLowerCase().split("-")[0]]??[e]).map(r=>{let o=r.toLowerCase(),a=Me[o]??Me[o.split("-")[0]];if(!a)throw new Error(`No built-in dictionary pack for language "${r}". Pass one via the \`packs\` option.`);return a})}function he(e){return e?.reason!==void 0?e.reason:new DOMException("The operation was aborted.","AbortError")}function pe(e){return Math.round(e*1e4)/1e4}function Le(e){return Math.min(1,Math.max(0,e))}var Ae=new Set(B);function q(e={}){let t=e.mode??"mask";ge(t);let n=e.language??"en",r=e.categories??B;for(let s of r)if(!Ae.has(s))throw new TypeError(`Unknown category "${String(s)}"`);let o=e.maskChar??"*";if(Array.from(o).length!==1||/[\p{L}\p{N}\s]/u.test(o))throw new TypeError("maskChar must be a single non-letter, non-digit, non-space character");let a=e.maskStyle??"vowels",i=e.detectSpacedLetters??!0,l=e.classifiers??[],c=e.classifierTimeoutMs??3e3,f=new at((s,u)=>{u!=="error"&&f.emit("error",{error:s})});e.onModerated&&f.on("moderated",e.onModerated),e.onViolation&&f.on("violation",e.onViolation),e.onBlocked&&f.on("blocked",e.onBlocked),e.onWarning&&f.on("warning",e.onWarning),e.onError&&f.on("error",e.onError);let E=new Map,m=new Set,b=null,S=(s,u="word")=>{E.set(s.id,{source:{...s},compiled:mt(s,u)}),b=null};for(let s of e.packs??_t(n,e.languages)){for(let u of s.rules)S(u,s.boundary??"word");for(let u of s.allowList??[])m.add(Y(u))}for(let s of e.customWords??[]){let u=s.replace(/[()|?]/g,"").trim().split(/\s+/).join(" ");u&&S({id:`custom.${Y(u).replace(/\s+/g,"-")}`,pattern:u,category:"custom",severity:"medium"})}for(let s of e.rules??[])S(s);for(let s of e.allowList??[])m.add(Y(s));let x={...e.policy},N=fe(ue(t,r),x),K=()=>(b||(b=new yt(Array.from(E.values(),s=>s.compiled))),b);function F(s){let u=Oe(s),v=Mt(u,o),g=i?Lt(v,u.text):[],h=vt(K(),{normalized:u,tokens:v,spaced:g,allowList:m});if(h.length===0)return[];let k=rt(s);return h.map(R=>{let C=ot(R,v,k);return{...R,context:C,confidence:pe(R.confidence*et[C])}})}function W(s){let u=[...s].sort((g,h)=>h.priority-g.priority||h.end-h.start-(g.end-g.start)||g.start-h.start||(g.ruleId<h.ruleId?-1:g.ruleId>h.ruleId?1:0)),v=[];for(let g of u)v.every(h=>g.end<=h.start||g.start>=h.end)&&v.push(g);return v}function _(s,u,v){let g=[];for(let p of u){let w=p.rule,D=wt(N[w.category],w.severity,p.confidence);if(!D.keep)continue;let P=v&&D.action!=="allow"?v:D.action,G=w.elements.length>1||w.elements.length===0&&/\s/.test(s.slice(p.start,p.end).trim());P==="mask"&&G&&(w.category==="hate"||w.category==="harassment")&&(P="warn");let d=s.slice(p.start,p.end),y={start:p.start,end:p.end,text:d,category:w.category,ruleId:w.id,severity:w.severity,confidence:p.confidence,priority:w.priority,context:p.context,action:P,requiresReview:D.requiresReview,applied:!1};w.replacement!==void 0?y.suggestedReplacement=Ot(d,w.replacement):P==="suggest"&&(y.suggestedReplacement=Re(d,a,o)),w.label!==void 0&&(y.label=w.label),p.source!==void 0&&(y.source=p.source),g.push(y)}g.sort((p,w)=>p.start-w.start||p.end-w.end||w.priority-p.priority);let h=W(g.filter(p=>p.action==="mask")),k=W(g.filter(p=>p.action==="mask"||p.action==="suggest")),R=p=>({start:p.start,end:p.end,replacement:p.action==="suggest"&&p.suggestedReplacement!==void 0?p.suggestedReplacement:Re(p.text,a,o)});for(let p of h)p.applied=!0;for(let p of k)p.action==="suggest"&&(p.applied=!0);let C=U(s,h.map(R)),O=U(s,k.map(R)),I=Tt(g.map(p=>p.action));return{originalText:s,text:C.text,suggestedText:O.text,matches:g,allowed:I!=="block",action:I,requiresReview:g.some(p=>p.requiresReview),mapping:C.mapping}}function j(s){f.emit("moderated",s),s.matches.some(u=>u.action!=="allow")&&f.emit("violation",s),s.action==="block"&&f.emit("blocked",s),s.matches.some(u=>u.action==="warn")&&f.emit("warning",s)}async function A(s,u,v,g){let h=new AbortController,k=()=>h.abort(he(g));g?.addEventListener("abort",k,{once:!0});let R;try{return await new Promise((C,O)=>{h.signal.addEventListener("abort",()=>O(h.signal.reason),{once:!0}),R=setTimeout(()=>{let I=new Error(`Classifier "${s.name}" timed out after ${v}ms`);I.name="TimeoutError",h.abort(I)},v),Promise.resolve().then(()=>s.classify({...u,signal:h.signal})).then(C,O)})}finally{R!==void 0&&clearTimeout(R),g?.removeEventListener("abort",k)}}function H(s,u,v,g){for(let h of g.adjustments??[]){let k=u.find(R=>R.rule.id===h.ruleId&&R.start===h.start);k&&Number.isFinite(h.confidence)&&(k.confidence=pe(Le(h.confidence)))}for(let h of g.matches??[]){if(!Ae.has(h.category)||!(Number.isInteger(h.start)&&Number.isInteger(h.end)&&h.start>=0&&h.end<=s.length&&h.start<h.end))continue;let k={id:`${v}:${h.label??h.category}`,category:h.category,severity:h.severity??"medium",confidence:Le(h.confidence),priority:_e[h.category],replacement:h.replacement,label:h.label,boundary:"word",elements:[]};u.push({start:h.start,end:h.end,rule:k,confidence:pe(k.confidence),context:"direct",source:v})}}let M={moderate(s){let u=_(s,F(s));return j(u),u},async moderateAsync(s,u={}){let{signal:v}=u;if(v?.aborted)throw he(v);let g=F(s),h=[],k=[];if(l.length>0){let C=_(s,g),O=u.timeoutMs??c,I=await Promise.all(l.map(p=>A(p,{text:s,matches:C.matches,language:n},O,v).then(w=>({classifier:p,output:w,error:void 0}),w=>({classifier:p,output:void 0,error:w}))));if(v?.aborted)throw he(v);for(let{classifier:p,output:w,error:D}of I)w?(H(s,g,p.name,w),h.push(p.name)):(k.push(p.name),f.emit("error",{error:D,provider:p.name}))}let R={..._(s,g),providers:h,failedProviders:k};return j(R),R},mask(s){return _(s,F(s),"mask").text},validate(s){let u=M.moderate(s);return{valid:u.allowed,result:u,violations:u.matches.filter(v=>v.action!=="allow")}},addRule(s){S(s)},removeRule(s){let u=E.delete(s);return u&&(b=null),u},getRules(){return Array.from(E.values(),s=>({...s.source}))},setPolicy(s){let u={...x};for(let v of B){let g=s[v];g&&(u[v]={...u[v],...g})}N=fe(ue(t,r),u),x=u},setMode(s){ge(s),t=s,N=fe(ue(t,r),x)},on(s,u){return f.on(s,u)},createSession(s){return kt((u,v)=>M.moderateAsync(u,v),s)}};return M}var Q="input, textarea, [contenteditable]",Pt=new Set(["text","search"]),$t=new Set(["current-password","new-password","one-time-code","email","username","tel","cc-name","cc-given-name","cc-family-name","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc","cc-type"]),Ft=/pass(word|wd)?|pwd|secret|token|otp|one.?time|cvv|cvc|card.?num|cc.?num|iban|ssn|social.?sec|pin(code)?$/i,X=[".ProseMirror","[data-lexical-editor]",".ql-editor",".cm-content",".monaco-editor","[data-slate-editor]",".public-DraftEditor-content",".ck-editor__editable"].join(", ");function Z(e){return e.tagName==="INPUT"||e.tagName==="TEXTAREA"}function Pe(e){let t=e;if(typeof t.isContentEditable=="boolean")return t.isContentEditable;for(let n=e;n;n=n.parentElement){let r=n.getAttribute("contenteditable");if(r!==null)return r===""||r==="true"||r==="plaintext-only"}return!1}function jt(e){return Z(e)||!Pe(e)?!1:!e.parentElement||!Pe(e.parentElement)}function ve(e){return(e.getAttribute("autocomplete")??"").toLowerCase().split(/\s+/).some(r=>$t.has(r))?!0:[e.getAttribute("name"),e.id,e.getAttribute("inputmode")==="numeric"?"pin":null].some(r=>r!==null&&r!==""&&Ft.test(r))}function V(e,t){if(e.nodeType!==1||e.closest('[data-safetype="off"]'))return!1;for(let n of t)if(e.matches(n))return!1;if(e.tagName==="INPUT"){let n=e,r=(n.getAttribute("type")??"text").toLowerCase();return!Pt.has(r)||n.readOnly||n.disabled?!1:!ve(e)}if(e.tagName==="TEXTAREA"){let n=e;return n.readOnly||n.disabled?!1:!ve(e)}return!jt(e)||e.matches(X)||e.closest(X)?!1:!ve(e)}var Ee={warn:"This may come across as hurtful. Please consider rephrasing.",block:"This can't be sent because it contains language that breaks the community guidelines."},$e=`
3
3
  :where(.safetype-message){display:block;margin-top:4px;font-size:.875em;line-height:1.4}
4
4
  :where(.safetype-message[data-level="warn"]){color:#8a5300}
5
5
  :where(.safetype-message[data-level="block"]){color:#b42318}
6
- `;function ee(e){return e.action==="block"?"block":e.matches.some(t=>t.action==="warn")?"warn":null}function be(e,t,n){let r=t?.[e]??Ee[e];return typeof r=="function"?r(n):r}var Ht=0;function Bt(e,t,n){let r=(e.getAttribute(t)??"").split(/\s+/).filter(Boolean);r.includes(n)||e.setAttribute(t,[...r,n].join(" "))}function Ut(e,t,n){let r=(e.getAttribute(t)??"").split(/\s+/).filter(o=>o&&o!==n);r.length?e.setAttribute(t,r.join(" ")):e.removeAttribute(t)}var J=class{constructor(t,n){this.field=t;this.texts=n;this.node=null;this.id=`safetype-message-${++Ht}`;this.setInvalid=!1}update(t,n){if(!t)return this.clear();let r=be(t,this.texts,n);if(!this.node){let o=this.field.ownerDocument.createElement("div");o.id=this.id,o.className="safetype-message",o.setAttribute("role","status"),o.setAttribute("aria-live","polite"),this.field.insertAdjacentElement("afterend",o),Bt(this.field,"aria-describedby",this.id),this.node=o}this.node.dataset.level=t,this.node.textContent!==r&&(this.node.textContent=r),t==="block"?this.field.hasAttribute("aria-invalid")||(this.field.setAttribute("aria-invalid","true"),this.setInvalid=!0):this.clearInvalid()}clearInvalid(){this.setInvalid&&this.field.removeAttribute("aria-invalid"),this.setInvalid=!1}clear(){this.clearInvalid(),this.node&&(this.node.remove(),this.node=null,Ut(this.field,"aria-describedby",this.id))}};var Vt=new Set(["insertFromPaste","insertFromPasteAsQuotation","insertFromDrop","insertReplacementText","insertFromYank"]);function Kt(e){return e.matches.filter(t=>t.action!=="allow").map(t=>`${t.ruleId}:${t.start}:${t.end}:${t.action}`).join("|")}var te=class{constructor(t,n,r){this.element=t;this.surface=n;this.ctx=r;this.applying=!1;this.composing=!1;this.attached=!1;this.lastViolationKey="";this.lastWarningKey="";this.listeners=[];this.messages=r.showMessages?new J(t,r.messages):null,this.session=r.asyncModeration?r.engine.createSession({debounceMs:r.asyncDebounceMs}):null}attach(){this.attached||(this.attached=!0,this.listen("input",t=>this.onInput(t)),this.listen("compositionstart",()=>{this.composing=!0}),this.listen("compositionend",()=>{this.composing=!1,this.safeRun("typing")}),this.listen("focusout",()=>this.safeRun("final")))}detach(){if(this.attached){this.attached=!1;for(let[t,n]of this.listeners)this.element.removeEventListener(t,n);this.listeners.length=0,this.session?.cancel(),this.messages?.clear()}}listen(t,n){this.element.addEventListener(t,n),this.listeners.push([t,n])}onInput(t){if(this.applying||this.composing||t.isComposing)return;let n=t.inputType??"";n==="historyUndo"||n==="historyRedo"?this.safeRun("observe"):Vt.has(n)?this.safeRun("final"):this.safeRun("typing")}safeRun(t){try{this.run(t)}catch(n){this.ctx.reportError(n,this.element)}}run(t){let n=this.surface.getText(),r=this.ctx.engine.moderate(n);return this.applyResult(r,t),this.session&&t!=="observe"&&this.session.moderate(n).then(o=>{o&&this.attached&&this.surface.getText()===o.originalText&&this.applyResult(o,t==="final"?"final":"typing")},o=>this.ctx.reportError(o,this.element)),r}applyResult(t,n){let r=t.originalText,o=n==="observe"?[]:t.mapping.edits.filter(a=>r.slice(a.start,a.end)!==a.replacement);if(n==="typing"&&o.length){let a=this.surface.getSelection();if(a&&a.start===a.end){let i=a.start;o=o.filter(l=>!(l.start<i&&i<=l.end))}}if(o.length){this.applying=!0;try{this.surface.apply(r,o)}finally{this.applying=!1}}this.result=t,this.updateMessages(t),this.emit(t)}updateMessages(t){this.messages&&this.messages.update(ee(t),t)}emit(t){this.ctx.dispatch("moderated",t,this.element);let n=Kt(t);n!==this.lastViolationKey&&(this.lastViolationKey=n,n&&this.ctx.dispatch("violation",t,this.element));let r=t.matches.filter(o=>o.action==="warn").map(o=>`${o.ruleId}:${o.start}`).join("|");r!==this.lastWarningKey&&(this.lastWarningKey=r,r&&this.ctx.dispatch("warning",t,this.element))}};function Fe(e){return typeof e.execCommand=="function"}function je(e){return[...e].sort((t,n)=>n.start-t.start)}function Wt(e,t){let n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"value");n?.set?n.set.call(e,t):e.value=t}var ne=class{constructor(t){this.el=t}getText(){return this.el.value}getSelection(){let{el:t}=this;return t.ownerDocument.activeElement!==t||t.selectionStart===null||t.selectionEnd===null?null:{start:t.selectionStart,end:t.selectionEnd}}apply(t,n){let{el:r}=this,o=r.ownerDocument,{text:a,mapping:i}=V(t,n),l=this.getSelection(),c=r.selectionDirection??void 0,{scrollTop:f,scrollLeft:E}=r,m=!1;if(l&&Fe(o)){m=!0;try{for(let b of je(n))if(r.setSelectionRange(b.start,b.end),!o.execCommand("insertText",!1,b.replacement)){m=!1;break}}catch{m=!1}}if((!m||r.value!==a)&&(Wt(r,a),r.dispatchEvent(new Event("input",{bubbles:!0}))),l)try{r.setSelectionRange(i.toTransformed(l.start),i.toTransformed(l.end),c)}catch{}r.scrollTop=f,r.scrollLeft=E}},Gt=new Set(["ADDRESS","ARTICLE","ASIDE","BLOCKQUOTE","DD","DETAILS","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HR","LI","MAIN","NAV","OL","P","PRE","SECTION","SUMMARY","TABLE","TD","TH","TR","UL"]),zt=1,Yt=4,re=class{constructor(t){this.root=t}blockOf(t){for(let n=t.parentNode;n&&n!==this.root;n=n.parentNode)if(n.nodeType===1&&Gt.has(n.tagName))return n;return this.root}snapshot(){let n=this.root.ownerDocument.createTreeWalker(this.root,zt|Yt),r="",o=[],a=null;for(let i=n.nextNode();i;i=n.nextNode()){if(i.nodeType===1){i.tagName==="BR"&&(r+=`
6
+ `;function ee(e){return e.action==="block"?"block":e.matches.some(t=>t.action==="warn")?"warn":null}function be(e,t,n){let r=t?.[e]??Ee[e];return typeof r=="function"?r(n):r}var Ht=0;function Bt(e,t,n){let r=(e.getAttribute(t)??"").split(/\s+/).filter(Boolean);r.includes(n)||e.setAttribute(t,[...r,n].join(" "))}function Ut(e,t,n){let r=(e.getAttribute(t)??"").split(/\s+/).filter(o=>o&&o!==n);r.length?e.setAttribute(t,r.join(" ")):e.removeAttribute(t)}var J=class{constructor(t,n){this.field=t;this.texts=n;this.node=null;this.id=`safetype-message-${++Ht}`;this.setInvalid=!1}update(t,n){if(!t)return this.clear();let r=be(t,this.texts,n);if(!this.node){let o=this.field.ownerDocument.createElement("div");o.id=this.id,o.className="safetype-message",o.setAttribute("role","status"),o.setAttribute("aria-live","polite"),this.field.insertAdjacentElement("afterend",o),Bt(this.field,"aria-describedby",this.id),this.node=o}this.node.dataset.level=t,this.node.textContent!==r&&(this.node.textContent=r),t==="block"?this.field.hasAttribute("aria-invalid")||(this.field.setAttribute("aria-invalid","true"),this.setInvalid=!0):this.clearInvalid()}clearInvalid(){this.setInvalid&&this.field.removeAttribute("aria-invalid"),this.setInvalid=!1}clear(){this.clearInvalid(),this.node&&(this.node.remove(),this.node=null,Ut(this.field,"aria-describedby",this.id))}};var Vt=new Set(["insertFromPaste","insertFromPasteAsQuotation","insertFromDrop","insertReplacementText","insertFromYank"]);function Kt(e){return e.matches.filter(t=>t.action!=="allow").map(t=>`${t.ruleId}:${t.start}:${t.end}:${t.action}`).join("|")}var te=class{constructor(t,n,r){this.element=t;this.surface=n;this.ctx=r;this.applying=!1;this.composing=!1;this.attached=!1;this.lastViolationKey="";this.lastWarningKey="";this.listeners=[];this.messages=r.showMessages?new J(t,r.messages):null,this.session=r.asyncModeration?r.engine.createSession({debounceMs:r.asyncDebounceMs}):null}attach(){this.attached||(this.attached=!0,this.listen("input",t=>this.onInput(t)),this.listen("compositionstart",()=>{this.composing=!0}),this.listen("compositionend",()=>{this.composing=!1,this.safeRun("typing")}),this.listen("focusout",()=>this.safeRun("final")))}detach(){if(this.attached){this.attached=!1;for(let[t,n]of this.listeners)this.element.removeEventListener(t,n);this.listeners.length=0,this.session?.cancel(),this.messages?.clear()}}listen(t,n){this.element.addEventListener(t,n),this.listeners.push([t,n])}onInput(t){if(this.applying||this.composing||t.isComposing)return;let n=t.inputType??"";n==="historyUndo"||n==="historyRedo"?this.safeRun("observe"):Vt.has(n)?this.safeRun("final"):this.safeRun("typing")}safeRun(t){try{this.run(t)}catch(n){this.ctx.reportError(n,this.element)}}run(t){let n=this.surface.getText(),r=this.ctx.engine.moderate(n);return this.applyResult(r,t),this.session&&t!=="observe"&&this.session.moderate(n).then(o=>{o&&this.attached&&this.surface.getText()===o.originalText&&this.applyResult(o,t==="final"?"final":"typing")},o=>this.ctx.reportError(o,this.element)),r}applyResult(t,n){let r=t.originalText,o=n==="observe"?[]:t.mapping.edits.filter(a=>r.slice(a.start,a.end)!==a.replacement);if(n==="typing"&&o.length){let a=this.surface.getSelection();if(a&&a.start===a.end){let i=a.start;o=o.filter(l=>!(l.start<i&&i<=l.end))}}if(o.length){this.applying=!0;try{this.surface.apply(r,o)}finally{this.applying=!1}}this.result=t,this.updateMessages(t),this.emit(t)}updateMessages(t){this.messages&&this.messages.update(ee(t),t)}emit(t){this.ctx.dispatch("moderated",t,this.element);let n=Kt(t);n!==this.lastViolationKey&&(this.lastViolationKey=n,n&&this.ctx.dispatch("violation",t,this.element));let r=t.matches.filter(o=>o.action==="warn").map(o=>`${o.ruleId}:${o.start}`).join("|");r!==this.lastWarningKey&&(this.lastWarningKey=r,r&&this.ctx.dispatch("warning",t,this.element))}};function Fe(e){return typeof e.execCommand=="function"}function je(e){return[...e].sort((t,n)=>n.start-t.start)}function Wt(e,t){let n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"value");n?.set?n.set.call(e,t):e.value=t}var ne=class{constructor(t){this.el=t}getText(){return this.el.value}getSelection(){let{el:t}=this;return t.ownerDocument.activeElement!==t||t.selectionStart===null||t.selectionEnd===null?null:{start:t.selectionStart,end:t.selectionEnd}}apply(t,n){let{el:r}=this,o=r.ownerDocument,{text:a,mapping:i}=U(t,n),l=this.getSelection(),c=r.selectionDirection??void 0,{scrollTop:f,scrollLeft:E}=r,m=!1;if(l&&Fe(o)){m=!0;try{for(let b of je(n))if(r.setSelectionRange(b.start,b.end),!o.execCommand("insertText",!1,b.replacement)){m=!1;break}}catch{m=!1}}if((!m||r.value!==a)&&(Wt(r,a),r.dispatchEvent(new Event("input",{bubbles:!0}))),l)try{r.setSelectionRange(i.toTransformed(l.start),i.toTransformed(l.end),c)}catch{}r.scrollTop=f,r.scrollLeft=E}},Gt=new Set(["ADDRESS","ARTICLE","ASIDE","BLOCKQUOTE","DD","DETAILS","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HR","LI","MAIN","NAV","OL","P","PRE","SECTION","SUMMARY","TABLE","TD","TH","TR","UL"]),zt=1,Yt=4,re=class{constructor(t){this.root=t}blockOf(t){for(let n=t.parentNode;n&&n!==this.root;n=n.parentNode)if(n.nodeType===1&&Gt.has(n.tagName))return n;return this.root}snapshot(){let n=this.root.ownerDocument.createTreeWalker(this.root,zt|Yt),r="",o=[],a=null;for(let i=n.nextNode();i;i=n.nextNode()){if(i.nodeType===1){i.tagName==="BR"&&(r+=`
7
7
  `);continue}let l=i,c=this.blockOf(l);a&&c!==a&&!r.endsWith(`
8
8
  `)&&(r+=`
9
- `),a=c,o.push({node:l,start:r.length,end:r.length+l.data.length}),r+=l.data}return{text:r,segments:o}}pointFor(t,n){for(let o of n){if(t<o.start)return{node:o.node,offset:0};if(t<=o.end)return{node:o.node,offset:t-o.start}}let r=n[n.length-1];return r?{node:r.node,offset:r.node.data.length}:{node:this.root,offset:0}}offsetFor(t,n,r){let o=this.root.ownerDocument.createRange();o.setStart(this.root,0),o.setEnd(t,n);let a=0;for(let i of r){if(i.node===t)return i.start+n;if(o.comparePoint(i.node,i.node.data.length)===0)a=i.end;else break}return a}getText(){return this.snapshot().text}getSelection(){let t=this.root.ownerDocument.getSelection();if(!t||t.rangeCount===0)return null;let n=t.getRangeAt(0);if(!this.root.contains(n.startContainer)||!this.root.contains(n.endContainer))return null;let{segments:r}=this.snapshot();return{start:this.offsetFor(n.startContainer,n.startOffset,r),end:this.offsetFor(n.endContainer,n.endOffset,r)}}replaceDirect(t,n){let r=t.replacement.length===t.end-t.start,o=!0;for(let a of n){let i=Math.max(t.start,a.start),l=Math.min(t.end,a.end);if(!(i>=l)){if(r){let c=t.replacement.slice(i-t.start,l-t.start);a.node.data.slice(i-a.start,l-a.start)!==c&&a.node.replaceData(i-a.start,l-i,c)}else o?a.node.replaceData(i-a.start,l-i,t.replacement):a.node.deleteData(i-a.start,l-i);o=!1}}}apply(t,n){let r=this.root.ownerDocument,{mapping:o}=V(t,n),a=this.getSelection();for(let i of je(n)){let{segments:l}=this.snapshot(),c=this.pointFor(i.start,l),f=this.pointFor(i.end,l);if(a&&c.node===f.node&&c.node.nodeType===3&&Fe(r)){let E=r.createRange();E.setStart(c.node,c.offset),E.setEnd(f.node,f.offset);let m=r.getSelection();m?.removeAllRanges(),m?.addRange(E);try{if(r.execCommand("insertText",!1,i.replacement))continue}catch{}}this.replaceDirect(i,l)}if(a){let{segments:i}=this.snapshot(),l=this.pointFor(o.toTransformed(a.start),i),c=this.pointFor(o.toTransformed(a.end),i),f=r.createRange();f.setStart(l.node,l.offset),f.setEnd(c.node,c.offset);let E=r.getSelection();E?.removeAllRanges(),E?.addRange(f)}}};var qt=["type","contenteditable","data-safetype","readonly","disabled","autocomplete","name"],oe=new WeakMap;function Xt(e){let t=oe.get(e);if(t){t.count++;return}let n=e.nodeType===9?e:e.ownerDocument,r=n.createElement("style");r.setAttribute("data-safetype",""),r.textContent=$e,(e.nodeType===9?n.head??n.documentElement:e).appendChild(r),oe.set(e,{node:r,count:1})}function Qt(e){let t=oe.get(e);t&&--t.count===0&&(t.node.remove(),oe.delete(e))}var Zt={moderated:"onModerated",violation:"onViolation",warning:"onWarning",blocked:"onBlocked"};function He(e={}){let{selector:t=Q,root:n,engine:r,observeDynamicElements:o=!0,excludeSelectors:a=[],showMessages:i=!0,messages:l={},injectStyles:c=!0,blockSubmit:f=!0,asyncModeration:E,asyncDebounceMs:m=300,onModerated:b,onViolation:S,onWarning:x,onBlocked:N,onError:W,...F}=e,G={onModerated:b,onViolation:S,onWarning:x,onBlocked:N},_=r??q(F),j=(d,v)=>{W?W(d,v):console.error("[safetype]",d)};r||_.on("error",({error:d})=>j(d));let A=new Map,H=null,M=null,s=!1,u=!1,g=(d,v,T)=>{try{G[Zt[d]]?.(v,T)}catch(ae){j(ae,T)}let L=T.ownerDocument.defaultView;L&&T.dispatchEvent(new L.CustomEvent(`safetype:${d}`,{bubbles:!0,composed:!0,detail:{result:v,element:T}}))},y={engine:_,showMessages:i,messages:l,asyncModeration:E??(F.classifiers?.length??0)>0,asyncDebounceMs:m,dispatch:g,reportError:j};function h(d){let v=d;if(u)return!1;if(A.has(v))return!0;if(!K(v,a))return!1;let T=Z(v)?new ne(v):new re(v),L=new te(v,T,y);return L.attach(),A.set(v,L),!0}function k(d){let v=A.get(d);v&&(v.detach(),A.delete(d))}let R=d=>d.matches(t);function C(d){R(d)&&h(d),d.querySelectorAll(t).forEach(h)}function O(d){let v=R(d)&&K(d,a),T=A.has(d);v&&!T?h(d):!v&&T&&k(d)}function I(){for(let d of[...A.keys()])d.isConnected||k(d)}let p=d=>{let v=!1;for(let T of d)if(T.type==="childList")T.addedNodes.forEach(L=>{L.nodeType===1&&C(L)}),T.removedNodes.length&&(v=!0);else if(T.type==="attributes"&&T.target.nodeType===1){let L=T.target;O(L),L.querySelectorAll(t).forEach(O)}v&&I()},w=d=>{let v=d.target;if(!v||v.nodeType!==1)return;let T=null;for(let[L,ae]of A){if((Z(L)?L.form:null)!==v&&!v.contains(L))continue;let we=ae.run("final");we.action==="block"&&(T??(T=L),g("blocked",we,L))}T&&f&&(d.preventDefault(),d.stopImmediatePropagation(),T.focus())},D=d=>d.nodeType===1?d.ownerDocument:d,P=d=>d.nodeType===9||d.nodeType===11?d:d.ownerDocument??document,B={engine:_,get running(){return s},get elements(){return[...A.keys()]},start(){if(u)throw new Error("This SafeType instance was destroyed. Create a new one with createSafeType().");if(s)return;let d=n??(typeof document>"u"?null:document);if(!d)throw new Error("@safetype/dom needs a DOM. Pass `root` or call start() in a browser.");if(M=d,s=!0,c&&i&&Xt(P(M)),M.nodeType===1?C(M):M.querySelectorAll(t).forEach(h),D(M).addEventListener("submit",w,!0),o){let T=(M.nodeType===9?M:M.ownerDocument)?.defaultView?.MutationObserver??globalThis.MutationObserver;H=new T(p),H.observe(M,{childList:!0,subtree:!0,attributes:!0,attributeFilter:qt})}},stop(){if(!(!s||!M)){s=!1,H?.disconnect(),H=null,D(M).removeEventListener("submit",w,!0);for(let d of[...A.keys()])k(d);c&&i&&Qt(P(M)),M=null}},destroy(){B.stop(),u=!0},attach:h,detach:k,getResult(d){return A.get(d)?.result},validate(){I();let d=[];for(let[v,T]of A)d.push({element:v,result:T.run("final")});return{valid:d.every(v=>v.result.allowed),results:d}}};return B}return Ge(Jt);})();
9
+ `),a=c,o.push({node:l,start:r.length,end:r.length+l.data.length}),r+=l.data}return{text:r,segments:o}}pointFor(t,n){for(let o of n){if(t<o.start)return{node:o.node,offset:0};if(t<=o.end)return{node:o.node,offset:t-o.start}}let r=n[n.length-1];return r?{node:r.node,offset:r.node.data.length}:{node:this.root,offset:0}}offsetFor(t,n,r){let o=this.root.ownerDocument.createRange();o.setStart(this.root,0),o.setEnd(t,n);let a=0;for(let i of r){if(i.node===t)return i.start+n;if(o.comparePoint(i.node,i.node.data.length)===0)a=i.end;else break}return a}getText(){return this.snapshot().text}getSelection(){let t=this.root.ownerDocument.getSelection();if(!t||t.rangeCount===0)return null;let n=t.getRangeAt(0);if(!this.root.contains(n.startContainer)||!this.root.contains(n.endContainer))return null;let{segments:r}=this.snapshot();return{start:this.offsetFor(n.startContainer,n.startOffset,r),end:this.offsetFor(n.endContainer,n.endOffset,r)}}replaceDirect(t,n){let r=t.replacement.length===t.end-t.start,o=!0;for(let a of n){let i=Math.max(t.start,a.start),l=Math.min(t.end,a.end);if(!(i>=l)){if(r){let c=t.replacement.slice(i-t.start,l-t.start);a.node.data.slice(i-a.start,l-a.start)!==c&&a.node.replaceData(i-a.start,l-i,c)}else o?a.node.replaceData(i-a.start,l-i,t.replacement):a.node.deleteData(i-a.start,l-i);o=!1}}}apply(t,n){let r=this.root.ownerDocument,{mapping:o}=U(t,n),a=this.getSelection();for(let i of je(n)){let{segments:l}=this.snapshot(),c=this.pointFor(i.start,l),f=this.pointFor(i.end,l);if(a&&c.node===f.node&&c.node.nodeType===3&&Fe(r)){let E=r.createRange();E.setStart(c.node,c.offset),E.setEnd(f.node,f.offset);let m=r.getSelection();m?.removeAllRanges(),m?.addRange(E);try{if(r.execCommand("insertText",!1,i.replacement))continue}catch{}}this.replaceDirect(i,l)}if(a){let{segments:i}=this.snapshot(),l=this.pointFor(o.toTransformed(a.start),i),c=this.pointFor(o.toTransformed(a.end),i),f=r.createRange();f.setStart(l.node,l.offset),f.setEnd(c.node,c.offset);let E=r.getSelection();E?.removeAllRanges(),E?.addRange(f)}}};var qt=["type","contenteditable","data-safetype","readonly","disabled","autocomplete","name"],oe=new WeakMap;function Xt(e){let t=oe.get(e);if(t){t.count++;return}let n=e.nodeType===9?e:e.ownerDocument,r=n.createElement("style");r.setAttribute("data-safetype",""),r.textContent=$e,(e.nodeType===9?n.head??n.documentElement:e).appendChild(r),oe.set(e,{node:r,count:1})}function Qt(e){let t=oe.get(e);t&&--t.count===0&&(t.node.remove(),oe.delete(e))}var Zt={moderated:"onModerated",violation:"onViolation",warning:"onWarning",blocked:"onBlocked"};function He(e={}){let{selector:t=Q,root:n,engine:r,observeDynamicElements:o=!0,excludeSelectors:a=[],showMessages:i=!0,messages:l={},injectStyles:c=!0,blockSubmit:f=!0,asyncModeration:E,asyncDebounceMs:m=300,onModerated:b,onViolation:S,onWarning:x,onBlocked:N,onError:K,...F}=e,W={onModerated:b,onViolation:S,onWarning:x,onBlocked:N},_=r??q(F),j=(d,y)=>{K?K(d,y):console.error("[safetype]",d)};r||_.on("error",({error:d})=>j(d));let A=new Map,H=null,M=null,s=!1,u=!1,v=(d,y,T)=>{try{W[Zt[d]]?.(y,T)}catch(ae){j(ae,T)}let L=T.ownerDocument.defaultView;L&&T.dispatchEvent(new L.CustomEvent(`safetype:${d}`,{bubbles:!0,composed:!0,detail:{result:y,element:T}}))},g={engine:_,showMessages:i,messages:l,asyncModeration:E??(F.classifiers?.length??0)>0,asyncDebounceMs:m,dispatch:v,reportError:j};function h(d){let y=d;if(u)return!1;if(A.has(y))return!0;if(!V(y,a))return!1;let T=Z(y)?new ne(y):new re(y),L=new te(y,T,g);return L.attach(),A.set(y,L),!0}function k(d){let y=A.get(d);y&&(y.detach(),A.delete(d))}let R=d=>d.matches(t);function C(d){R(d)&&h(d),d.querySelectorAll(t).forEach(h)}function O(d){let y=R(d)&&V(d,a),T=A.has(d);y&&!T?h(d):!y&&T&&k(d)}function I(){for(let d of[...A.keys()])d.isConnected||k(d)}let p=d=>{let y=!1;for(let T of d)if(T.type==="childList")T.addedNodes.forEach(L=>{L.nodeType===1&&C(L)}),T.removedNodes.length&&(y=!0);else if(T.type==="attributes"&&T.target.nodeType===1){let L=T.target;O(L),L.querySelectorAll(t).forEach(O)}y&&I()},w=d=>{let y=d.target;if(!y||y.nodeType!==1)return;let T=null;for(let[L,ae]of A){if((Z(L)?L.form:null)!==y&&!y.contains(L))continue;let we=ae.run("final");we.action==="block"&&(T??(T=L),v("blocked",we,L))}T&&f&&(d.preventDefault(),d.stopImmediatePropagation(),T.focus())},D=d=>d.nodeType===1?d.ownerDocument:d,P=d=>d.nodeType===9||d.nodeType===11?d:d.ownerDocument??document,G={engine:_,get running(){return s},get elements(){return[...A.keys()]},start(){if(u)throw new Error("This SafeType instance was destroyed. Create a new one with createSafeType().");if(s)return;let d=n??(typeof document>"u"?null:document);if(!d)throw new Error("@safetype/dom needs a DOM. Pass `root` or call start() in a browser.");if(M=d,s=!0,c&&i&&Xt(P(M)),M.nodeType===1?C(M):M.querySelectorAll(t).forEach(h),D(M).addEventListener("submit",w,!0),o){let T=(M.nodeType===9?M:M.ownerDocument)?.defaultView?.MutationObserver??globalThis.MutationObserver;H=new T(p),H.observe(M,{childList:!0,subtree:!0,attributes:!0,attributeFilter:qt})}},stop(){if(!(!s||!M)){s=!1,H?.disconnect(),H=null,D(M).removeEventListener("submit",w,!0);for(let d of[...A.keys()])k(d);c&&i&&Qt(P(M)),M=null}},destroy(){G.stop(),u=!0},attach:h,detach:k,getResult(d){return A.get(d)?.result},validate(){I();let d=[];for(let[y,T]of A)d.push({element:y,result:T.run("final")});return{valid:d.every(y=>y.result.allowed),results:d}}};return G}return Ge(Jt);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@safetype/dom",
3
- "version": "1.6.0",
3
+ "version": "1.8.0",
4
4
  "description": "Attach SafeType.js moderation to inputs, textareas and contenteditable elements",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  "contenteditable"
33
33
  ],
34
34
  "dependencies": {
35
- "@safetype/core": "1.6.0"
35
+ "@safetype/core": "1.8.0"
36
36
  },
37
37
  "repository": {
38
38
  "type": "git",