@safetype/dom 1.8.0 → 1.10.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:()=>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=`
1
+ "use strict";var SafeType=(()=>{var oe=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var et=Object.prototype.hasOwnProperty;var tt=(e,t)=>{for(var r in t)oe(e,r,{get:t[r],enumerable:!0})},rt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Je(t))!et.call(e,a)&&a!==r&&oe(e,a,{get:()=>t[a],enumerable:!(n=Ze(t,a))||n.enumerable});return e};var nt=e=>rt(oe({},"__esModule",{value:!0}),e);var Ir={};tt(Ir,{DEFAULT_MESSAGES:()=>Se,DEFAULT_SELECTOR:()=>Q,MANAGED_EDITOR_SELECTOR:()=>X,createModerationEngine:()=>Y,createSafeType:()=>Qe,getMessageLevel:()=>ee,isEligible:()=>H,resolveMessage:()=>Ce});var at=[{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"}],it=[...["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"}],ot="(idiot*|moron*|stupid|dumb|loser*|worthless|pathetic|ugly|imbecile*|retard*|trash|garbage|scum|disgusting|failure|freak|clown)",st=[{id:"en.harassment.insult",pattern:`(you|u|ur|youre|yall) (are|re|r)? (such)? (a|an)? (so|fucking|complete|total|absolute)? ${ot}`,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:[...at,...it,...st],allowList:["shiitake","shitake"]};var ut=[{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"}],ct="(teri|tere|tera|tumhari|tumhara|tumhare|uski|uske|iski|apni)",Re="(maa|ma|mai|behen|bahen|behan|bahan|bhen|beti)",lt=[{id:"hi-latn.harassment.family-insult",pattern:`${ct} ${Re} (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:`${Re} (ko|ki)? (chod*|chud*|chood*)`,category:"harassment",severity:"high",confidence:.85,label:"insult"}],ue={language:"hi-Latn",boundary:"word",rules:[...ut,...lt],allowList:[]};var dt=[{id:"de.profanity.scheisse",pattern:"(scheiss*|scheis)",category:"profanity",severity:"medium",replacement:"Mist"},{id:"de.profanity.arsch",pattern:"arsch",category:"profanity",severity:"medium"},{id:"de.profanity.arschloch",pattern:"(arschloch*|arschloech*|arschgeige*|arschgesicht*|arschkriecher*|arschficker*)",category:"profanity",severity:"high"},{id:"de.profanity.fotze",pattern:"fotze*",category:"profanity",severity:"critical"},{id:"de.profanity.ficken",pattern:"(fick|ficke|fickt|ficken|fickst|fickte|ficktest|gefickt|ficker|fickers|fickdich)",category:"profanity",severity:"high"},{id:"de.profanity.wichser",pattern:"(wichser*|wichse|wichsen|wichst|wixer*|wixxer*)",category:"profanity",severity:"high"},{id:"de.profanity.hurensohn",pattern:"(hurensohn*|hurensoehne*|hurenkind*|hurenbock*)",category:"profanity",severity:"high"},{id:"de.profanity.hure",pattern:"(hure|huren)",category:"profanity",severity:"high"},{id:"de.profanity.schlampe",pattern:"(schlampe|schlampen)",category:"profanity",severity:"high"},{id:"de.profanity.miststueck",pattern:"(miststuck*|miststueck*|mistkerl*|mistsau)",category:"profanity",severity:"high"},{id:"de.profanity.verpiss",pattern:"verpiss*",category:"profanity",severity:"high"},{id:"de.profanity.leck-mich",pattern:"leck mich",category:"profanity",severity:"medium"},{id:"de.profanity.kacke",pattern:"(kacke|kack|kacken|kackbratze*|kackscheiss*)",category:"profanity",severity:"medium"},{id:"de.profanity.pisser",pattern:"(pisser|pissnelke*)",category:"profanity",severity:"medium"},{id:"de.profanity.dreck",pattern:"(drecksau*|dreckschwein*|drecksack*|dreckstuck*|dreckstueck*|drecksfotze*)",category:"profanity",severity:"high"},{id:"de.profanity.schwanzlutscher",pattern:"(schwanzlutscher*|pimmel|pimmelkopf*)",category:"profanity",severity:"high"}],ht=[...["(kanake*|kanacke*)","(neger|negers|negerin*)","schwuchtel*","(kummelturke*|kuemmeltuerke*)","judensau*"].map(e=>({id:`de.hate.slur.${e.replace(/[()*]/g,"").split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"de.hate.group-violence",pattern:"(juden|muslime|moslems|christen|auslander|auslaender|fluchtlinge|fluechtlinge|migranten|asylanten|schwarze|turken|tuerken|araber|schwule|lesben|frauen|roma|sinti|kanaken) (sollten|sollen|mussen|muessen|gehoren|gehoeren|verdienen) (alle)? (es)? (zu)? (sterben|brennen|vergast|vernichtet|ausgerottet|erschossen|aufgehangt|aufgehaengt|abgeschlachtet|verbrannt|tot)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],Me="(idiot*|vollidiot*|depp*|trottel*|arschloch*|wichser*|dumm|dummkopf*|blod|bloed|behindert*|spast*|mongo|missgeburt*|versager*|loser*|penner*|hurensohn*|witzfigur*|lappen|opfer|abschaum|mull|muell|nichtsnutz*|hackfresse*|schwachkopf*|schwachmat*|pisser|bastard*|hund|schwein|sau|schlampe|fotze|hure|spasti)",De="(so|echt|total|voll|wirklich|einfach)? (ein|eine|einer|n)? (verdammter|verdammte|verdammtes|dummer|dumme|dummes|kleiner|kleine|kleines|elender|elendes|scheiss)?",ft=[{id:"de.harassment.insult",pattern:`du (bist)? ${De} ${Me}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"de.harassment.insult-formal",pattern:`(sie|ihr) (sind|seid) ${De} ${Me}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"de.harassment.self-harm",pattern:"(bring|bringt|bringen) (dich|euch|sich) (doch|endlich)? um",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"de.harassment.self-harm-hang",pattern:"(erhang|erhaeng|toete|tote) (dich|euch)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"de.harassment.self-harm-hang-up",pattern:"(hang|haeng) (dich|euch) auf",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"de.harassment.go-die",pattern:"(geh|geht) (sterben|verrecken|krepieren)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"de.harassment.threat",pattern:"(ich|wir) (werde|werden|will|wollen)? (dich|euch) (umbringen|toten|toeten|abstechen|erschiessen|abknallen|kaltmachen|abmurksen)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"de.harassment.threat-bring-um",pattern:"(ich|wir) (bringe|bring|bringen) (dich|euch) um",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"de.harassment.nobody-likes",pattern:"(niemand|keiner) (mag|liebt|will|braucht) (dich|euch)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],ce={language:"de",boundary:"word",rules:[...dt,...ht,...ft],allowList:[]};var pt=[{id:"es.profanity.puta",pattern:"(puta|putas|putita*|putada*|putazo*|putear*|puteo|putero*)",category:"profanity",severity:"high"},{id:"es.profanity.puto",pattern:"(puto|putos)",category:"profanity",severity:"high"},{id:"es.profanity.abbreviations",pattern:"(hdp|hdlgp|ctm|ptm)",category:"profanity",severity:"high"},{id:"es.profanity.mierda",pattern:"mierda*",category:"profanity",severity:"medium",replacement:"rayos"},{id:"es.profanity.joder",pattern:"(joder|jodido|jodida|jodidos|jodidas|jodete|jodanse|jodan|jodiendo|jodio)",category:"profanity",severity:"medium",replacement:"caramba"},{id:"es.profanity.cabron",pattern:"(cabron|cabrona|cabrones|cabronas|cabronazo*)",category:"profanity",severity:"high"},{id:"es.profanity.pendejo",pattern:"(pendejo*|pendeja*)",category:"profanity",severity:"high"},{id:"es.profanity.gilipollas",pattern:"(gilipolla*|gilipollez)",category:"profanity",severity:"high"},{id:"es.profanity.chingar",pattern:"(chingar*|chingad*|chingue*|chinguen|chingon*|chinga)",category:"profanity",severity:"high"},{id:"es.profanity.verga",pattern:"(verga|vergas|vergazo*)",category:"profanity",severity:"high"},{id:"es.profanity.culo",pattern:"(culo|culos|culero*|culera*)",category:"profanity",severity:"medium"},{id:"es.profanity.cagar",pattern:"(cagar|cago|cagada*|cagon|cagona|cagando)",category:"profanity",severity:"medium"},{id:"es.profanity.malparido",pattern:"(malparid*|hijueputa*|hijoputa*|hijaputa*)",category:"profanity",severity:"high"},{id:"es.profanity.concha",pattern:"(conchetumare|conchatumadre|conchesumadre|conchasumadre)",category:"profanity",severity:"high"},{id:"es.profanity.carajo",pattern:"carajo",category:"profanity",severity:"low",replacement:"caramba"}],mt=[...["(maricon|maricones|mariconazo|marica|maricas)","(sudaca|sudacas)","(negrata|negratas)","(machorra|machorras)"].map(e=>({id:`es.hate.slur.${e.slice(1).split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"es.hate.group-violence",pattern:"(judios|musulmanes|cristianos|negros|blancos|gitanos|inmigrantes|migrantes|refugiados|gays|maricones|lesbianas|trans|mujeres|moros|sudacas|indios|indigenas|arabes|africanos) (deberian|deben|merecen|tienen) (que)? (ser)? (morir|arder|exterminados|exterminadas|quemados|quemadas|eliminados|eliminadas|asesinados|asesinadas|colgados|gaseados|ahorcados)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],yt="(idiota*|imbecil*|estupido*|estupida*|tonto|tonta|inutil|basura|escoria|retrasado*|retrasada*|mongolo*|mongolic*|subnormal*|patetico*|patetica*|asqueroso*|asquerosa*|payaso*|perdedor*|fracasado*|fracasada*|pendejo*|pendeja*|cabron*|gilipollas|perra|zorra|puta)",gt=[{id:"es.harassment.insult",pattern:`(eres|sos) (un|una)? (puto|puta|pinche|maldito|maldita|completo|completa|gran|tremendo|tremenda)? ${yt}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"es.harassment.family",pattern:"(concha|chinga|puta) (de)? (tu|su) (madre|hermana|vieja)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"es.harassment.self-harm",pattern:"(matate|suicidate|ahorcate)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"es.harassment.go-die",pattern:"(vete|andate|anda|ve) a (morir|morirte)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"es.harassment.wish-death",pattern:"ojala (que)? te (mueras|murieras|muera)",category:"harassment",severity:"high",confidence:.8,label:"hostility"},{id:"es.harassment.threat",pattern:"te (voy|vamos) a (matar|apunalar|disparar|reventar|partir)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"es.harassment.threat-short",pattern:"te (mato|matare)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"es.harassment.nobody-likes",pattern:"nadie te (quiere|soporta|aguanta|ama)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],le={language:"es",boundary:"word",rules:[...pt,...mt,...gt],allowList:[]};var vt=[{id:"fr.profanity.merde",pattern:"(merde*|merdique*|emmerd*)",category:"profanity",severity:"medium",replacement:"zut"},{id:"fr.profanity.putain",pattern:"(putain*|ptn)",category:"profanity",severity:"medium",replacement:"zut"},{id:"fr.profanity.pute",pattern:"(pute|putes)",category:"profanity",severity:"high"},{id:"fr.profanity.connard",pattern:"(connard*|connasse*|conasse*|conard*)",category:"profanity",severity:"high"},{id:"fr.profanity.salope",pattern:"(salope*|salaud*|salopard*)",category:"profanity",severity:"high"},{id:"fr.profanity.encule",pattern:"encul*",category:"profanity",severity:"high"},{id:"fr.profanity.niquer",pattern:"(nique|niquer|niquez|niques|niquee)",category:"profanity",severity:"high"},{id:"fr.profanity.couille",pattern:"(couille*|couillon*)",category:"profanity",severity:"medium"},{id:"fr.profanity.enfoire",pattern:"enfoire*",category:"profanity",severity:"high"},{id:"fr.profanity.batard",pattern:"batard*",category:"profanity",severity:"high"},{id:"fr.profanity.branleur",pattern:"(branleur*|branleuse*|branlette*)",category:"profanity",severity:"medium"},{id:"fr.profanity.pouffiasse",pattern:"(pouffiasse*|poufiasse*|petasse*)",category:"profanity",severity:"high"},{id:"fr.profanity.trou-du-cul",pattern:"trou (du|de) cul",category:"profanity",severity:"high"},{id:"fr.profanity.bordel",pattern:"bordel",category:"profanity",severity:"low"},{id:"fr.profanity.chier",pattern:"(chier|chiant|chiante|chiants|chiantes|chiasse)",category:"profanity",severity:"low"}],Et=[...["(bougnoul*|bougnoule*)","(youpin*|youtre*)","(negre|negres|negresse*)","bamboula*","(tafiole*|tarlouze*|tantouze*)"].map(e=>({id:`fr.hate.slur.${e.replace(/[()*]/g,"").split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"fr.hate.group-violence",pattern:"(juifs|musulmans|chretiens|noirs|blancs|arabes|immigres|migrants|refugies|gays|homos|lesbiennes|trans|femmes|africains|asiatiques|roms|gitans) (doivent|devraient|meritent) (d|de)? (etre)? (mourir|crever|bruler|extermines|gazes|brules|tues|pendus|eradiques|massacres)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],bt="(idiot*|imbecile*|debile*|abruti*|cretin*|con|conne|connard*|connasse*|nul|nulle|minable*|pathetique*|attarde*|mongol|mongole|batard*|salope|ordure*|merde|dechet*|rate|ratee|loser*|bouffon*|clown*|stupide*|chienne|grosse|moche|pute)",wt=[{id:"fr.harassment.insult",pattern:`(tu|t|vous) (es|etes) (vraiment|trop|qu)? (un|une)? (sale|gros|grosse|pauvre|petit|petite|vrai|vraie)? ${bt}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"fr.harassment.sale",pattern:"(espece|sale) (de)? (con|conne|connard*|connasse*|pute|chienne|batard*|merde|ordure*|race|arabe|noir|juif)",category:"harassment",severity:"high",confidence:.8,label:"insult"},{id:"fr.harassment.family",pattern:"(nique|niquer|baise) (ta|sa|vos|votre) (mere|race|soeur|famille|daronne)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"fr.harassment.go-away",pattern:"(va|allez) (te|vous) faire (foutre|enculer|niquer|voir)",category:"harassment",severity:"high",confidence:.8,label:"hostility"},{id:"fr.harassment.shut-up",pattern:"ta gueule",category:"harassment",severity:"low",confidence:.7,label:"hostility"},{id:"fr.harassment.self-harm",pattern:"(va|vas|allez) (te|vous) (pendre|suicider|tuer)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"fr.harassment.self-harm-imperative",pattern:"(suicide|tue|pends) (toi)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"fr.harassment.go-die",pattern:"(va|vas|allez) (crever|mourir)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"fr.harassment.threat",pattern:"(je|j) (vais|v)? (te|vous|t) (tuer|buter|planter|defoncer|tabasser|egorger|tue|bute|plante|defonce|egorge)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"fr.harassment.nobody-likes",pattern:"personne ne (t|te|vous) (aime|supporte|veut|apprecie)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],de={language:"fr",boundary:"word",rules:[...vt,...Et,...wt],allowList:[]};var kt=[{id:"hi.profanity.madarchod",pattern:"(\u092E\u093E\u0926\u0930\u091A\u094B\u0926*|\u092E\u093E\u0926\u0930\u091A\u094C\u0926*|\u092E\u093E\u0926\u0930\u091A\u094B\u0924|\u092E\u093E\u0926\u0930\u091C\u093E\u0924|\u092E\u093E\u0926\u0930\u091C\u093C\u093E\u0924)",category:"profanity",severity:"high"},{id:"hi.profanity.behenchod",pattern:"(\u092C\u0939\u0928\u091A\u094B\u0926*|\u092C\u0939\u0947\u0928\u091A\u094B\u0926*|\u092C\u0939\u093F\u0928\u091A\u094B\u0926*|\u092D\u0947\u0928\u091A\u094B\u0926*|\u092D\u0948\u0928\u091A\u094B\u0926*|\u092C\u0939\u0928\u091A\u094C\u0926*|\u092D\u0948\u0902\u091A\u094B\u0926*)",category:"profanity",severity:"high"},{id:"hi.profanity.betichod",pattern:"(\u092C\u0947\u091F\u0940\u091A\u094B\u0926*|\u092C\u0947\u091F\u093F\u091A\u094B\u0926*)",category:"profanity",severity:"high"},{id:"hi.profanity.chod",pattern:"(\u091A\u094B\u0926*|\u091A\u0941\u0926*)",category:"profanity",severity:"high"},{id:"hi.profanity.chutiya",pattern:"(\u091A\u0942\u0924\u093F\u092F\u093E*|\u091A\u0941\u0924\u093F\u092F\u093E*|\u091A\u0942\u0924\u093F\u092F\u0947*|\u091A\u0941\u0924\u093F\u092F\u0947*|\u091A\u0941\u0924\u094D\u092F\u093E*|\u091A\u0942\u0924\u094D\u092F\u093E*)",category:"profanity",severity:"high"},{id:"hi.profanity.chut",pattern:"(\u091A\u0942\u0924|\u091A\u0941\u0924)",category:"profanity",severity:"high"},{id:"hi.profanity.lund",pattern:"(\u0932\u0902\u0921|\u0932\u0923\u094D\u0921|\u0932\u0928\u094D\u0921|\u0932\u094C\u0921\u093C\u093E|\u0932\u094C\u0921\u093E|\u0932\u094C\u0921\u093C\u0947|\u0932\u094C\u0921\u0947|\u0932\u094B\u0921\u093C\u093E|\u0932\u094B\u0921\u093C\u0947|\u0932\u0935\u0921\u093C\u093E|\u0932\u0935\u0921\u093E|\u0932\u0935\u0921\u093C\u0947|\u0932\u094C\u0921\u093C\u0942|\u0932\u094B\u0921\u093C\u0942|\u0932\u094B\u0921\u0942)",category:"profanity",severity:"high"},{id:"hi.profanity.bhosda",pattern:"(\u092D\u094B\u0938\u0921*|\u092D\u094B\u0938\u0930\u0940*)",category:"profanity",severity:"high"},{id:"hi.profanity.gaandu",pattern:"(\u0917\u093E\u0902\u0921|\u0917\u093E\u0902\u0921\u0942|\u0917\u093E\u0902\u0921\u0941|\u0917\u093E\u0923\u094D\u0921\u0942|\u0917\u093E\u0928\u094D\u0921\u0942|\u0917\u093E\u0923\u094D\u0921|\u0917\u093E\u0928\u094D\u0921|\u0917\u093E\u0902\u0921\u092B\u091F*)",category:"profanity",severity:"medium"},{id:"hi.profanity.harami",pattern:"(\u0939\u0930\u093E\u092E\u0940|\u0939\u0930\u093E\u092E\u091C\u093C\u093E\u0926*|\u0939\u0930\u093E\u092E\u091C\u093E\u0926*|\u0939\u0930\u093E\u092E\u0916\u094B\u0930*|\u0939\u0930\u093E\u092E\u0916\u093C\u094B\u0930*)",category:"profanity",severity:"medium"},{id:"hi.profanity.randi",pattern:"(\u0930\u0902\u0921\u0940|\u0930\u0923\u094D\u0921\u0940|\u0930\u0928\u094D\u0921\u0940|\u0930\u0902\u0921\u093F\u092F\u094B\u0902|\u0930\u0902\u0921\u093F\u092F\u093E|\u0930\u0902\u0921\u0940\u092C\u093E\u091C*|\u0930\u0902\u0921\u0935\u093E|\u0930\u093E\u0902\u0921)",category:"profanity",severity:"high"},{id:"hi.profanity.bhadwa",pattern:"(\u092D\u0921\u093C\u0935\u093E|\u092D\u0921\u093C\u0935\u0947|\u092D\u0921\u093C\u0935\u0940|\u092D\u0921\u0935\u093E|\u092D\u0921\u0935\u0947|\u092D\u0921\u0935\u0940|\u092D\u0921\u093C\u0941\u0906|\u092D\u0921\u0941\u0906)",category:"profanity",severity:"high"},{id:"hi.profanity.jhaat",pattern:"(\u091D\u093E\u091F|\u091D\u093E\u0902\u091F|\u091D\u093E\u091F\u0942|\u091D\u093E\u0902\u091F\u0942)",category:"profanity",severity:"medium"},{id:"hi.profanity.kutiya",pattern:"(\u0915\u0941\u0924\u093F\u092F\u093E|\u0915\u0941\u0924\u094D\u0924\u093F\u092F\u093E)",category:"profanity",severity:"high"}],Le="(\u092E\u0941\u0938\u0932\u092E\u093E\u0928\u094B\u0902|\u092E\u0941\u0938\u0932\u092E\u093E\u0928|\u092E\u0941\u0938\u0932\u092E\u093E\u0928\u094B|\u0939\u093F\u0902\u0926\u0941\u0913\u0902|\u0939\u093F\u0928\u094D\u0926\u0941\u0913\u0902|\u0939\u093F\u0902\u0926\u0941\u0913|\u0938\u093F\u0916\u094B\u0902|\u0908\u0938\u093E\u0907\u092F\u094B\u0902|\u0926\u0932\u093F\u0924\u094B\u0902|\u0915\u091F\u0941\u0913\u0902|\u092E\u0941\u0932\u094D\u0932\u094B\u0902|\u092C\u093F\u0939\u093E\u0930\u093F\u092F\u094B\u0902|\u0914\u0930\u0924\u094B\u0902)",Tt=[{id:"hi.hate.slur.katua",pattern:"(\u0915\u091F\u0941\u0906|\u0915\u091F\u0941\u090F|\u0915\u091F\u0941\u0913\u0902)",category:"hate",severity:"critical",confidence:.9,label:"slur"},{id:"hi.hate.group-violence",pattern:`${Le} (\u0915\u094B)? (\u092E\u093E\u0930|\u0915\u093E\u091F|\u091C\u0932\u093E|\u0916\u0924\u094D\u092E|\u0916\u093C\u0924\u094D\u092E|\u092E\u093F\u091F\u093E|\u0938\u093E\u092B) (\u0915\u0930)? (\u0926\u094B|\u0921\u093E\u0932\u094B|\u0926\u0947\u0928\u093E)`,category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"},{id:"hi.hate.group-violence-imperative",pattern:`${Le} (\u0915\u094B)? (\u092E\u093E\u0930\u094B|\u0915\u093E\u091F\u094B|\u091C\u0932\u093E\u0913|\u092E\u093F\u091F\u093E\u0913)`,category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],Fe="(\u0924\u0942|\u0924\u0941\u092E|\u0906\u092A)",Ie="(\u090F\u0915)? (\u092C\u0939\u0941\u0924|\u092A\u0942\u0930\u093E|\u092A\u0942\u0930\u0940|\u0928\u093F\u0930\u093E|\u0938\u092C\u0938\u0947|\u090F\u0915\u0926\u092E)? (\u092C\u0921\u093C\u093E|\u092C\u0921\u093C\u0940|\u092C\u0921\u093E|\u092C\u0921\u0940)?",xt="(\u0915\u0941\u0924\u094D\u0924\u093E|\u0915\u0941\u0924\u094D\u0924\u0947|\u0915\u0941\u0924\u094D\u0924\u0940|\u0917\u0927\u093E|\u0917\u0927\u0947|\u0909\u0932\u094D\u0932\u0942|\u0938\u0942\u0905\u0930|\u0938\u0941\u0905\u0930)",St="(\u092C\u0947\u0935\u0915\u0942\u092B\u093C|\u092C\u0947\u0935\u0915\u0942\u092B|\u092E\u0942\u0930\u094D\u0916|\u092E\u0942\u0930\u0916|\u0915\u092E\u0940\u0928\u093E|\u0915\u092E\u0940\u0928\u0947|\u0915\u092E\u0940\u0928\u0940|\u0918\u091F\u093F\u092F\u093E|\u0928\u093E\u0932\u093E\u092F\u0915|\u0928\u093F\u0915\u092E\u094D\u092E\u093E|\u0928\u093F\u0915\u092E\u094D\u092E\u0947|\u0928\u093F\u0915\u092E\u094D\u092E\u0940|\u0939\u0930\u093E\u092E\u0940|\u091C\u093E\u0939\u093F\u0932|\u0917\u0902\u0935\u093E\u0930|\u091A\u0942\u0924\u093F\u092F\u093E|\u091A\u0941\u0924\u093F\u092F\u093E|\u0928\u0940\u091A|\u0939\u0930\u093E\u092E\u0916\u094B\u0930|\u0915\u0941\u0924\u093F\u092F\u093E)",Ct=[{id:"hi.harassment.family-insult",pattern:"(\u0924\u0947\u0930\u0940|\u0924\u0947\u0930\u0947|\u0924\u0947\u0930\u093E|\u0924\u0941\u092E\u094D\u0939\u093E\u0930\u0940|\u0924\u0941\u092E\u094D\u0939\u093E\u0930\u0947|\u0909\u0938\u0915\u0940|\u0909\u0938\u0915\u0947|\u0907\u0938\u0915\u0940) (\u092E\u093E\u0902|\u092E\u093E|\u092E\u093E\u0908|\u092E\u0948\u092F\u093E|\u092C\u0939\u0928|\u092C\u0939\u093F\u0928|\u092C\u0947\u0939\u0928|\u092C\u0947\u091F\u0940) (\u0915\u093E|\u0915\u0940|\u0915\u0947|\u0915\u094B) (\u092D\u094B\u0938\u0921\u093C\u093E|\u092D\u094B\u0938\u0921\u093E|\u092D\u094B\u0938\u0921\u093C\u0940|\u092D\u094B\u0938\u0921\u0940|\u091A\u0942\u0924|\u091A\u0941\u0924|\u0932\u0902\u0921|\u0932\u094C\u0921\u093C\u093E|\u0932\u094C\u0921\u093E)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"hi.harassment.family-abuse",pattern:"(\u092E\u093E\u0902|\u092C\u0939\u0928|\u092C\u0939\u093F\u0928|\u092C\u0947\u091F\u0940) (\u0915\u094B|\u0915\u0940)? (\u091A\u094B\u0926*|\u091A\u0941\u0926*)",category:"harassment",severity:"high",confidence:.85,label:"insult"},{id:"hi.harassment.insult",pattern:`${Fe} ${Ie} ${St}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"hi.harassment.insult-animal",pattern:`${Fe} ${Ie} ${xt} (\u0939\u0948|\u0939\u094B|\u0939\u0948\u0902)`,category:"harassment",severity:"medium",confidence:.75,label:"insult"},{id:"hi.harassment.self-harm",pattern:"(\u0916\u0941\u0926\u0915\u0941\u0936\u0940|\u0916\u093C\u0941\u0926\u0915\u0941\u0936\u0940|\u0906\u0924\u094D\u092E\u0939\u0924\u094D\u092F\u093E) (\u0915\u0930|\u0915\u0930\u094B) (\u0932\u0947|\u0932\u094B)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"hi.harassment.self-harm-joined",pattern:"(\u0916\u0941\u0926\u0915\u0941\u0936\u0940|\u0916\u093C\u0941\u0926\u0915\u0941\u0936\u0940|\u0906\u0924\u094D\u092E\u0939\u0924\u094D\u092F\u093E) (\u0915\u0930\u0932\u0947|\u0915\u0930\u0932\u094B)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"hi.harassment.self-harm-hang",pattern:"(\u092B\u093E\u0902\u0938\u0940|\u092B\u0902\u0926\u093E) (\u0932\u0917\u093E|\u0932\u0917\u093E\u0915\u0930) (\u0932\u0947|\u0932\u094B|\u092E\u0930|\u092E\u0930\u094B)",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"hi.harassment.go-die",pattern:"(\u092E\u0930|\u0921\u0942\u092C) (\u091C\u093E|\u091C\u093E\u0913|\u092E\u0930|\u092E\u0930\u094B)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"hi.harassment.threat",pattern:"(\u0924\u0941\u091D\u0947|\u0924\u0941\u092E\u094D\u0939\u0947\u0902|\u0924\u0941\u092E\u094D\u0939\u0947|\u0924\u0941\u092E\u0915\u094B|\u0924\u0941\u091D\u0915\u094B) (\u091C\u093E\u0928)? (\u0938\u0947)? (\u092E\u093E\u0930|\u0915\u093E\u091F|\u0916\u0924\u094D\u092E|\u0916\u093C\u0924\u094D\u092E|\u091C\u0932\u093E) (\u0915\u0930)? (\u0926\u0942\u0902\u0917\u093E|\u0926\u0942\u0902\u0917\u0940|\u0921\u093E\u0932\u0942\u0902\u0917\u093E|\u0921\u093E\u0932\u0942\u0902\u0917\u0940|\u0926\u0947\u0902\u0917\u0947|\u0921\u093E\u0932\u0947\u0902\u0917\u0947)",category:"harassment",severity:"high",confidence:.7,label:"threat"}],he={language:"hi",boundary:"word",rules:[...kt,...Tt,...Ct],allowList:[]};var At=[{id:"pt.profanity.porra",pattern:"(porra|porras)",category:"profanity",severity:"medium"},{id:"pt.profanity.caralho",pattern:"(caralho*|caraio|krl|crl)",category:"profanity",severity:"high"},{id:"pt.profanity.foder",pattern:"(foda|fodas|fodase|fodasse|foder|fodido*|fodida*|fodendo|fode|fodeu|fodam)",category:"profanity",severity:"high"},{id:"pt.profanity.puta",pattern:"(puta|putas|putaria*|putinha*)",category:"profanity",severity:"high"},{id:"pt.profanity.puto",pattern:"(puto|putos)",category:"profanity",severity:"medium"},{id:"pt.profanity.abbreviations",pattern:"(fdp|vtnc|vsf|vsfd|pqp|tnc)",category:"profanity",severity:"high"},{id:"pt.profanity.merda",pattern:"merda*",category:"profanity",severity:"medium"},{id:"pt.profanity.buceta",pattern:"(buceta*|boceta*|xoxota*|xereca*)",category:"profanity",severity:"high"},{id:"pt.profanity.cu",pattern:"(no|do|teu|seu|meu|nosso) cu",category:"profanity",severity:"medium"},{id:"pt.profanity.cuzao",pattern:"(cuzao|cuzinho|cuzona)",category:"profanity",severity:"high"},{id:"pt.profanity.arrombado",pattern:"(arrombad*)",category:"profanity",severity:"high"},{id:"pt.profanity.piroca",pattern:"(piroca*|pirocudo*)",category:"profanity",severity:"high"},{id:"pt.profanity.cacete",pattern:"cacete*",category:"profanity",severity:"medium"},{id:"pt.profanity.bosta",pattern:"bosta*",category:"profanity",severity:"medium"},{id:"pt.profanity.vadia",pattern:"(vadia|vadias)",category:"profanity",severity:"high"},{id:"pt.profanity.desgracado",pattern:"(desgracad*)",category:"profanity",severity:"medium"}],Rt=[...["(viado|viados|viadinho*|viadao)","(sapatao|sapatoes|sapatona*)","(traveco|travecos)"].map(e=>({id:`pt.hate.slur.${e.replace(/[()*]/g,"").split("|")[0]}`,pattern:e,category:"hate",severity:"critical",confidence:.9,label:"slur"})),{id:"pt.hate.group-violence",pattern:"(judeus|muculmanos|cristaos|negros|pretos|brancos|gays|viados|lesbicas|trans|mulheres|imigrantes|nordestinos|indios|refugiados|ciganos|baianos|africanos|arabes) (deveriam|devem|merecem|tem|teem) (que|de)? (ser)? (morrer|queimar|exterminados|exterminadas|mortos|mortas|queimados|queimadas|eliminados|eliminadas|enforcados|fuzilados)",category:"hate",severity:"critical",confidence:.8,label:"dehumanizing"}],Mt="(idiota*|imbecil*|burro|burra|estupido*|estupida*|otario*|otaria*|babaca*|lixo|inutil|retardado*|retardada*|mongoloide*|debil|corno*|vagabundo*|vagabunda*|nojento*|nojenta*|patetico*|patetica*|fracassado*|fracassada*|palhaco*|escroto*|escrota*|merda|arrombado*|arrombada*|desgracado*|desgracada*|vadia|puta|piranha|cachorra)",Dt=[{id:"pt.harassment.insult",pattern:`(voce|vc|tu) (e|eh|es)? (um|uma)? (grande|completo|completa|puta|baita|bela|belo|maior)? ${Mt}`,category:"harassment",severity:"medium",confidence:.8,label:"insult"},{id:"pt.harassment.self-harm",pattern:"(vai|va) se (matar|enforcar|suicidar)",category:"harassment",severity:"critical",confidence:.9,label:"self-harm-incitement"},{id:"pt.harassment.self-harm-imperative",pattern:"(mate|enforque|suicide) se",category:"harassment",severity:"critical",confidence:.85,label:"self-harm-incitement"},{id:"pt.harassment.go-die",pattern:"(morre|morra|morram) (logo|desgracado|desgracada|lixo|seu|sua|maldito|maldita)",category:"harassment",severity:"high",confidence:.75,label:"hostility"},{id:"pt.harassment.threat",pattern:"(vou|vamos|irei) te (matar|esfaquear|furar|apagar|quebrar|encher)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"pt.harassment.threat-short",pattern:"te (mato|matarei)",category:"harassment",severity:"high",confidence:.7,label:"threat"},{id:"pt.harassment.nobody-likes",pattern:"ninguem (gosta|liga|quer|suporta|aguenta) (de)? (voce|vc|ti)",category:"harassment",severity:"medium",confidence:.75,label:"exclusion"}],fe={language:"pt",boundary:"word",rules:[...At,...Rt,...Dt],allowList:[]};var pe={allow:0,mask:1,suggest:2,warn:3,block:4},W={low:0,medium:1,high:2,critical:3},P=["profanity","hate","harassment","custom"];var Lt={direct:1,quoted:.5,mention:.4},Ft=new Set(["word","words","term","slur","phrase","say","said","saying","says","spell","spelled","called","calling","means","meaning","define","definition","using","use"]),It=[['"','"'],["\u201C","\u201D"],["\u2018","\u2019"],["\xAB","\xBB"],["\u300C","\u300D"]];function Bt(e){let t=[];for(let[r,n]of It){let a=0;for(;a<e.length;){let i=e.indexOf(r,a);if(i===-1)break;let o=e.indexOf(n,i+1);if(o===-1)break;let c=e.indexOf(`
2
+ `,i);if(c!==-1&&c<o){a=c+1;continue}t.push([i+1,o]),a=o+1}}return t}function Ot(e,t,r){if(e.tokenIndex!==void 0)for(let n=1;n<=2;n++){let a=t[e.tokenIndex-n];if(a&&Ft.has(a.value))return"mention"}for(let[n,a]of r)if(e.start>=n&&e.end<=a)return"quoted";return"direct"}var jt=class{constructor(e){this.onListenerError=e,this.handlers=new Map}on(e,t){let r=this.handlers.get(e);return r||(r=new Set,this.handlers.set(e,r)),r.add(t),()=>{r.delete(t)}}emit(e,t){let r=this.handlers.get(e);if(r)for(let n of[...r])try{n(t)}catch(a){this.onListenerError&&this.onListenerError(a,e)}}clear(){this.handlers.clear()}},Nt=new RegExp("^[\u200B-\u200D\u2060\uFEFF\xAD\u180E]$"),_t=/\p{M}/u;function $t(e){let t=e.codePointAt(0);return t>=2304&&t<=3583}var zt={\u00DF:"ss","\u0901":"\u0902"},Pt={\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"},Pe={"@":"a",4:"a",$:"s",5:"s",0:"o",1:"i","!":"i","|":"i",3:"e","\u20AC":"e",7:"t"},me=new Map;function qe(e){let t=me.get(e);if(t!==void 0)return t;let r;if(Nt.test(e))r="";else{r="";for(let n of e.toLowerCase().normalize("NFKD")){if(_t.test(n)&&!$t(n))continue;let a=n.toLowerCase();r+=zt[a]??Pt[a]??a}}return me.size<1e4&&me.set(e,r),r}function He(e){let t="",r=[],n=[],a=0;for(;a<e.length;){let i=e.codePointAt(a),o=String.fromCodePoint(i),c=a+o.length,u=qe(o);for(let l=0;l<u.length;l++)r.push(a),n.push(c);t+=u,a=c}return{text:t,starts:r,ends:n}}function G(e){return Ue(He(e).text)}var qt=/\p{L}/u;function Ue(e){if(!qt.test(e))return e;let t="";for(let r of e)t+=Pe[r]??r;return t}function Ke(e){let t=[];for(let r of e){let n=t[t.length-1];n&&n[0]===r?n[1]++:t.push([r,1])}return t}function Ht(e){let t="";for(let[r]of e)t+=r;return t}function we(e,t){let r=t.runs;if(t.prefix?e.length<r.length:e.length!==r.length)return!1;for(let n=0;n<r.length;n++){let a=e[n],i=r[n];if(a[0]!==i[0]||a[1]<i[1])return!1}return!0}var N=class extends Error{constructor(){super(...arguments),this.name="PatternError"}};function Ut(e,t){let r=e.endsWith("*"),n=G(r?e.slice(0,-1):e);if(!n||/\s/.test(n))throw new N(`Invalid token "${e}" in pattern "${t}"`);let a=Ke(n);return{value:n,prefix:r,runs:a,key:Ht(a)}}function Kt(e){let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)throw new N("Pattern must not be empty");return t.map((r,n)=>{let a=r,i=a.endsWith("?");if(i&&(a=a.slice(0,-1)),i&&n===0)throw new N(`First token cannot be optional in "${e}"`);if(a.startsWith("(")){if(!a.endsWith(")"))throw new N(`Unclosed group "${r}" in "${e}"`);a=a.slice(1,-1)}return{alternatives:a.split("|").map(c=>Ut(c,e)),optional:i}})}var Ve={custom:40,hate:30,harassment:20,profanity:10},Vt=new Set(["profanity","hate","harassment","custom"]),Wt=new Set(["low","medium","high","critical"]);function Gt(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(!Vt.has(e.category))throw new TypeError(`Rule "${e.id}" has unknown category "${String(e.category)}"`);if(e.severity!==void 0&&!Wt.has(e.severity))throw new TypeError(`Rule "${e.id}" has unknown severity "${String(e.severity)}"`);let r=e.confidence??1;if(!(r>=0&&r<=1))throw new RangeError(`Rule "${e.id}" confidence must be within [0, 1]`);let n;try{n=Kt(e.pattern)}catch(a){throw a instanceof N?new N(`Rule "${e.id}": ${a.message}`):a}if(t==="substring"&&n.length!==1)throw new N(`Rule "${e.id}": substring packs support single-token patterns only`);return{id:e.id,category:e.category,severity:e.severity??"medium",confidence:r,priority:e.priority??Ve[e.category],replacement:e.replacement,label:e.label,boundary:t,elements:n}}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 r of t.elements[0].alternatives){let n=r.prefix?this.prefix:this.exact,a=r.prefix?r.key[0]:r.key,i=n.get(a);i?i.push({rule:t,alt:r}):n.set(a,[{rule:t,alt:r}])}}}candidates(e,t){let r=[];for(let n of this.exact.get(t)??[])we(e,n.alt)&&r.push(n);for(let n of this.prefix.get(t[0]??"")??[])we(e,n.alt)&&r.push(n);return r}get substringRules(){return this.substring}};function Be(e,t){let r=Ke(e.value),n="";for(let[a]of r)n+=a;return{runs:r,key:n,blocked:e.masked||t.has(e.value)}}function Xt(e,t){return t.blocked?!1:e.alternatives.some(r=>we(t.runs,r))}function ke(e,t,r,n){if(t===e.length)return n-1;let a=e[t],i=-1;return n<r.length&&Xt(a,r[n])&&(i=ke(e,t+1,r,n+1)),a.optional&&(i=Math.max(i,ke(e,t+1,r,n))),i}function Qt(e,t){let{tokens:r,spaced:n,allowList:a,normalized:i}=t,o=r.map(m=>Be(m,a)),c=[],u=new Set,l=m=>{let b=`${m.rule.id}:${m.start}:${m.end}`;u.has(b)||(u.add(b),c.push(m))};for(let m=0;m<r.length;m++){let b=o[m];if(b.blocked)continue;let T=new Set;for(let{rule:S}of e.candidates(b.runs,b.key)){if(T.has(S.id))continue;T.add(S.id);let B=ke(S.elements,1,o,m+1);B<m||l({start:r[m].start,end:r[B].end,rule:S,confidence:S.confidence,tokenIndex:m})}}for(let m of n){let b=Be(m,a);if(!b.blocked)for(let{rule:T}of e.candidates(b.runs,b.key))T.elements.length===1&&l({start:m.start,end:m.end,rule:T,confidence:T.confidence,tokenIndex:m.firstIndex})}let E=i.text;for(let m of e.substringRules)for(let b of m.elements[0].alternatives)for(let T=E.indexOf(b.value);T!==-1;T=E.indexOf(b.value,T+1)){let S=T+b.value.length;l({start:i.starts[T],end:i.ends[S-1],rule:m,confidence:m.confidence})}return c}var Zt=new Set(["allow","mask","suggest","warn","block"]);function Te(e){if(!Zt.has(e))throw new TypeError(`Unknown moderation action "${String(e)}"`)}function ye(e,t){let r=new Set(t),n=(a,i)=>({enabled:r.has(a),...i});return{profanity:n("profanity",{action:e,minConfidence:0,minSeverity:"medium"}),custom:n("custom",{action:e,minConfidence:0,minSeverity:"low"}),hate:n("hate",{action:e,minConfidence:.6,minSeverity:"low"}),harassment:n("harassment",{action:e==="mask"?"warn":e,minConfidence:.6,minSeverity:"low"})}}function ge(e,t){let r={...e};if(!t)return r;for(let n of P){let a=t[n];if(a){if(a.action!==void 0&&Te(a.action),a.minConfidence!==void 0&&!(a.minConfidence>=0&&a.minConfidence<=1))throw new RangeError(`minConfidence for "${n}" must be within [0, 1]`);if(a.minSeverity!==void 0&&!(a.minSeverity in W))throw new TypeError(`Unknown severity "${String(a.minSeverity)}"`);r[n]={...r[n],...Jt(a)}}}return r}function Jt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function er(e,t,r){return!e.enabled||W[t]<W[e.minSeverity]?{keep:!1,action:"allow",requiresReview:!1}:r<e.minConfidence?{keep:!0,action:"allow",requiresReview:!0}:{keep:!0,action:e.action,requiresReview:!1}}function tr(e){let t="allow";for(let r of e)pe[r]>pe[t]&&(t=r);return t}function rr(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function nr(e,t={}){let r=Math.max(0,t.debounceMs??0),n=0,a,i,o,c=()=>{n++,i!==void 0&&clearTimeout(i),i=void 0,o?.(void 0),o=void 0,a?.abort(),a=void 0};return{moderate(u){c();let l=n;return new Promise((E,m)=>{o=E;let b=()=>{i=void 0;let T=new AbortController;a=T,e(u,{signal:T.signal}).then(S=>{l===n&&(o=void 0,a=void 0,E(S))},S=>{l===n&&(o=void 0,a=void 0,rr(S)?E(void 0):m(S))})};r>0?i=setTimeout(b,r):b()})},cancel:c}}var Oe=new Set(["*","!","|"]),ar=new Set([" ",".","-","_"]),je=new Map;function ir(e){let t=je.get(e);if(!t){let r=e.replace(/[\\\]^-]/g,"\\$&");t=new RegExp(`[\\p{L}\\p{M}\\p{N}@$!|*\u20AC${r}]+`,"gu"),je.set(e,t)}return t}function or(e,t="*"){let{text:r,starts:n,ends:a}=e,i=[],o=ir(t);o.lastIndex=0;for(let c=o.exec(r);c!==null;c=o.exec(r)){let u=c.index,l=c.index+c[0].length;for(;u<l&&Oe.has(r[u]);)u++;for(;l>u&&Oe.has(r[l-1]);)l--;if(u===l)continue;let E=r.slice(u,l);i.push({start:n[u],end:a[l-1],nStart:u,nEnd:l,value:Ue(E),masked:E.includes(t),firstIndex:i.length})}return i}function sr(e,t){let r=[],n=0;for(;n<e.length;){let a=n;for(;a+1<e.length&&e[a].value.length===1&&e[a+1].value.length===1&&e[a+1].nStart-e[a].nEnd===1&&ar.has(t[e[a].nEnd]);)a++;if(a-n+1>=3){let i=e.slice(n,a+1);r.push({start:i[0].start,end:i[i.length-1].end,nStart:i[0].nStart,nEnd:i[i.length-1].nEnd,value:i.map(o=>o.value).join(""),masked:i.some(o=>o.masked),firstIndex:n}),n=a+1}else n++}return r}var ur=new RegExp("[\\p{L}\\p{N}@$!|\u20AC]","u"),cr=/\p{M}/u,lr=new Set(["a","e","i","o","u"]);function dr(e){return ur.test(e)}function hr(e){let t=[];for(let r of e)cr.test(r)&&t.length>0?t[t.length-1]+=r:t.push(r);return t}function Ne(e,t="vowels",r="*"){if(typeof t=="function")return t(e);let n=hr(e),a=n.map((u,l)=>dr(Array.from(u)[0])?l:-1).filter(u=>u>=0);if(a.length===0)return e;let i=n.slice(),o=a[0],c=a[a.length-1];if(t==="full"){for(let u of a)i[u]=r;return i.join("")}if(t==="vowels"){let u=0;for(let l of a){if(l===o)continue;let E=qe(Array.from(n[l])[0]);lr.has(Pe[E]??E)&&(i[l]=r,l!==c&&u++)}if(u>0)return i.join("");for(let l of a)i[l]=n[l]}for(let u of a)u!==o&&(u===c&&a.length>2||(i[u]=r));return i.join("")}function fr(e,t){let r=e.replace(/[^\p{L}]/gu,"");if(r.length>1&&r===r.toUpperCase()&&r!==r.toLowerCase())return t.toUpperCase();let n=r[0];return n&&n!==n.toLowerCase()?t.charAt(0).toUpperCase()+t.slice(1):t}function q(e,t){let r=[...t].sort((i,o)=>i.start-o.start);for(let i=1;i<r.length;i++)if(r[i].start<r[i-1].end)throw new RangeError("Edits must not overlap");let n="",a=0;for(let i of r)n+=e.slice(a,i.start)+i.replacement,a=i.end;return n+=e.slice(a),{text:n,mapping:pr(r,e.length,n.length)}}function pr(e,t,r){let n=Object.freeze(e.map(i=>Object.freeze({...i}))),a=(i,o)=>Math.min(Math.max(0,Math.trunc(i)),o);return{edits:n,toTransformed(i){let o=a(i,t),c=0;for(let u of n){if(o<=u.start)return o+c;if(o<u.end)return u.start+c+Math.min(o-u.start,u.replacement.length);c+=u.replacement.length-(u.end-u.start)}return o+c},toOriginal(i){let o=a(i,r),c=0;for(let u of n){let l=u.start+c,E=l+u.replacement.length;if(o<=l)return o-c;if(o<E)return u.start+Math.min(o-l,u.end-u.start);c+=u.replacement.length-(u.end-u.start)}return o-c}}}var ve={en:se,"hi-latn":ue,hi:he,es:le,fr:de,de:ce,pt:fe},_e={en:["en","hi-latn"],hi:["hi","hi-latn"]};function mr(e,t){let r=e.toLowerCase();return(t??(ve[r]&&!_e[r]?[r]:_e[r.split("-")[0]]??[e])).map(a=>{let i=a.toLowerCase(),o=ve[i]??ve[i.split("-")[0]];if(!o)throw new Error(`No built-in dictionary pack for language "${a}". Pass one via the \`packs\` option.`);return o})}function Ee(e){return e?.reason!==void 0?e.reason:new DOMException("The operation was aborted.","AbortError")}function be(e){return Math.round(e*1e4)/1e4}function $e(e){return Math.min(1,Math.max(0,e))}var ze=new Set(P);function Y(e={}){let t=e.mode??"mask";Te(t);let r=e.language??"en",n=e.categories??P;for(let s of n)if(!ze.has(s))throw new TypeError(`Unknown category "${String(s)}"`);let a=e.maskChar??"*";if(Array.from(a).length!==1||/[\p{L}\p{N}\s]/u.test(a))throw new TypeError("maskChar must be a single non-letter, non-digit, non-space character");let i=e.maskStyle??"vowels",o=e.detectSpacedLetters??!0,c=e.classifiers??[],u=e.classifierTimeoutMs??3e3,l=new jt((s,h)=>{h!=="error"&&l.emit("error",{error:s})});e.onModerated&&l.on("moderated",e.onModerated),e.onViolation&&l.on("violation",e.onViolation),e.onBlocked&&l.on("blocked",e.onBlocked),e.onWarning&&l.on("warning",e.onWarning),e.onError&&l.on("error",e.onError);let E=new Map,m=new Set,b=null,T=(s,h="word")=>{E.set(s.id,{source:{...s},compiled:Gt(s,h)}),b=null};for(let s of e.packs??mr(r,e.languages)){for(let h of s.rules)T(h,s.boundary??"word");for(let h of s.allowList??[])m.add(G(h))}for(let s of e.customWords??[]){let h=s.replace(/[()|?]/g,"").trim().split(/\s+/).join(" ");h&&T({id:`custom.${G(h).replace(/\s+/g,"-")}`,pattern:h,category:"custom",severity:"medium"})}for(let s of e.rules??[])T(s);for(let s of e.allowList??[])m.add(G(s));let S={...e.policy},B=ge(ye(t,n),S),U=()=>(b||(b=new Yt(Array.from(E.values(),s=>s.compiled))),b);function _(s){let h=He(s),v=or(h,a),g=o?sr(v,h.text):[],f=Qt(U(),{normalized:h,tokens:v,spaced:g,allowList:m});if(f.length===0)return[];let x=Bt(s);return f.map(C=>{let D=Ot(C,v,x);return{...C,context:D,confidence:be(C.confidence*Lt[D])}})}function K(s){let h=[...s].sort((g,f)=>f.priority-g.priority||f.end-f.start-(g.end-g.start)||g.start-f.start||(g.ruleId<f.ruleId?-1:g.ruleId>f.ruleId?1:0)),v=[];for(let g of h)v.every(f=>g.end<=f.start||g.start>=f.end)&&v.push(g);return v}function O(s,h,v){let g=[];for(let p of h){let w=p.rule,I=er(B[w.category],w.severity,p.confidence);if(!I.keep)continue;let j=v&&I.action!=="allow"?v:I.action,V=w.elements.length>1||w.elements.length===0&&/\s/.test(s.slice(p.start,p.end).trim());j==="mask"&&V&&(w.category==="hate"||w.category==="harassment")&&(j="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:j,requiresReview:I.requiresReview,applied:!1};w.replacement!==void 0?y.suggestedReplacement=fr(d,w.replacement):j==="suggest"&&(y.suggestedReplacement=Ne(d,i,a)),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 f=K(g.filter(p=>p.action==="mask")),x=K(g.filter(p=>p.action==="mask"||p.action==="suggest")),C=p=>({start:p.start,end:p.end,replacement:p.action==="suggest"&&p.suggestedReplacement!==void 0?p.suggestedReplacement:Ne(p.text,i,a)});for(let p of f)p.applied=!0;for(let p of x)p.action==="suggest"&&(p.applied=!0);let D=q(s,f.map(C)),F=q(s,x.map(C)),L=tr(g.map(p=>p.action));return{originalText:s,text:D.text,suggestedText:F.text,matches:g,allowed:L!=="block",action:L,requiresReview:g.some(p=>p.requiresReview),mapping:D.mapping}}function $(s){l.emit("moderated",s),s.matches.some(h=>h.action!=="allow")&&l.emit("violation",s),s.action==="block"&&l.emit("blocked",s),s.matches.some(h=>h.action==="warn")&&l.emit("warning",s)}async function M(s,h,v,g){let f=new AbortController,x=()=>f.abort(Ee(g));g?.addEventListener("abort",x,{once:!0});let C;try{return await new Promise((D,F)=>{f.signal.addEventListener("abort",()=>F(f.signal.reason),{once:!0}),C=setTimeout(()=>{let L=new Error(`Classifier "${s.name}" timed out after ${v}ms`);L.name="TimeoutError",f.abort(L)},v),Promise.resolve().then(()=>s.classify({...h,signal:f.signal})).then(D,F)})}finally{C!==void 0&&clearTimeout(C),g?.removeEventListener("abort",x)}}function z(s,h,v,g){for(let f of g.adjustments??[]){let x=h.find(C=>C.rule.id===f.ruleId&&C.start===f.start);x&&Number.isFinite(f.confidence)&&(x.confidence=be($e(f.confidence)))}for(let f of g.matches??[]){if(!ze.has(f.category)||!(Number.isInteger(f.start)&&Number.isInteger(f.end)&&f.start>=0&&f.end<=s.length&&f.start<f.end))continue;let x={id:`${v}:${f.label??f.category}`,category:f.category,severity:f.severity??"medium",confidence:$e(f.confidence),priority:Ve[f.category],replacement:f.replacement,label:f.label,boundary:"word",elements:[]};h.push({start:f.start,end:f.end,rule:x,confidence:be(x.confidence),context:"direct",source:v})}}let A={moderate(s){let h=O(s,_(s));return $(h),h},async moderateAsync(s,h={}){let{signal:v}=h;if(v?.aborted)throw Ee(v);let g=_(s),f=[],x=[];if(c.length>0){let D=O(s,g),F=h.timeoutMs??u,L=await Promise.all(c.map(p=>M(p,{text:s,matches:D.matches,language:r},F,v).then(w=>({classifier:p,output:w,error:void 0}),w=>({classifier:p,output:void 0,error:w}))));if(v?.aborted)throw Ee(v);for(let{classifier:p,output:w,error:I}of L)w?(z(s,g,p.name,w),f.push(p.name)):(x.push(p.name),l.emit("error",{error:I,provider:p.name}))}let C={...O(s,g),providers:f,failedProviders:x};return $(C),C},mask(s){return O(s,_(s),"mask").text},validate(s){let h=A.moderate(s);return{valid:h.allowed,result:h,violations:h.matches.filter(v=>v.action!=="allow")}},addRule(s){T(s)},removeRule(s){let h=E.delete(s);return h&&(b=null),h},getRules(){return Array.from(E.values(),s=>({...s.source}))},setPolicy(s){let h={...S};for(let v of P){let g=s[v];g&&(h[v]={...h[v],...g})}B=ge(ye(t,n),h),S=h},setMode(s){Te(s),t=s,B=ge(ye(t,n),S)},on(s,h){return l.on(s,h)},createSession(s){return nr((h,v)=>A.moderateAsync(h,v),s)}};return A}var Q="input, textarea, [contenteditable]",yr=new Set(["text","search"]),gr=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"]),vr=/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 We(e){let t=e;if(typeof t.isContentEditable=="boolean")return t.isContentEditable;for(let r=e;r;r=r.parentElement){let n=r.getAttribute("contenteditable");if(n!==null)return n===""||n==="true"||n==="plaintext-only"}return!1}function Er(e){return Z(e)||!We(e)?!1:!e.parentElement||!We(e.parentElement)}function xe(e){return(e.getAttribute("autocomplete")??"").toLowerCase().split(/\s+/).some(n=>gr.has(n))?!0:[e.getAttribute("name"),e.id,e.getAttribute("inputmode")==="numeric"?"pin":null].some(n=>n!==null&&n!==""&&vr.test(n))}function H(e,t){if(e.nodeType!==1||e.closest('[data-safetype="off"]'))return!1;for(let r of t)if(e.matches(r))return!1;if(e.tagName==="INPUT"){let r=e,n=(r.getAttribute("type")??"text").toLowerCase();return!yr.has(n)||r.readOnly||r.disabled?!1:!xe(e)}if(e.tagName==="TEXTAREA"){let r=e;return r.readOnly||r.disabled?!1:!xe(e)}return!Er(e)||e.matches(X)||e.closest(X)?!1:!xe(e)}var Se={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."},Ge=`
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}=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
- `);continue}let l=i,c=this.blockOf(l);a&&c!==a&&!r.endsWith(`
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}=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);})();
6
+ `;function ee(e){return e.action==="block"?"block":e.matches.some(t=>t.action==="warn")?"warn":null}function Ce(e,t,r){let n=t?.[e]??Se[e];return typeof n=="function"?n(r):n}var br=0;function wr(e,t,r){let n=(e.getAttribute(t)??"").split(/\s+/).filter(Boolean);n.includes(r)||e.setAttribute(t,[...n,r].join(" "))}function kr(e,t,r){let n=(e.getAttribute(t)??"").split(/\s+/).filter(a=>a&&a!==r);n.length?e.setAttribute(t,n.join(" ")):e.removeAttribute(t)}var J=class{constructor(t,r){this.field=t;this.texts=r;this.node=null;this.id=`safetype-message-${++br}`;this.setInvalid=!1}update(t,r){if(!t)return this.clear();let n=Ce(t,this.texts,r);if(!this.node){let a=this.field.ownerDocument.createElement("div");a.id=this.id,a.className="safetype-message",a.setAttribute("role","status"),a.setAttribute("aria-live","polite"),this.field.insertAdjacentElement("afterend",a),wr(this.field,"aria-describedby",this.id),this.node=a}this.node.dataset.level=t,this.node.textContent!==n&&(this.node.textContent=n),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,kr(this.field,"aria-describedby",this.id))}};var Tr=new Set(["insertFromPaste","insertFromPasteAsQuotation","insertFromDrop","insertReplacementText","insertFromYank"]);function xr(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,r,n){this.element=t;this.surface=r;this.ctx=n;this.applying=!1;this.composing=!1;this.attached=!1;this.lastViolationKey="";this.lastWarningKey="";this.listeners=[];this.messages=n.showMessages?new J(t,n.messages):null,this.session=n.asyncModeration?n.engine.createSession({debounceMs:n.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,r]of this.listeners)this.element.removeEventListener(t,r);this.listeners.length=0,this.session?.cancel(),this.messages?.clear()}}listen(t,r){this.element.addEventListener(t,r),this.listeners.push([t,r])}onInput(t){if(this.applying||this.composing||t.isComposing)return;let r=t.inputType??"";r==="historyUndo"||r==="historyRedo"?this.safeRun("observe"):Tr.has(r)?this.safeRun("final"):this.safeRun("typing")}safeRun(t){try{this.run(t)}catch(r){this.ctx.reportError(r,this.element)}}run(t){let r=this.surface.getText(),n=this.ctx.engine.moderate(r);return this.applyResult(n,t),this.session&&t!=="observe"&&this.session.moderate(r).then(a=>{a&&this.attached&&this.surface.getText()===a.originalText&&this.applyResult(a,t==="final"?"final":"typing")},a=>this.ctx.reportError(a,this.element)),n}applyResult(t,r){let n=t.originalText,a=r==="observe"?[]:t.mapping.edits.filter(i=>n.slice(i.start,i.end)!==i.replacement);if(r==="typing"&&a.length){let i=this.surface.getSelection();if(i&&i.start===i.end){let o=i.start;a=a.filter(c=>!(c.start<o&&o<=c.end))}}if(a.length){this.applying=!0;try{this.surface.apply(n,a)}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 r=xr(t);r!==this.lastViolationKey&&(this.lastViolationKey=r,r&&this.ctx.dispatch("violation",t,this.element));let n=t.matches.filter(a=>a.action==="warn").map(a=>`${a.ruleId}:${a.start}`).join("|");n!==this.lastWarningKey&&(this.lastWarningKey=n,n&&this.ctx.dispatch("warning",t,this.element))}};function Ye(e){return typeof e.execCommand=="function"}function Xe(e){return[...e].sort((t,r)=>r.start-t.start)}function Sr(e,t){let r=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),"value");r?.set?r.set.call(e,t):e.value=t}var re=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,r){let{el:n}=this,a=n.ownerDocument,{text:i,mapping:o}=q(t,r),c=this.getSelection(),u=n.selectionDirection??void 0,{scrollTop:l,scrollLeft:E}=n,m=!1;if(c&&Ye(a)){m=!0;try{for(let b of Xe(r))if(n.setSelectionRange(b.start,b.end),!a.execCommand("insertText",!1,b.replacement)){m=!1;break}}catch{m=!1}}if((!m||n.value!==i)&&(Sr(n,i),n.dispatchEvent(new Event("input",{bubbles:!0}))),c)try{n.setSelectionRange(o.toTransformed(c.start),o.toTransformed(c.end),u)}catch{}n.scrollTop=l,n.scrollLeft=E}},Cr=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"]),Ar=1,Rr=4,ne=class{constructor(t){this.root=t}blockOf(t){for(let r=t.parentNode;r&&r!==this.root;r=r.parentNode)if(r.nodeType===1&&Cr.has(r.tagName))return r;return this.root}snapshot(){let r=this.root.ownerDocument.createTreeWalker(this.root,Ar|Rr),n="",a=[],i=null;for(let o=r.nextNode();o;o=r.nextNode()){if(o.nodeType===1){o.tagName==="BR"&&(n+=`
7
+ `);continue}let c=o,u=this.blockOf(c);i&&u!==i&&!n.endsWith(`
8
+ `)&&(n+=`
9
+ `),i=u,a.push({node:c,start:n.length,end:n.length+c.data.length}),n+=c.data}return{text:n,segments:a}}pointFor(t,r){for(let a of r){if(t<a.start)return{node:a.node,offset:0};if(t<=a.end)return{node:a.node,offset:t-a.start}}let n=r[r.length-1];return n?{node:n.node,offset:n.node.data.length}:{node:this.root,offset:0}}offsetFor(t,r,n){let a=this.root.ownerDocument.createRange();a.setStart(this.root,0),a.setEnd(t,r);let i=0;for(let o of n){if(o.node===t)return o.start+r;if(a.comparePoint(o.node,o.node.data.length)===0)i=o.end;else break}return i}getText(){return this.snapshot().text}getSelection(){let t=this.root.ownerDocument.getSelection();if(!t||t.rangeCount===0)return null;let r=t.getRangeAt(0);if(!this.root.contains(r.startContainer)||!this.root.contains(r.endContainer))return null;let{segments:n}=this.snapshot();return{start:this.offsetFor(r.startContainer,r.startOffset,n),end:this.offsetFor(r.endContainer,r.endOffset,n)}}replaceDirect(t,r){let n=t.replacement.length===t.end-t.start,a=!0;for(let i of r){let o=Math.max(t.start,i.start),c=Math.min(t.end,i.end);if(!(o>=c)){if(n){let u=t.replacement.slice(o-t.start,c-t.start);i.node.data.slice(o-i.start,c-i.start)!==u&&i.node.replaceData(o-i.start,c-o,u)}else a?i.node.replaceData(o-i.start,c-o,t.replacement):i.node.deleteData(o-i.start,c-o);a=!1}}}apply(t,r){let n=this.root.ownerDocument,{mapping:a}=q(t,r),i=this.getSelection();for(let o of Xe(r)){let{segments:c}=this.snapshot(),u=this.pointFor(o.start,c),l=this.pointFor(o.end,c);if(i&&u.node===l.node&&u.node.nodeType===3&&Ye(n)){let E=n.createRange();E.setStart(u.node,u.offset),E.setEnd(l.node,l.offset);let m=n.getSelection();m?.removeAllRanges(),m?.addRange(E);try{if(n.execCommand("insertText",!1,o.replacement))continue}catch{}}this.replaceDirect(o,c)}if(i){let{segments:o}=this.snapshot(),c=this.pointFor(a.toTransformed(i.start),o),u=this.pointFor(a.toTransformed(i.end),o),l=n.createRange();l.setStart(c.node,c.offset),l.setEnd(u.node,u.offset);let E=n.getSelection();E?.removeAllRanges(),E?.addRange(l)}}};var Mr=["type","contenteditable","data-safetype","readonly","disabled","autocomplete","name"],ae=new WeakMap;function Dr(e){let t=ae.get(e);if(t){t.count++;return}let r=e.nodeType===9?e:e.ownerDocument,n=r.createElement("style");n.setAttribute("data-safetype",""),n.textContent=Ge,(e.nodeType===9?r.head??r.documentElement:e).appendChild(n),ae.set(e,{node:n,count:1})}function Lr(e){let t=ae.get(e);t&&--t.count===0&&(t.node.remove(),ae.delete(e))}var Fr={moderated:"onModerated",violation:"onViolation",warning:"onWarning",blocked:"onBlocked"};function Qe(e={}){let{selector:t=Q,root:r,engine:n,observeDynamicElements:a=!0,excludeSelectors:i=[],showMessages:o=!0,messages:c={},injectStyles:u=!0,blockSubmit:l=!0,asyncModeration:E,asyncDebounceMs:m=300,onModerated:b,onViolation:T,onWarning:S,onBlocked:B,onError:U,..._}=e,K={onModerated:b,onViolation:T,onWarning:S,onBlocked:B},O=n??Y(_),$=(d,y)=>{U?U(d,y):console.error("[safetype]",d)};n||O.on("error",({error:d})=>$(d));let M=new Map,z=null,A=null,s=!1,h=!1,v=(d,y,k)=>{try{K[Fr[d]]?.(y,k)}catch(ie){$(ie,k)}let R=k.ownerDocument.defaultView;R&&k.dispatchEvent(new R.CustomEvent(`safetype:${d}`,{bubbles:!0,composed:!0,detail:{result:y,element:k}}))},g={engine:O,showMessages:o,messages:c,asyncModeration:E??(_.classifiers?.length??0)>0,asyncDebounceMs:m,dispatch:v,reportError:$};function f(d){let y=d;if(h)return!1;if(M.has(y))return!0;if(!H(y,i))return!1;let k=Z(y)?new re(y):new ne(y),R=new te(y,k,g);return R.attach(),M.set(y,R),!0}function x(d){let y=M.get(d);y&&(y.detach(),M.delete(d))}let C=d=>d.matches(t);function D(d){C(d)&&f(d),d.querySelectorAll(t).forEach(f)}function F(d){let y=C(d)&&H(d,i),k=M.has(d);y&&!k?f(d):!y&&k&&x(d)}function L(){for(let d of[...M.keys()])d.isConnected||x(d)}let p=d=>{let y=!1;for(let k of d)if(k.type==="childList")k.addedNodes.forEach(R=>{R.nodeType===1&&D(R)}),k.removedNodes.length&&(y=!0);else if(k.type==="attributes"&&k.target.nodeType===1){let R=k.target;F(R),R.querySelectorAll(t).forEach(F)}y&&L()},w=d=>{let y=d.target;if(!y||y.nodeType!==1)return;let k=null;for(let[R,ie]of M){if((Z(R)?R.form:null)!==y&&!y.contains(R))continue;let Ae=ie.run("final");Ae.action==="block"&&(k??(k=R),v("blocked",Ae,R))}k&&l&&(d.preventDefault(),d.stopImmediatePropagation(),k.focus())},I=d=>d.nodeType===1?d.ownerDocument:d,j=d=>d.nodeType===9||d.nodeType===11?d:d.ownerDocument??document,V={engine:O,get running(){return s},get elements(){return[...M.keys()]},start(){if(h)throw new Error("This SafeType instance was destroyed. Create a new one with createSafeType().");if(s)return;let d=r??(typeof document>"u"?null:document);if(!d)throw new Error("@safetype/dom needs a DOM. Pass `root` or call start() in a browser.");if(A=d,s=!0,u&&o&&Dr(j(A)),A.nodeType===1?D(A):A.querySelectorAll(t).forEach(f),I(A).addEventListener("submit",w,!0),a){let k=(A.nodeType===9?A:A.ownerDocument)?.defaultView?.MutationObserver??globalThis.MutationObserver;z=new k(p),z.observe(A,{childList:!0,subtree:!0,attributes:!0,attributeFilter:Mr})}},stop(){if(!(!s||!A)){s=!1,z?.disconnect(),z=null,I(A).removeEventListener("submit",w,!0);for(let d of[...M.keys()])x(d);u&&o&&Lr(j(A)),A=null}},destroy(){V.stop(),h=!0},attach:f,detach:x,getResult(d){return M.get(d)?.result},validate(){L();let d=[];for(let[y,k]of M)d.push({element:y,result:k.run("final")});return{valid:d.every(y=>y.result.allowed),results:d}}};return V}return nt(Ir);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@safetype/dom",
3
- "version": "1.8.0",
3
+ "version": "1.10.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.8.0"
35
+ "@safetype/core": "1.10.0"
36
36
  },
37
37
  "repository": {
38
38
  "type": "git",