diff options
Diffstat (limited to 'releases/_artifacts/v1.0.5/missing-js/menu.js.map')
-rw-r--r-- | releases/_artifacts/v1.0.5/missing-js/menu.js.map | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/releases/_artifacts/v1.0.5/missing-js/menu.js.map b/releases/_artifacts/v1.0.5/missing-js/menu.js.map new file mode 100644 index 0000000..850b804 --- /dev/null +++ b/releases/_artifacts/v1.0.5/missing-js/menu.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["/missing-js/menu.js"],"sourcesContent":["/// <reference lib=\"es2022\" />\n\nimport { $, $$, on, dispatch, halts, attr, next, prev, asHtml, hotkey, behavior, makelogger } from \"./19.js\"\n\nconst ilog = makelogger(\"menu\");\nconst sMenu = \"[role=menu]\";\nconst sMenuitem = \"[role=menuitem]\";\n\n/**\n * @param {HTMLElement} menu\n * @returns {HTMLElement[]}\n */\nconst menuItems = menu => $$(menu, sMenuitem);\n\n/**\n * @param {Element} button \n * @param {object} options \n * @param {import(\"./19.js\").Root} options.root \n * @returns {HTMLElement | null}\n */\nconst menuOf = (button, { root }) => {\n const id = attr(button, \"aria-controls\");\n if (id === null) return null;\n return root.getElementById(id);\n}\n\n/**\n * @param {HTMLElement} menu\n * @returns {HTMLElement | null}\n */\nconst firstItem = menu => $(menu, sMenuitem)\n\n/**\n * @param {HTMLElement} menu\n * @returns {HTMLElement | null}\n */\nconst lastItem = menu => menuItems(menu).at(-1) ?? null;\n\n\n/**\n * @param {HTMLElement} menu \n * @returns {boolean}\n */\nconst isOpen = menu => !menu.hidden;\n\nexport const menu = behavior(sMenu, (menu, { root }) => {\n if (!(menu instanceof HTMLElement)) return;\n\n let opener;\n\n menuItems(menu).forEach(item => item.setAttribute(\"tabindex\", \"-1\"));\n\n on(menu, \"menu:open\", e => {\n opener = e.detail?.opener;\n if (!opener) ilog(\"Warning: Menu\", menu, \"opened without passing an `opener` element\");\n menu.hidden = false;\n firstItem(menu)?.focus();\n });\n\n on(menu, \"menu:close\", _ => {\n ilog(\"menu:close\", menu.hidden = true);\n opener?.focus();\n });\n\n on(menu, \"focusout\", e => {\n if (!isOpen(menu)) return;\n if (menu.contains(/** @type {Node} */(e.relatedTarget))) return;\n if (opener === e.relatedTarget) return;\n dispatch(menu, \"menu:close\");\n });\n\n on(menu, \"keydown\", halts(\"default\", hotkey({\n \"ArrowUp\": _ => asHtml(prev(menu, sMenuitem, root.activeElement, {}))?.focus(),\n \"ArrowDown\": _ => asHtml(next(menu, sMenuitem, root.activeElement, {}))?.focus(),\n \"Space\": _ => asHtml(root.activeElement?.closest(sMenuitem))?.click(),\n \"Home\": _ => firstItem(menu)?.focus(),\n \"End\": _ => lastItem(menu)?.focus(),\n \"Escape\": _ => dispatch(menu, \"menu:close\"),\n })));\n\n on(window, \"click\", e => {\n if (!isOpen(menu)) return;\n if (opener === e.target) return;\n dispatch(menu, \"menu:close\");\n }, { addedBy: menu });\n});\n\nexport const menuButton = behavior(\"[aria-haspopup=menu]\", (button, { root }) => {\n const menu = menuOf(button, { root });\n\n if (menu === null) return ilog(\"Error: Menu button\", button, \"has no menu.\");\n\n on(menu, \"menu:close\", _ => attr(button, \"aria-expanded\", \"false\"), { addedBy: button })\n on(menu, \"menu:open\", _ => attr(button, \"aria-expanded\", \"true\"), { addedBy: button })\n on(button, \"click\", () => dispatch(menu, isOpen(menu) ? \"menu:close\" : \"menu:open\", { opener: button }));\n});\n\nmenu(document);\nmenuButton(document);\n"],"mappings":"AAEA,OAAS,KAAAA,EAAG,MAAAC,EAAI,MAAAC,EAAI,YAAAC,EAAU,SAAAC,EAAO,QAAAC,EAAM,QAAAC,EAAM,QAAAC,EAAM,UAAAC,EAAQ,UAAAC,EAAQ,YAAAC,EAAU,cAAAC,MAAkB,UAEnG,MAAMC,EAAOD,EAAW,MAAM,EACxBE,EAAQ,cACRC,EAAY,kBAMZC,EAAYC,GAAQf,EAAGe,EAAMF,CAAS,EAQtCG,EAAS,CAACC,EAAQ,CAAE,KAAAC,CAAK,IAAM,CACjC,MAAMC,EAAKf,EAAKa,EAAQ,eAAe,EACvC,OAAIE,IAAO,KAAa,KACjBD,EAAK,eAAeC,CAAE,CACjC,EAMMC,EAAYL,GAAQhB,EAAEgB,EAAMF,CAAS,EAMrCQ,EAAWN,GAAQD,EAAUC,CAAI,EAAE,GAAG,EAAE,GAAK,KAO7CO,EAASP,GAAQ,CAACA,EAAK,OAEhBA,EAAON,EAASG,EAAO,CAACG,EAAM,CAAE,KAAAG,CAAK,IAAM,CACpD,GAAI,EAAEH,aAAgB,aAAc,OAEpC,IAAIQ,EAEJT,EAAUC,CAAI,EAAE,QAAQS,GAAQA,EAAK,aAAa,WAAY,IAAI,CAAC,EAEnEvB,EAAGc,EAAM,YAAaU,GAAK,CACvBF,EAASE,EAAE,QAAQ,OACdF,GAAQZ,EAAK,gBAAiBI,EAAM,4CAA4C,EACrFA,EAAK,OAAS,GACdK,EAAUL,CAAI,GAAG,MAAM,CAC3B,CAAC,EAEDd,EAAGc,EAAM,aAAcW,GAAK,CACxBf,EAAK,aAAcI,EAAK,OAAS,EAAI,EACrCQ,GAAQ,MAAM,CAClB,CAAC,EAEDtB,EAAGc,EAAM,WAAYU,GAAK,CAClB,CAACH,EAAOP,CAAI,GACZA,EAAK,SAA6BU,EAAE,aAAc,GAClDF,IAAWE,EAAE,eACjBvB,EAASa,EAAM,YAAY,CAC/B,CAAC,EAEDd,EAAGc,EAAM,UAAWZ,EAAM,UAAWK,EAAO,CACxC,QAAWkB,GAAKnB,EAAOD,EAAKS,EAAMF,EAAWK,EAAK,cAAe,CAAC,CAAC,CAAC,GAAG,MAAM,EAC7E,UAAaQ,GAAKnB,EAAOF,EAAKU,EAAMF,EAAWK,EAAK,cAAe,CAAC,CAAC,CAAC,GAAG,MAAM,EAC/E,MAASQ,GAAKnB,EAAOW,EAAK,eAAe,QAAQL,CAAS,CAAC,GAAG,MAAM,EACpE,KAAQa,GAAKN,EAAUL,CAAI,GAAG,MAAM,EACpC,IAAOW,GAAKL,EAASN,CAAI,GAAG,MAAM,EAClC,OAAUW,GAAKxB,EAASa,EAAM,YAAY,CAC9C,CAAC,CAAC,CAAC,EAEHd,EAAG,OAAQ,QAASwB,GAAK,CACjB,CAACH,EAAOP,CAAI,GACZQ,IAAWE,EAAE,QACjBvB,EAASa,EAAM,YAAY,CAC/B,EAAG,CAAE,QAASA,CAAK,CAAC,CACxB,CAAC,EAEYY,EAAalB,EAAS,uBAAwB,CAACQ,EAAQ,CAAE,KAAAC,CAAK,IAAM,CAC7E,MAAMH,EAAOC,EAAOC,EAAQ,CAAE,KAAAC,CAAK,CAAC,EAEpC,GAAIH,IAAS,KAAM,OAAOJ,EAAK,qBAAsBM,EAAQ,cAAc,EAE3EhB,EAAGc,EAAM,aAAcW,GAAKtB,EAAKa,EAAQ,gBAAiB,OAAO,EAAG,CAAE,QAASA,CAAO,CAAC,EACvFhB,EAAGc,EAAM,YAAaW,GAAKtB,EAAKa,EAAQ,gBAAiB,MAAM,EAAG,CAAE,QAASA,CAAO,CAAC,EACrFhB,EAAGgB,EAAQ,QAAS,IAAMf,EAASa,EAAMO,EAAOP,CAAI,EAAI,aAAe,YAAa,CAAE,OAAQE,CAAO,CAAC,CAAC,CAC3G,CAAC,EAEDF,EAAK,QAAQ,EACbY,EAAW,QAAQ","names":["$","$$","on","dispatch","halts","attr","next","prev","asHtml","hotkey","behavior","makelogger","ilog","sMenu","sMenuitem","menuItems","menu","menuOf","button","root","id","firstItem","lastItem","isOpen","opener","item","e","_","menuButton"],"sourceRoot":"file:///home/dz4k/Documents/Projects/bigsky.software/missing.css","file":"/missing-js/menu.js.map"}
\ No newline at end of file |