/*!
 * KoliBri - The accessible HTML-Standard
 */
function getDefaultExportFromCjs (x) {
	return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}

var loglevel$1 = {exports: {}};

/*
* loglevel - https://github.com/pimterry/loglevel
*
* Copyright (c) 2013 Tim Perry
* Licensed under the MIT license.
*/
var loglevel = loglevel$1.exports;

var hasRequiredLoglevel;

function requireLoglevel () {
	if (hasRequiredLoglevel) return loglevel$1.exports;
	hasRequiredLoglevel = 1;
	(function (module) {
		(function (root, definition) {
		    if (module.exports) {
		        module.exports = definition();
		    } else {
		        root.log = definition();
		    }
		}(loglevel, function () {

		    // Slightly dubious tricks to cut down minimized file size
		    var noop = function() {};
		    var undefinedType = "undefined";
		    var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (
		        /Trident\/|MSIE /.test(window.navigator.userAgent)
		    );

		    var logMethods = [
		        "trace",
		        "debug",
		        "info",
		        "warn",
		        "error"
		    ];

		    var _loggersByName = {};
		    var defaultLogger = null;

		    // Cross-browser bind equivalent that works at least back to IE6
		    function bindMethod(obj, methodName) {
		        var method = obj[methodName];
		        if (typeof method.bind === 'function') {
		            return method.bind(obj);
		        } else {
		            try {
		                return Function.prototype.bind.call(method, obj);
		            } catch (e) {
		                // Missing bind shim or IE8 + Modernizr, fallback to wrapping
		                return function() {
		                    return Function.prototype.apply.apply(method, [obj, arguments]);
		                };
		            }
		        }
		    }

		    // Trace() doesn't print the message in IE, so for that case we need to wrap it
		    function traceForIE() {
		        if (console.log) {
		            if (console.log.apply) {
		                console.log.apply(console, arguments);
		            } else {
		                // In old IE, native console methods themselves don't have apply().
		                Function.prototype.apply.apply(console.log, [console, arguments]);
		            }
		        }
		        if (console.trace) console.trace();
		    }

		    // Build the best logging method possible for this env
		    // Wherever possible we want to bind, not wrap, to preserve stack traces
		    function realMethod(methodName) {
		        if (methodName === 'debug') {
		            methodName = 'log';
		        }

		        if (typeof console === undefinedType) {
		            return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives
		        } else if (methodName === 'trace' && isIE) {
		            return traceForIE;
		        } else if (console[methodName] !== undefined) {
		            return bindMethod(console, methodName);
		        } else if (console.log !== undefined) {
		            return bindMethod(console, 'log');
		        } else {
		            return noop;
		        }
		    }

		    // These private functions always need `this` to be set properly

		    function replaceLoggingMethods() {
		        /*jshint validthis:true */
		        var level = this.getLevel();

		        // Replace the actual methods.
		        for (var i = 0; i < logMethods.length; i++) {
		            var methodName = logMethods[i];
		            this[methodName] = (i < level) ?
		                noop :
		                this.methodFactory(methodName, level, this.name);
		        }

		        // Define log.log as an alias for log.debug
		        this.log = this.debug;

		        // Return any important warnings.
		        if (typeof console === undefinedType && level < this.levels.SILENT) {
		            return "No console available for logging";
		        }
		    }

		    // In old IE versions, the console isn't present until you first open it.
		    // We build realMethod() replacements here that regenerate logging methods
		    function enableLoggingWhenConsoleArrives(methodName) {
		        return function () {
		            if (typeof console !== undefinedType) {
		                replaceLoggingMethods.call(this);
		                this[methodName].apply(this, arguments);
		            }
		        };
		    }

		    // By default, we use closely bound real methods wherever possible, and
		    // otherwise we wait for a console to appear, and then try again.
		    function defaultMethodFactory(methodName, _level, _loggerName) {
		        /*jshint validthis:true */
		        return realMethod(methodName) ||
		               enableLoggingWhenConsoleArrives.apply(this, arguments);
		    }

		    function Logger(name, factory) {
		      // Private instance variables.
		      var self = this;
		      /**
		       * The level inherited from a parent logger (or a global default). We
		       * cache this here rather than delegating to the parent so that it stays
		       * in sync with the actual logging methods that we have installed (the
		       * parent could change levels but we might not have rebuilt the loggers
		       * in this child yet).
		       * @type {number}
		       */
		      var inheritedLevel;
		      /**
		       * The default level for this logger, if any. If set, this overrides
		       * `inheritedLevel`.
		       * @type {number|null}
		       */
		      var defaultLevel;
		      /**
		       * A user-specific level for this logger. If set, this overrides
		       * `defaultLevel`.
		       * @type {number|null}
		       */
		      var userLevel;

		      var storageKey = "loglevel";
		      if (typeof name === "string") {
		        storageKey += ":" + name;
		      } else if (typeof name === "symbol") {
		        storageKey = undefined;
		      }

		      function persistLevelIfPossible(levelNum) {
		          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();

		          if (typeof window === undefinedType || !storageKey) return;

		          // Use localStorage if available
		          try {
		              window.localStorage[storageKey] = levelName;
		              return;
		          } catch (ignore) {}

		          // Use session cookie as fallback
		          try {
		              window.document.cookie =
		                encodeURIComponent(storageKey) + "=" + levelName + ";";
		          } catch (ignore) {}
		      }

		      function getPersistedLevel() {
		          var storedLevel;

		          if (typeof window === undefinedType || !storageKey) return;

		          try {
		              storedLevel = window.localStorage[storageKey];
		          } catch (ignore) {}

		          // Fallback to cookies if local storage gives us nothing
		          if (typeof storedLevel === undefinedType) {
		              try {
		                  var cookie = window.document.cookie;
		                  var cookieName = encodeURIComponent(storageKey);
		                  var location = cookie.indexOf(cookieName + "=");
		                  if (location !== -1) {
		                      storedLevel = /^([^;]+)/.exec(
		                          cookie.slice(location + cookieName.length + 1)
		                      )[1];
		                  }
		              } catch (ignore) {}
		          }

		          // If the stored level is not valid, treat it as if nothing was stored.
		          if (self.levels[storedLevel] === undefined) {
		              storedLevel = undefined;
		          }

		          return storedLevel;
		      }

		      function clearPersistedLevel() {
		          if (typeof window === undefinedType || !storageKey) return;

		          // Use localStorage if available
		          try {
		              window.localStorage.removeItem(storageKey);
		          } catch (ignore) {}

		          // Use session cookie as fallback
		          try {
		              window.document.cookie =
		                encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
		          } catch (ignore) {}
		      }

		      function normalizeLevel(input) {
		          var level = input;
		          if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
		              level = self.levels[level.toUpperCase()];
		          }
		          if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
		              return level;
		          } else {
		              throw new TypeError("log.setLevel() called with invalid level: " + input);
		          }
		      }

		      /*
		       *
		       * Public logger API - see https://github.com/pimterry/loglevel for details
		       *
		       */

		      self.name = name;

		      self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3,
		          "ERROR": 4, "SILENT": 5};

		      self.methodFactory = factory || defaultMethodFactory;

		      self.getLevel = function () {
		          if (userLevel != null) {
		            return userLevel;
		          } else if (defaultLevel != null) {
		            return defaultLevel;
		          } else {
		            return inheritedLevel;
		          }
		      };

		      self.setLevel = function (level, persist) {
		          userLevel = normalizeLevel(level);
		          if (persist !== false) {  // defaults to true
		              persistLevelIfPossible(userLevel);
		          }

		          // NOTE: in v2, this should call rebuild(), which updates children.
		          return replaceLoggingMethods.call(self);
		      };

		      self.setDefaultLevel = function (level) {
		          defaultLevel = normalizeLevel(level);
		          if (!getPersistedLevel()) {
		              self.setLevel(level, false);
		          }
		      };

		      self.resetLevel = function () {
		          userLevel = null;
		          clearPersistedLevel();
		          replaceLoggingMethods.call(self);
		      };

		      self.enableAll = function(persist) {
		          self.setLevel(self.levels.TRACE, persist);
		      };

		      self.disableAll = function(persist) {
		          self.setLevel(self.levels.SILENT, persist);
		      };

		      self.rebuild = function () {
		          if (defaultLogger !== self) {
		              inheritedLevel = normalizeLevel(defaultLogger.getLevel());
		          }
		          replaceLoggingMethods.call(self);

		          if (defaultLogger === self) {
		              for (var childName in _loggersByName) {
		                _loggersByName[childName].rebuild();
		              }
		          }
		      };

		      // Initialize all the internal levels.
		      inheritedLevel = normalizeLevel(
		          defaultLogger ? defaultLogger.getLevel() : "WARN"
		      );
		      var initialLevel = getPersistedLevel();
		      if (initialLevel != null) {
		          userLevel = normalizeLevel(initialLevel);
		      }
		      replaceLoggingMethods.call(self);
		    }

		    /*
		     *
		     * Top-level API
		     *
		     */

		    defaultLogger = new Logger();

		    defaultLogger.getLogger = function getLogger(name) {
		        if ((typeof name !== "symbol" && typeof name !== "string") || name === "") {
		            throw new TypeError("You must supply a name when creating a logger.");
		        }

		        var logger = _loggersByName[name];
		        if (!logger) {
		            logger = _loggersByName[name] = new Logger(
		                name,
		                defaultLogger.methodFactory
		            );
		        }
		        return logger;
		    };

		    // Grab the current global log variable in case of overwrite
		    var _log = (typeof window !== undefinedType) ? window.log : undefined;
		    defaultLogger.noConflict = function() {
		        if (typeof window !== undefinedType &&
		               window.log === defaultLogger) {
		            window.log = _log;
		        }

		        return defaultLogger;
		    };

		    defaultLogger.getLoggers = function getLoggers() {
		        return _loggersByName;
		    };

		    // ES6 default export, for compatibility
		    defaultLogger['default'] = defaultLogger;

		    return defaultLogger;
		})); 
	} (loglevel$1));
	return loglevel$1.exports;
}

