UNPKG

@yamada-ui/react

Version:

React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion

1 lines 4.04 kB
{"version":3,"file":"dom.cjs","names":["React"],"sources":["../../../src/utils/dom.ts"],"sourcesContent":["import type { AnyString } from \"@yamada-ui/utils\"\nimport * as React from \"react\"\n\ntype KeyboardNavigationKey =\n | \"ArrowDown\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"ArrowUp\"\n | \"End\"\n | \"Home\"\n | \"PageDown\"\n | \"PageUp\"\n\ntype KeyboardControlKey =\n | \"Alt\"\n | \"Backspace\"\n | \"CapsLock\"\n | \"Control\"\n | \"Delete\"\n | \"Enter\"\n | \"Escape\"\n | \"Insert\"\n | \"Meta\"\n | \"NumLock\"\n | \"Pause\"\n | \"PrintScreen\"\n | \"ScrollLock\"\n | \"Shift\"\n | \"Space\"\n | \"Tab\"\n\ntype KeyboardFunctionKey = \"Fn\" | \"FnLock\" | `F${number}`\n\ntype KeyboardKey =\n | AnyString\n | KeyboardControlKey\n | KeyboardFunctionKey\n | KeyboardNavigationKey\n\nexport function runKeyAction<Y>(\n ev: React.KeyboardEvent<Y>,\n actions: { [key in KeyboardKey]?: React.KeyboardEventHandler<Y> },\n { preventDefault = true }: { preventDefault?: boolean } = {},\n) {\n if (ev.key === \" \") ev.key = ev.code\n const action = actions[ev.key]\n\n if (!action) return\n\n if (preventDefault) ev.preventDefault()\n\n action(ev)\n}\n\nexport function isComposing(\n ev: React.ChangeEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n): boolean {\n if (\"keyCode\" in ev) {\n return ev.nativeEvent.isComposing || ev.keyCode === 229\n } else if (ev.nativeEvent instanceof InputEvent) {\n return ev.nativeEvent.isComposing\n } else {\n return false\n }\n}\n\nexport function useAttributeObserver(\n ref: React.RefObject<HTMLElement | null>,\n attributeFilter: string[],\n enabled: boolean,\n func: () => void,\n) {\n React.useEffect(() => {\n if (!ref.current || !enabled) return\n\n const ownerDocument = ref.current.ownerDocument.defaultView ?? window\n\n const observer = new ownerDocument.MutationObserver((changes) => {\n for (const { type, attributeName } of changes) {\n if (type !== \"attributes\") continue\n if (!attributeName) continue\n\n if (attributeFilter.includes(attributeName)) func()\n }\n })\n\n observer.observe(ref.current, { attributeFilter, attributes: true })\n\n return () => observer.disconnect()\n })\n}\n\nexport function getEventRelatedTarget(ev: React.FocusEvent | React.MouseEvent) {\n return (ev.relatedTarget ??\n ev.currentTarget.ownerDocument.activeElement) as HTMLElement | null\n}\n\nconst visuallyHiddenStyle = {\n border: \"0px\",\n clipPath: \"rect(0px 0px 0px 0px)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0px\",\n position: \"absolute\",\n whiteSpace: \"nowrap\",\n width: \"1px\",\n} satisfies React.CSSProperties\n\nexport const visuallyHiddenAttributes = {\n style: visuallyHiddenStyle,\n \"aria-hidden\": true,\n tabIndex: -1,\n} satisfies React.HTMLAttributes<HTMLElement>\n\nexport function* useIds() {\n const id = React.useId()\n\n for (let i = 0; ; i++) {\n yield `${id}-${i}`\n }\n}\n"],"mappings":";;;;;AAuCA,SAAgB,aACd,IACA,SACA,EAAE,iBAAiB,SAAuC,EAAE,EAC5D;AACA,KAAI,GAAG,QAAQ,IAAK,IAAG,MAAM,GAAG;CAChC,MAAM,SAAS,QAAQ,GAAG;AAE1B,KAAI,CAAC,OAAQ;AAEb,KAAI,eAAgB,IAAG,gBAAgB;AAEvC,QAAO,GAAG;;AAGZ,SAAgB,YACd,IACS;AACT,KAAI,aAAa,GACf,QAAO,GAAG,YAAY,eAAe,GAAG,YAAY;UAC3C,GAAG,uBAAuB,WACnC,QAAO,GAAG,YAAY;KAEtB,QAAO;;AAIX,SAAgB,qBACd,KACA,iBACA,SACA,MACA;AACA,OAAM,gBAAgB;AACpB,MAAI,CAAC,IAAI,WAAW,CAAC,QAAS;EAI9B,MAAM,WAAW,KAFK,IAAI,QAAQ,cAAc,eAAe,QAE5B,kBAAkB,YAAY;AAC/D,QAAK,MAAM,EAAE,MAAM,mBAAmB,SAAS;AAC7C,QAAI,SAAS,aAAc;AAC3B,QAAI,CAAC,cAAe;AAEpB,QAAI,gBAAgB,SAAS,cAAc,CAAE,OAAM;;IAErD;AAEF,WAAS,QAAQ,IAAI,SAAS;GAAE;GAAiB,YAAY;GAAM,CAAC;AAEpE,eAAa,SAAS,YAAY;GAClC;;AAGJ,SAAgB,sBAAsB,IAAyC;AAC7E,QAAQ,GAAG,iBACT,GAAG,cAAc,cAAc;;AAGnC,MAAM,sBAAsB;CAC1B,QAAQ;CACR,UAAU;CACV,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,SAAS;CACT,UAAU;CACV,YAAY;CACZ,OAAO;CACR;AAED,MAAa,2BAA2B;CACtC,OAAO;CACP,eAAe;CACf,UAAU;CACX;AAED,UAAiB,SAAS;CACxB,MAAM,KAAKA,MAAM,OAAO;AAExB,MAAK,IAAI,IAAI,IAAK,IAChB,OAAM,GAAG,GAAG,GAAG"}