@web3r/flowerkit
Version:
Tree-shakable JavaScript and TypeScript utility library for frontend/browser apps: DOM, events, arrays, objects, strings, date, JSON, and network helpers (ESM/CJS, SSR-friendly).
1 lines • 2.81 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import { getDocument } from \"ssr-window\";\r\n\r\nexport type TBubbleArgs = Parameters<typeof bubble>;\r\n\r\nexport type TBubbleReturn = ReturnType<typeof bubble>;\r\n\r\n/**\r\n * Dispatches a bubbling `CustomEvent` on the provided target.\r\n *\r\n * @template T\r\n * @param {Document|Window|Element|HTMLElement} [el=document] Event target\r\n * @param {string} name Event name\r\n * @param {T} [detail] Custom event detail payload\r\n * @param {CustomEventInit<T> & Record<string, unknown>} [params={}] Extra `CustomEvent` init options\r\n * @returns {void}\r\n * @throws {TypeError} bubble: el must be an EventTarget\r\n * @throws {TypeError} bubble: name must be a non-empty string\r\n * @throws {TypeError} bubble: params must be an object\r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events/Creating_and_triggering_events\r\n *\r\n * @example\r\n * bubble(document, \"myEvent\", { myData: \"test\" });\r\n *\r\n * @example\r\n * const el = document.querySelector(\"#myElement\");\r\n * if (el) bubble(el, \"myEvent\");\r\n */\r\nexport const bubble = <T = unknown>(\r\n el: Document | Window | Element | HTMLElement = getDocument(),\r\n name: string,\r\n detail?: T,\r\n params: CustomEventInit<T> & Record<string, unknown> = {}\r\n): void => {\r\n const isTarget = el && typeof (el as any).dispatchEvent === \"function\";\r\n if (!isTarget) {\r\n throw new TypeError(\"bubble: el must be an EventTarget\");\r\n }\r\n if (typeof name !== \"string\" || name.length === 0) {\r\n throw new TypeError(\"bubble: name must be a non-empty string\");\r\n }\r\n if (params === null || typeof params !== \"object\") {\r\n throw new TypeError(\"bubble: params must be an object\");\r\n }\r\n\r\n const eventParams: CustomEventInit<T> = {\r\n cancelable: true,\r\n bubbles: true,\r\n detail,\r\n ...params,\r\n };\r\n\r\n if (typeof (globalThis as { dispatchEvent?: unknown; }).dispatchEvent === \"function\" && typeof CustomEvent === \"function\") {\r\n const event = new CustomEvent<T>(name, eventParams);\r\n (el as EventTarget).dispatchEvent(event);\r\n }\r\n\r\n};\r\n"],"names":["bubble","el","getDocument","name","detail","params","isTarget","dispatchEvent","TypeError","length","eventParams","cancelable","bubbles","globalThis","CustomEvent","event"],"mappings":";;;;;;;;;;;;;;;;;;;;;;SA4BaA,OAASA,CACpBC,GAAgDC,cAChDC,KACAC,OACAC,OAAuD,MAEvD,MAAMC,SAAWL,WAAcA,GAAWM,gBAAkB,WAC5D,IAAKD,SACH,MAAM,IAAIE,UAAU,qCAEtB,UAAWL,OAAS,UAAYA,KAAKM,SAAW,EAC9C,MAAM,IAAID,UAAU,2CAEtB,GAAIH,SAAW,aAAeA,SAAW,SACvC,MAAM,IAAIG,UAAU,oCAGtB,MAAME,YAAkC,CACtCC,WAAY,KACZC,QAAS,KACTR,iBACGC,QAGL,UAAYQ,WAA4CN,gBAAkB,mBAAqBO,cAAgB,WAAY,CACzH,MAAMC,MAAQ,IAAID,YAAeX,KAAMO,aACtCT,GAAmBM,cAAcQ,MACpC"}