{"version":3,"sources":["../sources/getRole.ts"],"names":["getRole","element","explicitRole","getExplicitRole","getImplicitRole","tagToRoleMappings","ARTICLE","ASIDE","BODY","BUTTON","DATALIST","DD","DETAILS","DIALOG","DT","FIELDSET","FIGURE","FORM","FOOTER","H1","H2","H3","H4","H5","H6","HEADER","HR","LEGEND","LI","MATH","MAIN","MENU","NAV","OL","OPTGROUP","OPTION","OUTPUT","PROGRESS","SECTION","SUMMARY","TABLE","TBODY","TEXTAREA","TFOOT","TD","TH","THEAD","TR","UL","mappedByTag","tagName","undefined","hasAttribute","getAttribute","length","type","size","trim","split"],"mappings":"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","sourcesContent":["// https://w3c.github.io/html-aria/#document-conformance-requirements-for-use-of-aria-attributes-in-html\n\nexport default function getRole(element: Element): string | null {\n\tconst explicitRole = getExplicitRole(element);\n\tif (explicitRole !== null) {\n\t\treturn explicitRole;\n\t}\n\n\treturn getImplicitRole(element);\n}\n\nconst tagToRoleMappings: Record<string, string | undefined> = {\n\tARTICLE: \"article\",\n\tASIDE: \"complementary\",\n\tBODY: \"document\",\n\tBUTTON: \"button\",\n\tDATALIST: \"listbox\",\n\tDD: \"definition\",\n\tDETAILS: \"group\",\n\tDIALOG: \"dialog\",\n\tDT: \"term\",\n\tFIELDSET: \"group\",\n\tFIGURE: \"figure\",\n\t// WARNING: Only with an accessible name\n\tFORM: \"form\",\n\tFOOTER: \"contentinfo\",\n\tH1: \"heading\",\n\tH2: \"heading\",\n\tH3: \"heading\",\n\tH4: \"heading\",\n\tH5: \"heading\",\n\tH6: \"heading\",\n\tHEADER: \"banner\",\n\tHR: \"separator\",\n\tLEGEND: \"legend\",\n\tLI: \"listitem\",\n\tMATH: \"math\",\n\tMAIN: \"main\",\n\tMENU: \"list\",\n\tNAV: \"navigation\",\n\tOL: \"list\",\n\tOPTGROUP: \"group\",\n\t// WARNING: Only in certain context\n\tOPTION: \"option\",\n\tOUTPUT: \"status\",\n\tPROGRESS: \"progressbar\",\n\t// WARNING: Only with an accessible name\n\tSECTION: \"region\",\n\tSUMMARY: \"button\",\n\tTABLE: \"table\",\n\tTBODY: \"rowgroup\",\n\tTEXTAREA: \"textbox\",\n\tTFOOT: \"rowgroup\",\n\t// WARNING: Only in certain context\n\tTD: \"cell\",\n\tTH: \"columnheader\",\n\tTHEAD: \"rowgroup\",\n\tTR: \"row\",\n\tUL: \"list\",\n};\n\nfunction getImplicitRole(element: Element): string | null {\n\tconst mappedByTag = tagToRoleMappings[element.tagName];\n\tif (mappedByTag !== undefined) {\n\t\treturn mappedByTag;\n\t}\n\n\tswitch (element.tagName) {\n\t\tcase \"A\":\n\t\tcase \"AREA\":\n\t\tcase \"LINK\":\n\t\t\tif (element.hasAttribute(\"href\")) {\n\t\t\t\treturn \"link\";\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"IMG\":\n\t\t\tif ((element.getAttribute(\"alt\") || \"\").length > 0) {\n\t\t\t\treturn \"img\";\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"INPUT\": {\n\t\t\tconst { type } = element as HTMLInputElement;\n\t\t\tswitch (type) {\n\t\t\t\tcase \"button\":\n\t\t\t\tcase \"image\":\n\t\t\t\tcase \"reset\":\n\t\t\t\tcase \"submit\":\n\t\t\t\t\treturn \"button\";\n\t\t\t\tcase \"checkbox\":\n\t\t\t\tcase \"radio\":\n\t\t\t\t\treturn type;\n\t\t\t\tcase \"range\":\n\t\t\t\t\treturn \"slider\";\n\t\t\t\tcase \"email\":\n\t\t\t\tcase \"tel\":\n\t\t\t\tcase \"text\":\n\t\t\t\tcase \"url\":\n\t\t\t\t\tif (element.hasAttribute(\"list\")) {\n\t\t\t\t\t\treturn \"combobox\";\n\t\t\t\t\t}\n\t\t\t\t\treturn \"textbox\";\n\n\t\t\t\tcase \"search\":\n\t\t\t\t\tif (element.hasAttribute(\"list\")) {\n\t\t\t\t\t\treturn \"combobox\";\n\t\t\t\t\t}\n\t\t\t\t\treturn \"searchbox\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tcase \"SELECT\":\n\t\t\tif (\n\t\t\t\telement.hasAttribute(\"multiple\") ||\n\t\t\t\t(element as HTMLSelectElement).size > 1\n\t\t\t) {\n\t\t\t\treturn \"listbox\";\n\t\t\t}\n\t\t\treturn \"combobox\";\n\t}\n\treturn null;\n}\n\nfunction getExplicitRole(element: Element): string | null {\n\tif (element.hasAttribute(\"role\")) {\n\t\t// safe due to hasAttribute check\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst [explicitRole] = element.getAttribute(\"role\")!.trim().split(\" \");\n\t\tif (explicitRole !== undefined && explicitRole.length > 0) {\n\t\t\treturn explicitRole;\n\t\t}\n\t}\n\n\treturn null;\n}\n"],"file":"getRole.mjs"}