var loglevelExports = requireLoglevel();
var h = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);

const j=(t,e)=>s=>s(t,e),F=(t,e)=>s=>s(t,e,{append:false}),Y=()=>{const t=typeof process<"u"&&process.env?process.env:{},e=t.NODE_ENV==="test",s="VITEST"in t,a="JEST_WORKER_ID"in t,o="PLAYWRIGHT_TEST_BASE_URL"in t,r=t.CI==="true",i=t.TEST==="true"||t.IS_TEST==="true",c=typeof navigator<"u"&&navigator.webdriver===true,u=typeof navigator<"u"&&/playwright|puppeteer|webdriver|selenium|testcafe/i.test(navigator.userAgent);return e||s||a||o||r||i||c||u},n$1={A11yUi:{CSS_STYLE_CACHE:new Map,IS_TEST_ENVIRONMENT:Y(),PERFORMANCE_MEASURES:new Map,STYLING_TASK_QUEUE:new Map,THEMES:new Map,showAverageTimes:()=>{const t={};for(const[s,a]of n$1.A11yUi.PERFORMANCE_MEASURES.entries())t[s]=[a.totalTime/a.count,a.count];const e=Object.entries(t).sort((s,a)=>a[1][0]-s[1][0]);return console.table(Object.fromEntries(e.map(([s,[a,o]])=>[s,{"avg (ms)":parseFloat(a.toFixed(2)),count:o}]))),t}}};let T=true,f$1=false;const k=/^[a-z][a-z0-9]{1,}(-[a-z0-9]+)?$/,G=t=>typeof t=="string"&&k.test(t),A=t=>{if(!G(t))throw new Error(`[Theming] The theme identifier "${typeof t=="string"?t:""}" (Type: ${typeof t}) is not valid. Please use only follow this pattern: /^[a-z][a-z0-9]{1,}(-[a-z0-9]+)?$/`)},b=t=>t.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s*([{},;])\s*/g,"$1").replace(/:\s+/g,":").replace(/\s+/g," ").replace(/;\}/g,"}").trim(),x=(t,e,s,a)=>g(t,e,s,a),g=(t,e,s,a)=>{a=a??{},a.append=a.append??false,A(t),T&&!f$1&&(f$1=true,h.warn(`[Theming] The theme process is locked. This means that the theme "${t}" should not be patched.

    import { register } from 'adopted-style-sheets';
    import { defineCustomElements } from '...';
    import { THEME } from '...';

    register(THEME, defineCustomElements)
    .then(() => {
        // run your app or website
    })
    .catch(console.warn);`));let o=n$1.A11yUi.THEMES.get(t);if(o||(o=new Map,n$1.A11yUi.THEMES.set(t,o)),a.append&&o.has(e)){const r=o.get(e);o.set(e,b(`${r}${s}`));}else o.set(e,b(s));},K=(t,e,s,a)=>E(t,e,s,a),E=(t,e,s,a)=>(A(t),typeof e=="object"&&e!==null&&Object.getOwnPropertyNames(e).forEach(o=>{const r=e[o],i=o.toLowerCase(),c=typeof a?.transformTagName=="function"&&!["GLOBAL","PROPERTIES"].includes(o)?a.transformTagName(i):o;typeof r=="string"&&r.length>0&&g(t,c.toUpperCase(),r,s);}),t),U=t=>{if(t instanceof HTMLElement){if(typeof t.dataset.theme=="string")return t;{let e=t.parentNode;for(;e instanceof ShadowRoot;)e=e.host;return U(e)}}else return null},C=(t={})=>t.themeEncroachCss==="false"||t.themeReset==="true"?false:{mode:t.themeEncroachCssMode==="after"||t.themeEncroachCssMode==="before"?t.themeEncroachCssMode:"before"},d=()=>typeof n$1.A11yUi.Theme=="object"&&n$1.A11yUi.Theme!==null&&typeof n$1.A11yUi.Theme.cache=="boolean"&&typeof n$1.A11yUi.Theme.encroachCss=="object"&&n$1.A11yUi.Theme.encroachCss!==null&&typeof n$1.A11yUi.Theme.encroachCss.mode=="string"&&typeof n$1.A11yUi.Theme.name=="string",B=()=>!(typeof n$1.A11yUi.Theme=="object"&&n$1.A11yUi.Theme!==null)||n$1.A11yUi.Theme.name!=="default",w=t=>{if(d())return n$1.A11yUi.Theme;{const e={cache:true,encroachCss:C(),loglevel:"silent",mode:"csr",name:null},s=U(t);return s instanceof HTMLElement&&(e.cache=s.dataset.themeCache!=="false",e.encroachCss=C(s.dataset),e.loglevel=s.dataset.themeLoglevel==="debug"?s.dataset.themeLoglevel:"silent",e.mode=s.dataset.themeMode==="ssr"?s.dataset.themeMode:"csr",e.name=s.dataset.theme||null),e}},z=()=>d()?n$1.A11yUi.Theme.name:null,V=(t,e)=>({cache:e.cache!==false,detect:e.detect==="auto"?"auto":"fixed",encroachCss:e.encroachCss===false?false:typeof e.encroachCss=="object"&&e.encroachCss!=null&&(e.encroachCss.mode==="after"||e.encroachCss.mode==="before")?e.encroachCss:{mode:"before"},loglevel:e.loglevel==="debug"?e.loglevel:"silent",mode:e.mode==="ssr"?e.mode:"csr",name:typeof e.name=="string"?e.name:t}),W=(t,e)=>{d()===false&&B()&&typeof e=="object"&&e!==null&&(e=V(t,e),e.detect==="fixed"?(e.name===null&&typeof t=="string"&&(e.name=t),t===e.name&&(n$1.A11yUi.Theme=e,h.info(`[Theming] Theme "${t}" was set as default theme.`))):f$1||(f$1=true,h.warn("[Theming] The presetting of theme options is only relevant by using 'fixed' detection mode.")));};let M=false;const Z=(t,e,s={})=>{M||(M=true,T=false,typeof window<"u"&&(window.A11yUi=n$1.A11yUi)),typeof t=="function"?t=new Set([t]):Array.isArray(t)&&(t=new Set(t)),t instanceof Set&&t.forEach(o=>{typeof o=="function"&&o.length===1?W(o((r,i,c)=>E(r,i,c,s)),{cache:s.theme?.cache,detect:s.theme?.detect,encroachCss:s.theme?.encroachCss,mode:s.theme?.mode,name:s.theme?.name}):h.error("[Theming] An attempt was made to load an incompatible theme.");}),T=true,typeof e=="function"?e=new Set([e]):Array.isArray(e)&&(e=new Set(e));const a=[];return e.forEach(o=>{const r=o();r instanceof Promise&&a.push(r);}),Promise.all(a)};const v=new Set,N=new Map,ee=/--[^;]+/g,te=/:/,se=typeof MutationObserver<"u";let L=25,R=()=>{L=Math.min(25+Math.log2(n$1.A11yUi.STYLING_TASK_QUEUE.size+1)*20,250);};const ae=(t,e)=>{let s=e.match(ee);if(Array.isArray(s)){s=s.filter(o=>te.test(o));const a=document.createElement("style");a.innerHTML=`.${t} {${s.join(";")}}`,document.querySelector("head")?.appendChild(a);}v.add(t);},y=(t,e)=>{const s=n$1.A11yUi.THEMES.get(t);if(s instanceof Map){const a=s.get(e);if(a!==void 0)return a}return ""},oe=t=>{const e=t.firstChild;if(!(!(e instanceof HTMLStyleElement)||e.dataset.themingFallback!==void 0))for(const s of Array.from(t.childNodes))if(s instanceof HTMLStyleElement&&s.tagName==="STYLE"&&s.dataset.themingFallback===void 0)t.removeChild(s);else break},ne=(t,e)=>{try{if(n$1.A11yUi.Theme?.mode==="ssr")throw new Error("SSR");const s=e.filter(a=>typeof a=="string"&&a.length>0).map(a=>{let o=N.get(a);return o||(o=new CSSStyleSheet,o.replaceSync(a),N.set(a,o)),o});t.adoptedStyleSheets=s;}catch{for(let a=e.length-1;a>=0;a--){const o=e[a];if(typeof o!="string"||o.length===0)continue;const r=e.length-1-a,i=document.createElement("style");switch(i.dataset.themingFallback="",r){case 4:i.dataset.themingBaseA11y="";break;case 3:i.dataset.themingBaseGlobal="";break;case 2:i.dataset.themingBaseComponent="";break;case 1:i.dataset.themingCustomGlobal="";break;case 0:i.dataset.themingCustomComponent="";break;default:i.dataset.themingUnknown="";break}i.innerHTML=o,t.insertBefore(i,t.firstChild);}}},re=(t,e,s)=>{if(s===false||s?.mode!=="before"&&s?.mode!=="after")return;const a=Array.from(t.childNodes).filter(r=>r instanceof HTMLStyleElement&&r.tagName==="STYLE");let o;try{o=Array.from(t.adoptedStyleSheets);}catch{o=[];}if(!(a.length===0&&o.length===0))if(s.mode==="before"){const r=[...o.map(i=>Array.from(i.cssRules).map(c=>c.cssText).join("")),...a.map(i=>i.innerHTML)];e.unshift(...r);}else a.forEach(r=>e.push(r.innerHTML)),o.forEach(r=>e.push(Array.from(r.cssRules).map(i=>i.cssText).join("")));},ie=(t,e,s)=>{const a=e.name||"default";let o;try{if(t.shadowRoot===null)throw new Error("ShadowRoot is null");o=t.shadowRoot;}catch{o=t;}const r=n$1.A11yUi.CSS_STYLE_CACHE.get(a)?.get(t.tagName);if(r)_(t,o,r,s);else {const i=y(a,"PROPERTIES"),c=y(a,"GLOBAL"),u=y(a,t.tagName);v.has(a)===false&&ae(a,c);const p=[i,c,u];if(re(o,p,e.encroachCss),e.cache===true){let m=n$1.A11yUi.CSS_STYLE_CACHE.get(a);m||(m=new Map,n$1.A11yUi.CSS_STYLE_CACHE.set(a,m)),m.set(t.tagName,p);}_(t,o,p,s);}},_=(t,e,s,a)=>{const o=n$1.A11yUi.Theme?.loglevel==="debug",r=o?performance.now():0;if(oe(e),ne(e,s),fe(t),requestAnimationFrame(a),o){const i=performance.now()-r,c=n$1.A11yUi.PERFORMANCE_MEASURES.get(t.tagName);c?(c.count+=1,c.totalTime+=i):n$1.A11yUi.PERFORMANCE_MEASURES.set(t.tagName,{count:1,totalTime:i});}},O=t=>{const e=n$1.A11yUi.STYLING_TASK_QUEUE.get(t);if(e){const{resetCss:s,themeDetails:a}=e;ie(t,a,s);}},ce=100;let S=(t,e=0)=>{if(e>=ce)return;const s=setTimeout(()=>{clearTimeout(s),t.classList.contains("hydrated")?O(t):S(t,e+1);},L);};const le={attributes:true,attributeFilter:["class"],childList:false,subtree:false},me={attributes:true,attributeFilter:[],childList:false,subtree:false},I=se?new MutationObserver((t,e)=>{const s=[];for(const a of t){const o=a.target;o.classList.contains("hydrated")&&n$1.A11yUi.STYLING_TASK_QUEUE.has(o)&&(O(o),s.push(o));}for(const a of s)e.observe(a,me);}):null;I&&(S=t=>I.observe(t,le),R=()=>{});const H=new Map;let P=(t,e)=>{if(e){const o=H.get(e);if(o!==void 0)return o}const s=getComputedStyle(t).getPropertyValue("--theme-visibility-delay").trim();let a;if(s.endsWith("ms"))a=parseFloat(s);else if(s.endsWith("s"))a=parseFloat(s)*1e3;else {const o=parseFloat(s);a=isNaN(o)?0:o;}return e&&H.set(e,a),a};n$1.A11yUi.IS_TEST_ENVIRONMENT&&(P=()=>0);const $=(t,e)=>{t.style.setProperty("visibility",e),t.dataset.themed="";},he=(t,e)=>{const s=t.style.visibility||null,a=e.name||"default";n$1.A11yUi.STYLING_TASK_QUEUE.set(t,{resetCss:()=>{const o=P(t,a);o>0?setTimeout(()=>{$(t,s);},o):$(t,s);},themeDetails:e}),t.style.setProperty("visibility","hidden","important"),S(t);},fe=t=>{n$1.A11yUi.STYLING_TASK_QUEUE.delete(t),R();},de=(t,e)=>{he(t,{...n$1.A11yUi.Theme,...e});};class ye{Prefix;Key;Tag;createTheme=(e,s)=>F(e,s);createTranslation=(e,s)=>j(e,s);constructor(e,s,a){this.Prefix=e,this.Key=Object.getOwnPropertyNames(s),this.Tag=Object.getOwnPropertyNames(a);}}

