diff --git a/apps/systemtags/src/files_actions/inlineSystemTagsAction.spec.ts b/apps/systemtags/src/files_actions/inlineSystemTagsAction.spec.ts index 401be5dcb70d9..28f0f756811c0 100644 --- a/apps/systemtags/src/files_actions/inlineSystemTagsAction.spec.ts +++ b/apps/systemtags/src/files_actions/inlineSystemTagsAction.spec.ts @@ -101,7 +101,7 @@ describe('Inline system tags action render tests', () => { contents: [], }) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toMatchInlineSnapshot('""') + expect(result!.outerHTML).toMatchInlineSnapshot('"
"') }) test('Render a single system tag', async () => { @@ -126,7 +126,7 @@ describe('Inline system tags action render tests', () => { contents: [], }) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toMatchInlineSnapshot('""') + expect(result!.outerHTML).toMatchInlineSnapshot('"
"') }) test('Render two system tags', async () => { @@ -151,7 +151,7 @@ describe('Inline system tags action render tests', () => { contents: [], }) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toMatchInlineSnapshot('""') + expect(result!.outerHTML).toMatchInlineSnapshot('"
"') }) test('Render multiple system tags', async () => { @@ -181,7 +181,7 @@ describe('Inline system tags action render tests', () => { contents: [], }) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toMatchInlineSnapshot('""') + expect(result!.outerHTML).toMatchInlineSnapshot('"
"') }) test('Render gets updated on system tag change', async () => { @@ -212,7 +212,7 @@ describe('Inline system tags action render tests', () => { }) as HTMLElement document.body.appendChild(result) expect(result).toBeInstanceOf(HTMLElement) - expect(document.body.innerHTML).toMatchInlineSnapshot('""') + expect(document.body.innerHTML).toMatchInlineSnapshot('"
"') // Subscribe to the event const eventPromise = new Promise((resolve) => { @@ -229,7 +229,7 @@ describe('Inline system tags action render tests', () => { // Wait for the event to be processed await eventPromise - expect(document.body.innerHTML).toMatchInlineSnapshot('""') + expect(document.body.innerHTML).toMatchInlineSnapshot('"
"') }) }) @@ -273,7 +273,7 @@ describe('Inline system tags action colors', () => { contents: [], }) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toMatchInlineSnapshot('""') + expect(result!.outerHTML).toMatchInlineSnapshot('"
"') }) test('Render a single system tag with invalid WCAG color', async () => { @@ -300,7 +300,7 @@ describe('Inline system tags action colors', () => { contents: [], }) expect(result).toBeInstanceOf(HTMLElement) - expect(result!.outerHTML).toMatchInlineSnapshot('""') + expect(result!.outerHTML).toMatchInlineSnapshot('"
"') document.body.removeAttribute('data-themes') }) @@ -328,7 +328,7 @@ describe('Inline system tags action colors', () => { }) as HTMLElement document.body.appendChild(result) expect(result).toBeInstanceOf(HTMLElement) - expect(document.body.innerHTML).toMatchInlineSnapshot('""') + expect(document.body.innerHTML).toMatchInlineSnapshot('"
"') // Subscribe to the event const eventPromise = new Promise((resolve) => { @@ -344,6 +344,6 @@ describe('Inline system tags action colors', () => { // Wait for the event to be processed await eventPromise - expect(document.body.innerHTML).toMatchInlineSnapshot('""') + expect(document.body.innerHTML).toMatchInlineSnapshot('"
"') }) }) diff --git a/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts b/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts index f1766fc467ab6..0361803710297 100644 --- a/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts +++ b/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts @@ -34,12 +34,15 @@ export const action: IFileAction = { return true }, - exec: async () => null, - renderInline: ({ nodes }) => { + async exec() { + return null + }, + + async renderInline({ nodes }) { if (nodes.length !== 1 || !nodes[0]) { - return Promise.resolve(null) + return null } - return renderInline(nodes[0]) + return await renderInline(nodes[0]) }, order: 0, @@ -56,12 +59,12 @@ subscribe('systemtags:tag:updated', updateTag) * * @param node - The updated node */ -function updateSystemTagsHtml(node: INode) { - renderInline(node).then((systemTagsHtml) => { - document.querySelectorAll(`[data-systemtags-fileid="${node.fileid}"]`).forEach((element) => { - element.replaceWith(systemTagsHtml) - }) - }) +async function updateSystemTagsHtml(node: INode) { + const systemTagsHtml = await renderInline(node) + const elements = document.querySelectorAll(`[data-systemtags-fileid="${node.id}"]`) + for (const element of elements) { + element.replaceWith(systemTagsHtml) + } } /** @@ -145,50 +148,50 @@ function renderTag(tag: string, isMore = false): HTMLElement { async function renderInline(node: INode): Promise { // Ensure we have the system tags as an array const tags = getNodeSystemTags(node) - - const systemTagsElement = document.createElement('ul') - systemTagsElement.classList.add('files-list__system-tags') - systemTagsElement.setAttribute('aria-label', t('files', 'Assigned collaborative tags')) - systemTagsElement.setAttribute('data-systemtags-fileid', node.fileid?.toString() || '') - - if (tags.length === 0) { - return systemTagsElement - } - - // Fetch the tags if the cache is empty - if (cache.length === 0) { - try { - // Best would be to support attributes from webdav, - // but currently the library does not support it - cache.push(...await fetchTags()) - } catch (error) { - logger.error('Failed to fetch tags', { error }) + const systemTagsElementWrapper = document.createElement('div') + systemTagsElementWrapper.setAttribute('data-systemtags-fileid', node.id || '') + + if (tags.length > 0) { + const systemTagsElement = document.createElement('ul') + systemTagsElement.classList.add('files-list__system-tags') + systemTagsElement.setAttribute('aria-label', t('files', 'Assigned collaborative tags')) + systemTagsElementWrapper.appendChild(systemTagsElement) + + // Fetch the tags if the cache is empty + if (cache.length === 0) { + try { + // Best would be to support attributes from webdav, + // but currently the library does not support it + cache.push(...await fetchTags()) + } catch (error) { + logger.error('Failed to fetch tags', { error }) + } } - } - systemTagsElement.append(renderTag(tags[0]!)) - if (tags.length === 2) { - // Special case only two tags: - // the overflow fake tag would take the same space as this, so render it - systemTagsElement.append(renderTag(tags[1]!)) - } else if (tags.length > 1) { - // More tags than the one we're showing - // So we add a overflow element indicating there are more tags - const moreTagElement = renderTag('+' + (tags.length - 1), true) - moreTagElement.setAttribute('title', tags.slice(1).join(', ')) - // because the title is not accessible we hide this element for screen readers (see alternative below) - moreTagElement.setAttribute('aria-hidden', 'true') - moreTagElement.setAttribute('role', 'presentation') - systemTagsElement.append(moreTagElement) - - // For accessibility the tags are listed, as the title is not accessible - // but those tags are visually hidden - for (const tag of tags.slice(1)) { - const tagElement = renderTag(tag) - tagElement.classList.add('hidden-visually') - systemTagsElement.append(tagElement) + systemTagsElement.append(renderTag(tags[0]!)) + if (tags.length === 2) { + // Special case only two tags: + // the overflow fake tag would take the same space as this, so render it + systemTagsElement.append(renderTag(tags[1]!)) + } else if (tags.length > 1) { + // More tags than the one we're showing + // So we add a overflow element indicating there are more tags + const moreTagElement = renderTag('+' + (tags.length - 1), true) + moreTagElement.setAttribute('title', tags.slice(1).join(', ')) + // because the title is not accessible we hide this element for screen readers (see alternative below) + moreTagElement.setAttribute('aria-hidden', 'true') + moreTagElement.setAttribute('role', 'presentation') + systemTagsElement.append(moreTagElement) + + // For accessibility the tags are listed, as the title is not accessible + // but those tags are visually hidden + for (const tag of tags.slice(1)) { + const tagElement = renderTag(tag) + tagElement.classList.add('hidden-visually') + systemTagsElement.append(tagElement) + } } } - return systemTagsElement + return systemTagsElementWrapper } diff --git a/dist/systemtags-init.mjs b/dist/systemtags-init.mjs index 4e7d45412e104..1270c44c8e521 100644 --- a/dist/systemtags-init.mjs +++ b/dist/systemtags-init.mjs @@ -1,5 +1,5 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('', '', 'dist/SystemTagPicker-Dwhjcmqh.chunk.mjs'),window.OC.filePath('', '', 'dist/index-Bp9-GhMo.chunk.mjs'),window.OC.filePath('', '', 'dist/index-C1xmmKTZ-CmvjJKkk.chunk.mjs'),window.OC.filePath('', '', 'dist/preload-helper-DoJVKVMq.chunk.mjs'),window.OC.filePath('', '', 'dist/NcDialog-nDc1gW50-CpnK8gUQ.chunk.mjs'),window.OC.filePath('', '', 'dist/NcModal-kyWZ3UFC-BxKwwKAq.chunk.mjs'),window.OC.filePath('', '', 'dist/mdi-BUoBIgaz.chunk.mjs'),window.OC.filePath('', '', 'dist/NcIconSvgWrapper-De-2-ukl-CcvQeIAt.chunk.mjs'),window.OC.filePath('', '', 'dist/translation-DoG5ZELJ-DJHEP2RB.chunk.mjs'),window.OC.filePath('', '', 'dist/NcIconSvgWrapper-De-2-ukl-C_oBIsvc.chunk.css'),window.OC.filePath('', '', 'dist/public-CvthP4YJ.chunk.mjs'),window.OC.filePath('', '', 'dist/mdi-D7L4ZBkR.chunk.css'),window.OC.filePath('', '', 'dist/NcModal-kyWZ3UFC-DgqchLjq.chunk.css'),window.OC.filePath('', '', 'dist/Web-rJva_rmF.chunk.mjs'),window.OC.filePath('', '', 'dist/Web-BYHcrfvW.chunk.css'),window.OC.filePath('', '', 'dist/NcDialog-nDc1gW50-DYA_tnKg.chunk.css'),window.OC.filePath('', '', 'dist/TrashCanOutline-D66Xz3gd.chunk.mjs'),window.OC.filePath('', '', 'dist/TrashCanOutline-Jq77EThs.chunk.css'),window.OC.filePath('', '', 'dist/NcCheckboxRadioSwitch-D0gFwEVl-CZhGfPiT.chunk.mjs'),window.OC.filePath('', '', 'dist/NcCheckboxRadioSwitch-D0gFwEVl-CQwJiKOs.chunk.css'),window.OC.filePath('', '', 'dist/Plus-Dt1x-rRW.chunk.mjs'),window.OC.filePath('', '', 'dist/PencilOutline-BzoFsBsK.chunk.mjs'),window.OC.filePath('', '', 'dist/PencilOutline-DdQinVMt.chunk.css'),window.OC.filePath('', '', 'dist/Plus-Som-mR4B.chunk.css'),window.OC.filePath('', '', 'dist/index-Bn6GWjGp.chunk.mjs'),window.OC.filePath('', '', 'dist/colors-BfjxNgsx-Dyl_2CuU.chunk.mjs'),window.OC.filePath('', '', 'dist/index-Bwe91UZ7.chunk.css'),window.OC.filePath('', '', 'dist/NcEmptyContent-CDgWCt_m-MnlDvtO9.chunk.mjs'),window.OC.filePath('', '', 'dist/NcEmptyContent-CDgWCt_m-DoZPzs7J.chunk.css'),window.OC.filePath('', '', 'dist/NcTextField.vue_vue_type_script_setup_true_lang-B-4HNjYH-C1HLa-yu.chunk.mjs'),window.OC.filePath('', '', 'dist/NcInputField-CPL-a_MM-DHVwy56P.chunk.mjs'),window.OC.filePath('', '', 'dist/NcInputField-CPL-a_MM-Bsffit-T.chunk.css'),window.OC.filePath('', '', 'dist/api-DTPVu_Rq.chunk.mjs'),window.OC.filePath('', '', 'dist/index-ClciYKp3.chunk.mjs'),window.OC.filePath('', '', 'dist/util-Caafb9Jl.chunk.mjs'),window.OC.filePath('', '', 'dist/index-8DHsl0up.chunk.mjs'),window.OC.filePath('', '', 'dist/NcPasswordField-BOLzDHBJ-DvzsiWPp.chunk.mjs'),window.OC.filePath('', '', 'dist/NcPasswordField-BOLzDHBJ-DxPSRxK-.chunk.css'),window.OC.filePath('', '', 'dist/dav-B4SnxxuE.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BDmvh1Np.chunk.mjs'),window.OC.filePath('', '', 'dist/folder-29HuacU_-GslSi8fz.chunk.mjs'),window.OC.filePath('', '', 'dist/index-DMw01uN3.chunk.mjs'),window.OC.filePath('', '', 'dist/systemtags-SystemTagPicker-r37hCiyq.chunk.css')])))=>i.map(i=>d[i]); -import{d as ne,b as te,V as oe,D as ae,a as E}from"./index-DMw01uN3.chunk.mjs";import{g as se,e as R,f as le,r as ie,a as ce,b as ue,c as he}from"./dav-B4SnxxuE.chunk.mjs";import{a as U,_ as H}from"./preload-helper-DoJVKVMq.chunk.mjs";import{P,b as B,F as D}from"./folder-29HuacU_-GslSi8fz.chunk.mjs";import{t as w}from"./translation-DoG5ZELJ-DJHEP2RB.chunk.mjs";import{i as de}from"./public-CvthP4YJ.chunk.mjs";import{s as J}from"./NcDialog-nDc1gW50-CpnK8gUQ.chunk.mjs";import{s as O,a as Z}from"./index-Bp9-GhMo.chunk.mjs";import{e as ge,f as W,l as be}from"./api-DTPVu_Rq.chunk.mjs";import"./util-Caafb9Jl.chunk.mjs";import"./index-BDmvh1Np.chunk.mjs";import"./NcModal-kyWZ3UFC-BxKwwKAq.chunk.mjs";import"./mdi-BUoBIgaz.chunk.mjs";import"./NcIconSvgWrapper-De-2-ukl-CcvQeIAt.chunk.mjs";import"./Web-rJva_rmF.chunk.mjs";import"./index-ClciYKp3.chunk.mjs";import"./index-8DHsl0up.chunk.mjs";import"./NcPasswordField-BOLzDHBJ-DvzsiWPp.chunk.mjs";import"./NcInputField-CPL-a_MM-DHVwy56P.chunk.mjs";const Y='';async function T({nodes:e}){const r=await J(U(()=>H(()=>import("./SystemTagPicker-Dwhjcmqh.chunk.mjs"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]),import.meta.url)),{nodes:e});return Array(e.length).fill(r)}const fe={id:"systemtags:bulk",displayName:()=>w("systemtags","Manage tags"),iconSvgInline:()=>Y,enabled({nodes:e}){return de()||e.length===0||e.some(r=>!r.isDavResource)?!1:!e.some(r=>(r.permissions&P.UPDATE)===0)},async exec(e){const[r]=await T(e);return r},execBatch:T,hotkey:{description:w("systemtags","Manage tags"),key:"t"}},me='';function pe(){ne({id:"systemtags",order:20,displayName(){return w("systemtags","Add tags")},enabled(){return!0},iconSvgInline(){return me},onClick({node:e}){return J(U(()=>H(()=>import("./SystemTagPicker-Dwhjcmqh.chunk.mjs"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]),import.meta.url)),{nodes:[e]})}})}const S={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]};for(const e in S)Object.freeze(S[e]);const N=Object.freeze(S),G=Object.create(null);for(const e in N)Object.hasOwn(N,e)&&(G[N[e]]=e);const b={to:{},get:{}};b.get=function(e){const r=e.slice(0,3).toLowerCase();let n,t;switch(r){case"hsl":{n=b.get.hsl(e),t="hsl";break}case"hwb":{n=b.get.hwb(e),t="hwb";break}default:{n=b.get.rgb(e),t="rgb";break}}return n?{model:t,value:n}:null},b.get.rgb=function(e){if(!e)return null;const r=/^#([a-f\d]{3,4})$/i,n=/^#([a-f\d]{6})([a-f\d]{2})?$/i,t=/^rgba?\(\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)\s*(?:[\s,|/]\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(%?)\s*)?\)$/i,o=/^rgba?\(\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[\s,|/]\s*([+-]?[\d.]+)(%?)\s*)?\)$/i,a=/^(\w+)$/;let s=[0,0,0,1],l,i,u;if(l=e.match(n)){for(u=l[2],l=l[1],i=0;i<3;i++){const m=i*2;s[i]=Number.parseInt(l.slice(m,m+2),16)}u&&(s[3]=Number.parseInt(u,16)/255)}else if(l=e.match(r)){for(l=l[1],u=l[3],i=0;i<3;i++)s[i]=Number.parseInt(l[i]+l[i],16);u&&(s[3]=Number.parseInt(u+u,16)/255)}else if(l=e.match(t)){for(i=0;i<3;i++)s[i]=Number.parseFloat(l[i+1]);l[4]&&(s[3]=l[5]?Number.parseFloat(l[4])*.01:Number.parseFloat(l[4]))}else if(l=e.match(o)){for(i=0;i<3;i++)s[i]=Math.round(Number.parseFloat(l[i+1])*2.55);l[4]&&(s[3]=l[5]?Number.parseFloat(l[4])*.01:Number.parseFloat(l[4]))}else return(l=e.toLowerCase().match(a))?l[1]==="transparent"?[0,0,0,0]:Object.hasOwn(N,l[1])?(s=N[l[1]].slice(),s[3]=1,s):null:null;for(i=0;i<3;i++)s[i]=k(s[i],0,255);return s[3]=k(s[3],0,1),s},b.get.hsl=function(e){if(!e)return null;const r=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[,|/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i,n=e.match(r);if(n){const t=Number.parseFloat(n[4]),o=(Number.parseFloat(n[1])%360+360)%360,a=k(Number.parseFloat(n[2]),0,100),s=k(Number.parseFloat(n[3]),0,100),l=k(Number.isNaN(t)?1:t,0,1);return[o,a,s,l]}return null},b.get.hwb=function(e){if(!e)return null;const r=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*[\s,]\s*([+-]?[\d.]+)%\s*[\s,]\s*([+-]?[\d.]+)%\s*(?:[\s,]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i,n=e.match(r);if(n){const t=Number.parseFloat(n[4]),o=(Number.parseFloat(n[1])%360+360)%360,a=k(Number.parseFloat(n[2]),0,100),s=k(Number.parseFloat(n[3]),0,100),l=k(Number.isNaN(t)?1:t,0,1);return[o,a,s,l]}return null},b.to.hex=function(...e){return"#"+j(e[0])+j(e[1])+j(e[2])+(e[3]<1?j(Math.round(e[3]*255)):"")},b.to.rgb=function(...e){return e.length<4||e[3]===1?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},b.to.rgb.percent=function(...e){const r=Math.round(e[0]/255*100),n=Math.round(e[1]/255*100),t=Math.round(e[2]/255*100);return e.length<4||e[3]===1?"rgb("+r+"%, "+n+"%, "+t+"%)":"rgba("+r+"%, "+n+"%, "+t+"%, "+e[3]+")"},b.to.hsl=function(...e){return e.length<4||e[3]===1?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},b.to.hwb=function(...e){let r="";return e.length>=4&&e[3]!==1&&(r=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+r+")"},b.to.keyword=function(...e){return G[e.slice(0,3)]};function k(e,r,n){return Math.min(Math.max(r,e),n)}function j(e){const r=Math.round(e).toString(16).toUpperCase();return r.length<2?"0"+r:r}const q={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]};for(const e in q)Object.freeze(q[e]);const A=Object.freeze(q),K={};for(const e of Object.keys(A))K[A[e]]=e;const c={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},oklab:{channels:3,labels:["okl","oka","okb"]},lch:{channels:3,labels:"lch"},oklch:{channels:3,labels:["okl","okc","okh"]},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}},y=(6/29)**3;function M(e){const r=e>.0031308?1.055*e**.4166666666666667-.055:e*12.92;return Math.min(Math.max(0,r),1)}function x(e){return e>.04045?((e+.055)/1.055)**2.4:e/12.92}for(const e of Object.keys(c)){if(!("channels"in c[e]))throw new Error("missing channels property: "+e);if(!("labels"in c[e]))throw new Error("missing channel labels property: "+e);if(c[e].labels.length!==c[e].channels)throw new Error("channel and label counts mismatch: "+e);const{channels:r,labels:n}=c[e];delete c[e].channels,delete c[e].labels,Object.defineProperty(c[e],"channels",{value:r}),Object.defineProperty(c[e],"labels",{value:n})}c.rgb.hsl=function(e){const r=e[0]/255,n=e[1]/255,t=e[2]/255,o=Math.min(r,n,t),a=Math.max(r,n,t),s=a-o;let l,i;switch(a){case o:{l=0;break}case r:{l=(n-t)/s;break}case n:{l=2+(t-r)/s;break}case t:{l=4+(r-n)/s;break}}l=Math.min(l*60,360),l<0&&(l+=360);const u=(o+a)/2;return a===o?i=0:u<=.5?i=s/(a+o):i=s/(2-a-o),[l,i*100,u*100]},c.rgb.hsv=function(e){let r,n,t,o,a;const s=e[0]/255,l=e[1]/255,i=e[2]/255,u=Math.max(s,l,i),m=u-Math.min(s,l,i),p=function(re){return(u-re)/6/m+1/2};if(m===0)o=0,a=0;else{switch(a=m/u,r=p(s),n=p(l),t=p(i),u){case s:{o=t-n;break}case l:{o=1/3+r-t;break}case i:{o=2/3+n-r;break}}o<0?o+=1:o>1&&(o-=1)}return[o*360,a*100,u*100]},c.rgb.hwb=function(e){const r=e[0],n=e[1];let t=e[2];const o=c.rgb.hsl(e)[0],a=1/255*Math.min(r,Math.min(n,t));return t=1-1/255*Math.max(r,Math.max(n,t)),[o,a*100,t*100]},c.rgb.oklab=function(e){const r=x(e[0]/255),n=x(e[1]/255),t=x(e[2]/255),o=Math.cbrt(.4122214708*r+.5363325363*n+.0514459929*t),a=Math.cbrt(.2119034982*r+.6806995451*n+.1073969566*t),s=Math.cbrt(.0883024619*r+.2817188376*n+.6299787005*t),l=.2104542553*o+.793617785*a-.0040720468*s,i=1.9779984951*o-2.428592205*a+.4505937099*s,u=.0259040371*o+.7827717662*a-.808675766*s;return[l*100,i*100,u*100]},c.rgb.cmyk=function(e){const r=e[0]/255,n=e[1]/255,t=e[2]/255,o=Math.min(1-r,1-n,1-t),a=(1-r-o)/(1-o)||0,s=(1-n-o)/(1-o)||0,l=(1-t-o)/(1-o)||0;return[a*100,s*100,l*100,o*100]};function ye(e,r){return(e[0]-r[0])**2+(e[1]-r[1])**2+(e[2]-r[2])**2}c.rgb.keyword=function(e){const r=K[e];if(r)return r;let n=Number.POSITIVE_INFINITY,t;for(const o of Object.keys(A)){const a=A[o],s=ye(e,a);sy?n**(1/3):7.787*n+16/116,t=t>y?t**(1/3):7.787*t+16/116,o=o>y?o**(1/3):7.787*o+16/116;const a=116*t-16,s=500*(n-t),l=200*(t-o);return[a,s,l]},c.hsl.rgb=function(e){const r=e[0]/360,n=e[1]/100,t=e[2]/100;let o,a;if(n===0)return a=t*255,[a,a,a];const s=t<.5?t*(1+n):t+n-t*n,l=2*t-s,i=[0,0,0];for(let u=0;u<3;u++)o=r+1/3*-(u-1),o<0&&o++,o>1&&o--,6*o<1?a=l+(s-l)*6*o:2*o<1?a=s:3*o<2?a=l+(s-l)*(2/3-o)*6:a=l,i[u]=a*255;return i},c.hsl.hsv=function(e){const r=e[0];let n=e[1]/100,t=e[2]/100,o=n;const a=Math.max(t,.01);t*=2,n*=t<=1?t:2-t,o*=a<=1?a:2-a;const s=(t+n)/2,l=t===0?2*o/(a+o):2*n/(t+n);return[r,l*100,s*100]},c.hsv.rgb=function(e){const r=e[0]/60,n=e[1]/100;let t=e[2]/100;const o=Math.floor(r)%6,a=r-Math.floor(r),s=255*t*(1-n),l=255*t*(1-n*a),i=255*t*(1-n*(1-a));switch(t*=255,o){case 0:return[t,i,s];case 1:return[l,t,s];case 2:return[s,t,i];case 3:return[s,l,t];case 4:return[i,s,t];case 5:return[t,s,l]}},c.hsv.hsl=function(e){const r=e[0],n=e[1]/100,t=e[2]/100,o=Math.max(t,.01);let a,s;s=(2-n)*t;const l=(2-n)*o;return a=n*o,a/=l<=1?l:2-l,a=a||0,s/=2,[r,a*100,s*100]},c.hwb.rgb=function(e){const r=e[0]/360;let n=e[1]/100,t=e[2]/100;const o=n+t;let a;o>1&&(n/=o,t/=o);const s=Math.floor(6*r),l=1-t;a=6*r-s,(s&1)!==0&&(a=1-a);const i=n+a*(l-n);let u,m,p;switch(s){default:case 6:case 0:{u=l,m=i,p=n;break}case 1:{u=i,m=l,p=n;break}case 2:{u=n,m=l,p=i;break}case 3:{u=n,m=i,p=l;break}case 4:{u=i,m=n,p=l;break}case 5:{u=l,m=n,p=i;break}}return[u*255,m*255,p*255]},c.cmyk.rgb=function(e){const r=e[0]/100,n=e[1]/100,t=e[2]/100,o=e[3]/100,a=1-Math.min(1,r*(1-o)+o),s=1-Math.min(1,n*(1-o)+o),l=1-Math.min(1,t*(1-o)+o);return[a*255,s*255,l*255]},c.xyz.rgb=function(e){const r=e[0]/100,n=e[1]/100,t=e[2]/100;let o,a,s;return o=r*3.2404542+n*-1.5371385+t*-.4985314,a=r*-.969266+n*1.8760108+t*.041556,s=r*.0556434+n*-.2040259+t*1.0572252,o=M(o),a=M(a),s=M(s),[o*255,a*255,s*255]},c.xyz.lab=function(e){let r=e[0],n=e[1],t=e[2];r/=95.047,n/=100,t/=108.883,r=r>y?r**(1/3):7.787*r+16/116,n=n>y?n**(1/3):7.787*n+16/116,t=t>y?t**(1/3):7.787*t+16/116;const o=116*n-16,a=500*(r-n),s=200*(n-t);return[o,a,s]},c.xyz.oklab=function(e){const r=e[0]/100,n=e[1]/100,t=e[2]/100,o=Math.cbrt(.8189330101*r+.3618667424*n-.1288597137*t),a=Math.cbrt(.0329845436*r+.9293118715*n+.0361456387*t),s=Math.cbrt(.0482003018*r+.2643662691*n+.633851707*t),l=.2104542553*o+.793617785*a-.0040720468*s,i=1.9779984951*o-2.428592205*a+.4505937099*s,u=.0259040371*o+.7827717662*a-.808675766*s;return[l*100,i*100,u*100]},c.oklab.oklch=function(e){return c.lab.lch(e)},c.oklab.xyz=function(e){const r=e[0]/100,n=e[1]/100,t=e[2]/100,o=(.999999998*r+.396337792*n+.215803758*t)**3,a=(1.000000008*r-.105561342*n-.063854175*t)**3,s=(1.000000055*r-.089484182*n-1.291485538*t)**3,l=1.227013851*o-.55779998*a+.281256149*s,i=-.040580178*o+1.11225687*a-.071676679*s,u=-.076381285*o-.421481978*a+1.58616322*s;return[l*100,i*100,u*100]},c.oklab.rgb=function(e){const r=e[0]/100,n=e[1]/100,t=e[2]/100,o=(r+.3963377774*n+.2158037573*t)**3,a=(r-.1055613458*n-.0638541728*t)**3,s=(r-.0894841775*n-1.291485548*t)**3,l=M(4.0767416621*o-3.3077115913*a+.2309699292*s),i=M(-1.2684380046*o+2.6097574011*a-.3413193965*s),u=M(-.0041960863*o-.7034186147*a+1.707614701*s);return[l*255,i*255,u*255]},c.oklch.oklab=function(e){return c.lch.lab(e)},c.lab.xyz=function(e){const r=e[0],n=e[1],t=e[2];let o,a,s;a=(r+16)/116,o=n/500+a,s=a-t/200;const l=a**3,i=o**3,u=s**3;return a=l>y?l:(a-16/116)/7.787,o=i>y?i:(o-16/116)/7.787,s=u>y?u:(s-16/116)/7.787,o*=95.047,a*=100,s*=108.883,[o,a,s]},c.lab.lch=function(e){const r=e[0],n=e[1],t=e[2];let o;o=Math.atan2(t,n)*360/2/Math.PI,o<0&&(o+=360);const a=Math.sqrt(n*n+t*t);return[r,a,o]},c.lch.lab=function(e){const r=e[0],n=e[1],t=e[2]/360*2*Math.PI,o=n*Math.cos(t),a=n*Math.sin(t);return[r,o,a]},c.rgb.ansi16=function(e,r=null){const[n,t,o]=e;let a=r===null?c.rgb.hsv(e)[2]:r;if(a=Math.round(a/50),a===0)return 30;let s=30+(Math.round(o/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return a===2&&(s+=60),s},c.hsv.ansi16=function(e){return c.rgb.ansi16(c.hsv.rgb(e),e[2])},c.rgb.ansi256=function(e){const r=e[0],n=e[1],t=e[2];return r>>4===n>>4&&n>>4===t>>4?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(n/255*5)+Math.round(t/255*5)},c.ansi16.rgb=function(e){e=e[0];let r=e%10;if(r===0||r===7)return e>50&&(r+=3.5),r=r/10.5*255,[r,r,r];const n=(Math.trunc(e>50)+1)*.5,t=(r&1)*n*255,o=(r>>1&1)*n*255,a=(r>>2&1)*n*255;return[t,o,a]},c.ansi256.rgb=function(e){if(e=e[0],e>=232){const a=(e-232)*10+8;return[a,a,a]}e-=16;let r;const n=Math.floor(e/36)/5*255,t=Math.floor((r=e%36)/6)/5*255,o=r%6/5*255;return[n,t,o]},c.rgb.hex=function(e){const r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".slice(r.length)+r},c.hex.rgb=function(e){const r=e.toString(16).match(/[a-f\d]{6}|[a-f\d]{3}/i);if(!r)return[0,0,0];let n=r[0];r[0].length===3&&(n=[...n].map(l=>l+l).join(""));const t=Number.parseInt(n,16),o=t>>16&255,a=t>>8&255,s=t&255;return[o,a,s]},c.rgb.hcg=function(e){const r=e[0]/255,n=e[1]/255,t=e[2]/255,o=Math.max(Math.max(r,n),t),a=Math.min(Math.min(r,n),t),s=o-a;let l;const i=s<1?a/(1-s):0;return s<=0?l=0:o===r?l=(n-t)/s%6:o===n?l=2+(t-r)/s:l=4+(r-n)/s,l/=6,l%=1,[l*360,s*100,i*100]},c.hsl.hcg=function(e){const r=e[1]/100,n=e[2]/100,t=n<.5?2*r*n:2*r*(1-n);let o=0;return t<1&&(o=(n-.5*t)/(1-t)),[e[0],t*100,o*100]},c.hsv.hcg=function(e){const r=e[1]/100,n=e[2]/100,t=r*n;let o=0;return t<1&&(o=(n-t)/(1-t)),[e[0],t*100,o*100]},c.hcg.rgb=function(e){const r=e[0]/360,n=e[1]/100,t=e[2]/100;if(n===0)return[t*255,t*255,t*255];const o=[0,0,0],a=r%1*6,s=a%1,l=1-s;let i=0;switch(Math.floor(a)){case 0:{o[0]=1,o[1]=s,o[2]=0;break}case 1:{o[0]=l,o[1]=1,o[2]=0;break}case 2:{o[0]=0,o[1]=1,o[2]=s;break}case 3:{o[0]=0,o[1]=l,o[2]=1;break}case 4:{o[0]=s,o[1]=0,o[2]=1;break}default:o[0]=1,o[1]=0,o[2]=l}return i=(1-n)*t,[(n*o[0]+i)*255,(n*o[1]+i)*255,(n*o[2]+i)*255]},c.hcg.hsv=function(e){const r=e[1]/100,n=e[2]/100,t=r+n*(1-r);let o=0;return t>0&&(o=r/t),[e[0],o*100,t*100]},c.hcg.hsl=function(e){const r=e[1]/100,n=e[2]/100*(1-r)+.5*r;let t=0;return n>0&&n<.5?t=r/(2*n):n>=.5&&n<1&&(t=r/(2*(1-n))),[e[0],t*100,n*100]},c.hcg.hwb=function(e){const r=e[1]/100,n=e[2]/100,t=r+n*(1-r);return[e[0],(t-r)*100,(1-t)*100]},c.hwb.hcg=function(e){const r=e[1]/100,n=1-e[2]/100,t=n-r;let o=0;return t<1&&(o=(n-t)/(1-t)),[e[0],t*100,o*100]},c.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},c.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},c.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},c.gray.hsl=function(e){return[0,0,e[0]]},c.gray.hsv=c.gray.hsl,c.gray.hwb=function(e){return[0,100,e[0]]},c.gray.cmyk=function(e){return[0,0,0,e[0]]},c.gray.lab=function(e){return[e[0],0,0]},c.gray.hex=function(e){const r=Math.round(e[0]/100*255)&255,n=((r<<16)+(r<<8)+r).toString(16).toUpperCase();return"000000".slice(n.length)+n},c.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]};function we(){const e={},r=Object.keys(c);for(let{length:n}=r,t=0;t0;){const t=n.pop(),o=Object.keys(c[t]);for(let{length:a}=o,s=0;s1&&(n=t),e(n))};return"conversion"in e&&(r.conversion=e.conversion),r}function Oe(e){const r=function(...n){const t=n[0];if(t==null)return t;t.length>1&&(n=t);const o=e(n);if(typeof o=="object")for(let{length:a}=o,s=0;s0){this.model=r||"rgb",t=f[this.model].channels;const o=Array.prototype.slice.call(e,0,t);this.color=z(o,t),this.valpha=typeof e[t]=="number"?e[t]:1}else if(typeof e=="number")this.model="rgb",this.color=[e>>16&255,e>>8&255,e&255],this.valpha=1;else{this.valpha=1;const o=Object.keys(e);"alpha"in e&&(o.splice(o.indexOf("alpha"),1),this.valpha=typeof e.alpha=="number"?e.alpha:0);const a=o.sort().join("");if(!(a in C))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=C[a];const{labels:s}=f[this.model],l=[];for(n=0;n(e%360+360)%360),saturationl:h("hsl",1,g(100)),lightness:h("hsl",2,g(100)),saturationv:h("hsv",1,g(100)),value:h("hsv",2,g(100)),chroma:h("hcg",1,g(100)),gray:h("hcg",2,g(100)),white:h("hwb",1,g(100)),wblack:h("hwb",2,g(100)),cyan:h("cmyk",0,g(100)),magenta:h("cmyk",1,g(100)),yellow:h("cmyk",2,g(100)),black:h("cmyk",3,g(100)),x:h("xyz",0,g(95.047)),y:h("xyz",1,g(100)),z:h("xyz",2,g(108.833)),l:h("lab",0,g(100)),a:h("lab",1),b:h("lab",2),keyword(e){return e!==void 0?new d(e):f[this.model].keyword(this.color)},hex(e){return e!==void 0?new d(e):b.to.hex(...this.rgb().round().color)},hexa(e){if(e!==void 0)return new d(e);const r=this.rgb().round().color;let n=Math.round(this.valpha*255).toString(16).toUpperCase();return n.length===1&&(n="0"+n),b.to.hex(...r)+n},rgbNumber(){const e=this.rgb().color;return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255},luminosity(){const e=this.rgb().color,r=[];for(const[n,t]of e.entries()){const o=t/255;r[n]=o<=.04045?o/12.92:((o+.055)/1.055)**2.4}return .2126*r[0]+.7152*r[1]+.0722*r[2]},contrast(e){const r=this.luminosity(),n=e.luminosity();return r>n?(r+.05)/(n+.05):(n+.05)/(r+.05)},level(e){const r=this.contrast(e);return r>=7?"AAA":r>=4.5?"AA":""},isDark(){const e=this.rgb().color;return(e[0]*2126+e[1]*7152+e[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){const e=this.rgb();for(let r=0;r<3;r++)e.color[r]=255-e.color[r];return e},lighten(e){const r=this.hsl();return r.color[2]+=r.color[2]*e,r},darken(e){const r=this.hsl();return r.color[2]-=r.color[2]*e,r},saturate(e){const r=this.hsl();return r.color[1]+=r.color[1]*e,r},desaturate(e){const r=this.hsl();return r.color[1]-=r.color[1]*e,r},whiten(e){const r=this.hwb();return r.color[1]+=r.color[1]*e,r},blacken(e){const r=this.hwb();return r.color[2]+=r.color[2]*e,r},grayscale(){const e=this.rgb().color,r=e[0]*.3+e[1]*.59+e[2]*.11;return d.rgb(r,r,r)},fade(e){return this.alpha(this.valpha-this.valpha*e)},opaquer(e){return this.alpha(this.valpha+this.valpha*e)},rotate(e){const r=this.hsl();let n=r.color[0];return n=(n+e)%360,n=n<0?360+n:n,r.color[0]=n,r},mix(e,r){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);const n=e.rgb(),t=this.rgb(),o=r===void 0?.5:r,a=2*o-1,s=n.alpha()-t.alpha(),l=((a*s===-1?a:(a+s)/(1+a*s))+1)/2,i=1-l;return d.rgb(l*n.red()+i*t.red(),l*n.green()+i*t.green(),l*n.blue()+i*t.blue(),n.alpha()*o+t.alpha()*(1-o))}};for(const e of Object.keys(f)){if(Q.includes(e))continue;const{channels:r}=f[e];d.prototype[e]=function(...n){return this.model===e?new d(this):n.length>0?new d(n,e):new d([...Ie(f[this.model][e].raw(this.color)),this.valpha],e)},d[e]=function(...n){let t=n[0];return typeof t=="number"&&(t=z(n,r)),new d(t,e)}}function je(e,r){return Number(e.toFixed(r))}function Le(e){return function(r){return je(r,e)}}function h(e,r,n){e=Array.isArray(e)?e:[e];for(const t of e)(F[t]||=[])[r]=n;return e=e[0],function(t){let o;return t!==void 0?(n&&(t=n(t)),o=this[e](),o.color[r]=t,o):(o=this[e]().color[r],n&&(o=n(o)),o)}}function g(e){return function(r){return Math.max(0,Math.min(e,r))}}function Ie(e){return Array.isArray(e)?e:[e]}function z(e,r){for(let n=0;n.6}function Ce(e,r){const n=qe(r),t=Fe(r,n?e:"#ffffff",66);let o=_(e,t);const a=Se()?5.6:3.2;let s=0,l=e;const i=(n?-100:100)/255;for(;o(a/=255,a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))),[n,t,o]=r;return .2126*n+.7152*t+.0722*o}function _(e,r){const n=$(e)+.05,t=$(r)+.05;return Math.max(n,t)/Math.min(n,t)}function ze(e){return new d(e).rgb().array()}function $e(e){const r=new d(e).hsl();return{h:r.color[0],s:r.color[1],l:r.color[2]}}function _e(e){return new d(e).hex()}const v=[],Pe={id:"system-tags",displayName:()=>"",iconSvgInline:()=>"",enabled({nodes:e}){return e.length===1},exec:async()=>null,renderInline:({nodes:e})=>e.length!==1||!e[0]?Promise.resolve(null):X(e[0]),order:0};O("systemtags:node:updated",De),O("systemtags:tag:created",Te),O("systemtags:tag:deleted",Ve),O("systemtags:tag:updated",Re);function De(e){X(e).then(r=>{document.querySelectorAll(`[data-systemtags-fileid="${e.fileid}"]`).forEach(n=>{n.replaceWith(r)})})}function Te(e){v.push(e)}function Ve(e){v.splice(v.findIndex(r=>r.id===e.id),1)}function Re(e){const r=v.findIndex(n=>n.id===e.id);r!==-1&&(v[r]=e),Ue(e)}function Ue(e){document.querySelectorAll(`[data-systemtag-name="${e.displayName}"]`).forEach(r=>{r.style.setProperty("--systemtag-color",`#${e.color}`)})}function L(e,r=!1){const n=document.createElement("li");n.classList.add("files-list__system-tag"),n.setAttribute("data-systemtag-name",e),n.textContent=e;const t=v.find(o=>o.displayName===e);if(t?.color){const o=getComputedStyle(document.body).getPropertyValue("--color-main-background").replace("#","")||(Ee()?"000000":"ffffff"),a=Ce(`#${t.color}`,`#${o}`);n.style.setProperty("--systemtag-color",a),n.setAttribute("data-systemtag-color","true")}return r&&n.classList.add("files-list__system-tag--more"),n}async function X(e){const r=ge(e),n=document.createElement("ul");if(n.classList.add("files-list__system-tags"),n.setAttribute("aria-label",w("files","Assigned collaborative tags")),n.setAttribute("data-systemtags-fileid",e.fileid?.toString()||""),r.length===0)return n;if(v.length===0)try{v.push(...await W())}catch(t){be.error("Failed to fetch tags",{error:t})}if(n.append(L(r[0])),r.length===2)n.append(L(r[1]));else if(r.length>1){const t=L("+"+(r.length-1),!0);t.setAttribute("title",r.slice(1).join(", ")),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),n.append(t);for(const o of r.slice(1)){const a=L(o);a.classList.add("hidden-visually"),n.append(a)}}return n}const I="/systemtags",He=se();function Be(e){return` +import{d as re,b as te,V as oe,D as ae,a as C}from"./index-DMw01uN3.chunk.mjs";import{g as se,e as R,f as le,r as ie,a as ce,b as ue,c as he}from"./dav-B4SnxxuE.chunk.mjs";import{a as U,_ as H}from"./preload-helper-DoJVKVMq.chunk.mjs";import{P,b as B,F as D}from"./folder-29HuacU_-GslSi8fz.chunk.mjs";import{t as w}from"./translation-DoG5ZELJ-DJHEP2RB.chunk.mjs";import{i as de}from"./public-CvthP4YJ.chunk.mjs";import{s as J}from"./NcDialog-nDc1gW50-CpnK8gUQ.chunk.mjs";import{s as O,a as Z}from"./index-Bp9-GhMo.chunk.mjs";import{e as ge,f as W,l as be}from"./api-DTPVu_Rq.chunk.mjs";import"./util-Caafb9Jl.chunk.mjs";import"./index-BDmvh1Np.chunk.mjs";import"./NcModal-kyWZ3UFC-BxKwwKAq.chunk.mjs";import"./mdi-BUoBIgaz.chunk.mjs";import"./NcIconSvgWrapper-De-2-ukl-CcvQeIAt.chunk.mjs";import"./Web-rJva_rmF.chunk.mjs";import"./index-ClciYKp3.chunk.mjs";import"./index-8DHsl0up.chunk.mjs";import"./NcPasswordField-BOLzDHBJ-DvzsiWPp.chunk.mjs";import"./NcInputField-CPL-a_MM-DHVwy56P.chunk.mjs";const Y='';async function T({nodes:e}){const n=await J(U(()=>H(()=>import("./SystemTagPicker-Dwhjcmqh.chunk.mjs"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]),import.meta.url)),{nodes:e});return Array(e.length).fill(n)}const fe={id:"systemtags:bulk",displayName:()=>w("systemtags","Manage tags"),iconSvgInline:()=>Y,enabled({nodes:e}){return de()||e.length===0||e.some(n=>!n.isDavResource)?!1:!e.some(n=>(n.permissions&P.UPDATE)===0)},async exec(e){const[n]=await T(e);return n},execBatch:T,hotkey:{description:w("systemtags","Manage tags"),key:"t"}},me='';function pe(){re({id:"systemtags",order:20,displayName(){return w("systemtags","Add tags")},enabled(){return!0},iconSvgInline(){return me},onClick({node:e}){return J(U(()=>H(()=>import("./SystemTagPicker-Dwhjcmqh.chunk.mjs"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]),import.meta.url)),{nodes:[e]})}})}const E={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]};for(const e in E)Object.freeze(E[e]);const N=Object.freeze(E),G=Object.create(null);for(const e in N)Object.hasOwn(N,e)&&(G[N[e]]=e);const b={to:{},get:{}};b.get=function(e){const n=e.slice(0,3).toLowerCase();let r,t;switch(n){case"hsl":{r=b.get.hsl(e),t="hsl";break}case"hwb":{r=b.get.hwb(e),t="hwb";break}default:{r=b.get.rgb(e),t="rgb";break}}return r?{model:t,value:r}:null},b.get.rgb=function(e){if(!e)return null;const n=/^#([a-f\d]{3,4})$/i,r=/^#([a-f\d]{6})([a-f\d]{2})?$/i,t=/^rgba?\(\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)\s*(?:[\s,|/]\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(%?)\s*)?\)$/i,o=/^rgba?\(\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[\s,|/]\s*([+-]?[\d.]+)(%?)\s*)?\)$/i,a=/^(\w+)$/;let s=[0,0,0,1],l,i,u;if(l=e.match(r)){for(u=l[2],l=l[1],i=0;i<3;i++){const m=i*2;s[i]=Number.parseInt(l.slice(m,m+2),16)}u&&(s[3]=Number.parseInt(u,16)/255)}else if(l=e.match(n)){for(l=l[1],u=l[3],i=0;i<3;i++)s[i]=Number.parseInt(l[i]+l[i],16);u&&(s[3]=Number.parseInt(u+u,16)/255)}else if(l=e.match(t)){for(i=0;i<3;i++)s[i]=Number.parseFloat(l[i+1]);l[4]&&(s[3]=l[5]?Number.parseFloat(l[4])*.01:Number.parseFloat(l[4]))}else if(l=e.match(o)){for(i=0;i<3;i++)s[i]=Math.round(Number.parseFloat(l[i+1])*2.55);l[4]&&(s[3]=l[5]?Number.parseFloat(l[4])*.01:Number.parseFloat(l[4]))}else return(l=e.toLowerCase().match(a))?l[1]==="transparent"?[0,0,0,0]:Object.hasOwn(N,l[1])?(s=N[l[1]].slice(),s[3]=1,s):null:null;for(i=0;i<3;i++)s[i]=k(s[i],0,255);return s[3]=k(s[3],0,1),s},b.get.hsl=function(e){if(!e)return null;const n=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[,|/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i,r=e.match(n);if(r){const t=Number.parseFloat(r[4]),o=(Number.parseFloat(r[1])%360+360)%360,a=k(Number.parseFloat(r[2]),0,100),s=k(Number.parseFloat(r[3]),0,100),l=k(Number.isNaN(t)?1:t,0,1);return[o,a,s,l]}return null},b.get.hwb=function(e){if(!e)return null;const n=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*[\s,]\s*([+-]?[\d.]+)%\s*[\s,]\s*([+-]?[\d.]+)%\s*(?:[\s,]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i,r=e.match(n);if(r){const t=Number.parseFloat(r[4]),o=(Number.parseFloat(r[1])%360+360)%360,a=k(Number.parseFloat(r[2]),0,100),s=k(Number.parseFloat(r[3]),0,100),l=k(Number.isNaN(t)?1:t,0,1);return[o,a,s,l]}return null},b.to.hex=function(...e){return"#"+j(e[0])+j(e[1])+j(e[2])+(e[3]<1?j(Math.round(e[3]*255)):"")},b.to.rgb=function(...e){return e.length<4||e[3]===1?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},b.to.rgb.percent=function(...e){const n=Math.round(e[0]/255*100),r=Math.round(e[1]/255*100),t=Math.round(e[2]/255*100);return e.length<4||e[3]===1?"rgb("+n+"%, "+r+"%, "+t+"%)":"rgba("+n+"%, "+r+"%, "+t+"%, "+e[3]+")"},b.to.hsl=function(...e){return e.length<4||e[3]===1?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},b.to.hwb=function(...e){let n="";return e.length>=4&&e[3]!==1&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},b.to.keyword=function(...e){return G[e.slice(0,3)]};function k(e,n,r){return Math.min(Math.max(n,e),r)}function j(e){const n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}const q={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]};for(const e in q)Object.freeze(q[e]);const A=Object.freeze(q),K={};for(const e of Object.keys(A))K[A[e]]=e;const c={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},oklab:{channels:3,labels:["okl","oka","okb"]},lch:{channels:3,labels:"lch"},oklch:{channels:3,labels:["okl","okc","okh"]},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}},y=(6/29)**3;function M(e){const n=e>.0031308?1.055*e**.4166666666666667-.055:e*12.92;return Math.min(Math.max(0,n),1)}function x(e){return e>.04045?((e+.055)/1.055)**2.4:e/12.92}for(const e of Object.keys(c)){if(!("channels"in c[e]))throw new Error("missing channels property: "+e);if(!("labels"in c[e]))throw new Error("missing channel labels property: "+e);if(c[e].labels.length!==c[e].channels)throw new Error("channel and label counts mismatch: "+e);const{channels:n,labels:r}=c[e];delete c[e].channels,delete c[e].labels,Object.defineProperty(c[e],"channels",{value:n}),Object.defineProperty(c[e],"labels",{value:r})}c.rgb.hsl=function(e){const n=e[0]/255,r=e[1]/255,t=e[2]/255,o=Math.min(n,r,t),a=Math.max(n,r,t),s=a-o;let l,i;switch(a){case o:{l=0;break}case n:{l=(r-t)/s;break}case r:{l=2+(t-n)/s;break}case t:{l=4+(n-r)/s;break}}l=Math.min(l*60,360),l<0&&(l+=360);const u=(o+a)/2;return a===o?i=0:u<=.5?i=s/(a+o):i=s/(2-a-o),[l,i*100,u*100]},c.rgb.hsv=function(e){let n,r,t,o,a;const s=e[0]/255,l=e[1]/255,i=e[2]/255,u=Math.max(s,l,i),m=u-Math.min(s,l,i),p=function(ne){return(u-ne)/6/m+1/2};if(m===0)o=0,a=0;else{switch(a=m/u,n=p(s),r=p(l),t=p(i),u){case s:{o=t-r;break}case l:{o=1/3+n-t;break}case i:{o=2/3+r-n;break}}o<0?o+=1:o>1&&(o-=1)}return[o*360,a*100,u*100]},c.rgb.hwb=function(e){const n=e[0],r=e[1];let t=e[2];const o=c.rgb.hsl(e)[0],a=1/255*Math.min(n,Math.min(r,t));return t=1-1/255*Math.max(n,Math.max(r,t)),[o,a*100,t*100]},c.rgb.oklab=function(e){const n=x(e[0]/255),r=x(e[1]/255),t=x(e[2]/255),o=Math.cbrt(.4122214708*n+.5363325363*r+.0514459929*t),a=Math.cbrt(.2119034982*n+.6806995451*r+.1073969566*t),s=Math.cbrt(.0883024619*n+.2817188376*r+.6299787005*t),l=.2104542553*o+.793617785*a-.0040720468*s,i=1.9779984951*o-2.428592205*a+.4505937099*s,u=.0259040371*o+.7827717662*a-.808675766*s;return[l*100,i*100,u*100]},c.rgb.cmyk=function(e){const n=e[0]/255,r=e[1]/255,t=e[2]/255,o=Math.min(1-n,1-r,1-t),a=(1-n-o)/(1-o)||0,s=(1-r-o)/(1-o)||0,l=(1-t-o)/(1-o)||0;return[a*100,s*100,l*100,o*100]};function ye(e,n){return(e[0]-n[0])**2+(e[1]-n[1])**2+(e[2]-n[2])**2}c.rgb.keyword=function(e){const n=K[e];if(n)return n;let r=Number.POSITIVE_INFINITY,t;for(const o of Object.keys(A)){const a=A[o],s=ye(e,a);sy?r**(1/3):7.787*r+16/116,t=t>y?t**(1/3):7.787*t+16/116,o=o>y?o**(1/3):7.787*o+16/116;const a=116*t-16,s=500*(r-t),l=200*(t-o);return[a,s,l]},c.hsl.rgb=function(e){const n=e[0]/360,r=e[1]/100,t=e[2]/100;let o,a;if(r===0)return a=t*255,[a,a,a];const s=t<.5?t*(1+r):t+r-t*r,l=2*t-s,i=[0,0,0];for(let u=0;u<3;u++)o=n+1/3*-(u-1),o<0&&o++,o>1&&o--,6*o<1?a=l+(s-l)*6*o:2*o<1?a=s:3*o<2?a=l+(s-l)*(2/3-o)*6:a=l,i[u]=a*255;return i},c.hsl.hsv=function(e){const n=e[0];let r=e[1]/100,t=e[2]/100,o=r;const a=Math.max(t,.01);t*=2,r*=t<=1?t:2-t,o*=a<=1?a:2-a;const s=(t+r)/2,l=t===0?2*o/(a+o):2*r/(t+r);return[n,l*100,s*100]},c.hsv.rgb=function(e){const n=e[0]/60,r=e[1]/100;let t=e[2]/100;const o=Math.floor(n)%6,a=n-Math.floor(n),s=255*t*(1-r),l=255*t*(1-r*a),i=255*t*(1-r*(1-a));switch(t*=255,o){case 0:return[t,i,s];case 1:return[l,t,s];case 2:return[s,t,i];case 3:return[s,l,t];case 4:return[i,s,t];case 5:return[t,s,l]}},c.hsv.hsl=function(e){const n=e[0],r=e[1]/100,t=e[2]/100,o=Math.max(t,.01);let a,s;s=(2-r)*t;const l=(2-r)*o;return a=r*o,a/=l<=1?l:2-l,a=a||0,s/=2,[n,a*100,s*100]},c.hwb.rgb=function(e){const n=e[0]/360;let r=e[1]/100,t=e[2]/100;const o=r+t;let a;o>1&&(r/=o,t/=o);const s=Math.floor(6*n),l=1-t;a=6*n-s,(s&1)!==0&&(a=1-a);const i=r+a*(l-r);let u,m,p;switch(s){default:case 6:case 0:{u=l,m=i,p=r;break}case 1:{u=i,m=l,p=r;break}case 2:{u=r,m=l,p=i;break}case 3:{u=r,m=i,p=l;break}case 4:{u=i,m=r,p=l;break}case 5:{u=l,m=r,p=i;break}}return[u*255,m*255,p*255]},c.cmyk.rgb=function(e){const n=e[0]/100,r=e[1]/100,t=e[2]/100,o=e[3]/100,a=1-Math.min(1,n*(1-o)+o),s=1-Math.min(1,r*(1-o)+o),l=1-Math.min(1,t*(1-o)+o);return[a*255,s*255,l*255]},c.xyz.rgb=function(e){const n=e[0]/100,r=e[1]/100,t=e[2]/100;let o,a,s;return o=n*3.2404542+r*-1.5371385+t*-.4985314,a=n*-.969266+r*1.8760108+t*.041556,s=n*.0556434+r*-.2040259+t*1.0572252,o=M(o),a=M(a),s=M(s),[o*255,a*255,s*255]},c.xyz.lab=function(e){let n=e[0],r=e[1],t=e[2];n/=95.047,r/=100,t/=108.883,n=n>y?n**(1/3):7.787*n+16/116,r=r>y?r**(1/3):7.787*r+16/116,t=t>y?t**(1/3):7.787*t+16/116;const o=116*r-16,a=500*(n-r),s=200*(r-t);return[o,a,s]},c.xyz.oklab=function(e){const n=e[0]/100,r=e[1]/100,t=e[2]/100,o=Math.cbrt(.8189330101*n+.3618667424*r-.1288597137*t),a=Math.cbrt(.0329845436*n+.9293118715*r+.0361456387*t),s=Math.cbrt(.0482003018*n+.2643662691*r+.633851707*t),l=.2104542553*o+.793617785*a-.0040720468*s,i=1.9779984951*o-2.428592205*a+.4505937099*s,u=.0259040371*o+.7827717662*a-.808675766*s;return[l*100,i*100,u*100]},c.oklab.oklch=function(e){return c.lab.lch(e)},c.oklab.xyz=function(e){const n=e[0]/100,r=e[1]/100,t=e[2]/100,o=(.999999998*n+.396337792*r+.215803758*t)**3,a=(1.000000008*n-.105561342*r-.063854175*t)**3,s=(1.000000055*n-.089484182*r-1.291485538*t)**3,l=1.227013851*o-.55779998*a+.281256149*s,i=-.040580178*o+1.11225687*a-.071676679*s,u=-.076381285*o-.421481978*a+1.58616322*s;return[l*100,i*100,u*100]},c.oklab.rgb=function(e){const n=e[0]/100,r=e[1]/100,t=e[2]/100,o=(n+.3963377774*r+.2158037573*t)**3,a=(n-.1055613458*r-.0638541728*t)**3,s=(n-.0894841775*r-1.291485548*t)**3,l=M(4.0767416621*o-3.3077115913*a+.2309699292*s),i=M(-1.2684380046*o+2.6097574011*a-.3413193965*s),u=M(-.0041960863*o-.7034186147*a+1.707614701*s);return[l*255,i*255,u*255]},c.oklch.oklab=function(e){return c.lch.lab(e)},c.lab.xyz=function(e){const n=e[0],r=e[1],t=e[2];let o,a,s;a=(n+16)/116,o=r/500+a,s=a-t/200;const l=a**3,i=o**3,u=s**3;return a=l>y?l:(a-16/116)/7.787,o=i>y?i:(o-16/116)/7.787,s=u>y?u:(s-16/116)/7.787,o*=95.047,a*=100,s*=108.883,[o,a,s]},c.lab.lch=function(e){const n=e[0],r=e[1],t=e[2];let o;o=Math.atan2(t,r)*360/2/Math.PI,o<0&&(o+=360);const a=Math.sqrt(r*r+t*t);return[n,a,o]},c.lch.lab=function(e){const n=e[0],r=e[1],t=e[2]/360*2*Math.PI,o=r*Math.cos(t),a=r*Math.sin(t);return[n,o,a]},c.rgb.ansi16=function(e,n=null){const[r,t,o]=e;let a=n===null?c.rgb.hsv(e)[2]:n;if(a=Math.round(a/50),a===0)return 30;let s=30+(Math.round(o/255)<<2|Math.round(t/255)<<1|Math.round(r/255));return a===2&&(s+=60),s},c.hsv.ansi16=function(e){return c.rgb.ansi16(c.hsv.rgb(e),e[2])},c.rgb.ansi256=function(e){const n=e[0],r=e[1],t=e[2];return n>>4===r>>4&&r>>4===t>>4?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(r/255*5)+Math.round(t/255*5)},c.ansi16.rgb=function(e){e=e[0];let n=e%10;if(n===0||n===7)return e>50&&(n+=3.5),n=n/10.5*255,[n,n,n];const r=(Math.trunc(e>50)+1)*.5,t=(n&1)*r*255,o=(n>>1&1)*r*255,a=(n>>2&1)*r*255;return[t,o,a]},c.ansi256.rgb=function(e){if(e=e[0],e>=232){const a=(e-232)*10+8;return[a,a,a]}e-=16;let n;const r=Math.floor(e/36)/5*255,t=Math.floor((n=e%36)/6)/5*255,o=n%6/5*255;return[r,t,o]},c.rgb.hex=function(e){const n=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".slice(n.length)+n},c.hex.rgb=function(e){const n=e.toString(16).match(/[a-f\d]{6}|[a-f\d]{3}/i);if(!n)return[0,0,0];let r=n[0];n[0].length===3&&(r=[...r].map(l=>l+l).join(""));const t=Number.parseInt(r,16),o=t>>16&255,a=t>>8&255,s=t&255;return[o,a,s]},c.rgb.hcg=function(e){const n=e[0]/255,r=e[1]/255,t=e[2]/255,o=Math.max(Math.max(n,r),t),a=Math.min(Math.min(n,r),t),s=o-a;let l;const i=s<1?a/(1-s):0;return s<=0?l=0:o===n?l=(r-t)/s%6:o===r?l=2+(t-n)/s:l=4+(n-r)/s,l/=6,l%=1,[l*360,s*100,i*100]},c.hsl.hcg=function(e){const n=e[1]/100,r=e[2]/100,t=r<.5?2*n*r:2*n*(1-r);let o=0;return t<1&&(o=(r-.5*t)/(1-t)),[e[0],t*100,o*100]},c.hsv.hcg=function(e){const n=e[1]/100,r=e[2]/100,t=n*r;let o=0;return t<1&&(o=(r-t)/(1-t)),[e[0],t*100,o*100]},c.hcg.rgb=function(e){const n=e[0]/360,r=e[1]/100,t=e[2]/100;if(r===0)return[t*255,t*255,t*255];const o=[0,0,0],a=n%1*6,s=a%1,l=1-s;let i=0;switch(Math.floor(a)){case 0:{o[0]=1,o[1]=s,o[2]=0;break}case 1:{o[0]=l,o[1]=1,o[2]=0;break}case 2:{o[0]=0,o[1]=1,o[2]=s;break}case 3:{o[0]=0,o[1]=l,o[2]=1;break}case 4:{o[0]=s,o[1]=0,o[2]=1;break}default:o[0]=1,o[1]=0,o[2]=l}return i=(1-r)*t,[(r*o[0]+i)*255,(r*o[1]+i)*255,(r*o[2]+i)*255]},c.hcg.hsv=function(e){const n=e[1]/100,r=e[2]/100,t=n+r*(1-n);let o=0;return t>0&&(o=n/t),[e[0],o*100,t*100]},c.hcg.hsl=function(e){const n=e[1]/100,r=e[2]/100*(1-n)+.5*n;let t=0;return r>0&&r<.5?t=n/(2*r):r>=.5&&r<1&&(t=n/(2*(1-r))),[e[0],t*100,r*100]},c.hcg.hwb=function(e){const n=e[1]/100,r=e[2]/100,t=n+r*(1-n);return[e[0],(t-n)*100,(1-t)*100]},c.hwb.hcg=function(e){const n=e[1]/100,r=1-e[2]/100,t=r-n;let o=0;return t<1&&(o=(r-t)/(1-t)),[e[0],t*100,o*100]},c.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},c.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},c.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},c.gray.hsl=function(e){return[0,0,e[0]]},c.gray.hsv=c.gray.hsl,c.gray.hwb=function(e){return[0,100,e[0]]},c.gray.cmyk=function(e){return[0,0,0,e[0]]},c.gray.lab=function(e){return[e[0],0,0]},c.gray.hex=function(e){const n=Math.round(e[0]/100*255)&255,r=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".slice(r.length)+r},c.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]};function we(){const e={},n=Object.keys(c);for(let{length:r}=n,t=0;t0;){const t=r.pop(),o=Object.keys(c[t]);for(let{length:a}=o,s=0;s1&&(r=t),e(r))};return"conversion"in e&&(n.conversion=e.conversion),n}function Oe(e){const n=function(...r){const t=r[0];if(t==null)return t;t.length>1&&(r=t);const o=e(r);if(typeof o=="object")for(let{length:a}=o,s=0;s0){this.model=n||"rgb",t=f[this.model].channels;const o=Array.prototype.slice.call(e,0,t);this.color=z(o,t),this.valpha=typeof e[t]=="number"?e[t]:1}else if(typeof e=="number")this.model="rgb",this.color=[e>>16&255,e>>8&255,e&255],this.valpha=1;else{this.valpha=1;const o=Object.keys(e);"alpha"in e&&(o.splice(o.indexOf("alpha"),1),this.valpha=typeof e.alpha=="number"?e.alpha:0);const a=o.sort().join("");if(!(a in F))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=F[a];const{labels:s}=f[this.model],l=[];for(r=0;r(e%360+360)%360),saturationl:h("hsl",1,g(100)),lightness:h("hsl",2,g(100)),saturationv:h("hsv",1,g(100)),value:h("hsv",2,g(100)),chroma:h("hcg",1,g(100)),gray:h("hcg",2,g(100)),white:h("hwb",1,g(100)),wblack:h("hwb",2,g(100)),cyan:h("cmyk",0,g(100)),magenta:h("cmyk",1,g(100)),yellow:h("cmyk",2,g(100)),black:h("cmyk",3,g(100)),x:h("xyz",0,g(95.047)),y:h("xyz",1,g(100)),z:h("xyz",2,g(108.833)),l:h("lab",0,g(100)),a:h("lab",1),b:h("lab",2),keyword(e){return e!==void 0?new d(e):f[this.model].keyword(this.color)},hex(e){return e!==void 0?new d(e):b.to.hex(...this.rgb().round().color)},hexa(e){if(e!==void 0)return new d(e);const n=this.rgb().round().color;let r=Math.round(this.valpha*255).toString(16).toUpperCase();return r.length===1&&(r="0"+r),b.to.hex(...n)+r},rgbNumber(){const e=this.rgb().color;return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255},luminosity(){const e=this.rgb().color,n=[];for(const[r,t]of e.entries()){const o=t/255;n[r]=o<=.04045?o/12.92:((o+.055)/1.055)**2.4}return .2126*n[0]+.7152*n[1]+.0722*n[2]},contrast(e){const n=this.luminosity(),r=e.luminosity();return n>r?(n+.05)/(r+.05):(r+.05)/(n+.05)},level(e){const n=this.contrast(e);return n>=7?"AAA":n>=4.5?"AA":""},isDark(){const e=this.rgb().color;return(e[0]*2126+e[1]*7152+e[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){const e=this.rgb();for(let n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten(e){const n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken(e){const n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate(e){const n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate(e){const n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten(e){const n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken(e){const n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale(){const e=this.rgb().color,n=e[0]*.3+e[1]*.59+e[2]*.11;return d.rgb(n,n,n)},fade(e){return this.alpha(this.valpha-this.valpha*e)},opaquer(e){return this.alpha(this.valpha+this.valpha*e)},rotate(e){const n=this.hsl();let r=n.color[0];return r=(r+e)%360,r=r<0?360+r:r,n.color[0]=r,n},mix(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);const r=e.rgb(),t=this.rgb(),o=n===void 0?.5:n,a=2*o-1,s=r.alpha()-t.alpha(),l=((a*s===-1?a:(a+s)/(1+a*s))+1)/2,i=1-l;return d.rgb(l*r.red()+i*t.red(),l*r.green()+i*t.green(),l*r.blue()+i*t.blue(),r.alpha()*o+t.alpha()*(1-o))}};for(const e of Object.keys(f)){if(Q.includes(e))continue;const{channels:n}=f[e];d.prototype[e]=function(...r){return this.model===e?new d(this):r.length>0?new d(r,e):new d([...Ie(f[this.model][e].raw(this.color)),this.valpha],e)},d[e]=function(...r){let t=r[0];return typeof t=="number"&&(t=z(r,n)),new d(t,e)}}function je(e,n){return Number(e.toFixed(n))}function Le(e){return function(n){return je(n,e)}}function h(e,n,r){e=Array.isArray(e)?e:[e];for(const t of e)(S[t]||=[])[n]=r;return e=e[0],function(t){let o;return t!==void 0?(r&&(t=r(t)),o=this[e](),o.color[n]=t,o):(o=this[e]().color[n],r&&(o=r(o)),o)}}function g(e){return function(n){return Math.max(0,Math.min(e,n))}}function Ie(e){return Array.isArray(e)?e:[e]}function z(e,n){for(let r=0;r.6}function Fe(e,n){const r=qe(n),t=Se(n,r?e:"#ffffff",66);let o=_(e,t);const a=Ee()?5.6:3.2;let s=0,l=e;const i=(r?-100:100)/255;for(;o(a/=255,a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))),[r,t,o]=n;return .2126*r+.7152*t+.0722*o}function _(e,n){const r=$(e)+.05,t=$(n)+.05;return Math.max(r,t)/Math.min(r,t)}function ze(e){return new d(e).rgb().array()}function $e(e){const n=new d(e).hsl();return{h:n.color[0],s:n.color[1],l:n.color[2]}}function _e(e){return new d(e).hex()}const v=[],Pe={id:"system-tags",displayName:()=>"",iconSvgInline:()=>"",enabled({nodes:e}){return e.length===1},async exec(){return null},async renderInline({nodes:e}){return e.length!==1||!e[0]?null:await X(e[0])},order:0};O("systemtags:node:updated",De),O("systemtags:tag:created",Te),O("systemtags:tag:deleted",Ve),O("systemtags:tag:updated",Re);async function De(e){const n=await X(e),r=document.querySelectorAll(`[data-systemtags-fileid="${e.id}"]`);for(const t of r)t.replaceWith(n)}function Te(e){v.push(e)}function Ve(e){v.splice(v.findIndex(n=>n.id===e.id),1)}function Re(e){const n=v.findIndex(r=>r.id===e.id);n!==-1&&(v[n]=e),Ue(e)}function Ue(e){document.querySelectorAll(`[data-systemtag-name="${e.displayName}"]`).forEach(n=>{n.style.setProperty("--systemtag-color",`#${e.color}`)})}function L(e,n=!1){const r=document.createElement("li");r.classList.add("files-list__system-tag"),r.setAttribute("data-systemtag-name",e),r.textContent=e;const t=v.find(o=>o.displayName===e);if(t?.color){const o=getComputedStyle(document.body).getPropertyValue("--color-main-background").replace("#","")||(Ce()?"000000":"ffffff"),a=Fe(`#${t.color}`,`#${o}`);r.style.setProperty("--systemtag-color",a),r.setAttribute("data-systemtag-color","true")}return n&&r.classList.add("files-list__system-tag--more"),r}async function X(e){const n=ge(e),r=document.createElement("div");if(r.setAttribute("data-systemtags-fileid",e.id||""),n.length>0){const t=document.createElement("ul");if(t.classList.add("files-list__system-tags"),t.setAttribute("aria-label",w("files","Assigned collaborative tags")),r.appendChild(t),v.length===0)try{v.push(...await W())}catch(o){be.error("Failed to fetch tags",{error:o})}if(t.append(L(n[0])),n.length===2)t.append(L(n[1]));else if(n.length>1){const o=L("+"+(n.length-1),!0);o.setAttribute("title",n.slice(1).join(", ")),o.setAttribute("aria-hidden","true"),o.setAttribute("role","presentation"),t.append(o);for(const a of n.slice(1)){const s=L(a);s.classList.add("hidden-visually"),t.append(s)}}}return r}const I="/systemtags",He=se();function Be(e){return` ${ue()} @@ -7,5 +7,5 @@ import{d as ne,b as te,V as oe,D as ae,a as E}from"./index-DMw01uN3.chunk.mjs";i ${e} -`}function V(e){return new B({id:e.id,source:`${R()}${I}/${e.id}`,owner:String(Z()?.uid??"anonymous"),root:I,displayname:e.displayName,permissions:P.READ,attributes:{...e,"is-tag":!0}})}async function Je(e="/"){const r=(await W()).filter(l=>l.userVisible);if(e==="/")return{folder:new B({id:0,source:`${R()}${I}`,owner:Z()?.uid,root:I,permissions:P.NONE}),contents:r.map(V)};const n=e.split("/",2)[1];if(!n||isNaN(parseInt(n)))throw new Error("Invalid tag ID");const t=parseInt(n),o=r.find(l=>l.id===t);if(!o)throw new Error("Tag not found");const a=V(o),s=await He.getDirectoryContents(le(),{details:!0,data:Be(t),headers:{method:"REPORT"}});return{folder:a,contents:s.data.map(l=>ie(l))}}const ee="tags";function Ze(){te().register(new oe({id:ee,name:w("systemtags","Tags"),caption:w("systemtags","List of tags and their associated files and folders."),emptyTitle:w("systemtags","No tags found"),emptyCaption:w("systemtags","Tags you have created will show up here."),icon:Y,order:25,getContents:Je}))}const We={id:"systemtags:open-in-files",displayName:()=>w("systemtags","Open in Files"),iconSvgInline:()=>"",enabled({nodes:e,view:r}){return r.id!==ee||e.length!==1||!e[0]?!1:e[0].attributes["is-tag"]!==!0&&e[0].type===D.Folder},async exec({nodes:e}){if(!e[0]||e.length!==1)return!1;let r=e[0].dirname;return e[0].type===D.Folder&&(r=e[0].path),window.OCP.Files.Router.goToRoute(null,{view:"files",fileid:String(e[0].fileid)},{dir:r,openfile:"true"}),null},order:-1e3,default:ae.HIDDEN};he("nc:system-tags"),E(fe),E(Pe),E(We),Ze(),pe();export{Ee as a,Ce as e,br as i}; +`}function V(e){return new B({id:e.id,source:`${R()}${I}/${e.id}`,owner:String(Z()?.uid??"anonymous"),root:I,displayname:e.displayName,permissions:P.READ,attributes:{...e,"is-tag":!0}})}async function Je(e="/"){const n=(await W()).filter(l=>l.userVisible);if(e==="/")return{folder:new B({id:0,source:`${R()}${I}`,owner:Z()?.uid,root:I,permissions:P.NONE}),contents:n.map(V)};const r=e.split("/",2)[1];if(!r||isNaN(parseInt(r)))throw new Error("Invalid tag ID");const t=parseInt(r),o=n.find(l=>l.id===t);if(!o)throw new Error("Tag not found");const a=V(o),s=await He.getDirectoryContents(le(),{details:!0,data:Be(t),headers:{method:"REPORT"}});return{folder:a,contents:s.data.map(l=>ie(l))}}const ee="tags";function Ze(){te().register(new oe({id:ee,name:w("systemtags","Tags"),caption:w("systemtags","List of tags and their associated files and folders."),emptyTitle:w("systemtags","No tags found"),emptyCaption:w("systemtags","Tags you have created will show up here."),icon:Y,order:25,getContents:Je}))}const We={id:"systemtags:open-in-files",displayName:()=>w("systemtags","Open in Files"),iconSvgInline:()=>"",enabled({nodes:e,view:n}){return n.id!==ee||e.length!==1||!e[0]?!1:e[0].attributes["is-tag"]!==!0&&e[0].type===D.Folder},async exec({nodes:e}){if(!e[0]||e.length!==1)return!1;let n=e[0].dirname;return e[0].type===D.Folder&&(n=e[0].path),window.OCP.Files.Router.goToRoute(null,{view:"files",fileid:String(e[0].fileid)},{dir:n,openfile:"true"}),null},order:-1e3,default:ae.HIDDEN};he("nc:system-tags"),C(fe),C(Pe),C(We),Ze(),pe();export{Ce as a,Fe as e,fn as i}; //# sourceMappingURL=systemtags-init.mjs.map diff --git a/dist/systemtags-init.mjs.map b/dist/systemtags-init.mjs.map index 6bbaefe4b3228..b0570d855df6c 100644 --- a/dist/systemtags-init.mjs.map +++ b/dist/systemtags-init.mjs.map @@ -1 +1 @@ -{"version":3,"mappings":"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","names":["svgTagMultiple","execBatch","nodes","response","spawnDialog","defineAsyncComponent","__vitePreload","action","t","TagMultipleSvg","isPublicShare","node","Permission","context","result","tagSvg","registerFileSidebarAction","registerSidebarAction","colors","key","colorNames","reverseNames","name","cs","string","prefix","value","model","abbr","hex","rgba","per","keyword","rgb","match","i","hexAlpha","i2","clamp","hsl","alpha","h","s","l","a","hwb","w","b","hexDouble","r","g","hsla","hwba","number_","min","max","string_","cssKeywords","reverseKeywords","convert","LAB_FT","srgbNonlinearTransform","c","cc","srgbNonlinearTransformInv","channels","labels","delta","rdif","gdif","bdif","v","diff","diffc","lp","mp","sp","aa","bb","k","m","y","comparativeDistance","x","reversed","currentClosestDistance","currentClosestKeyword","distance","z","xyz","t3","t2","t1","smin","lmin","sv","hsv","hi","f","p","q","vmin","sl","wh","bl","ratio","n","cmyk","oklab","ll","oklch","lab","y2","x2","z2","lch","hr","args","saturation","ansi","color","mult","rem","colorString","char","integer","chroma","hue","grayscale","hcg","pure","mg","apple","gray","buildGraph","graph","models","conversions","length","deriveBFS","fromModel","queue","current","adjacents","adjacent","link","from","to","wrapConversion","toModel","path","fn","cur","route","conversion","wrapRaw","wrappedFn","arg0","wrapRounded","routes","routeModels","skippedModels","hashedModelKeys","limiters","Color","object","newArray","zeroArray","keys","hashedKeys","limit","places","self","arguments_","roundToPlace","getset","maxfn","rgbArray","alphaHex","lum","element","chan","color2","lum1","lum2","contrastRatio","degrees","mixinColor","weight","color1","w1","w2","assertArray","roundTo","number","channel","modifier","array","isDarkModeEnabled","darkModePreference","isHighContrastModeEnabled","highContrastPreference","invertTextColor","colorContrast","isBrightColor","calculateLuma","elementColor","backgroundColor","brightBackground","blurredBackground","mix","contrast","minContrast","iteration","epsilon","hexToHSL","hslToHex","factor","hexToRGB","red","green","blue","luminance1","luminance2","cache","renderInline","subscribe","updateSystemTagsHtml","addTag","removeTag","updateTag","systemTagsHtml","tag","index","updateSystemTagsColorAttribute","renderTag","isMore","tagElement","cachedTag","mainBackgroundColor","primaryElement","tags","getNodeSystemTags","systemTagsElement","fetchTags","error","logger","moreTagElement","rootPath","client","getClient","formatReportPayload","tagId","getDavNameSpaces","getDavProperties","tagToNode","Folder","getRemoteURL","getCurrentUser","getContents","tagsCache","tagIdStr","folder","contentsResponse","getRootPath","stat","resultToNode","systemTagsViewId","registerSystemTagsView","getNavigation","View","view","FileType","dir","DefaultType","registerDavProperty","registerFileAction","bulkSystemTagsAction","inlineSystemTagsAction","openInFilesAction"],"ignoreList":[0,2,4,5,6,7,8,9,10],"sources":["../node_modules/@mdi/svg/svg/tag-multiple-outline.svg?raw","../build/frontend/apps/systemtags/src/files_actions/bulkSystemTagsAction.ts","../node_modules/@mdi/svg/svg/tag-outline.svg?raw","../build/frontend/apps/systemtags/src/files_actions/filesSidebarAction.ts","../node_modules/color-string/node_modules/color-name/index.js","../node_modules/color-string/index.js","../node_modules/color/node_modules/color-name/index.js","../node_modules/color/node_modules/color-convert/conversions.js","../node_modules/color/node_modules/color-convert/route.js","../node_modules/color/node_modules/color-convert/index.js","../node_modules/color/index.js","../build/frontend/apps/systemtags/src/utils/colorUtils.ts","../build/frontend/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts","../build/frontend/apps/systemtags/src/services/systemtags.ts","../build/frontend/apps/systemtags/src/files_views/systemtagsView.ts","../build/frontend/apps/systemtags/src/files_actions/openInFilesAction.ts","../build/frontend/apps/systemtags/src/init.ts"],"sourcesContent":["export default \"\"","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ActionContext, ActionContextSingle, IFileAction } from '@nextcloud/files'\n\nimport TagMultipleSvg from '@mdi/svg/svg/tag-multiple-outline.svg?raw'\nimport { Permission } from '@nextcloud/files'\nimport { t } from '@nextcloud/l10n'\nimport { isPublicShare } from '@nextcloud/sharing/public'\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog'\nimport { defineAsyncComponent } from 'vue'\n\n/**\n * Spawn a dialog to add or remove tags from multiple nodes.\n *\n * @param context - The action context\n * @param context.nodes - Nodes to modify tags for\n */\nasync function execBatch({ nodes }: ActionContext | ActionContextSingle): Promise<(null | boolean)[]> {\n\tconst response = await spawnDialog(\n\t\tdefineAsyncComponent(() => import('../components/SystemTagPicker.vue')),\n\t\t{\n\t\t\tnodes,\n\t\t},\n\t)\n\treturn Array(nodes.length)\n\t\t.fill(response)\n}\n\nexport const action: IFileAction = {\n\tid: 'systemtags:bulk',\n\tdisplayName: () => t('systemtags', 'Manage tags'),\n\ticonSvgInline: () => TagMultipleSvg,\n\n\t// If the app is disabled, the action is not available anyway\n\tenabled({ nodes }) {\n\t\tif (isPublicShare()) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (nodes.length === 0) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Disabled for non dav resources\n\t\tif (nodes.some((node) => !node.isDavResource)) {\n\t\t\treturn false\n\t\t}\n\n\t\t// We need to have the update permission on all nodes\n\t\treturn !nodes.some((node) => (node.permissions & Permission.UPDATE) === 0)\n\t},\n\n\tasync exec(context: ActionContextSingle) {\n\t\tconst [result] = await execBatch(context)\n\t\treturn result!\n\t},\n\n\texecBatch,\n\n\thotkey: {\n\t\tdescription: t('systemtags', 'Manage tags'),\n\t\tkey: 't',\n\t},\n}\n","export default \"\"","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport tagSvg from '@mdi/svg/svg/tag-outline.svg?raw'\nimport { registerSidebarAction } from '@nextcloud/files'\nimport { t } from '@nextcloud/l10n'\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog'\nimport { defineAsyncComponent } from 'vue'\n\n/**\n * Register the \"Add tags\" action in the file sidebar\n */\nexport function registerFileSidebarAction() {\n\tregisterSidebarAction({\n\t\tid: 'systemtags',\n\t\torder: 20,\n\t\tdisplayName() {\n\t\t\treturn t('systemtags', 'Add tags')\n\t\t},\n\t\tenabled() {\n\t\t\treturn true\n\t\t},\n\t\ticonSvgInline() {\n\t\t\treturn tagSvg\n\t\t},\n\t\tonClick({ node }) {\n\t\t\treturn spawnDialog(\n\t\t\t\tdefineAsyncComponent(() => import('../components/SystemTagPicker.vue')),\n\t\t\t\t{\n\t\t\t\t\tnodes: [node],\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t})\n}\n","const colors = {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50],\n}\n\nfor (const key in colors) Object.freeze(colors[key]);\nexport default Object.freeze(colors);","import colorNames from 'color-name';\n\nconst reverseNames = Object.create(null);\n\n// Create a list of reverse color names\nfor (const name in colorNames) {\n\tif (Object.hasOwn(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nconst cs = {\n\tto: {},\n\tget: {},\n};\n\ncs.get = function (string) {\n\tconst prefix = string.slice(0, 3).toLowerCase();\n\tlet value;\n\tlet model;\n\tswitch (prefix) {\n\t\tcase 'hsl': {\n\t\t\tvalue = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'hwb': {\n\t\t\tvalue = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tvalue = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!value) {\n\t\treturn null;\n\t}\n\n\treturn {model, value};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst abbr = /^#([a-f\\d]{3,4})$/i;\n\tconst hex = /^#([a-f\\d]{6})([a-f\\d]{2})?$/i;\n\tconst rgba = /^rgba?\\(\\s*([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(?=[\\s,])\\s*(?:,\\s*)?([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(?=[\\s,])\\s*(?:,\\s*)?([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)\\s*(?:[\\s,|/]\\s*([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(%?)\\s*)?\\)$/i;\n\tconst per = /^rgba?\\(\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[\\s,|/]\\s*([+-]?[\\d.]+)(%?)\\s*)?\\)$/i;\n\tconst keyword = /^(\\w+)$/;\n\n\tlet rgb = [0, 0, 0, 1];\n\tlet match;\n\tlet i;\n\tlet hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tconst i2 = i * 2;\n\t\t\trgb[i] = Number.parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseFloat(match[i + 1]);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(Number.parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.toLowerCase().match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!Object.hasOwn(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\trgb = colorNames[match[1]].slice();\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[,|/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\s*)?\\)$/i;\n\tconst match = string.match(hsl);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst s = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst l = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*[\\s,]\\s*([+-]?[\\d.]+)%\\s*[\\s,]\\s*([+-]?[\\d.]+)%\\s*(?:[\\s,]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\s*)?\\)$/i;\n\tconst match = string.match(hwb);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst w = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst b = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function (...rgba) {\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function (...rgba) {\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function (...rgba) {\n\tconst r = Math.round(rgba[0] / 255 * 100);\n\tconst g = Math.round(rgba[1] / 255 * 100);\n\tconst b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function (...hsla) {\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// Hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function (...hwba) {\n\tlet a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (...rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// Helpers\nfunction clamp(number_, min, max) {\n\treturn Math.min(Math.max(min, number_), max);\n}\n\nfunction hexDouble(number_) {\n\tconst string_ = Math.round(number_).toString(16).toUpperCase();\n\treturn (string_.length < 2) ? '0' + string_ : string_;\n}\n\nexport default cs;\n","const colors = {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50],\n}\n\nfor (const key in colors) Object.freeze(colors[key]);\nexport default Object.freeze(colors);","/* MIT license */\n/* eslint-disable no-mixed-operators */\nimport cssKeywords from 'color-name';\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\toklab: {channels: 3, labels: ['okl', 'oka', 'okb']},\n\tlch: {channels: 3, labels: 'lch'},\n\toklch: {channels: 3, labels: ['okl', 'okc', 'okh']},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']},\n};\n\nexport default convert;\n\n// LAB f(t) constant\nconst LAB_FT = (6 / 29) ** 3;\n\n// SRGB non-linear transform functions\nfunction srgbNonlinearTransform(c) {\n\tconst cc = c > 0.003_130_8\n\t\t? ((1.055 * (c ** (1 / 2.4))) - 0.055)\n\t\t: c * 12.92;\n\treturn Math.min(Math.max(0, cc), 1);\n}\n\nfunction srgbNonlinearTransformInv(c) {\n\treturn c > 0.040_45 ? (((c + 0.055) / 1.055) ** 2.4) : (c / 12.92);\n}\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tswitch (max) {\n\t\tcase min: {\n\t\t\th = 0;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase r: {\n\t\t\th = (g - b) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase g: {\n\t\t\th = 2 + (b - r) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase b: {\n\t\t\th = 4 + (r - g) / delta;\n\n\t\t\tbreak;\n\t\t}\n\t// No default\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tswitch (v) {\n\t\t\tcase r: {\n\t\t\t\th = bdif - gdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase g: {\n\t\t\t\th = (1 / 3) + rdif - bdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase b: {\n\t\t\t\th = (2 / 3) + gdif - rdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t// No default\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100,\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.oklab = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst lp = Math.cbrt(0.412_221_470_8 * r + 0.536_332_536_3 * g + 0.051_445_992_9 * b);\n\tconst mp = Math.cbrt(0.211_903_498_2 * r + 0.680_699_545_1 * g + 0.107_396_956_6 * b);\n\tconst sp = Math.cbrt(0.088_302_461_9 * r + 0.281_718_837_6 * g + 0.629_978_700_5 * b);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst aa = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst bb = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, aa * 100, bb * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Number.POSITIVE_INFINITY;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn [...cssKeywords[keyword]];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst x = (r * 0.412_456_4) + (g * 0.357_576_1) + (b * 0.180_437_5);\n\tconst y = (r * 0.212_672_9) + (g * 0.715_152_2) + (b * 0.072_175);\n\tconst z = (r * 0.019_333_9) + (g * 0.119_192) + (b * 0.950_304_1);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t3;\n\tlet value;\n\n\tif (s === 0) {\n\t\tvalue = l * 255;\n\t\treturn [value, value, value];\n\t}\n\n\tconst t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tvalue = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tvalue = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tvalue = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tvalue = t1;\n\t\t}\n\n\t\trgb[i] = value * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0: {\n\t\t\treturn [v, t, p];\n\t\t}\n\n\t\tcase 1: {\n\t\t\treturn [q, v, p];\n\t\t}\n\n\t\tcase 2: {\n\t\t\treturn [p, v, t];\n\t\t}\n\n\t\tcase 3: {\n\t\t\treturn [p, q, v];\n\t\t}\n\n\t\tcase 4: {\n\t\t\treturn [t, p, v];\n\t\t}\n\n\t\tcase 5: {\n\t\t\treturn [v, p, q];\n\t\t}\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\t// eslint-disable-next-line no-bitwise\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces, default-case-last */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: { r = v; g = n; b = wh; break;\n\t\t}\n\n\t\tcase 1: { r = n; g = v; b = wh; break;\n\t\t}\n\n\t\tcase 2: { r = wh; g = v; b = n; break;\n\t\t}\n\n\t\tcase 3: { r = wh; g = n; b = v; break;\n\t\t}\n\n\t\tcase 4: { r = n; g = wh; b = v; break;\n\t\t}\n\n\t\tcase 5: { r = v; g = wh; b = n; break;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces, default-case-last */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.240_454_2) + (y * -1.537_138_5) + (z * -0.498_531_4);\n\tg = (x * -0.969_266) + (y * 1.876_010_8) + (z * 0.041_556);\n\tb = (x * 0.055_643_4) + (y * -0.204_025_9) + (z * 1.057_225_2);\n\n\t// Assume sRGB\n\tr = srgbNonlinearTransform(r);\n\tg = srgbNonlinearTransform(g);\n\tb = srgbNonlinearTransform(b);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.xyz.oklab = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\n\tconst lp = Math.cbrt(0.818_933_010_1 * x + 0.361_866_742_4 * y - 0.128_859_713_7 * z);\n\tconst mp = Math.cbrt(0.032_984_543_6 * x + 0.929_311_871_5 * y + 0.036_145_638_7 * z);\n\tconst sp = Math.cbrt(0.048_200_301_8 * x + 0.264_366_269_1 * y + 0.633_851_707 * z);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst a = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst b = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, a * 100, b * 100];\n};\n\nconvert.oklab.oklch = function (oklab) {\n\treturn convert.lab.lch(oklab);\n};\n\nconvert.oklab.xyz = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst a = oklab[1] / 100;\n\tconst b = oklab[2] / 100;\n\n\tconst l = (0.999_999_998 * ll + 0.396_337_792 * a + 0.215_803_758 * b) ** 3;\n\tconst m = (1.000_000_008 * ll - 0.105_561_342 * a - 0.063_854_175 * b) ** 3;\n\tconst s = (1.000_000_055 * ll - 0.089_484_182 * a - 1.291_485_538 * b) ** 3;\n\n\tconst x = 1.227_013_851 * l - 0.557_799_98 * m + 0.281_256_149 * s;\n\tconst y = -0.040_580_178 * l + 1.112_256_87 * m - 0.071_676_679 * s;\n\tconst z = -0.076_381_285 * l - 0.421_481_978 * m + 1.586_163_22 * s;\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.oklab.rgb = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst aa = oklab[1] / 100;\n\tconst bb = oklab[2] / 100;\n\n\tconst l = (ll + 0.396_337_777_4 * aa + 0.215_803_757_3 * bb) ** 3;\n\tconst m = (ll - 0.105_561_345_8 * aa - 0.063_854_172_8 * bb) ** 3;\n\tconst s = (ll - 0.089_484_177_5 * aa - 1.291_485_548 * bb) ** 3;\n\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransform(4.076_741_662_1 * l - 3.307_711_591_3 * m + 0.230_969_929_2 * s);\n\tconst g = srgbNonlinearTransform(-1.268_438_004_6 * l + 2.609_757_401_1 * m - 0.341_319_396_5 * s);\n\tconst b = srgbNonlinearTransform(-0.004_196_086_3 * l - 0.703_418_614_7 * m + 1.707_614_701 * s);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.oklch.oklab = function (oklch) {\n\treturn convert.lch.lab(oklch);\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > LAB_FT ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > LAB_FT ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > LAB_FT ? z2 : (z - 16 / 116) / 7.787;\n\n\t// Illuminant D65 XYZ Tristrimulus Values\n\t// https://en.wikipedia.org/wiki/CIE_1931_color_space\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t/* eslint-disable no-bitwise */\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\t\t/* eslint-enable no-bitwise */\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\t// eslint-disable-next-line no-bitwise\n\tif (r >> 4 === g >> 4 && g >> 4 === b >> 4) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\targs = args[0];\n\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (Math.trunc(args > 50) + 1) * 0.5;\n\t/* eslint-disable no-bitwise */\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\targs = args[0];\n\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\t/* eslint-disable no-bitwise */\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f\\d]{6}|[a-f\\d]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = [...colorString].map(char => char + char).join('');\n\t}\n\n\tconst integer = Number.parseInt(colorString, 16);\n\t/* eslint-disable no-bitwise */\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet hue;\n\n\tconst grayscale = chroma < 1 ? min / (1 - chroma) : 0;\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else if (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else if (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2 * s * l) : (2 * s * (1 - l));\n\n\tlet f = 0;\n\tif (c < 1) {\n\t\tf = (l - 0.5 * c) / (1 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0: {\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 1: {\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 2: {\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\t}\n\n\t\tcase 3: {\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\t}\n\n\t\tcase 4: {\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\t}\n\n\t\tdefault: {\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255,\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1 - c);\n\tlet f = 0;\n\n\tif (v > 0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else if (l >= 0.5 && l < 1) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65_535) * 255, (apple[1] / 65_535) * 255, (apple[2] / 65_535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65_535, (rgb[1] / 255) * 65_535, (rgb[2] / 255) * 65_535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\t/* eslint-disable no-bitwise */\n\tconst value = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (value << 16) + (value << 8) + value;\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst value = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [value / 255 * 100];\n};\n","import conversions from './conversions.js';\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null,\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let {length} = adjacents, i = 0; i < length; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nfunction route(fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n}\n\nexport default route;\n","import conversions from './conversions.js';\nimport route from './route.js';\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let {length} = result, i = 0; i < length; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfor (const fromModel of models) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\tfor (const toModel of routeModels) {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t}\n}\n\nexport default convert;\n","import colorString from 'color-string';\nimport convert from 'color-convert';\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](...arguments_);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(...arguments_);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(...this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(...rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_colour_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...arguments_) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments_.length > 0) {\n\t\t\treturn new Color(arguments_, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...arguments_) {\n\t\tlet color = arguments_[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(arguments_, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] ||= [])[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nexport default Color;\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Color from 'color'\n\ntype hexColor = `#${string & (\n `${string}${string}${string}`\n | `${string}${string}${string}${string}${string}${string}`\n)}`\n\n/**\n * Is the current theme dark?\n */\nexport function isDarkModeEnabled() {\n\tconst darkModePreference = window?.matchMedia?.('(prefers-color-scheme: dark)')?.matches\n\tconst darkModeSetting = document.body.getAttribute('data-themes')?.includes('dark')\n\treturn darkModeSetting || darkModePreference || false\n}\n\n/**\n * Is the current theme high contrast?\n */\nexport function isHighContrastModeEnabled() {\n\tconst highContrastPreference = window?.matchMedia?.('(forced-colors: active)')?.matches\n\tconst highContrastSetting = document.body.getAttribute('data-themes')?.includes('highcontrast')\n\treturn highContrastSetting || highContrastPreference || false\n}\n\n/**\n * Should we invert the text on this background color?\n *\n * @param color RGB color value as a hex string\n * @return boolean\n */\nexport function invertTextColor(color: hexColor): boolean {\n\treturn colorContrast(color, '#ffffff') < 4.5\n}\n\n/**\n * Is this color too bright?\n *\n * @param color RGB color value as a hex string\n * @return boolean\n */\nexport function isBrightColor(color: hexColor): boolean {\n\treturn calculateLuma(color) > 0.6\n}\n\n/**\n * Get color for on-page elements\n * theme color by default, grey if theme color is too bright.\n *\n * @param color the color to contrast against, e.g. #ffffff\n * @param backgroundColor the background color to contrast against, e.g. #000000\n */\nexport function elementColor(\n\tcolor: hexColor,\n\tbackgroundColor: hexColor,\n): hexColor {\n\tconst brightBackground = isBrightColor(backgroundColor)\n\tconst blurredBackground = mix(\n\t\tbackgroundColor,\n\t\tbrightBackground ? color : '#ffffff',\n\t\t66,\n\t)\n\n\tlet contrast = colorContrast(color, blurredBackground)\n\tconst minContrast = isHighContrastModeEnabled() ? 5.6 : 3.2\n\n\tlet iteration = 0\n\tlet result = color\n\tconst epsilon = (brightBackground ? -100 : 100) / 255\n\twhile (contrast < minContrast && iteration++ < 100) {\n\t\tconst hsl = hexToHSL(result)\n\t\tconst l = Math.max(\n\t\t\t0,\n\t\t\tMath.min(255, hsl.l + epsilon),\n\t\t)\n\t\tresult = hslToHex({ h: hsl.h, s: hsl.s, l })\n\t\tcontrast = colorContrast(result, blurredBackground)\n\t}\n\n\treturn result\n}\n\n/**\n * Get color for on-page text:\n * black if background is bright, white if background is dark.\n *\n * @param color1 the color to contrast against, e.g. #ffffff\n * @param color2 the background color to contrast against, e.g. #000000\n * @param factor the factor to mix the colors between -100 and 100, e.g. 66\n */\nexport function mix(color1: hexColor, color2: hexColor, factor: number): hexColor {\n\tif (factor < -100 || factor > 100) {\n\t\tthrow new RangeError('Factor must be between -100 and 100')\n\t}\n\treturn new Color(color2).mix(new Color(color1), (factor + 100) / 200).hex()\n}\n\n/**\n * Lighten a color by a factor\n *\n * @param color the color to lighten, e.g. #000000\n * @param factor the factor to lighten the color by between -100 and 100, e.g. -41\n */\nexport function lighten(color: hexColor, factor: number): hexColor {\n\tif (factor < -100 || factor > 100) {\n\t\tthrow new RangeError('Factor must be between -100 and 100')\n\t}\n\treturn new Color(color).lighten((factor + 100) / 200).hex()\n}\n\n/**\n * Darken a color by a factor\n *\n * @param color the color to darken, e.g. #ffffff\n * @param factor the factor to darken the color by between -100 and 100, e.g. 32\n */\nexport function darken(color: hexColor, factor: number): hexColor {\n\tif (factor < -100 || factor > 100) {\n\t\tthrow new RangeError('Factor must be between -100 and 100')\n\t}\n\treturn new Color(color).darken((factor + 100) / 200).hex()\n}\n\n/**\n * Calculate the luminance of a color\n *\n * @param color the color to calculate the luminance of, e.g. #ffffff\n */\nexport function calculateLuminance(color: hexColor): number {\n\treturn hexToHSL(color).l\n}\n\n/**\n * Calculate the luma of a color\n *\n * @param color the color to calculate the luma of, e.g. #ffffff\n */\nexport function calculateLuma(color: hexColor): number {\n\tconst rgb = hexToRGB(color).map((value) => {\n\t\tvalue /= 255\n\t\treturn value <= 0.03928\n\t\t\t? value / 12.92\n\t\t\t: Math.pow((value + 0.055) / 1.055, 2.4)\n\t})\n\tconst [red, green, blue] = rgb\n\treturn 0.2126 * red + 0.7152 * green + 0.0722 * blue\n}\n\n/**\n * Calculate the contrast between two colors\n *\n * @param color1 the first color to calculate the contrast of, e.g. #ffffff\n * @param color2 the second color to calculate the contrast of, e.g. #000000\n */\nexport function colorContrast(color1: hexColor, color2: hexColor): number {\n\tconst luminance1 = calculateLuma(color1) + 0.05\n\tconst luminance2 = calculateLuma(color2) + 0.05\n\treturn Math.max(luminance1, luminance2) / Math.min(luminance1, luminance2)\n}\n\n/**\n * Convert hex color to RGB\n *\n * @param color RGB color value as a hex string\n */\nexport function hexToRGB(color: hexColor): [number, number, number] {\n\treturn new Color(color).rgb().array()\n}\n\n/**\n * Convert RGB color to hex\n *\n * @param color RGB color value as a hex string\n */\nexport function hexToHSL(color: hexColor): { h: number, s: number, l: number } {\n\tconst hsl = new Color(color).hsl()\n\treturn { h: hsl.color[0], s: hsl.color[1], l: hsl.color[2] }\n}\n\n/**\n * Convert HSL color to hex\n *\n * @param hsl HSL color value as an object\n * @param hsl.h hue\n * @param hsl.s saturation\n * @param hsl.l lightness\n */\nexport function hslToHex(hsl: { h: number, s: number, l: number }): hexColor {\n\treturn new Color(hsl).hex()\n}\n\n/**\n * Convert RGB color to hex\n *\n * @param r red\n * @param g green\n * @param b blue\n */\nexport function rgbToHex(r: number, g: number, b: number): hexColor {\n\tconst hex = ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)\n\treturn `#${hex}`\n}\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IFileAction, INode } from '@nextcloud/files'\nimport type { TagWithId } from '../types.ts'\n\nimport { subscribe } from '@nextcloud/event-bus'\nimport { t } from '@nextcloud/l10n'\nimport logger from '../logger.ts'\nimport { fetchTags } from '../services/api.ts'\nimport { getNodeSystemTags } from '../utils.ts'\nimport { elementColor, isDarkModeEnabled } from '../utils/colorUtils.ts'\n\nimport '../css/fileEntryInlineSystemTags.scss'\n\n// Init tag cache\nconst cache: TagWithId[] = []\n\nexport const action: IFileAction = {\n\tid: 'system-tags',\n\tdisplayName: () => '',\n\ticonSvgInline: () => '',\n\n\tenabled({ nodes }) {\n\t\t// Only show the action on single nodes\n\t\tif (nodes.length !== 1) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Always show the action, even if there are no tags\n\t\t// This will render an empty tag list and allow events to update it\n\t\treturn true\n\t},\n\n\texec: async () => null,\n\trenderInline: ({ nodes }) => {\n\t\tif (nodes.length !== 1 || !nodes[0]) {\n\t\t\treturn Promise.resolve(null)\n\t\t}\n\t\treturn renderInline(nodes[0])\n\t},\n\n\torder: 0,\n}\n\n// Subscribe to the events\nsubscribe('systemtags:node:updated', updateSystemTagsHtml)\nsubscribe('systemtags:tag:created', addTag)\nsubscribe('systemtags:tag:deleted', removeTag)\nsubscribe('systemtags:tag:updated', updateTag)\n\n/**\n * Update the system tags html when the node is updated\n *\n * @param node - The updated node\n */\nfunction updateSystemTagsHtml(node: INode) {\n\trenderInline(node).then((systemTagsHtml) => {\n\t\tdocument.querySelectorAll(`[data-systemtags-fileid=\"${node.fileid}\"]`).forEach((element) => {\n\t\t\telement.replaceWith(systemTagsHtml)\n\t\t})\n\t})\n}\n\n/**\n * Add and remove tags from the cache\n *\n * @param tag - The tag to add\n */\nfunction addTag(tag: TagWithId) {\n\tcache.push(tag)\n}\n\n/**\n * Remove a tag from the cache\n *\n * @param tag - The tag to remove\n */\nfunction removeTag(tag: TagWithId) {\n\tcache.splice(cache.findIndex((t) => t.id === tag.id), 1)\n}\n\n/**\n * Update a tag in the cache\n *\n * @param tag - The tag to update\n */\nfunction updateTag(tag: TagWithId) {\n\tconst index = cache.findIndex((t) => t.id === tag.id)\n\tif (index !== -1) {\n\t\tcache[index] = tag\n\t}\n\tupdateSystemTagsColorAttribute(tag)\n}\n\n/**\n * Update the color attribute of the system tags\n *\n * @param tag - The tag to update\n */\nfunction updateSystemTagsColorAttribute(tag: TagWithId) {\n\tdocument.querySelectorAll(`[data-systemtag-name=\"${tag.displayName}\"]`).forEach((element) => {\n\t\t(element as HTMLElement).style.setProperty('--systemtag-color', `#${tag.color}`)\n\t})\n}\n\n/**\n * Render a single tag element\n *\n * @param tag - The tag to render\n * @param isMore - Whether this is a \"more\" tag\n */\nfunction renderTag(tag: string, isMore = false): HTMLElement {\n\tconst tagElement = document.createElement('li')\n\ttagElement.classList.add('files-list__system-tag')\n\ttagElement.setAttribute('data-systemtag-name', tag)\n\ttagElement.textContent = tag\n\n\t// Set the color if it exists\n\tconst cachedTag = cache.find((t) => t.displayName === tag)\n\tif (cachedTag?.color) {\n\t\t// Make sure contrast is good and follow WCAG guidelines\n\t\tconst mainBackgroundColor = getComputedStyle(document.body)\n\t\t\t.getPropertyValue('--color-main-background')\n\t\t\t.replace('#', '') || (isDarkModeEnabled() ? '000000' : 'ffffff')\n\t\tconst primaryElement = elementColor(`#${cachedTag.color}`, `#${mainBackgroundColor}`)\n\t\ttagElement.style.setProperty('--systemtag-color', primaryElement)\n\t\ttagElement.setAttribute('data-systemtag-color', 'true')\n\t}\n\n\tif (isMore) {\n\t\ttagElement.classList.add('files-list__system-tag--more')\n\t}\n\n\treturn tagElement\n}\n\n/**\n * Render the inline system tags for a node\n *\n * @param node - The node to render the tags for\n */\nasync function renderInline(node: INode): Promise {\n\t// Ensure we have the system tags as an array\n\tconst tags = getNodeSystemTags(node)\n\n\tconst systemTagsElement = document.createElement('ul')\n\tsystemTagsElement.classList.add('files-list__system-tags')\n\tsystemTagsElement.setAttribute('aria-label', t('files', 'Assigned collaborative tags'))\n\tsystemTagsElement.setAttribute('data-systemtags-fileid', node.fileid?.toString() || '')\n\n\tif (tags.length === 0) {\n\t\treturn systemTagsElement\n\t}\n\n\t// Fetch the tags if the cache is empty\n\tif (cache.length === 0) {\n\t\ttry {\n\t\t\t// Best would be to support attributes from webdav,\n\t\t\t// but currently the library does not support it\n\t\t\tcache.push(...await fetchTags())\n\t\t} catch (error) {\n\t\t\tlogger.error('Failed to fetch tags', { error })\n\t\t}\n\t}\n\n\tsystemTagsElement.append(renderTag(tags[0]!))\n\tif (tags.length === 2) {\n\t\t// Special case only two tags:\n\t\t// the overflow fake tag would take the same space as this, so render it\n\t\tsystemTagsElement.append(renderTag(tags[1]!))\n\t} else if (tags.length > 1) {\n\t\t// More tags than the one we're showing\n\t\t// So we add a overflow element indicating there are more tags\n\t\tconst moreTagElement = renderTag('+' + (tags.length - 1), true)\n\t\tmoreTagElement.setAttribute('title', tags.slice(1).join(', '))\n\t\t// because the title is not accessible we hide this element for screen readers (see alternative below)\n\t\tmoreTagElement.setAttribute('aria-hidden', 'true')\n\t\tmoreTagElement.setAttribute('role', 'presentation')\n\t\tsystemTagsElement.append(moreTagElement)\n\n\t\t// For accessibility the tags are listed, as the title is not accessible\n\t\t// but those tags are visually hidden\n\t\tfor (const tag of tags.slice(1)) {\n\t\t\tconst tagElement = renderTag(tag)\n\t\t\ttagElement.classList.add('hidden-visually')\n\t\t\tsystemTagsElement.append(tagElement)\n\t\t}\n\t}\n\n\treturn systemTagsElement\n}\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ContentsWithRoot } from '@nextcloud/files'\nimport type { FileStat, ResponseDataDetailed } from 'webdav'\nimport type { TagWithId } from '../types.ts'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { Folder, Permission } from '@nextcloud/files'\nimport { getClient, getDavNameSpaces, getDavProperties, getRemoteURL, getRootPath, resultToNode } from '@nextcloud/files/dav'\nimport { fetchTags } from './api.ts'\n\nconst rootPath = '/systemtags'\n\nconst client = getClient()\n\n/**\n * Format the REPORT payload to filter files by tag\n *\n * @param tagId - The tag ID\n */\nfunction formatReportPayload(tagId: number) {\n\treturn `\n\n\t\n\t\t${getDavProperties()}\n\t\n\t\n\t\t${tagId}\n\t\n`\n}\n\n/**\n * Convert a tag to a Folder node\n *\n * @param tag - The tag\n */\nfunction tagToNode(tag: TagWithId): Folder {\n\treturn new Folder({\n\t\tid: tag.id,\n\t\tsource: `${getRemoteURL()}${rootPath}/${tag.id}`,\n\t\towner: String(getCurrentUser()?.uid ?? 'anonymous'),\n\t\troot: rootPath,\n\t\tdisplayname: tag.displayName,\n\t\tpermissions: Permission.READ,\n\t\tattributes: {\n\t\t\t...tag,\n\t\t\t'is-tag': true,\n\t\t},\n\t})\n}\n\n/**\n * Get the contents of a folder or tag\n *\n * @param path - The path to the folder or tag\n */\nexport async function getContents(path = '/'): Promise {\n\t// List tags in the root\n\tconst tagsCache = (await fetchTags()).filter((tag) => tag.userVisible) as TagWithId[]\n\n\tif (path === '/') {\n\t\treturn {\n\t\t\tfolder: new Folder({\n\t\t\t\tid: 0,\n\t\t\t\tsource: `${getRemoteURL()}${rootPath}`,\n\t\t\t\towner: getCurrentUser()?.uid as string,\n\t\t\t\troot: rootPath,\n\t\t\t\tpermissions: Permission.NONE,\n\t\t\t}),\n\t\t\tcontents: tagsCache.map(tagToNode),\n\t\t}\n\t}\n\n\tconst tagIdStr = path.split('/', 2)[1]\n\tif (!tagIdStr || isNaN(parseInt(tagIdStr))) {\n\t\tthrow new Error('Invalid tag ID')\n\t}\n\n\tconst tagId = parseInt(tagIdStr)\n\tconst tag = tagsCache.find((tag) => tag.id === tagId)\n\tif (!tag) {\n\t\tthrow new Error('Tag not found')\n\t}\n\n\tconst folder = tagToNode(tag)\n\tconst contentsResponse = await client.getDirectoryContents(getRootPath(), {\n\t\tdetails: true,\n\t\t// Only filter favorites if we're at the root\n\t\tdata: formatReportPayload(tagId),\n\t\theaders: {\n\t\t\t// Patched in WebdavClient.ts\n\t\t\tmethod: 'REPORT',\n\t\t},\n\t}) as ResponseDataDetailed\n\n\treturn {\n\t\tfolder,\n\t\tcontents: contentsResponse.data.map((stat) => resultToNode(stat)),\n\t}\n}\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport svgTagMultiple from '@mdi/svg/svg/tag-multiple-outline.svg?raw'\nimport { getNavigation, View } from '@nextcloud/files'\nimport { translate as t } from '@nextcloud/l10n'\nimport { getContents } from '../services/systemtags.ts'\n\nexport const systemTagsViewId = 'tags'\n\n/**\n * Register the system tags files view\n */\nexport function registerSystemTagsView() {\n\tconst Navigation = getNavigation()\n\tNavigation.register(new View({\n\t\tid: systemTagsViewId,\n\t\tname: t('systemtags', 'Tags'),\n\t\tcaption: t('systemtags', 'List of tags and their associated files and folders.'),\n\n\t\temptyTitle: t('systemtags', 'No tags found'),\n\t\temptyCaption: t('systemtags', 'Tags you have created will show up here.'),\n\n\t\ticon: svgTagMultiple,\n\t\torder: 25,\n\n\t\tgetContents,\n\t}))\n}\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IFileAction } from '@nextcloud/files'\n\nimport { DefaultType, FileType } from '@nextcloud/files'\nimport { t } from '@nextcloud/l10n'\nimport { systemTagsViewId } from '../files_views/systemtagsView.ts'\n\nexport const action: IFileAction = {\n\tid: 'systemtags:open-in-files',\n\tdisplayName: () => t('systemtags', 'Open in Files'),\n\ticonSvgInline: () => '',\n\n\tenabled({ nodes, view }) {\n\t\t// Only for the system tags view\n\t\tif (view.id !== systemTagsViewId) {\n\t\t\treturn false\n\t\t}\n\t\t// Only for single nodes\n\t\tif (nodes.length !== 1 || !nodes[0]) {\n\t\t\treturn false\n\t\t}\n\t\t// Do not open tags (keep the default action) and only open folders\n\t\treturn nodes[0].attributes['is-tag'] !== true\n\t\t\t&& nodes[0].type === FileType.Folder\n\t},\n\n\tasync exec({ nodes }) {\n\t\tif (!nodes[0] || nodes.length !== 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet dir = nodes[0].dirname\n\t\tif (nodes[0].type === FileType.Folder) {\n\t\t\tdir = nodes[0].path\n\t\t}\n\n\t\twindow.OCP.Files.Router.goToRoute(\n\t\t\tnull, // use default route\n\t\t\t{ view: 'files', fileid: String(nodes[0].fileid) },\n\t\t\t{ dir, openfile: 'true' },\n\t\t)\n\t\treturn null\n\t},\n\n\t// Before openFolderAction\n\torder: -1000,\n\tdefault: DefaultType.HIDDEN,\n}\n","/*!\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { registerFileAction } from '@nextcloud/files'\nimport { registerDavProperty } from '@nextcloud/files/dav'\nimport { action as bulkSystemTagsAction } from './files_actions/bulkSystemTagsAction.ts'\nimport { registerFileSidebarAction } from './files_actions/filesSidebarAction.ts'\nimport { action as inlineSystemTagsAction } from './files_actions/inlineSystemTagsAction.ts'\nimport { action as openInFilesAction } from './files_actions/openInFilesAction.ts'\nimport { registerSystemTagsView } from './files_views/systemtagsView.ts'\n\nregisterDavProperty('nc:system-tags')\nregisterFileAction(bulkSystemTagsAction)\nregisterFileAction(inlineSystemTagsAction)\nregisterFileAction(openInFilesAction)\n\nregisterSystemTagsView()\nregisterFileSidebarAction()\n"],"file":"systemtags-init.mjs"} \ No newline at end of file +{"version":3,"mappings":"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","names":["svgTagMultiple","execBatch","nodes","response","spawnDialog","defineAsyncComponent","__vitePreload","action","t","TagMultipleSvg","isPublicShare","node","Permission","context","result","tagSvg","registerFileSidebarAction","registerSidebarAction","colors","key","colorNames","reverseNames","name","cs","string","prefix","value","model","abbr","hex","rgba","per","keyword","rgb","match","i","hexAlpha","i2","clamp","hsl","alpha","h","s","l","a","hwb","w","b","hexDouble","r","g","hsla","hwba","number_","min","max","string_","cssKeywords","reverseKeywords","convert","LAB_FT","srgbNonlinearTransform","c","cc","srgbNonlinearTransformInv","channels","labels","delta","rdif","gdif","bdif","v","diff","diffc","lp","mp","sp","aa","bb","k","m","y","comparativeDistance","x","reversed","currentClosestDistance","currentClosestKeyword","distance","z","xyz","t3","t2","t1","smin","lmin","sv","hsv","hi","f","p","q","vmin","sl","wh","bl","ratio","n","cmyk","oklab","ll","oklch","lab","y2","x2","z2","lch","hr","args","saturation","ansi","color","mult","rem","colorString","char","integer","chroma","hue","grayscale","hcg","pure","mg","apple","gray","buildGraph","graph","models","conversions","length","deriveBFS","fromModel","queue","current","adjacents","adjacent","link","from","to","wrapConversion","toModel","path","fn","cur","route","conversion","wrapRaw","wrappedFn","arg0","wrapRounded","routes","routeModels","skippedModels","hashedModelKeys","limiters","Color","object","newArray","zeroArray","keys","hashedKeys","limit","places","self","arguments_","roundToPlace","getset","maxfn","rgbArray","alphaHex","lum","element","chan","color2","lum1","lum2","contrastRatio","degrees","mixinColor","weight","color1","w1","w2","assertArray","roundTo","number","channel","modifier","array","isDarkModeEnabled","darkModePreference","isHighContrastModeEnabled","highContrastPreference","invertTextColor","colorContrast","isBrightColor","calculateLuma","elementColor","backgroundColor","brightBackground","blurredBackground","mix","contrast","minContrast","iteration","epsilon","hexToHSL","hslToHex","factor","hexToRGB","red","green","blue","luminance1","luminance2","cache","renderInline","subscribe","updateSystemTagsHtml","addTag","removeTag","updateTag","systemTagsHtml","elements","tag","index","updateSystemTagsColorAttribute","renderTag","isMore","tagElement","cachedTag","mainBackgroundColor","primaryElement","tags","getNodeSystemTags","systemTagsElementWrapper","systemTagsElement","fetchTags","error","logger","moreTagElement","rootPath","client","getClient","formatReportPayload","tagId","getDavNameSpaces","getDavProperties","tagToNode","Folder","getRemoteURL","getCurrentUser","getContents","tagsCache","tagIdStr","folder","contentsResponse","getRootPath","stat","resultToNode","systemTagsViewId","registerSystemTagsView","getNavigation","View","view","FileType","dir","DefaultType","registerDavProperty","registerFileAction","bulkSystemTagsAction","inlineSystemTagsAction","openInFilesAction"],"ignoreList":[0,2,4,5,6,7,8,9,10],"sources":["../node_modules/@mdi/svg/svg/tag-multiple-outline.svg?raw","../build/frontend/apps/systemtags/src/files_actions/bulkSystemTagsAction.ts","../node_modules/@mdi/svg/svg/tag-outline.svg?raw","../build/frontend/apps/systemtags/src/files_actions/filesSidebarAction.ts","../node_modules/color-string/node_modules/color-name/index.js","../node_modules/color-string/index.js","../node_modules/color/node_modules/color-name/index.js","../node_modules/color/node_modules/color-convert/conversions.js","../node_modules/color/node_modules/color-convert/route.js","../node_modules/color/node_modules/color-convert/index.js","../node_modules/color/index.js","../build/frontend/apps/systemtags/src/utils/colorUtils.ts","../build/frontend/apps/systemtags/src/files_actions/inlineSystemTagsAction.ts","../build/frontend/apps/systemtags/src/services/systemtags.ts","../build/frontend/apps/systemtags/src/files_views/systemtagsView.ts","../build/frontend/apps/systemtags/src/files_actions/openInFilesAction.ts","../build/frontend/apps/systemtags/src/init.ts"],"sourcesContent":["export default \"\"","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ActionContext, ActionContextSingle, IFileAction } from '@nextcloud/files'\n\nimport TagMultipleSvg from '@mdi/svg/svg/tag-multiple-outline.svg?raw'\nimport { Permission } from '@nextcloud/files'\nimport { t } from '@nextcloud/l10n'\nimport { isPublicShare } from '@nextcloud/sharing/public'\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog'\nimport { defineAsyncComponent } from 'vue'\n\n/**\n * Spawn a dialog to add or remove tags from multiple nodes.\n *\n * @param context - The action context\n * @param context.nodes - Nodes to modify tags for\n */\nasync function execBatch({ nodes }: ActionContext | ActionContextSingle): Promise<(null | boolean)[]> {\n\tconst response = await spawnDialog(\n\t\tdefineAsyncComponent(() => import('../components/SystemTagPicker.vue')),\n\t\t{\n\t\t\tnodes,\n\t\t},\n\t)\n\treturn Array(nodes.length)\n\t\t.fill(response)\n}\n\nexport const action: IFileAction = {\n\tid: 'systemtags:bulk',\n\tdisplayName: () => t('systemtags', 'Manage tags'),\n\ticonSvgInline: () => TagMultipleSvg,\n\n\t// If the app is disabled, the action is not available anyway\n\tenabled({ nodes }) {\n\t\tif (isPublicShare()) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (nodes.length === 0) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Disabled for non dav resources\n\t\tif (nodes.some((node) => !node.isDavResource)) {\n\t\t\treturn false\n\t\t}\n\n\t\t// We need to have the update permission on all nodes\n\t\treturn !nodes.some((node) => (node.permissions & Permission.UPDATE) === 0)\n\t},\n\n\tasync exec(context: ActionContextSingle) {\n\t\tconst [result] = await execBatch(context)\n\t\treturn result!\n\t},\n\n\texecBatch,\n\n\thotkey: {\n\t\tdescription: t('systemtags', 'Manage tags'),\n\t\tkey: 't',\n\t},\n}\n","export default \"\"","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport tagSvg from '@mdi/svg/svg/tag-outline.svg?raw'\nimport { registerSidebarAction } from '@nextcloud/files'\nimport { t } from '@nextcloud/l10n'\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog'\nimport { defineAsyncComponent } from 'vue'\n\n/**\n * Register the \"Add tags\" action in the file sidebar\n */\nexport function registerFileSidebarAction() {\n\tregisterSidebarAction({\n\t\tid: 'systemtags',\n\t\torder: 20,\n\t\tdisplayName() {\n\t\t\treturn t('systemtags', 'Add tags')\n\t\t},\n\t\tenabled() {\n\t\t\treturn true\n\t\t},\n\t\ticonSvgInline() {\n\t\t\treturn tagSvg\n\t\t},\n\t\tonClick({ node }) {\n\t\t\treturn spawnDialog(\n\t\t\t\tdefineAsyncComponent(() => import('../components/SystemTagPicker.vue')),\n\t\t\t\t{\n\t\t\t\t\tnodes: [node],\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t})\n}\n","const colors = {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50],\n}\n\nfor (const key in colors) Object.freeze(colors[key]);\nexport default Object.freeze(colors);","import colorNames from 'color-name';\n\nconst reverseNames = Object.create(null);\n\n// Create a list of reverse color names\nfor (const name in colorNames) {\n\tif (Object.hasOwn(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nconst cs = {\n\tto: {},\n\tget: {},\n};\n\ncs.get = function (string) {\n\tconst prefix = string.slice(0, 3).toLowerCase();\n\tlet value;\n\tlet model;\n\tswitch (prefix) {\n\t\tcase 'hsl': {\n\t\t\tvalue = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'hwb': {\n\t\t\tvalue = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tvalue = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!value) {\n\t\treturn null;\n\t}\n\n\treturn {model, value};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst abbr = /^#([a-f\\d]{3,4})$/i;\n\tconst hex = /^#([a-f\\d]{6})([a-f\\d]{2})?$/i;\n\tconst rgba = /^rgba?\\(\\s*([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(?=[\\s,])\\s*(?:,\\s*)?([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(?=[\\s,])\\s*(?:,\\s*)?([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)\\s*(?:[\\s,|/]\\s*([+-]?(?:\\d*\\.)?\\d+(?:e\\d+)?)(%?)\\s*)?\\)$/i;\n\tconst per = /^rgba?\\(\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[\\s,|/]\\s*([+-]?[\\d.]+)(%?)\\s*)?\\)$/i;\n\tconst keyword = /^(\\w+)$/;\n\n\tlet rgb = [0, 0, 0, 1];\n\tlet match;\n\tlet i;\n\tlet hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tconst i2 = i * 2;\n\t\t\trgb[i] = Number.parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = Number.parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Number.parseFloat(match[i + 1]);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(Number.parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = match[5] ? Number.parseFloat(match[4]) * 0.01 : Number.parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.toLowerCase().match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!Object.hasOwn(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\trgb = colorNames[match[1]].slice();\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d.]+)%\\s*,?\\s*([+-]?[\\d.]+)%\\s*(?:[,|/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\s*)?\\)$/i;\n\tconst match = string.match(hsl);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst s = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst l = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tconst hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*[\\s,]\\s*([+-]?[\\d.]+)%\\s*[\\s,]\\s*([+-]?[\\d.]+)%\\s*(?:[\\s,]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\s*)?\\)$/i;\n\tconst match = string.match(hwb);\n\n\tif (match) {\n\t\tconst alpha = Number.parseFloat(match[4]);\n\t\tconst h = ((Number.parseFloat(match[1]) % 360) + 360) % 360;\n\t\tconst w = clamp(Number.parseFloat(match[2]), 0, 100);\n\t\tconst b = clamp(Number.parseFloat(match[3]), 0, 100);\n\t\tconst a = clamp(Number.isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function (...rgba) {\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function (...rgba) {\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function (...rgba) {\n\tconst r = Math.round(rgba[0] / 255 * 100);\n\tconst g = Math.round(rgba[1] / 255 * 100);\n\tconst b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function (...hsla) {\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// Hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function (...hwba) {\n\tlet a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (...rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// Helpers\nfunction clamp(number_, min, max) {\n\treturn Math.min(Math.max(min, number_), max);\n}\n\nfunction hexDouble(number_) {\n\tconst string_ = Math.round(number_).toString(16).toUpperCase();\n\treturn (string_.length < 2) ? '0' + string_ : string_;\n}\n\nexport default cs;\n","const colors = {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50],\n}\n\nfor (const key in colors) Object.freeze(colors[key]);\nexport default Object.freeze(colors);","/* MIT license */\n/* eslint-disable no-mixed-operators */\nimport cssKeywords from 'color-name';\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\toklab: {channels: 3, labels: ['okl', 'oka', 'okb']},\n\tlch: {channels: 3, labels: 'lch'},\n\toklch: {channels: 3, labels: ['okl', 'okc', 'okh']},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']},\n};\n\nexport default convert;\n\n// LAB f(t) constant\nconst LAB_FT = (6 / 29) ** 3;\n\n// SRGB non-linear transform functions\nfunction srgbNonlinearTransform(c) {\n\tconst cc = c > 0.003_130_8\n\t\t? ((1.055 * (c ** (1 / 2.4))) - 0.055)\n\t\t: c * 12.92;\n\treturn Math.min(Math.max(0, cc), 1);\n}\n\nfunction srgbNonlinearTransformInv(c) {\n\treturn c > 0.040_45 ? (((c + 0.055) / 1.055) ** 2.4) : (c / 12.92);\n}\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tswitch (max) {\n\t\tcase min: {\n\t\t\th = 0;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase r: {\n\t\t\th = (g - b) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase g: {\n\t\t\th = 2 + (b - r) / delta;\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase b: {\n\t\t\th = 4 + (r - g) / delta;\n\n\t\t\tbreak;\n\t\t}\n\t// No default\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tswitch (v) {\n\t\t\tcase r: {\n\t\t\t\th = bdif - gdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase g: {\n\t\t\t\th = (1 / 3) + rdif - bdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase b: {\n\t\t\t\th = (2 / 3) + gdif - rdif;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t// No default\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100,\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.oklab = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst lp = Math.cbrt(0.412_221_470_8 * r + 0.536_332_536_3 * g + 0.051_445_992_9 * b);\n\tconst mp = Math.cbrt(0.211_903_498_2 * r + 0.680_699_545_1 * g + 0.107_396_956_6 * b);\n\tconst sp = Math.cbrt(0.088_302_461_9 * r + 0.281_718_837_6 * g + 0.629_978_700_5 * b);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst aa = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst bb = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, aa * 100, bb * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Number.POSITIVE_INFINITY;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn [...cssKeywords[keyword]];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransformInv(rgb[0] / 255);\n\tconst g = srgbNonlinearTransformInv(rgb[1] / 255);\n\tconst b = srgbNonlinearTransformInv(rgb[2] / 255);\n\n\tconst x = (r * 0.412_456_4) + (g * 0.357_576_1) + (b * 0.180_437_5);\n\tconst y = (r * 0.212_672_9) + (g * 0.715_152_2) + (b * 0.072_175);\n\tconst z = (r * 0.019_333_9) + (g * 0.119_192) + (b * 0.950_304_1);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t3;\n\tlet value;\n\n\tif (s === 0) {\n\t\tvalue = l * 255;\n\t\treturn [value, value, value];\n\t}\n\n\tconst t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tvalue = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tvalue = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tvalue = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tvalue = t1;\n\t\t}\n\n\t\trgb[i] = value * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0: {\n\t\t\treturn [v, t, p];\n\t\t}\n\n\t\tcase 1: {\n\t\t\treturn [q, v, p];\n\t\t}\n\n\t\tcase 2: {\n\t\t\treturn [p, v, t];\n\t\t}\n\n\t\tcase 3: {\n\t\t\treturn [p, q, v];\n\t\t}\n\n\t\tcase 4: {\n\t\t\treturn [t, p, v];\n\t\t}\n\n\t\tcase 5: {\n\t\t\treturn [v, p, q];\n\t\t}\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\t// eslint-disable-next-line no-bitwise\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces, default-case-last */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: { r = v; g = n; b = wh; break;\n\t\t}\n\n\t\tcase 1: { r = n; g = v; b = wh; break;\n\t\t}\n\n\t\tcase 2: { r = wh; g = v; b = n; break;\n\t\t}\n\n\t\tcase 3: { r = wh; g = n; b = v; break;\n\t\t}\n\n\t\tcase 4: { r = n; g = wh; b = v; break;\n\t\t}\n\n\t\tcase 5: { r = v; g = wh; b = n; break;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces, default-case-last */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.240_454_2) + (y * -1.537_138_5) + (z * -0.498_531_4);\n\tg = (x * -0.969_266) + (y * 1.876_010_8) + (z * 0.041_556);\n\tb = (x * 0.055_643_4) + (y * -0.204_025_9) + (z * 1.057_225_2);\n\n\t// Assume sRGB\n\tr = srgbNonlinearTransform(r);\n\tg = srgbNonlinearTransform(g);\n\tb = srgbNonlinearTransform(b);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > LAB_FT ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > LAB_FT ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > LAB_FT ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.xyz.oklab = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\n\tconst lp = Math.cbrt(0.818_933_010_1 * x + 0.361_866_742_4 * y - 0.128_859_713_7 * z);\n\tconst mp = Math.cbrt(0.032_984_543_6 * x + 0.929_311_871_5 * y + 0.036_145_638_7 * z);\n\tconst sp = Math.cbrt(0.048_200_301_8 * x + 0.264_366_269_1 * y + 0.633_851_707 * z);\n\n\tconst l = 0.210_454_255_3 * lp + 0.793_617_785 * mp - 0.004_072_046_8 * sp;\n\tconst a = 1.977_998_495_1 * lp - 2.428_592_205 * mp + 0.450_593_709_9 * sp;\n\tconst b = 0.025_904_037_1 * lp + 0.782_771_766_2 * mp - 0.808_675_766 * sp;\n\n\treturn [l * 100, a * 100, b * 100];\n};\n\nconvert.oklab.oklch = function (oklab) {\n\treturn convert.lab.lch(oklab);\n};\n\nconvert.oklab.xyz = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst a = oklab[1] / 100;\n\tconst b = oklab[2] / 100;\n\n\tconst l = (0.999_999_998 * ll + 0.396_337_792 * a + 0.215_803_758 * b) ** 3;\n\tconst m = (1.000_000_008 * ll - 0.105_561_342 * a - 0.063_854_175 * b) ** 3;\n\tconst s = (1.000_000_055 * ll - 0.089_484_182 * a - 1.291_485_538 * b) ** 3;\n\n\tconst x = 1.227_013_851 * l - 0.557_799_98 * m + 0.281_256_149 * s;\n\tconst y = -0.040_580_178 * l + 1.112_256_87 * m - 0.071_676_679 * s;\n\tconst z = -0.076_381_285 * l - 0.421_481_978 * m + 1.586_163_22 * s;\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.oklab.rgb = function (oklab) {\n\tconst ll = oklab[0] / 100;\n\tconst aa = oklab[1] / 100;\n\tconst bb = oklab[2] / 100;\n\n\tconst l = (ll + 0.396_337_777_4 * aa + 0.215_803_757_3 * bb) ** 3;\n\tconst m = (ll - 0.105_561_345_8 * aa - 0.063_854_172_8 * bb) ** 3;\n\tconst s = (ll - 0.089_484_177_5 * aa - 1.291_485_548 * bb) ** 3;\n\n\t// Assume sRGB\n\tconst r = srgbNonlinearTransform(4.076_741_662_1 * l - 3.307_711_591_3 * m + 0.230_969_929_2 * s);\n\tconst g = srgbNonlinearTransform(-1.268_438_004_6 * l + 2.609_757_401_1 * m - 0.341_319_396_5 * s);\n\tconst b = srgbNonlinearTransform(-0.004_196_086_3 * l - 0.703_418_614_7 * m + 1.707_614_701 * s);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.oklch.oklab = function (oklch) {\n\treturn convert.lch.lab(oklch);\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > LAB_FT ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > LAB_FT ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > LAB_FT ? z2 : (z - 16 / 116) / 7.787;\n\n\t// Illuminant D65 XYZ Tristrimulus Values\n\t// https://en.wikipedia.org/wiki/CIE_1931_color_space\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t/* eslint-disable no-bitwise */\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\t\t/* eslint-enable no-bitwise */\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\t// eslint-disable-next-line no-bitwise\n\tif (r >> 4 === g >> 4 && g >> 4 === b >> 4) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\targs = args[0];\n\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (Math.trunc(args > 50) + 1) * 0.5;\n\t/* eslint-disable no-bitwise */\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\targs = args[0];\n\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\t/* eslint-disable no-bitwise */\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f\\d]{6}|[a-f\\d]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = [...colorString].map(char => char + char).join('');\n\t}\n\n\tconst integer = Number.parseInt(colorString, 16);\n\t/* eslint-disable no-bitwise */\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\t/* eslint-enable no-bitwise */\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet hue;\n\n\tconst grayscale = chroma < 1 ? min / (1 - chroma) : 0;\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else if (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else if (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2 * s * l) : (2 * s * (1 - l));\n\n\tlet f = 0;\n\tif (c < 1) {\n\t\tf = (l - 0.5 * c) / (1 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0: {\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 1: {\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\t}\n\n\t\tcase 2: {\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\t}\n\n\t\tcase 3: {\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\t}\n\n\t\tcase 4: {\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\t}\n\n\t\tdefault: {\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t\t}\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255,\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1 - c);\n\tlet f = 0;\n\n\tif (v > 0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else if (l >= 0.5 && l < 1) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65_535) * 255, (apple[1] / 65_535) * 255, (apple[2] / 65_535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65_535, (rgb[1] / 255) * 65_535, (rgb[2] / 255) * 65_535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\t/* eslint-disable no-bitwise */\n\tconst value = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (value << 16) + (value << 8) + value;\n\t/* eslint-enable no-bitwise */\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.slice(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst value = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [value / 255 * 100];\n};\n","import conversions from './conversions.js';\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null,\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let {length} = adjacents, i = 0; i < length; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nfunction route(fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let {length} = models, i = 0; i < length; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n}\n\nexport default route;\n","import conversions from './conversions.js';\nimport route from './route.js';\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let {length} = result, i = 0; i < length; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfor (const fromModel of models) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\tfor (const toModel of routeModels) {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t}\n}\n\nexport default convert;\n","import colorString from 'color-string';\nimport convert from 'color-convert';\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](...arguments_);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst arguments_ = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(...arguments_);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(...this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(...rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_colour_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...arguments_) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments_.length > 0) {\n\t\t\treturn new Color(arguments_, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...arguments_) {\n\t\tlet color = arguments_[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(arguments_, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] ||= [])[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nexport default Color;\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Color from 'color'\n\ntype hexColor = `#${string & (\n `${string}${string}${string}`\n | `${string}${string}${string}${string}${string}${string}`\n)}`\n\n/**\n * Is the current theme dark?\n */\nexport function isDarkModeEnabled() {\n\tconst darkModePreference = window?.matchMedia?.('(prefers-color-scheme: dark)')?.matches\n\tconst darkModeSetting = document.body.getAttribute('data-themes')?.includes('dark')\n\treturn darkModeSetting || darkModePreference || false\n}\n\n/**\n * Is the current theme high contrast?\n */\nexport function isHighContrastModeEnabled() {\n\tconst highContrastPreference = window?.matchMedia?.('(forced-colors: active)')?.matches\n\tconst highContrastSetting = document.body.getAttribute('data-themes')?.includes('highcontrast')\n\treturn highContrastSetting || highContrastPreference || false\n}\n\n/**\n * Should we invert the text on this background color?\n *\n * @param color RGB color value as a hex string\n * @return boolean\n */\nexport function invertTextColor(color: hexColor): boolean {\n\treturn colorContrast(color, '#ffffff') < 4.5\n}\n\n/**\n * Is this color too bright?\n *\n * @param color RGB color value as a hex string\n * @return boolean\n */\nexport function isBrightColor(color: hexColor): boolean {\n\treturn calculateLuma(color) > 0.6\n}\n\n/**\n * Get color for on-page elements\n * theme color by default, grey if theme color is too bright.\n *\n * @param color the color to contrast against, e.g. #ffffff\n * @param backgroundColor the background color to contrast against, e.g. #000000\n */\nexport function elementColor(\n\tcolor: hexColor,\n\tbackgroundColor: hexColor,\n): hexColor {\n\tconst brightBackground = isBrightColor(backgroundColor)\n\tconst blurredBackground = mix(\n\t\tbackgroundColor,\n\t\tbrightBackground ? color : '#ffffff',\n\t\t66,\n\t)\n\n\tlet contrast = colorContrast(color, blurredBackground)\n\tconst minContrast = isHighContrastModeEnabled() ? 5.6 : 3.2\n\n\tlet iteration = 0\n\tlet result = color\n\tconst epsilon = (brightBackground ? -100 : 100) / 255\n\twhile (contrast < minContrast && iteration++ < 100) {\n\t\tconst hsl = hexToHSL(result)\n\t\tconst l = Math.max(\n\t\t\t0,\n\t\t\tMath.min(255, hsl.l + epsilon),\n\t\t)\n\t\tresult = hslToHex({ h: hsl.h, s: hsl.s, l })\n\t\tcontrast = colorContrast(result, blurredBackground)\n\t}\n\n\treturn result\n}\n\n/**\n * Get color for on-page text:\n * black if background is bright, white if background is dark.\n *\n * @param color1 the color to contrast against, e.g. #ffffff\n * @param color2 the background color to contrast against, e.g. #000000\n * @param factor the factor to mix the colors between -100 and 100, e.g. 66\n */\nexport function mix(color1: hexColor, color2: hexColor, factor: number): hexColor {\n\tif (factor < -100 || factor > 100) {\n\t\tthrow new RangeError('Factor must be between -100 and 100')\n\t}\n\treturn new Color(color2).mix(new Color(color1), (factor + 100) / 200).hex()\n}\n\n/**\n * Lighten a color by a factor\n *\n * @param color the color to lighten, e.g. #000000\n * @param factor the factor to lighten the color by between -100 and 100, e.g. -41\n */\nexport function lighten(color: hexColor, factor: number): hexColor {\n\tif (factor < -100 || factor > 100) {\n\t\tthrow new RangeError('Factor must be between -100 and 100')\n\t}\n\treturn new Color(color).lighten((factor + 100) / 200).hex()\n}\n\n/**\n * Darken a color by a factor\n *\n * @param color the color to darken, e.g. #ffffff\n * @param factor the factor to darken the color by between -100 and 100, e.g. 32\n */\nexport function darken(color: hexColor, factor: number): hexColor {\n\tif (factor < -100 || factor > 100) {\n\t\tthrow new RangeError('Factor must be between -100 and 100')\n\t}\n\treturn new Color(color).darken((factor + 100) / 200).hex()\n}\n\n/**\n * Calculate the luminance of a color\n *\n * @param color the color to calculate the luminance of, e.g. #ffffff\n */\nexport function calculateLuminance(color: hexColor): number {\n\treturn hexToHSL(color).l\n}\n\n/**\n * Calculate the luma of a color\n *\n * @param color the color to calculate the luma of, e.g. #ffffff\n */\nexport function calculateLuma(color: hexColor): number {\n\tconst rgb = hexToRGB(color).map((value) => {\n\t\tvalue /= 255\n\t\treturn value <= 0.03928\n\t\t\t? value / 12.92\n\t\t\t: Math.pow((value + 0.055) / 1.055, 2.4)\n\t})\n\tconst [red, green, blue] = rgb\n\treturn 0.2126 * red + 0.7152 * green + 0.0722 * blue\n}\n\n/**\n * Calculate the contrast between two colors\n *\n * @param color1 the first color to calculate the contrast of, e.g. #ffffff\n * @param color2 the second color to calculate the contrast of, e.g. #000000\n */\nexport function colorContrast(color1: hexColor, color2: hexColor): number {\n\tconst luminance1 = calculateLuma(color1) + 0.05\n\tconst luminance2 = calculateLuma(color2) + 0.05\n\treturn Math.max(luminance1, luminance2) / Math.min(luminance1, luminance2)\n}\n\n/**\n * Convert hex color to RGB\n *\n * @param color RGB color value as a hex string\n */\nexport function hexToRGB(color: hexColor): [number, number, number] {\n\treturn new Color(color).rgb().array()\n}\n\n/**\n * Convert RGB color to hex\n *\n * @param color RGB color value as a hex string\n */\nexport function hexToHSL(color: hexColor): { h: number, s: number, l: number } {\n\tconst hsl = new Color(color).hsl()\n\treturn { h: hsl.color[0], s: hsl.color[1], l: hsl.color[2] }\n}\n\n/**\n * Convert HSL color to hex\n *\n * @param hsl HSL color value as an object\n * @param hsl.h hue\n * @param hsl.s saturation\n * @param hsl.l lightness\n */\nexport function hslToHex(hsl: { h: number, s: number, l: number }): hexColor {\n\treturn new Color(hsl).hex()\n}\n\n/**\n * Convert RGB color to hex\n *\n * @param r red\n * @param g green\n * @param b blue\n */\nexport function rgbToHex(r: number, g: number, b: number): hexColor {\n\tconst hex = ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)\n\treturn `#${hex}`\n}\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IFileAction, INode } from '@nextcloud/files'\nimport type { TagWithId } from '../types.ts'\n\nimport { subscribe } from '@nextcloud/event-bus'\nimport { t } from '@nextcloud/l10n'\nimport logger from '../logger.ts'\nimport { fetchTags } from '../services/api.ts'\nimport { getNodeSystemTags } from '../utils.ts'\nimport { elementColor, isDarkModeEnabled } from '../utils/colorUtils.ts'\n\nimport '../css/fileEntryInlineSystemTags.scss'\n\n// Init tag cache\nconst cache: TagWithId[] = []\n\nexport const action: IFileAction = {\n\tid: 'system-tags',\n\tdisplayName: () => '',\n\ticonSvgInline: () => '',\n\n\tenabled({ nodes }) {\n\t\t// Only show the action on single nodes\n\t\tif (nodes.length !== 1) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Always show the action, even if there are no tags\n\t\t// This will render an empty tag list and allow events to update it\n\t\treturn true\n\t},\n\n\tasync exec() {\n\t\treturn null\n\t},\n\n\tasync renderInline({ nodes }) {\n\t\tif (nodes.length !== 1 || !nodes[0]) {\n\t\t\treturn null\n\t\t}\n\t\treturn await renderInline(nodes[0])\n\t},\n\n\torder: 0,\n}\n\n// Subscribe to the events\nsubscribe('systemtags:node:updated', updateSystemTagsHtml)\nsubscribe('systemtags:tag:created', addTag)\nsubscribe('systemtags:tag:deleted', removeTag)\nsubscribe('systemtags:tag:updated', updateTag)\n\n/**\n * Update the system tags html when the node is updated\n *\n * @param node - The updated node\n */\nasync function updateSystemTagsHtml(node: INode) {\n\tconst systemTagsHtml = await renderInline(node)\n\tconst elements = document.querySelectorAll(`[data-systemtags-fileid=\"${node.id}\"]`)\n\tfor (const element of elements) {\n\t\telement.replaceWith(systemTagsHtml)\n\t}\n}\n\n/**\n * Add and remove tags from the cache\n *\n * @param tag - The tag to add\n */\nfunction addTag(tag: TagWithId) {\n\tcache.push(tag)\n}\n\n/**\n * Remove a tag from the cache\n *\n * @param tag - The tag to remove\n */\nfunction removeTag(tag: TagWithId) {\n\tcache.splice(cache.findIndex((t) => t.id === tag.id), 1)\n}\n\n/**\n * Update a tag in the cache\n *\n * @param tag - The tag to update\n */\nfunction updateTag(tag: TagWithId) {\n\tconst index = cache.findIndex((t) => t.id === tag.id)\n\tif (index !== -1) {\n\t\tcache[index] = tag\n\t}\n\tupdateSystemTagsColorAttribute(tag)\n}\n\n/**\n * Update the color attribute of the system tags\n *\n * @param tag - The tag to update\n */\nfunction updateSystemTagsColorAttribute(tag: TagWithId) {\n\tdocument.querySelectorAll(`[data-systemtag-name=\"${tag.displayName}\"]`).forEach((element) => {\n\t\t(element as HTMLElement).style.setProperty('--systemtag-color', `#${tag.color}`)\n\t})\n}\n\n/**\n * Render a single tag element\n *\n * @param tag - The tag to render\n * @param isMore - Whether this is a \"more\" tag\n */\nfunction renderTag(tag: string, isMore = false): HTMLElement {\n\tconst tagElement = document.createElement('li')\n\ttagElement.classList.add('files-list__system-tag')\n\ttagElement.setAttribute('data-systemtag-name', tag)\n\ttagElement.textContent = tag\n\n\t// Set the color if it exists\n\tconst cachedTag = cache.find((t) => t.displayName === tag)\n\tif (cachedTag?.color) {\n\t\t// Make sure contrast is good and follow WCAG guidelines\n\t\tconst mainBackgroundColor = getComputedStyle(document.body)\n\t\t\t.getPropertyValue('--color-main-background')\n\t\t\t.replace('#', '') || (isDarkModeEnabled() ? '000000' : 'ffffff')\n\t\tconst primaryElement = elementColor(`#${cachedTag.color}`, `#${mainBackgroundColor}`)\n\t\ttagElement.style.setProperty('--systemtag-color', primaryElement)\n\t\ttagElement.setAttribute('data-systemtag-color', 'true')\n\t}\n\n\tif (isMore) {\n\t\ttagElement.classList.add('files-list__system-tag--more')\n\t}\n\n\treturn tagElement\n}\n\n/**\n * Render the inline system tags for a node\n *\n * @param node - The node to render the tags for\n */\nasync function renderInline(node: INode): Promise {\n\t// Ensure we have the system tags as an array\n\tconst tags = getNodeSystemTags(node)\n\tconst systemTagsElementWrapper = document.createElement('div')\n\tsystemTagsElementWrapper.setAttribute('data-systemtags-fileid', node.id || '')\n\n\tif (tags.length > 0) {\n\t\tconst systemTagsElement = document.createElement('ul')\n\t\tsystemTagsElement.classList.add('files-list__system-tags')\n\t\tsystemTagsElement.setAttribute('aria-label', t('files', 'Assigned collaborative tags'))\n\t\tsystemTagsElementWrapper.appendChild(systemTagsElement)\n\n\t\t// Fetch the tags if the cache is empty\n\t\tif (cache.length === 0) {\n\t\t\ttry {\n\t\t\t\t// Best would be to support attributes from webdav,\n\t\t\t\t// but currently the library does not support it\n\t\t\t\tcache.push(...await fetchTags())\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Failed to fetch tags', { error })\n\t\t\t}\n\t\t}\n\n\t\tsystemTagsElement.append(renderTag(tags[0]!))\n\t\tif (tags.length === 2) {\n\t\t\t// Special case only two tags:\n\t\t\t// the overflow fake tag would take the same space as this, so render it\n\t\t\tsystemTagsElement.append(renderTag(tags[1]!))\n\t\t} else if (tags.length > 1) {\n\t\t\t// More tags than the one we're showing\n\t\t\t// So we add a overflow element indicating there are more tags\n\t\t\tconst moreTagElement = renderTag('+' + (tags.length - 1), true)\n\t\t\tmoreTagElement.setAttribute('title', tags.slice(1).join(', '))\n\t\t\t// because the title is not accessible we hide this element for screen readers (see alternative below)\n\t\t\tmoreTagElement.setAttribute('aria-hidden', 'true')\n\t\t\tmoreTagElement.setAttribute('role', 'presentation')\n\t\t\tsystemTagsElement.append(moreTagElement)\n\n\t\t\t// For accessibility the tags are listed, as the title is not accessible\n\t\t\t// but those tags are visually hidden\n\t\t\tfor (const tag of tags.slice(1)) {\n\t\t\t\tconst tagElement = renderTag(tag)\n\t\t\t\ttagElement.classList.add('hidden-visually')\n\t\t\t\tsystemTagsElement.append(tagElement)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn systemTagsElementWrapper\n}\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ContentsWithRoot } from '@nextcloud/files'\nimport type { FileStat, ResponseDataDetailed } from 'webdav'\nimport type { TagWithId } from '../types.ts'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { Folder, Permission } from '@nextcloud/files'\nimport { getClient, getDavNameSpaces, getDavProperties, getRemoteURL, getRootPath, resultToNode } from '@nextcloud/files/dav'\nimport { fetchTags } from './api.ts'\n\nconst rootPath = '/systemtags'\n\nconst client = getClient()\n\n/**\n * Format the REPORT payload to filter files by tag\n *\n * @param tagId - The tag ID\n */\nfunction formatReportPayload(tagId: number) {\n\treturn `\n\n\t\n\t\t${getDavProperties()}\n\t\n\t\n\t\t${tagId}\n\t\n`\n}\n\n/**\n * Convert a tag to a Folder node\n *\n * @param tag - The tag\n */\nfunction tagToNode(tag: TagWithId): Folder {\n\treturn new Folder({\n\t\tid: tag.id,\n\t\tsource: `${getRemoteURL()}${rootPath}/${tag.id}`,\n\t\towner: String(getCurrentUser()?.uid ?? 'anonymous'),\n\t\troot: rootPath,\n\t\tdisplayname: tag.displayName,\n\t\tpermissions: Permission.READ,\n\t\tattributes: {\n\t\t\t...tag,\n\t\t\t'is-tag': true,\n\t\t},\n\t})\n}\n\n/**\n * Get the contents of a folder or tag\n *\n * @param path - The path to the folder or tag\n */\nexport async function getContents(path = '/'): Promise {\n\t// List tags in the root\n\tconst tagsCache = (await fetchTags()).filter((tag) => tag.userVisible) as TagWithId[]\n\n\tif (path === '/') {\n\t\treturn {\n\t\t\tfolder: new Folder({\n\t\t\t\tid: 0,\n\t\t\t\tsource: `${getRemoteURL()}${rootPath}`,\n\t\t\t\towner: getCurrentUser()?.uid as string,\n\t\t\t\troot: rootPath,\n\t\t\t\tpermissions: Permission.NONE,\n\t\t\t}),\n\t\t\tcontents: tagsCache.map(tagToNode),\n\t\t}\n\t}\n\n\tconst tagIdStr = path.split('/', 2)[1]\n\tif (!tagIdStr || isNaN(parseInt(tagIdStr))) {\n\t\tthrow new Error('Invalid tag ID')\n\t}\n\n\tconst tagId = parseInt(tagIdStr)\n\tconst tag = tagsCache.find((tag) => tag.id === tagId)\n\tif (!tag) {\n\t\tthrow new Error('Tag not found')\n\t}\n\n\tconst folder = tagToNode(tag)\n\tconst contentsResponse = await client.getDirectoryContents(getRootPath(), {\n\t\tdetails: true,\n\t\t// Only filter favorites if we're at the root\n\t\tdata: formatReportPayload(tagId),\n\t\theaders: {\n\t\t\t// Patched in WebdavClient.ts\n\t\t\tmethod: 'REPORT',\n\t\t},\n\t}) as ResponseDataDetailed\n\n\treturn {\n\t\tfolder,\n\t\tcontents: contentsResponse.data.map((stat) => resultToNode(stat)),\n\t}\n}\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport svgTagMultiple from '@mdi/svg/svg/tag-multiple-outline.svg?raw'\nimport { getNavigation, View } from '@nextcloud/files'\nimport { translate as t } from '@nextcloud/l10n'\nimport { getContents } from '../services/systemtags.ts'\n\nexport const systemTagsViewId = 'tags'\n\n/**\n * Register the system tags files view\n */\nexport function registerSystemTagsView() {\n\tconst Navigation = getNavigation()\n\tNavigation.register(new View({\n\t\tid: systemTagsViewId,\n\t\tname: t('systemtags', 'Tags'),\n\t\tcaption: t('systemtags', 'List of tags and their associated files and folders.'),\n\n\t\temptyTitle: t('systemtags', 'No tags found'),\n\t\temptyCaption: t('systemtags', 'Tags you have created will show up here.'),\n\n\t\ticon: svgTagMultiple,\n\t\torder: 25,\n\n\t\tgetContents,\n\t}))\n}\n","/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IFileAction } from '@nextcloud/files'\n\nimport { DefaultType, FileType } from '@nextcloud/files'\nimport { t } from '@nextcloud/l10n'\nimport { systemTagsViewId } from '../files_views/systemtagsView.ts'\n\nexport const action: IFileAction = {\n\tid: 'systemtags:open-in-files',\n\tdisplayName: () => t('systemtags', 'Open in Files'),\n\ticonSvgInline: () => '',\n\n\tenabled({ nodes, view }) {\n\t\t// Only for the system tags view\n\t\tif (view.id !== systemTagsViewId) {\n\t\t\treturn false\n\t\t}\n\t\t// Only for single nodes\n\t\tif (nodes.length !== 1 || !nodes[0]) {\n\t\t\treturn false\n\t\t}\n\t\t// Do not open tags (keep the default action) and only open folders\n\t\treturn nodes[0].attributes['is-tag'] !== true\n\t\t\t&& nodes[0].type === FileType.Folder\n\t},\n\n\tasync exec({ nodes }) {\n\t\tif (!nodes[0] || nodes.length !== 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tlet dir = nodes[0].dirname\n\t\tif (nodes[0].type === FileType.Folder) {\n\t\t\tdir = nodes[0].path\n\t\t}\n\n\t\twindow.OCP.Files.Router.goToRoute(\n\t\t\tnull, // use default route\n\t\t\t{ view: 'files', fileid: String(nodes[0].fileid) },\n\t\t\t{ dir, openfile: 'true' },\n\t\t)\n\t\treturn null\n\t},\n\n\t// Before openFolderAction\n\torder: -1000,\n\tdefault: DefaultType.HIDDEN,\n}\n","/*!\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { registerFileAction } from '@nextcloud/files'\nimport { registerDavProperty } from '@nextcloud/files/dav'\nimport { action as bulkSystemTagsAction } from './files_actions/bulkSystemTagsAction.ts'\nimport { registerFileSidebarAction } from './files_actions/filesSidebarAction.ts'\nimport { action as inlineSystemTagsAction } from './files_actions/inlineSystemTagsAction.ts'\nimport { action as openInFilesAction } from './files_actions/openInFilesAction.ts'\nimport { registerSystemTagsView } from './files_views/systemtagsView.ts'\n\nregisterDavProperty('nc:system-tags')\nregisterFileAction(bulkSystemTagsAction)\nregisterFileAction(inlineSystemTagsAction)\nregisterFileAction(openInFilesAction)\n\nregisterSystemTagsView()\nregisterFileSidebarAction()\n"],"file":"systemtags-init.mjs"} \ No newline at end of file