const getWindow = () => {
    if (typeof window !== 'undefined')
        return window;
    return {};
};
const getDocument = () => {
    const win = getWindow();
    if (win && typeof win.document !== 'undefined')
        return win.document;
    return {};
};
const MODES = ['development', 'production', 'test'];
let runtimeMode = 'production';
const setRuntimeMode = (mode) => {
    try {
        if (MODES.includes(mode)) {
            runtimeMode = mode;
        }
        else {
            throw new Error(`Invalid NODE_ENV value: ${mode}. Expected one of ${MODES.join(', ')}.`);
        }
    }
    catch (_a) {
        runtimeMode = 'production';
    }
};
const getInitialMode = () => {
    try {
        const nodeEnv = typeof process !== 'undefined' && process.env ? process.env['NODE_ENV'] : undefined;
        if (nodeEnv && MODES.includes(nodeEnv)) {
            return nodeEnv;
        }
    }
    catch (_a) {
    }
    return 'production';
};
setRuntimeMode(getInitialMode());
let EXPERIMENTAL_MODE = false;
let COLOR_CONTRAST_ANALYSIS = false;
const isDevMode = () => runtimeMode === 'development';
const isTestMode = () => runtimeMode === 'test';
const getExperimentalMode = () => EXPERIMENTAL_MODE === true;
const setExperimentalMode = (mode) => {
    EXPERIMENTAL_MODE = mode === true;
};
const getColorContrastAnalysis = () => COLOR_CONTRAST_ANALYSIS === true;
const setColorContrastAnalysis = (mode) => {
    COLOR_CONTRAST_ANALYSIS = mode === true;
};
const LOG_STYLE = 'color: white; background: #666; font-weight: bold; padding: .25em .5em; border-radius: 3px; border: 1px solid #000';
const mapToArray = (msg) => {
    return Array.isArray(msg) ? msg : [msg];
};
const getLogLabel = (label) => {
    return `%c${label}`;
};
const handleClassifier = (label, classifier) => {
    if (typeof classifier === 'string' && classifier.length > 0) {
        return `${getLogLabel(label)} | ${classifier}`;
    }
    else {
        return getLogLabel(label);
    }
};
const getShield = (label, options) => {
    return [handleClassifier(label, options === null || options === void 0 ? void 0 : options.classifier), `${LOG_STYLE};${(options === null || options === void 0 ? void 0 : options.overwriteStyle) || ''}`];
};
const isDevModeOrForceLog = (forceLog) => isDevMode() || forceLog === true;
class Logger {
    constructor(label) {
        this.label = label;
    }
    debug(msg, options) {
        if (isDevModeOrForceLog(options === null || options === void 0 ? void 0 : options.forceLog)) {
            console.debug(...getShield(this.label, options), ...mapToArray(msg));
        }
    }
    info(msg, options) {
        if (isDevModeOrForceLog(options === null || options === void 0 ? void 0 : options.forceLog)) {
            console.info(...getShield(this.label, options), ...mapToArray(msg));
        }
    }
    trace(msg, options) {
        if (isDevModeOrForceLog(options === null || options === void 0 ? void 0 : options.forceLog)) {
            console.trace(...getShield(this.label, options), ...mapToArray(msg));
        }
    }
    warn(msg, options) {
        if (isDevModeOrForceLog(options === null || options === void 0 ? void 0 : options.forceLog)) {
            console.warn(...getShield(this.label, options), ...mapToArray(msg));
        }
    }
    error(msg, options) {
        console.error(...getShield(this.label, options), ...mapToArray(msg));
    }
    throw(msg, options) {
        if (isDevModeOrForceLog(options === null || options === void 0 ? void 0 : options.forceLog)) {
            throw new Error(...getShield(this.label, options), ...mapToArray(msg));
        }
    }
}
const Log = new Logger('KoliBri');

const a11yCache = new Set();
const a11yHint = (msg, options) => {
    if (a11yCache.has(msg) === false || false) {
        a11yCache.add(msg);
        Log.debug([msg].concat([]), {
            classifier: `✋ a11y`,
            forceLog: false,
            overwriteStyle: '; background-color: #09f',
        });
    }
};
const deprecatedCache = new Set();
const deprecatedHint = (msg, options) => {
    if (deprecatedCache.has(msg) === false || false) {
        deprecatedCache.add(msg);
        Log.warn([msg].concat([]), {
            classifier: `🔥 deprecated`,
            forceLog: false,
            overwriteStyle: '; background-color: #f00',
        });
    }
};
const devCache = new Set();
const devHint = (msg, options) => {
    if (devCache.has(msg) === false || !!(options === null || options === void 0 ? void 0 : options.force)) {
        devCache.add(msg);
        Log.debug([msg].concat((options === null || options === void 0 ? void 0 : options.details) || []), {
            classifier: `💻 dev`,
            forceLog: !!(options === null || options === void 0 ? void 0 : options.force),
            overwriteStyle: '; background-color: #f09',
        });
    }
};
const devWarning = (msg, options) => {
    if (devCache.has(msg) === false || false) {
        devCache.add(msg);
        Log.warn([msg].concat([]), {
            classifier: `⚠️ dev`,
            forceLog: false,
            overwriteStyle: '; background-color: #f09',
        });
    }
};
const featureCache = new Set();
const featureHint = (msg, done = false, options) => {
    if (featureCache.has(msg) === false || false) {
        featureCache.add(msg);
        msg += done === true ? ' ✅' : '';
        Log.debug([msg].concat([]), {
            classifier: `🌟 feature`,
            forceLog: false,
            overwriteStyle: '; background-color: #309',
        });
    }
};
devHint(`We appreciate any feedback, comments, screenshots, or demo links of an application based on KoliBri (kolibri@itzbund.de). Thank you!`);
const uiUxCache = new Set();
const uiUxHint = (msg, options) => {
    if (uiUxCache.has(msg) === false || false) {
        uiUxCache.add(msg);
        Log.debug([msg].concat([]), {
            classifier: `📑 ui/ux`,
            forceLog: false,
            overwriteStyle: '; background-color: #060;',
        });
    }
};
const a11yHintDisabled = () => {
    a11yHint(`"Disabled" limits accessibility and visibility. From an accessibility perspective, we recommend using the readonly attribute instead of disabled.\n- https://uxdesign.cc/is-it-ok-to-grey-out-disabled-buttons-8afa74a0fae`);
};
const a11yHintLabelingLandmarks = (value) => {
    if (typeof value !== 'string' || value === '') {
        a11yHint(`Some structural elements, such as the nav tag, can be used multiple times on a webpage. To distinguish between similarly named structural elements, it is necessary to set an ARIA label.\n- https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Navigation_Role#accessibility_concerns`);
    }
};
const uiUxHintMillerscheZahl = (className, length = 8) => {
    if (length > 7) {
        uiUxHint(`[${className}] Within navigation structures, it is recommended to use no more than 7 menu items.

Link:
- https://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two`);
    }
};

var n=.2126,r=.7152,t=.0722,e=1/12.92;function u(n){return Math.pow((n+.055)/1.055,2.4)}function a(a){var i=a[0]/255,c=a[1]/255,o=a[2]/255,s=i<=.03928?i*e:u(i),f=c<=.03928?c*e:u(c),l=o<=.03928?o*e:u(o);return s*n+f*r+l*t}function i(n){var r=255;8===(n=n.replace(/^#/,"")).length&&(r=parseInt(n.slice(6,8),16),n=n.substring(0,6)),4===n.length&&(r=parseInt(n.slice(3,4).repeat(2),16),n=n.substring(0,3)),3===n.length&&(n=n[0]+n[0]+n[1]+n[1]+n[2]+n[2]);var t=parseInt(n,16);return [t>>16,t>>8&255,255&t,r]}function c(n,r){return (Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function o(n,r){return c(a(n),a(r))}function s(n,r){return o(i(n),i(r))}function f(n){return n>=7?"AAA":n>=4.5?"AA":n>=3?"AA Large":"Fail"}

var colorName;
var hasRequiredColorName;

function requireColorName () {
	if (hasRequiredColorName) return colorName;
	hasRequiredColorName = 1;

	colorName = {
		"aliceblue": [240, 248, 255],
		"antiquewhite": [250, 235, 215],
		"aqua": [0, 255, 255],
		"aquamarine": [127, 255, 212],
		"azure": [240, 255, 255],
		"beige": [245, 245, 220],
		"bisque": [255, 228, 196],
		"black": [0, 0, 0],
		"blanchedalmond": [255, 235, 205],
		"blue": [0, 0, 255],
		"blueviolet": [138, 43, 226],
		"brown": [165, 42, 42],
		"burlywood": [222, 184, 135],
		"cadetblue": [95, 158, 160],
		"chartreuse": [127, 255, 0],
		"chocolate": [210, 105, 30],
		"coral": [255, 127, 80],
		"cornflowerblue": [100, 149, 237],
		"cornsilk": [255, 248, 220],
		"crimson": [220, 20, 60],
		"cyan": [0, 255, 255],
		"darkblue": [0, 0, 139],
		"darkcyan": [0, 139, 139],
		"darkgoldenrod": [184, 134, 11],
		"darkgray": [169, 169, 169],
		"darkgreen": [0, 100, 0],
		"darkgrey": [169, 169, 169],
		"darkkhaki": [189, 183, 107],
		"darkmagenta": [139, 0, 139],
		"darkolivegreen": [85, 107, 47],
		"darkorange": [255, 140, 0],
		"darkorchid": [153, 50, 204],
		"darkred": [139, 0, 0],
		"darksalmon": [233, 150, 122],
		"darkseagreen": [143, 188, 143],
		"darkslateblue": [72, 61, 139],
		"darkslategray": [47, 79, 79],
		"darkslategrey": [47, 79, 79],
		"darkturquoise": [0, 206, 209],
		"darkviolet": [148, 0, 211],
		"deeppink": [255, 20, 147],
		"deepskyblue": [0, 191, 255],
		"dimgray": [105, 105, 105],
		"dimgrey": [105, 105, 105],
		"dodgerblue": [30, 144, 255],
		"firebrick": [178, 34, 34],
		"floralwhite": [255, 250, 240],
		"forestgreen": [34, 139, 34],
		"fuchsia": [255, 0, 255],
		"gainsboro": [220, 220, 220],
		"ghostwhite": [248, 248, 255],
		"gold": [255, 215, 0],
		"goldenrod": [218, 165, 32],
		"gray": [128, 128, 128],
		"green": [0, 128, 0],
		"greenyellow": [173, 255, 47],
		"grey": [128, 128, 128],
		"honeydew": [240, 255, 240],
		"hotpink": [255, 105, 180],
		"indianred": [205, 92, 92],
		"indigo": [75, 0, 130],
		"ivory": [255, 255, 240],
		"khaki": [240, 230, 140],
		"lavender": [230, 230, 250],
		"lavenderblush": [255, 240, 245],
		"lawngreen": [124, 252, 0],
		"lemonchiffon": [255, 250, 205],
		"lightblue": [173, 216, 230],
		"lightcoral": [240, 128, 128],
		"lightcyan": [224, 255, 255],
		"lightgoldenrodyellow": [250, 250, 210],
		"lightgray": [211, 211, 211],
		"lightgreen": [144, 238, 144],
		"lightgrey": [211, 211, 211],
		"lightpink": [255, 182, 193],
		"lightsalmon": [255, 160, 122],
		"lightseagreen": [32, 178, 170],
		"lightskyblue": [135, 206, 250],
		"lightslategray": [119, 136, 153],
		"lightslategrey": [119, 136, 153],
		"lightsteelblue": [176, 196, 222],
		"lightyellow": [255, 255, 224],
		"lime": [0, 255, 0],
		"limegreen": [50, 205, 50],
		"linen": [250, 240, 230],
		"magenta": [255, 0, 255],
		"maroon": [128, 0, 0],
		"mediumaquamarine": [102, 205, 170],
		"mediumblue": [0, 0, 205],
		"mediumorchid": [186, 85, 211],
		"mediumpurple": [147, 112, 219],
		"mediumseagreen": [60, 179, 113],
		"mediumslateblue": [123, 104, 238],
		"mediumspringgreen": [0, 250, 154],
		"mediumturquoise": [72, 209, 204],
		"mediumvioletred": [199, 21, 133],
		"midnightblue": [25, 25, 112],
		"mintcream": [245, 255, 250],
		"mistyrose": [255, 228, 225],
		"moccasin": [255, 228, 181],
		"navajowhite": [255, 222, 173],
		"navy": [0, 0, 128],
		"oldlace": [253, 245, 230],
		"olive": [128, 128, 0],
		"olivedrab": [107, 142, 35],
		"orange": [255, 165, 0],
		"orangered": [255, 69, 0],
		"orchid": [218, 112, 214],
		"palegoldenrod": [238, 232, 170],
		"palegreen": [152, 251, 152],
		"paleturquoise": [175, 238, 238],
		"palevioletred": [219, 112, 147],
		"papayawhip": [255, 239, 213],
		"peachpuff": [255, 218, 185],
		"peru": [205, 133, 63],
		"pink": [255, 192, 203],
		"plum": [221, 160, 221],
		"powderblue": [176, 224, 230],
		"purple": [128, 0, 128],
		"rebeccapurple": [102, 51, 153],
		"red": [255, 0, 0],
		"rosybrown": [188, 143, 143],
		"royalblue": [65, 105, 225],
		"saddlebrown": [139, 69, 19],
		"salmon": [250, 128, 114],
		"sandybrown": [244, 164, 96],
		"seagreen": [46, 139, 87],
		"seashell": [255, 245, 238],
		"sienna": [160, 82, 45],
		"silver": [192, 192, 192],
		"skyblue": [135, 206, 235],
		"slateblue": [106, 90, 205],
		"slategray": [112, 128, 144],
		"slategrey": [112, 128, 144],
		"snow": [255, 250, 250],
		"springgreen": [0, 255, 127],
		"steelblue": [70, 130, 180],
		"tan": [210, 180, 140],
		"teal": [0, 128, 128],
		"thistle": [216, 191, 216],
		"tomato": [255, 99, 71],
		"turquoise": [64, 224, 208],
		"violet": [238, 130, 238],
		"wheat": [245, 222, 179],
		"white": [255, 255, 255],
		"whitesmoke": [245, 245, 245],
		"yellow": [255, 255, 0],
		"yellowgreen": [154, 205, 50]
	};
	return colorName;
}

/**
 * @module color-parse
 */

var colorParse;
var hasRequiredColorParse;

function requireColorParse () {
	if (hasRequiredColorParse) return colorParse;
	hasRequiredColorParse = 1;

	var names = requireColorName();

	colorParse = parse;

	/**
	 * Base hues
	 * http://dev.w3.org/csswg/css-color/#typedef-named-hue
	 */
	//FIXME: use external hue detector
	var baseHues = {
		red: 0,
		orange: 60,
		yellow: 120,
		green: 180,
		blue: 240,
		purple: 300
	};

	/**
	 * Parse color from the string passed
	 *
	 * @return {Object} A space indicator `space`, an array `values` and `alpha`
	 */
	function parse(cstr) {
		var m, parts = [], alpha = 1, space;

		if (typeof cstr === 'string') {
			cstr = cstr.toLowerCase();

			//keyword
			if (names[cstr]) {
				parts = names[cstr].slice();
				space = 'rgb';
			}

			//reserved words
			else if (cstr === 'transparent') {
				alpha = 0;
				space = 'rgb';
				parts = [0, 0, 0];
			}

			//hex
			else if (/^#[A-Fa-f0-9]+$/.test(cstr)) {
				var base = cstr.slice(1);
				var size = base.length;
				var isShort = size <= 4;
				alpha = 1;

				if (isShort) {
					parts = [
						parseInt(base[0] + base[0], 16),
						parseInt(base[1] + base[1], 16),
						parseInt(base[2] + base[2], 16)
					];
					if (size === 4) {
						alpha = parseInt(base[3] + base[3], 16) / 255;
					}
				}
				else {
					parts = [
						parseInt(base[0] + base[1], 16),
						parseInt(base[2] + base[3], 16),
						parseInt(base[4] + base[5], 16)
					];
					if (size === 8) {
						alpha = parseInt(base[6] + base[7], 16) / 255;
					}
				}

				if (!parts[0]) parts[0] = 0;
				if (!parts[1]) parts[1] = 0;
				if (!parts[2]) parts[2] = 0;

				space = 'rgb';
			}

			//color space
			else if (m = /^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(cstr)) {
				var name = m[1];
				var isRGB = name === 'rgb';
				var base = name.replace(/a$/, '');
				space = base;
				var size = base === 'cmyk' ? 4 : base === 'gray' ? 1 : 3;
				parts = m[2].trim()
					.split(/\s*[,\/]\s*|\s+/)
					.map(function (x, i) {
						//<percentage>
						if (/%$/.test(x)) {
							//alpha
							if (i === size) return parseFloat(x) / 100
							//rgb
							if (base === 'rgb') return parseFloat(x) * 255 / 100
							return parseFloat(x)
						}
						//hue
						else if (base[i] === 'h') {
							//<deg>
							if (/deg$/.test(x)) {
								return parseFloat(x)
							}
							//<base-hue>
							else if (baseHues[x] !== undefined) {
								return baseHues[x]
							}
						}
						return parseFloat(x)
					});

				if (name === base) parts.push(1);
				alpha = (isRGB) ? 1 : (parts[size] === undefined) ? 1 : parts[size];
				parts = parts.slice(0, size);
			}

			//named channels case
			else if (cstr.length > 10 && /[0-9](?:\s|\/)/.test(cstr)) {
				parts = cstr.match(/([0-9]+)/g).map(function (value) {
					return parseFloat(value)
				});

				space = cstr.match(/([a-z])/ig).join('').toLowerCase();
			}
		}

		//numeric case
		else if (!isNaN(cstr)) {
			space = 'rgb';
			parts = [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff];
		}

		//array-like
		else if (Array.isArray(cstr) || cstr.length) {
			parts = [cstr[0], cstr[1], cstr[2]];
			space = 'rgb';
			alpha = cstr.length === 4 ? cstr[3] : 1;
		}

		//object case - detects css cases of rgb and hsl
		else if (cstr instanceof Object) {
			if (cstr.r != null || cstr.red != null || cstr.R != null) {
				space = 'rgb';
				parts = [
					cstr.r || cstr.red || cstr.R || 0,
					cstr.g || cstr.green || cstr.G || 0,
					cstr.b || cstr.blue || cstr.B || 0
				];
			}
			else {
				space = 'hsl';
				parts = [
					cstr.h || cstr.hue || cstr.H || 0,
					cstr.s || cstr.saturation || cstr.S || 0,
					cstr.l || cstr.lightness || cstr.L || cstr.b || cstr.brightness
				];
			}

			alpha = cstr.a || cstr.alpha || cstr.opacity || 1;

			if (cstr.opacity != null) alpha /= 100;
		}

		return {
			space: space,
			values: parts,
			alpha: alpha
		}
	}
	return colorParse;
}

var colorParseExports = requireColorParse();
var parse = /*@__PURE__*/getDefaultExportFromCjs(colorParseExports);

/**
 * RGB space.
 *
 * @module  color-space/rgb
 */
const rgb = {
	min: [0, 0, 0],
	max: [255, 255, 255]};

/**
 * @module color-space/hsl
 */

var hsl = {
	name: 'hsl',
	min: [0, 0, 0],
	max: [360, 100, 100],
	channel: ['hue', 'saturation', 'lightness'],
	alias: ['HSL'],

	rgb: function (hsl) {
		var h = hsl[0] / 360, s = hsl[1] / 100, l = hsl[2] / 100, t1, t2, t3, rgb, val, i = 0;

		if (s === 0) return val = l * 255, [val, val, val];

		t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;
		t1 = 2 * l - t2;

		rgb = [0, 0, 0];
		for (; i < 3;) {
			t3 = h + 1 / 3 * - (i - 1);
			t3 < 0 ? t3++ : t3 > 1 && t3--;
			val = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 :
				2 * t3 < 1 ? t2 :
					3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 :
						t1;
			rgb[i++] = val * 255;
		}

		return rgb;
	}
};


//extend rgb
rgb.hsl = function (rgb) {
	var r = rgb[0] / 255,
		g = rgb[1] / 255,
		b = rgb[2] / 255,
		min = Math.min(r, g, b),
		max = Math.max(r, g, b),
		delta = max - min,
		h, s, l;

	if (max === min) {
		h = 0;
	}
	else if (r === max) {
		h = (g - b) / delta;
	}
	else if (g === max) {
		h = 2 + (b - r) / delta;
	}
	else if (b === max) {
		h = 4 + (r - g) / delta;
	}

	//FIXME h is possibly undefined
	//@ts-ignore
	h = Math.min(h * 60, 360);

	if (h < 0) {
		h += 360;
	}

	l = (min + max) / 2;

	if (max === min) {
		s = 0;
	}
	else if (l <= 0.5) {
		s = delta / (max + min);
	}
	else {
		s = delta / (2 - max - min);
	}

	return [h, s * 100, l * 100];
};

var rgbaConvert = {exports: {}};

var hasRequiredRgbaConvert;

function requireRgbaConvert () {
	if (hasRequiredRgbaConvert) return rgbaConvert.exports;
	hasRequiredRgbaConvert = 1;
	rgbaConvert.exports     = arr;
	rgbaConvert.exports.arr = arr;
	rgbaConvert.exports.obj = obj;
	rgbaConvert.exports.css = css;
	rgbaConvert.exports.hex = hex;
	rgbaConvert.exports.num = num;

	function arr(data) {
	  var a = parse(data);
	  if (a.length == 3) {
	    return a.concat(255)
	  } else {
	    a[3] = Math.round(a[3]);
	    return a
	  }
	}

	function obj(data) {
	  var a = parse(data);
	  return {
	    r: a[0],
	    g: a[1],
	    b: a[2],
	    a: a.length == 3
	      ? 255
	      : Math.round(a[3])
	  }
	}

	function css(data) {
	  var a = parse(data);
	  if (a.length == 3) a.push(255);

	  return a[3] == 255
	    ? 'rgb(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')'
	    : a[3] == 0
	      ? 'rgba(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', 0)'
	      : 'rgba(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + String(a[3] / 255).substr(1) + ')'
	}

	function hex(data) {
	  var a = parse(data);
	  if (a.length == 3) a.push(255);
	  var opaque = a[3] == 255;
	  var r = num2hex(a[0]);
	  var g = num2hex(a[1]);
	  var b = num2hex(a[2]);
	  var a = num2hex(Math.round(a[3]));
	  var is = isshort(r, g, b, a);
	  if (opaque) {
	    return is
	      ? '#' + r.charAt(0) + g.charAt(0) + b.charAt(0)
	      : '#' + r + g + b
	  }
	  return is
	    ? '#' + r.charAt(0) + g.charAt(0) + b.charAt(0) + a.charAt(0)
	    : '#' + r + g + b + a
	}

	function num(data) {
	  var a = parse(data);
	  if (a.length == 3) a.push(255);
	  else a[3] = Math.round(a[3]);
	  return ((a[3] << 24) >>> 0 | a[0] << 16 | a[1] << 8 | a[2]) >>> 0
	}

	function parse(data) {
	  if (typeof data == 'string') {
	    data = data.toLowerCase();
	    return name(data)
	      || hex3(data)
	      || hex6(data)
	      || rgb(data)
	      || rgba(data)
	      || [0, 0, 0, 255]
	  }
	  return object(data)
	    || array(data)
	    || number(data)
	    || [0, 0, 0, 255]
	}

	function num2hex(num) {
	  var s = num.toString(16);
	  return s.length == 1
	    ? '0' + s
	    : s
	}

	function isshort(r, g, b, a) {
	  var h = ['ff', '00', '11', '22', '33', '44', '55', '66',
	           '77', '88', '99', 'aa', 'bb', 'cc', 'dd', 'ee'];
	  return h.indexOf(r) != -1
	    && h.indexOf(g) != -1
	    && h.indexOf(b) != -1
	    && h.indexOf(a) != -1
	}

	function name(str) {
	  if (str == 'red')     return [255, 0, 0]
	  if (str == 'green')   return [0, 255, 0]
	  if (str == 'blue')    return [0, 0, 255]
	  if (str == 'black')   return [0, 0, 0]
	  if (str == 'white')   return [255, 255, 255]
	  if (str == 'cyan')    return [0, 255, 255]
	  if (str == 'gray')    return [128, 128, 128]
	  if (str == 'grey')    return [128, 128, 128]
	  if (str == 'magenta') return [255, 0, 255]
	  // ok, not the real css `pink` but my personal `magenta` alias
	  // `pink` is simpler than `fuchsia`, whatever...
	  if (str == 'pink')    return [255, 0, 255]
	  if (str == 'yellow')  return [255, 255, 0]
	}

	function hex2num(str) {
	  return str.length == 1
	    ? parseInt(str + str, 16)
	    : parseInt(str, 16)
	}

	function hex3(str) {
	  var s = str.replace(/^#/,'');
	  var l = s.length;
	  if (l == 3 || l == 4) {
	    var r = hex2num(s[0]);
	    var g = hex2num(s[1]);
	    var b = hex2num(s[2]);
	    var a = l == 3
	      ? 255
	      : hex2num(s[3]);

	    if (isNaN(r) || isNaN(g) || isNaN(b) || isNaN(a)) return

	    return [r, g, b, a]
	  }
	}

	function hex6(str) {
	  var s = str.replace(/^#/,'');
	  var l = s.length;
	  if (l == 6 || l == 8) {
	    var r = hex2num(s.slice(0, 2));
	    var g = hex2num(s.slice(2, 4));
	    var b = hex2num(s.slice(4, 6));
	    var a = l == 6
	      ? 255
	      : hex2num(s.slice(6, 8));

	    if (isNaN(r) || isNaN(g) || isNaN(b) || isNaN(a)) return

	    return [r, g, b, a]
	  }
	}

	function getnum(val, integer) {
	  if (typeof val != 'number') return -1
	  if (integer === true && Math.floor(val) !== val) return -1
	  return val >= 0 && val <= 255
	    ? val
	    : -1
	}

	function object(obj) {
	  if (Object.prototype.toString.call(obj) === '[object Object]'
	    && Object.getPrototypeOf(obj) === Object.getPrototypeOf({})) {
	    var r = getnum(obj.r != undefined ? obj.r : obj.red   != undefined ? obj.red   : 0,   true);
	    var g = getnum(obj.g != undefined ? obj.g : obj.green != undefined ? obj.green : 0,   true);
	    var b = getnum(obj.b != undefined ? obj.b : obj.blue  != undefined ? obj.blue  : 0,   true);
	    var a = getnum(obj.a != undefined ? obj.a : obj.alpha != undefined ? obj.alpha : 255, true);
	    if (r != -1 && g != -1 && b != -1 && a != -1) {
	      return [r, g, b, a]
	    }
	  }
	}

	function array(arr) {
	  if (Array.isArray(arr) && (arr.length == 3 || arr.length == 4)) {
	    var r = getnum(arr[0],   true);
	    var g = getnum(arr[1],   true);
	    var b = getnum(arr[2],   true);
	    var a = getnum(arr[3] != undefined ? arr[3] : 255, true);
	    if (r != -1 && g != -1 && b != -1 && a != -1) {
	      return [r, g, b, a]
	    }
	  }
	}

	function number(num) {
	  if (typeof num == 'number' && Math.floor(num) == num && num <= 4294967295 && num >= 0) {
	    var a = num >> 24 & 255;
	    var r = num >> 16 & 255;
	    var g = num >> 8  & 255;
	    var b = num & 255;
	    return [r, g, b, a]
	  }
	}

	function rgb(str) {
	  if (str.substr(0, 4) == 'rgb(') {
	    str = str.match(/^rgb\(([^)]+)\)/)[1];
	    var t = str.split(/ *, */).map(Number);
	    var r = getnum(t[0], true);
	    var g = getnum(t[1], true);
	    var b = getnum(t[2], true);
	    if (r != -1 && g != -1 && b != -1) {
	      return [r, g, b, 255]
	    }
	  }
	}

	function rgba(str) {
	  if (str.substr(0, 5) == 'rgba(') {
	    str = str.match(/^rgba\(([^)]+)\)/)[1];
	    var t = str.split(/ *, */).map(Number);
	    var r = getnum(t[0], true);
	    var g = getnum(t[1], true);
	    var b = getnum(t[2], true);
	    var a = getnum(t[3] * 255);
	    if (r != -1 && g != -1 && b != -1 && a != -1) {
	      return [r, g, b, a]
	    }
	  }
	}
	return rgbaConvert.exports;
}

var rgbaConvertExports = requireRgbaConvert();
var rgba = /*@__PURE__*/getDefaultExportFromCjs(rgbaConvertExports);

const OBJECT_OBJECT = /\[object Object\]/;
const objectObjectHandler = (value, cb) => {
    if (typeof value === 'string' && OBJECT_OBJECT.test(value)) {
        return;
    }
    cb();
};
const emptyStringByArrayHandler = (value, cb) => {
    if (typeof value === 'string' && value === '') {
        return;
    }
    cb();
};
const setEventTarget = (event, target) => {
    if (getExperimentalMode()) {
        Log.debug([event, target]);
        Log.debug(`↑ We propagate the (submit) event to this target.`);
    }
    Object.defineProperty(event, 'target', {
        value: target,
        writable: false,
    });
};
const patchState = (component) => {
    var _a, _b, _c;
    (_a = component.nextHooks) === null || _a === void 0 ? void 0 : _a.forEach((hooks, key) => {
        var _a;
        const beforePatch = hooks.get('beforePatch');
        if (typeof beforePatch === 'function') {
            beforePatch((_a = component.nextState) === null || _a === void 0 ? void 0 : _a.get(key), component.nextState, component, key);
        }
    });
    if (((_b = component.nextState) === null || _b === void 0 ? void 0 : _b.size) > 0) {
        component.state = Object.assign(Object.assign({}, component.state), Object.fromEntries(component.nextState));
        delete component.nextState;
        (_c = component.nextHooks) === null || _c === void 0 ? void 0 : _c.forEach((hooks, key) => {
            const afterPatch = hooks.get('afterPatch');
            if (typeof afterPatch === 'function') {
                afterPatch(component.state[key], component.state, component, key);
            }
        });
    }
    delete component.nextHooks;
};
const setState = (component, propName, value, hooks = {}) => {
    var _a, _b;
    if (component.nextHooks === undefined) {
        component.nextHooks = new Map();
    }
    if (component.nextState === undefined) {
        component.nextState = new Map();
    }
    const nextHooks = component.nextHooks.get(propName);
    if (nextHooks instanceof Map === false) {
        component.nextHooks.set(propName, new Map());
    }
    if (typeof hooks.afterPatch === 'function') {
        (_a = component.nextHooks.get(propName)) === null || _a === void 0 ? void 0 : _a.set('afterPatch', hooks.afterPatch);
    }
    if (typeof hooks.beforePatch === 'function') {
        (_b = component.nextHooks.get(propName)) === null || _b === void 0 ? void 0 : _b.set('beforePatch', hooks.beforePatch);
    }
    component.nextState.set(propName, value);
    patchState(component);
};
const logWarn = (component, propName, value, requiredGeneric) => {
    devHint(`[${component.constructor.name}] The property value: (${value}) for '${propName}' is not valid. Allowed values are: ${Array.from(requiredGeneric).join(', ')}`);
};
function watchValidator(component, propName, validationFunction, requiredGeneric, value, options = {}) {
    if (validationFunction(value)) {
        setState(component, propName, value, options.hooks);
    }
    else if (value === undefined && options.required !== true && validationFunction(options.defaultValue)) {
        setState(component, propName, options.defaultValue, options.hooks);
    }
    else {
        if (!options.required) {
            requiredGeneric.add(null);
        }
        logWarn(component, propName, value, requiredGeneric);
    }
}
const watchBoolean = (component, propName, value, options) => {
    watchValidator(component, propName, (value) => typeof value === 'boolean', new Set(['Boolean {true, false}']), value, options);
};
const watchString = (component, propName, value, options = {}) => {
    const minLength = typeof options.minLength === 'number' ? options === null || options === void 0 ? void 0 : options.minLength : 0;
    watchValidator(component, propName, (value) => typeof value === 'string' && value.length >= minLength && (typeof (options === null || options === void 0 ? void 0 : options.maxLength) === 'undefined' || value.length <= options.maxLength), new Set([`String`]), value, options);
};
const watchNumber = (component, propName, value, options) => {
    watchValidator(component, propName, (value) => typeof value === 'number' &&
        (typeof (options === null || options === void 0 ? void 0 : options.min) === 'undefined' || (typeof (options === null || options === void 0 ? void 0 : options.min) === 'number' && value >= options.min)) &&
        (typeof (options === null || options === void 0 ? void 0 : options.max) === 'undefined' || (typeof (options === null || options === void 0 ? void 0 : options.max) === 'number' && value <= options.max)), new Set(['Number']), value, options);
};
const watchJsonArrayString = (component, propName, itemValidation, value, arrayValidation = (items) => items === items, options = {}) => {
    emptyStringByArrayHandler(value, () => {
        objectObjectHandler(value, () => {
            if (typeof value === 'undefined') {
                value = [];
            }
            try {
                try {
                    value = parseJson(value);
                }
                catch (_a) {
                }
                if (Array.isArray(value)) {
                    const invalid = value.find((item) => !itemValidation(item));
                    if (invalid === undefined && arrayValidation(value)) {
                        setState(component, propName, value, options.hooks);
                    }
                    else {
                        objectObjectHandler(invalid, () => {
                            Log.debug(invalid);
                            throw new Error(`↑ The schema for the property (_options) is not valid. The value will not be changed.`);
                        });
                    }
                }
                else {
                    objectObjectHandler(value, () => {
                        Log.debug(value);
                        throw new Error(`↑ The schema for the property (_options) is not valid. The value will not be changed.`);
                    });
                }
            }
            catch (error) {
                Log.debug(error);
            }
        });
    });
};
const stringifyJson = (value) => {
    try {
        return JSON.stringify(value).replace(/"/g, "'");
    }
    catch (_a) {
        Log.warn(['stringifyJson', value]);
        Log.error(`↑ The JSON could not be converted to a string. A stringifiable JSON is expected.`);
        throw new Error();
    }
};
const JSON_CHARS = /^[{[]/;
const parseJson = (value) => {
    if (typeof value === 'string') {
        try {
            return JSON.parse(value);
        }
        catch (_a) {
            if (JSON_CHARS.test(value)) {
                try {
                    return JSON.parse(value.replace(/'/g, '"'));
                }
                catch (_b) {
                    Log.warn(['parseJson', value]);
                    Log.error(`↑ The JSON string could not be parsed. Make sure that single quotes in the text are escaped (&#8216;).`);
                }
            }
        }
    }
    throw new Error();
};
const mapBoolean2String = (value) => {
    return typeof value === 'boolean' ? (value === true ? 'true' : 'false') : undefined;
};
const mapStringOrBoolean2String = (value) => {
    return typeof value === 'string' ? value : mapBoolean2String(value);
};
const traverseShadowDom = (rootNode, onNode) => {
    if (!rootNode) {
        return;
    }
    const visited = new Set();
    const queue = [rootNode];
    let index = 0;
    while (index < queue.length) {
        const current = queue[index++];
        if (visited.has(current)) {
            continue;
        }
        visited.add(current);
        if (onNode(current)) {
            return;
        }
        const children = Array.from(current.children || []);
        for (let i = 0; i < children.length; i++) {
            queue.push(children[i]);
        }
        if (current instanceof HTMLElement && current.shadowRoot) {
            queue.push(current.shadowRoot);
        }
        if (current instanceof HTMLSlotElement) {
            const assigned = current.assignedNodes({ flatten: true });
            for (let i = 0; i < assigned.length; i++) {
                if (assigned[i] instanceof Element) {
                    queue.push(assigned[i]);
                }
            }
        }
    }
};
const querySelectorShadow = (selector, rootNode) => {
    let result = null;
    traverseShadowDom(rootNode, (current) => {
        if (current instanceof Element && current.matches(selector)) {
            result = current;
            return true;
        }
        return false;
    });
    return result;
};
const querySelectorAllShadow = (selector, rootNode) => {
    const results = [];
    traverseShadowDom(rootNode, (current) => {
        if (current instanceof Element && current.matches(selector)) {
            results.push(current);
        }
        return false;
    });
    return results;
};
const koliBriQuerySelector = (selector, node) => querySelectorShadow(selector, node || getDocument());
const koliBriQuerySelectorAll = (selector, node) => querySelectorAllShadow(selector, node || getDocument());
let DEFAULT_COLOR_CONTRAST = null;
const getDefaultColorContrast = () => {
    DEFAULT_COLOR_CONTRAST = DEFAULT_COLOR_CONTRAST || {
        backgroundColor: '#00000000',
        color: '#00000000',
        domNode: getDocument().body,
        level: 'Fail',
        score: 1,
    };
    return DEFAULT_COLOR_CONTRAST;
};
const TRANSPARENT_REGEXP = /(\d+, ){3}0\)/;
const koliBriA11yColorContrast = (domNode, a11yColorContrast = getDefaultColorContrast()) => {
    const computedStyle = getComputedStyle(domNode);
    const hexBG = TRANSPARENT_REGEXP.test(computedStyle.backgroundColor) ? a11yColorContrast.backgroundColor : rgba.hex(computedStyle.backgroundColor);
    const hexC = TRANSPARENT_REGEXP.test(computedStyle.color) ? a11yColorContrast.color : rgba.hex(computedStyle.color);
    const diff = s(hexBG, hexC);
    const contrast = {
        backgroundColor: hexBG,
        color: hexC,
        domNode: domNode,
        level: f(diff),
        score: diff,
    };
    if (diff < 4.5) {
        Log.error([
            'Color-Contrast-Error',
            {
                backgroundColor: contrast.backgroundColor,
                color: contrast.color,
                level: contrast.level,
                score: contrast.score,
            },
            contrast.domNode,
        ]);
    }
    return contrast;
};
const koliBriQuerySelectorColors = (selector, a11yColorContrast = getDefaultColorContrast()) => {
    if (a11yColorContrast.domNode instanceof HTMLElement) {
        a11yColorContrast = koliBriA11yColorContrast(a11yColorContrast.domNode, a11yColorContrast);
    }
    const selectedNode = a11yColorContrast.domNode.querySelector(selector);
    if (selectedNode === null) {
        const nodeList = a11yColorContrast.domNode.querySelectorAll('[class="hydrated"]');
        for (let i = 0; i < nodeList.length; i++) {
            a11yColorContrast.domNode = nodeList[i];
            a11yColorContrast = koliBriQuerySelectorColors(selector, a11yColorContrast);
            if (a11yColorContrast.domNode !== null) {
                break;
            }
        }
        return a11yColorContrast;
    }
    else {
        return koliBriA11yColorContrast(selectedNode, a11yColorContrast);
    }
};
class KoliBriUtils {
    static queryHtmlElementColors(targetNode, a11yColorContrast, recursion = false, log = true) {
        let returnValue = null;
        if (recursion === true || KoliBriUtils.executionLock === false) {
            if (recursion === false) {
                KoliBriUtils.cache.clear();
                KoliBriUtils.cache.set(a11yColorContrast.domNode, a11yColorContrast);
                KoliBriUtils.executionLock = true;
                if (log === true) {
                    Log.debug(`[KoliBriUtils] Color contrast analysis started...`);
                }
            }
            if (targetNode === a11yColorContrast.domNode) {
                returnValue = a11yColorContrast;
            }
            else {
                const children = new Set();
                if (a11yColorContrast.domNode.shadowRoot) {
                    const shadowChildren = a11yColorContrast.domNode.shadowRoot.children;
                    for (let i = 0; i < shadowChildren.length; i++) {
                        children.add(shadowChildren[i]);
                    }
                }
                const slotElement = a11yColorContrast.domNode;
                if (typeof slotElement.assignedNodes === 'function') {
                    const slotChildren = slotElement.assignedNodes();
                    for (let i = 0; i < slotChildren.length; i++) {
                        if (slotChildren[i] instanceof HTMLElement) {
                            children.add(slotChildren[i]);
                        }
                    }
                }
                const domChildren = a11yColorContrast.domNode.children;
                for (let i = 0; i < domChildren.length; i++) {
                    children.add(domChildren[i]);
                }
                const arrayChildren = Array.from(children);
                for (let i = 0; i < arrayChildren.length; i++) {
                    let colorContrast = KoliBriUtils.cache.get(arrayChildren[i]);
                    if (colorContrast === undefined) {
                        colorContrast = koliBriA11yColorContrast(arrayChildren[i], a11yColorContrast);
                    }
                    KoliBriUtils.cache.set(arrayChildren[i], colorContrast);
                    const colors = KoliBriUtils.queryHtmlElementColors(targetNode, colorContrast, true, false);
                    if (colors !== null) {
                        returnValue = colors;
                        break;
                    }
                }
            }
        }
        else {
            Log.debug(`[KoliBriUtils] Call aborted because a color contrast analysis is currently being executed.`);
        }
        if (recursion === false) {
            if (log === true) {
                Log.debug(`[KoliBriUtils] Color contrast analysis finished (${KoliBriUtils.cache.size} DOM elements are analysed).`);
            }
            KoliBriUtils.executionLock = false;
            KoliBriUtils.cache.clear();
        }
        return returnValue;
    }
}
KoliBriUtils.executionLock = false;
KoliBriUtils.cache = new Map();
class KoliBriDevHelper {
}
KoliBriDevHelper.getCssStyle = y;
KoliBriDevHelper.patchTheme = K;
KoliBriDevHelper.patchThemeTag = x;
KoliBriDevHelper.querySelector = koliBriQuerySelector;
KoliBriDevHelper.querySelectorAll = koliBriQuerySelectorAll;
KoliBriDevHelper.stringifyJson = stringifyJson;

export { getWindow as A, parse as B, hsl as C, rgb as D, rgba as E, s as F, watchJsonArrayString as G, uiUxHintMillerscheZahl as H, watchNumber as I, getExperimentalMode as J, KoliBriDevHelper as K, Log as L, devWarning as M, emptyStringByArrayHandler as N, koliBriQuerySelector as O, isDevMode as P, koliBriA11yColorContrast as Q, koliBriQuerySelectorAll as R, koliBriQuerySelectorColors as S, KoliBriUtils as T, stringifyJson as U, getColorContrastAnalysis as V, Z, watchValidator as a, watchBoolean as b, a11yHintLabelingLandmarks as c, de as d, mapBoolean2String as e, featureHint as f, setEventTarget as g, watchString as h, deprecatedHint as i, devHint as j, setRuntimeMode as k, getDefaultExportFromCjs as l, mapStringOrBoolean2String as m, getDocument as n, objectObjectHandler as o, parseJson as p, a11yHint as q, isTestMode as r, setState as s, a11yHintDisabled as t, uiUxHint as u, setExperimentalMode as v, w, setColorContrastAnalysis as x, ye as y, z };
//# sourceMappingURL=prop.validators.js.map

//# sourceMappingURL=prop.validators.js.map