@e1011/es-kit 1.1.85 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/esm/index.css +333 -333
- package/dist/hooks/esm/src/core/hooks/index.js +1 -1
- package/dist/hooks/esm/src/core/hooks/useThemePreference.js +1 -1
- package/dist/hooks/esm/src/core/hooks/useThemePreference.js.map +1 -1
- package/dist/hooks/esm/src/core/utils/helpers/ui.js +1 -1
- package/dist/hooks/esm/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/hooks/index.css +333 -333
- package/dist/hooks/src/core/hooks/index.js +1 -1
- package/dist/hooks/src/core/hooks/useThemePreference.js +1 -1
- package/dist/hooks/src/core/hooks/useThemePreference.js.map +1 -1
- package/dist/hooks/src/core/utils/helpers/ui.js +1 -1
- package/dist/hooks/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/lib/cjs/src/core/hooks/useThemePreference.js +1 -1
- package/dist/lib/cjs/src/core/hooks/useThemePreference.js.map +1 -1
- package/dist/lib/cjs/src/core/ui/components/atoms/icons.js +1 -1
- package/dist/lib/cjs/src/core/ui/components/atoms/icons.js.map +1 -1
- package/dist/lib/cjs/src/core/ui/components/atoms/text/Text.js +1 -1
- package/dist/lib/cjs/src/core/ui/components/atoms/text/Text.js.map +1 -1
- package/dist/lib/cjs/src/core/ui/components/error/ErrorBoundary.js.map +1 -1
- package/dist/lib/cjs/src/core/ui/components/molecules/popover/PopoverLite.js +1 -1
- package/dist/lib/cjs/src/core/ui/components/molecules/popover/PopoverLite.js.map +1 -1
- package/dist/lib/cjs/src/core/utils/helpers/ui.js +1 -1
- package/dist/lib/cjs/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/lib/cjs/src/index.js +1 -1
- package/dist/lib/esm/src/core/hooks/useThemePreference.js +1 -1
- package/dist/lib/esm/src/core/hooks/useThemePreference.js.map +1 -1
- package/dist/lib/esm/src/core/ui/components/atoms/icons.js +1 -1
- package/dist/lib/esm/src/core/ui/components/atoms/icons.js.map +1 -1
- package/dist/lib/esm/src/core/ui/components/atoms/text/Text.js +1 -1
- package/dist/lib/esm/src/core/ui/components/atoms/text/Text.js.map +1 -1
- package/dist/lib/esm/src/core/ui/components/error/ErrorBoundary.js.map +1 -1
- package/dist/lib/esm/src/core/ui/components/molecules/popover/PopoverLite.js +1 -1
- package/dist/lib/esm/src/core/ui/components/molecules/popover/PopoverLite.js.map +1 -1
- package/dist/lib/esm/src/core/utils/helpers/ui.js +1 -1
- package/dist/lib/esm/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/lib/esm/src/index.js +1 -1
- package/dist/lib/tsconfig.tsbuildinfo +1 -1
- package/dist/types/src/core/hooks/useThemePreference.d.ts +0 -41
- package/dist/types/src/core/hooks/useThemePreference.d.ts.map +1 -1
- package/dist/types/src/core/ui/components/atoms/icons.d.ts.map +1 -1
- package/dist/types/src/core/ui/components/atoms/text/Text.d.ts.map +1 -1
- package/dist/types/src/core/ui/components/error/ErrorBoundary.d.ts +2 -2
- package/dist/types/src/core/ui/components/error/ErrorBoundary.d.ts.map +1 -1
- package/dist/types/src/core/ui/components/molecules/popover/PopoverLite.d.ts.map +1 -1
- package/dist/types/src/core/utils/helpers/ui.d.ts +40 -0
- package/dist/types/src/core/utils/helpers/ui.d.ts.map +1 -1
- package/dist/ui/esm/src/core/ui/components/atoms/icons.js +1 -1
- package/dist/ui/esm/src/core/ui/components/atoms/icons.js.map +1 -1
- package/dist/ui/esm/src/core/ui/components/atoms/text/Text.js +1 -1
- package/dist/ui/esm/src/core/ui/components/atoms/text/Text.js.map +1 -1
- package/dist/ui/esm/src/core/ui/components/error/ErrorBoundary.js.map +1 -1
- package/dist/ui/esm/src/core/ui/components/molecules/popover/PopoverLite.js +1 -1
- package/dist/ui/esm/src/core/ui/components/molecules/popover/PopoverLite.js.map +1 -1
- package/dist/ui/esm/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/ui/src/core/ui/components/atoms/icons.js +1 -1
- package/dist/ui/src/core/ui/components/atoms/icons.js.map +1 -1
- package/dist/ui/src/core/ui/components/atoms/text/Text.js +1 -1
- package/dist/ui/src/core/ui/components/atoms/text/Text.js.map +1 -1
- package/dist/ui/src/core/ui/components/error/ErrorBoundary.js.map +1 -1
- package/dist/ui/src/core/ui/components/molecules/popover/PopoverLite.js +1 -1
- package/dist/ui/src/core/ui/components/molecules/popover/PopoverLite.js.map +1 -1
- package/dist/ui/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/utils/esm/index.css +333 -333
- package/dist/utils/esm/src/core/utils/helpers/ui.js +1 -1
- package/dist/utils/esm/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/utils/esm/src/core/utils/index.js +1 -1
- package/dist/utils/index.css +333 -333
- package/dist/utils/src/core/utils/helpers/ui.js +1 -1
- package/dist/utils/src/core/utils/helpers/ui.js.map +1 -1
- package/dist/utils/src/core/utils/index.js +1 -1
- package/package.json +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopoverLite.js","sources":["../../../../../../../../src/core/ui/components/molecules/popover/PopoverLite.tsx"],"sourcesContent":["\nimport React, { FC, memo, useRef, useEffect, useState, useCallback, useMemo,\n CSSProperties, ReactNode, ReactElement } from 'react'\nimport { createPopper, Instance, ModifierArguments } from '@popperjs/core'\n\nimport { EventName, KeyCode } from '../../../../constants'\nimport { cancelableSetTimeout } from '../../../../utils'\nimport { outsideClickHandler } from '../../../../hooks'\n\nimport { PopoverProps } from './popover.types'\n\n\nconst styles: Record<string, Partial<CSSProperties>> = {\n modal: {\n zIndex: 1,\n position: 'fixed',\n width: '100%',\n height: '100%',\n top: '0',\n left: '0',\n background: 'rgba(0 0 0 / 70%)',\n pointerEvents: 'all',\n userSelect: 'none',\n visibility: 'hidden',\n },\n}\n\nexport const Popover: FC<PopoverProps> = memo<PopoverProps>(\n ({\n children,\n components,\n placement = 'bottom',\n modifiers,\n data,\n hoverable,\n clickable,\n onOpen,\n onHide,\n isOpen,\n hideOnContentClick = false,\n hideOnClickOutside = true,\n hideTimeout = 150,\n isPopup = false,\n isModal = false,\n modalOverlayClassName,\n modalContainer,\n targetRef,\n hideOnEscape,\n ...props\n }: PopoverProps) => {\n const [content, setContent] = useState<HTMLElement | null>(null)\n const [target, setTarget] = useState<HTMLElement | null>(targetRef?.current ?? null)\n\n useEffect(() => {\n if (targetRef?.current) {\n setTarget(targetRef?.current)\n }\n }, [targetRef])\n\n const { ContentComponent, ...contentComponents } = components || {}\n\n const popperInstanceRef = useRef<Instance | null>(null)\n\n const options = useMemo(() => {\n const options = (modifiers ? { modifiers, placement } : { placement })\n\n options.modifiers = options.modifiers || []\n\n if (isPopup) {\n options.modifiers = [\n ...options.modifiers,\n {\n name: 'centering',\n phase: 'beforeWrite',\n enabled: true,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n fn: ({ state }): Partial<ModifierArguments> => {\n const mcBoundRect = modalContainer?.getBoundingClientRect()\n\n const { width, height, left, top } = mcBoundRect || {\n width: window.innerWidth,\n height: window.innerHeight,\n left: 0,\n top: 0,\n }\n\n const xpos = left + (width - state.elements.popper.clientWidth) / 2\n const ypos = top + (height - state.elements.popper.clientHeight) / 2\n\n return {\n ...state,\n styles: {\n ...state.styles,\n popper: {\n ...state.styles.popper,\n left: `${xpos}px`,\n top: `${ypos}px`,\n transform: 'none',\n },\n },\n }\n },\n },\n ] as PopoverProps['modifiers']\n }\n\n return options\n }, [modifiers, placement, isPopup, modalContainer])\n\n // to save cancelable setTimout\n const pendingHideRef = useRef<(() => void)>()\n\n useEffect(() => {\n popperInstanceRef?.current?.destroy()\n let popperInstance: ReturnType<typeof createPopper>\n\n if (target && content) {\n popperInstance = createPopper(target, content, { ...options })\n\n popperInstanceRef.current = popperInstance\n }\n\n return (): void => {\n popperInstance?.destroy()\n popperInstanceRef.current = null\n }\n }, [content, target, options])\n\n\n const outsideClickUnsubscriber = useRef<() => void | null>()\n const outsideClickUnsubscriberTimeout = useRef<any>(-1)\n\n const hide = useCallback(() => {\n if (content) {\n delete content.dataset.show\n }\n\n if (isModal && modalRef?.current) {\n modalRef.current.style.visibility = 'hidden'\n delete modalRef.current.dataset.show\n }\n\n popperInstanceRef?.current?.update()\n onHide?.()\n outsideClickUnsubscriber?.current?.()\n clearTimeout(outsideClickUnsubscriberTimeout.current)\n }, [content, isModal, onHide])\n\n\n const delayedHide = useCallback(() => {\n pendingHideRef.current && pendingHideRef.current()\n pendingHideRef.current = cancelableSetTimeout(hide, hideTimeout)\n }, [hide, hideTimeout])\n\n const cancelDelayedHide = useCallback(() => {\n pendingHideRef.current && pendingHideRef.current()\n }, [])\n\n const handleOutsideClick = useCallback((eventTarget: HTMLElement | null) => {\n if ((content?.dataset?.show === 'true' && hideOnClickOutside && !content?.contains(eventTarget))\n || (content?.contains(eventTarget) && hideOnContentClick)) {\n hide()\n }\n }, [hide, content, hideOnContentClick, hideOnClickOutside])\n\n const open = useCallback(() => {\n if (content) {\n content.dataset.show = 'true'\n }\n\n popperInstanceRef?.current?.update()\n\n if (isModal && modalRef?.current) {\n modalRef.current.style.visibility = 'visible'\n modalRef.current.dataset.show = 'true'\n }\n\n onOpen?.()\n\n outsideClickUnsubscriber?.current?.()\n clearTimeout(outsideClickUnsubscriberTimeout.current)\n outsideClickUnsubscriberTimeout.current = setTimeout(() => {\n outsideClickUnsubscriber.current = outsideClickHandler(target, handleOutsideClick)\n }, 250)\n }, [content, handleOutsideClick, isModal, onOpen, target])\n\n const toggleOpen = useCallback(() => {\n content?.dataset?.show === 'true' ? hide() : open()\n }, [content, hide, open])\n\n const keydownHandler = useCallback((event: Event) => {\n if (hideOnEscape && (event as unknown as KeyboardEvent).keyCode === KeyCode.Escape) {\n hide()\n }\n }, [hideOnEscape, hide])\n\n useEffect(() => {\n if (!hoverable && !clickable) {\n console.error('Popover component should have at least one of props [\"hoverable\", \"clickable\"]')\n }\n\n const targetAddListener = target?.addEventListener?.bind(target)\n const contentAddListener = content?.addEventListener?.bind(content)\n\n if (contentAddListener && targetAddListener) {\n if (hoverable) {\n targetAddListener(EventName.MouseEnter, open)\n contentAddListener(EventName.MouseEnter, cancelDelayedHide)\n targetAddListener(EventName.MouseLeave, delayedHide)\n contentAddListener(EventName.MouseLeave, hide)\n }\n\n if (clickable) {\n targetAddListener(EventName.Click, toggleOpen)\n }\n }\n\n if (hideOnEscape) {\n document.addEventListener(EventName.KeyDown, keydownHandler)\n }\n\n return (): void => {\n const targetRemoveListener = target?.removeEventListener?.bind(target)\n const contentRemoveListener = content?.removeEventListener?.bind(content)\n\n document.removeEventListener(EventName.KeyDown, keydownHandler)\n\n pendingHideRef.current && pendingHideRef.current()\n\n if (targetRemoveListener) {\n targetRemoveListener(EventName.Click, toggleOpen)\n targetRemoveListener(EventName.MouseEnter, open)\n targetRemoveListener(EventName.MouseLeave, delayedHide)\n }\n if (contentRemoveListener) {\n contentRemoveListener(EventName.MouseLeave, hide)\n contentRemoveListener(EventName.MouseEnter, cancelDelayedHide)\n }\n }\n }, [target, content, clickable, hoverable,\n open, hide, toggleOpen, delayedHide, cancelDelayedHide, hideOnEscape, keydownHandler])\n\n // open, hide based on external isOpen\n useEffect(() => {\n if (isOpen === true) {\n open()\n }\n if (isOpen === false) {\n hide()\n }\n return outsideClickUnsubscriber?.current as () => void\n }, [hide, isOpen, open])\n\n const childrenIsFunction = typeof children === 'function'\n const childrenIsElement = typeof children !== 'function' && !Array.isArray(children)\n const childrenAreElements = typeof children !== 'function' && Array.isArray(children)\n && children.filter((child: ReactNode) => !!child).length === 2\n\n // modal\n const modalRef = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n if (isModal && content) {\n content.style.zIndex = '2'\n }\n }, [content, isModal])\n\n return (\n <>\n {isModal && <span ref={modalRef} style={styles.modal} className={modalOverlayClassName} />}\n {(!targetRef && childrenIsFunction) && children?.({ forwardedRef: setTarget, data })}\n {(!targetRef && childrenIsElement) && <span ref={setTarget}>{children}</span>}\n {!childrenAreElements && ContentComponent && (\n <ContentComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n placement={placement}\n forwardedRef={setContent}\n ref={typeof ContentComponent !== 'function' ? setContent : null}\n data={data}\n hide={hide}\n components={contentComponents as { [key: string]: FC | React.Component<any> }}\n {...props}\n />\n )}\n {(!targetRef && childrenAreElements) && <span ref={setTarget}>{children[0]}</span>}\n {(childrenAreElements && children?.[1] && typeof children?.[1] === 'object')\n && React.cloneElement(children[1] as ReactElement, {\n ...((children?.[1] as ReactElement)?.props),\n placement,\n forwardedRef: setContent,\n // ...(typeof children[1] !== 'function' ? { ref: setContent } : {}),\n ref: setContent,\n data,\n hide,\n components: contentComponents as { [key: string]: FC | React.Component<any> },\n ...props,\n })}\n </>\n )\n },\n)\n\nPopover.displayName = 'Popover'\n"],"names":["styles","modal","zIndex","position","width","height","top","left","background","pointerEvents","userSelect","visibility","Popover","memo","_ref","_targetRef$current","_children$","children","components","placement","modifiers","data","hoverable","clickable","onOpen","onHide","isOpen","hideOnContentClick","hideOnClickOutside","hideTimeout","isPopup","isModal","modalOverlayClassName","modalContainer","targetRef","hideOnEscape","props","_objectWithoutProperties","_excluded","content","setContent","useState","target","setTarget","current","useEffect","_ref2","ContentComponent","contentComponents","_excluded2","popperInstanceRef","useRef","options","useMemo","name","phase","enabled","fn","_ref3","state","mcBoundRect","getBoundingClientRect","window","innerWidth","innerHeight","xpos","elements","popper","clientWidth","ypos","clientHeight","_objectSpread","objectSpread2","concat","transform","pendingHideRef","_popperInstanceRef$cu","popperInstance","destroy","createPopper","_popperInstance","outsideClickUnsubscriber","outsideClickUnsubscriberTimeout","hide","useCallback","_popperInstanceRef$cu2","_outsideClickUnsubscr","dataset","show","modalRef","style","update","call","clearTimeout","delayedHide","cancelableSetTimeout","cancelDelayedHide","handleOutsideClick","eventTarget","_content$dataset","contains","open","_popperInstanceRef$cu3","_outsideClickUnsubscr2","setTimeout","outsideClickHandler","toggleOpen","_content$dataset2","keydownHandler","event","keyCode","KeyCode","Escape","_target$addEventListe","_content$addEventList","targetAddListener","addEventListener","bind","contentAddListener","EventName","MouseEnter","MouseLeave","Click","document","KeyDown","_target$removeEventLi","_content$removeEventL","targetRemoveListener","removeEventListener","contentRemoveListener","childrenIsFunction","childrenIsElement","Array","isArray","childrenAreElements","filter","child","length","React","default","createElement","Fragment","ref","className","forwardedRef","_extends","cloneElement","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PopoverLite.js","sources":["../../../../../../../../src/core/ui/components/molecules/popover/PopoverLite.tsx"],"sourcesContent":["\nimport { FC, memo, useRef, useEffect, useState, useCallback, useMemo, cloneElement,\n CSSProperties, ReactNode, ReactElement, Component } from 'react'\nimport { createPopper, Instance, ModifierArguments } from '@popperjs/core'\n\nimport { EventName, KeyCode } from '../../../../constants'\nimport { cancelableSetTimeout } from '../../../../utils'\nimport { outsideClickHandler } from '../../../../hooks'\n\nimport { PopoverProps } from './popover.types'\n\n\nconst styles: Record<string, Partial<CSSProperties>> = {\n modal: {\n zIndex: 1,\n position: 'fixed',\n width: '100%',\n height: '100%',\n top: '0',\n left: '0',\n background: 'rgba(0 0 0 / 70%)',\n pointerEvents: 'all',\n userSelect: 'none',\n visibility: 'hidden',\n },\n}\n\nexport const Popover: FC<PopoverProps> = memo<PopoverProps>(\n ({\n children,\n components,\n placement = 'bottom',\n modifiers,\n data,\n hoverable,\n clickable,\n onOpen,\n onHide,\n isOpen,\n hideOnContentClick = false,\n hideOnClickOutside = true,\n hideTimeout = 150,\n isPopup = false,\n isModal = false,\n modalOverlayClassName,\n modalContainer,\n targetRef,\n hideOnEscape,\n ...props\n }: PopoverProps) => {\n const [content, setContent] = useState<HTMLElement | null>(null)\n const [target, setTarget] = useState<HTMLElement | null>(targetRef?.current ?? null)\n\n useEffect(() => {\n if (targetRef?.current) {\n setTarget(targetRef?.current)\n }\n }, [targetRef])\n\n const { ContentComponent, ...contentComponents } = components || {}\n\n const popperInstanceRef = useRef<Instance | null>(null)\n\n const options = useMemo(() => {\n const options = (modifiers ? { modifiers, placement } : { placement })\n\n options.modifiers = options.modifiers || []\n\n if (isPopup) {\n options.modifiers = [\n ...options.modifiers,\n {\n name: 'centering',\n phase: 'beforeWrite',\n enabled: true,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n fn: ({ state }): Partial<ModifierArguments> => {\n const mcBoundRect = modalContainer?.getBoundingClientRect()\n\n const { width, height, left, top } = mcBoundRect || {\n width: window.innerWidth,\n height: window.innerHeight,\n left: 0,\n top: 0,\n }\n\n const xpos = left + (width - state.elements.popper.clientWidth) / 2\n const ypos = top + (height - state.elements.popper.clientHeight) / 2\n\n return {\n ...state,\n styles: {\n ...state.styles,\n popper: {\n ...state.styles.popper,\n left: `${xpos}px`,\n top: `${ypos}px`,\n transform: 'none',\n },\n },\n }\n },\n },\n ] as PopoverProps['modifiers']\n }\n\n return options\n }, [modifiers, placement, isPopup, modalContainer])\n\n // to save cancelable setTimout\n const pendingHideRef = useRef<(() => void)>()\n\n useEffect(() => {\n popperInstanceRef?.current?.destroy()\n let popperInstance: ReturnType<typeof createPopper>\n\n if (target && content) {\n popperInstance = createPopper(target, content, { ...options })\n\n popperInstanceRef.current = popperInstance\n }\n\n return (): void => {\n popperInstance?.destroy()\n popperInstanceRef.current = null\n }\n }, [content, target, options])\n\n\n const outsideClickUnsubscriber = useRef<() => void | null>()\n const outsideClickUnsubscriberTimeout = useRef<any>(-1)\n\n const hide = useCallback(() => {\n if (content) {\n delete content.dataset.show\n }\n\n if (isModal && modalRef?.current) {\n modalRef.current.style.visibility = 'hidden'\n delete modalRef.current.dataset.show\n }\n\n popperInstanceRef?.current?.update()\n onHide?.()\n outsideClickUnsubscriber?.current?.()\n clearTimeout(outsideClickUnsubscriberTimeout.current)\n }, [content, isModal, onHide])\n\n\n const delayedHide = useCallback(() => {\n pendingHideRef.current && pendingHideRef.current()\n pendingHideRef.current = cancelableSetTimeout(hide, hideTimeout)\n }, [hide, hideTimeout])\n\n const cancelDelayedHide = useCallback(() => {\n pendingHideRef.current && pendingHideRef.current()\n }, [])\n\n const handleOutsideClick = useCallback((eventTarget: HTMLElement | null) => {\n if ((content?.dataset?.show === 'true' && hideOnClickOutside && !content?.contains(eventTarget))\n || (content?.contains(eventTarget) && hideOnContentClick)) {\n hide()\n }\n }, [hide, content, hideOnContentClick, hideOnClickOutside])\n\n const open = useCallback(() => {\n if (content) {\n content.dataset.show = 'true'\n }\n\n popperInstanceRef?.current?.update()\n\n if (isModal && modalRef?.current) {\n modalRef.current.style.visibility = 'visible'\n modalRef.current.dataset.show = 'true'\n }\n\n onOpen?.()\n\n outsideClickUnsubscriber?.current?.()\n clearTimeout(outsideClickUnsubscriberTimeout.current)\n outsideClickUnsubscriberTimeout.current = setTimeout(() => {\n outsideClickUnsubscriber.current = outsideClickHandler(target, handleOutsideClick)\n }, 250)\n }, [content, handleOutsideClick, isModal, onOpen, target])\n\n const toggleOpen = useCallback(() => {\n content?.dataset?.show === 'true' ? hide() : open()\n }, [content, hide, open])\n\n const keydownHandler = useCallback((event: Event) => {\n if (hideOnEscape && (event as unknown as KeyboardEvent).keyCode === KeyCode.Escape) {\n hide()\n }\n }, [hideOnEscape, hide])\n\n useEffect(() => {\n if (!hoverable && !clickable) {\n console.error('Popover component should have at least one of props [\"hoverable\", \"clickable\"]')\n }\n\n const targetAddListener = target?.addEventListener?.bind(target)\n const contentAddListener = content?.addEventListener?.bind(content)\n\n if (contentAddListener && targetAddListener) {\n if (hoverable) {\n targetAddListener(EventName.MouseEnter, open)\n contentAddListener(EventName.MouseEnter, cancelDelayedHide)\n targetAddListener(EventName.MouseLeave, delayedHide)\n contentAddListener(EventName.MouseLeave, hide)\n }\n\n if (clickable) {\n targetAddListener(EventName.Click, toggleOpen)\n }\n }\n\n if (hideOnEscape) {\n document.addEventListener(EventName.KeyDown, keydownHandler)\n }\n\n return (): void => {\n const targetRemoveListener = target?.removeEventListener?.bind(target)\n const contentRemoveListener = content?.removeEventListener?.bind(content)\n\n document.removeEventListener(EventName.KeyDown, keydownHandler)\n\n pendingHideRef.current && pendingHideRef.current()\n\n if (targetRemoveListener) {\n targetRemoveListener(EventName.Click, toggleOpen)\n targetRemoveListener(EventName.MouseEnter, open)\n targetRemoveListener(EventName.MouseLeave, delayedHide)\n }\n if (contentRemoveListener) {\n contentRemoveListener(EventName.MouseLeave, hide)\n contentRemoveListener(EventName.MouseEnter, cancelDelayedHide)\n }\n }\n }, [target, content, clickable, hoverable,\n open, hide, toggleOpen, delayedHide, cancelDelayedHide, hideOnEscape, keydownHandler])\n\n // open, hide based on external isOpen\n useEffect(() => {\n if (isOpen === true) {\n open()\n }\n if (isOpen === false) {\n hide()\n }\n return outsideClickUnsubscriber?.current as () => void\n }, [hide, isOpen, open])\n\n const childrenIsFunction = typeof children === 'function'\n const childrenIsElement = typeof children !== 'function' && !Array.isArray(children)\n const childrenAreElements = typeof children !== 'function' && Array.isArray(children)\n && children.filter((child: ReactNode) => !!child).length === 2\n\n // modal\n const modalRef = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n if (isModal && content) {\n content.style.zIndex = '2'\n }\n }, [content, isModal])\n\n return (\n <>\n {isModal && <span ref={modalRef} style={styles.modal} className={modalOverlayClassName} />}\n {(!targetRef && childrenIsFunction) && children?.({ forwardedRef: setTarget, data })}\n {(!targetRef && childrenIsElement) && <span ref={setTarget}>{children}</span>}\n {!childrenAreElements && ContentComponent && (\n <ContentComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n placement={placement}\n forwardedRef={setContent}\n ref={typeof ContentComponent !== 'function' ? setContent : null}\n data={data}\n hide={hide}\n components={contentComponents as { [key: string]: FC | Component<any> }}\n {...props}\n />\n )}\n {(!targetRef && childrenAreElements) && <span ref={setTarget}>{children[0]}</span>}\n {(childrenAreElements && children?.[1] && typeof children?.[1] === 'object')\n && cloneElement(children[1] as ReactElement, {\n ...((children?.[1] as ReactElement)?.props),\n placement,\n forwardedRef: setContent,\n // ...(typeof children[1] !== 'function' ? { ref: setContent } : {}),\n ref: setContent,\n data,\n hide,\n components: contentComponents as { [key: string]: FC | Component<any> },\n ...props,\n })}\n </>\n )\n },\n)\n\nPopover.displayName = 'Popover'\n"],"names":["styles","modal","zIndex","position","width","height","top","left","background","pointerEvents","userSelect","visibility","Popover","memo","_ref","_targetRef$current","_children$","children","components","placement","modifiers","data","hoverable","clickable","onOpen","onHide","isOpen","hideOnContentClick","hideOnClickOutside","hideTimeout","isPopup","isModal","modalOverlayClassName","modalContainer","targetRef","hideOnEscape","props","_objectWithoutProperties","_excluded","content","setContent","useState","target","setTarget","current","useEffect","_ref2","ContentComponent","contentComponents","_excluded2","popperInstanceRef","useRef","options","useMemo","name","phase","enabled","fn","_ref3","state","mcBoundRect","getBoundingClientRect","window","innerWidth","innerHeight","xpos","elements","popper","clientWidth","ypos","clientHeight","_objectSpread","objectSpread2","concat","transform","pendingHideRef","_popperInstanceRef$cu","popperInstance","destroy","createPopper","_popperInstance","outsideClickUnsubscriber","outsideClickUnsubscriberTimeout","hide","useCallback","_popperInstanceRef$cu2","_outsideClickUnsubscr","dataset","show","modalRef","style","update","call","clearTimeout","delayedHide","cancelableSetTimeout","cancelDelayedHide","handleOutsideClick","eventTarget","_content$dataset","contains","open","_popperInstanceRef$cu3","_outsideClickUnsubscr2","setTimeout","outsideClickHandler","toggleOpen","_content$dataset2","keydownHandler","event","keyCode","KeyCode","Escape","_target$addEventListe","_content$addEventList","targetAddListener","addEventListener","bind","contentAddListener","EventName","MouseEnter","MouseLeave","Click","document","KeyDown","_target$removeEventLi","_content$removeEventL","targetRemoveListener","removeEventListener","contentRemoveListener","childrenIsFunction","childrenIsElement","Array","isArray","childrenAreElements","filter","child","length","React","createElement","Fragment","ref","className","forwardedRef","_extends","cloneElement","displayName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sources":["../../../../../../src/core/utils/helpers/ui.ts"],"sourcesContent":["export const mapSerReplacer\n= (key: string, value: unknown): unknown | { dataType: string; value: Array<unknown>} => {\n if (value instanceof Map) {\n return {\n dataType: 'Map',\n value: Array.from(value.entries()), // or with spread: value: [...value]\n }\n }\n return value\n}\n\nexport type TClassName = string | boolean | null | undefined\nexport const classNames = (...classes: TClassName[]): string => classes\n .filter((className: TClassName) => (typeof className === 'string' && className !== undefined && className !== null))\n .filter(Boolean).join(' ')\n\n\nexport type PropsCategoriesType = {\n dataProps: Record<string, unknown>\n restProps: Record<string, unknown>\n};\n\nexport const parseProps = (props: Record<string, unknown>):PropsCategoriesType => {\n const dataProps: Record<string, unknown> = {}\n const restProps: Record<string, unknown> = {}\n\n Object.entries(props).forEach(([key, value]) => {\n if (key.substr(0, 5) === 'data-' || key.substr(0, 4) === 'data') {\n dataProps[key] = value\n } else {\n restProps[key] = value\n }\n })\n return { dataProps, restProps }\n}\n\n\n\ntype GeneratorIdCallable = (token: string, increment?: boolean, forcedValue?: number | undefined) => string\ntype GenerateId = { tokens?: Record<string, number | null | undefined> } & GeneratorIdCallable\n\nexport const generateId: GenerateId = (\n token: string,\n increment = true,\n forcedValue: number | undefined = undefined,\n) => {\n generateId.tokens = generateId.tokens || {}\n\n if (forcedValue !== undefined && forcedValue !== null) {\n generateId.tokens[token] = forcedValue\n return `${token}${generateId?.tokens?.[token] as number}`\n }\n\n const noValue = generateId?.tokens[token] === undefined || generateId?.tokens[token] === null\n\n generateId.tokens[token] = generateId.tokens[token] || 0\n\n if (noValue) {\n return `${token}${0}`\n }\n\n if (increment) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n generateId.tokens[token] += 1\n\n return `${token}${generateId?.tokens?.[token] as number}`\n }\n\n return `${token}${generateId?.tokens?.[token] as number}`\n}\n\ntype FAnchorClick = { aElement?: HTMLAnchorElement | null }\n & ((href: string, target?: string, remove?: boolean) => void)\n\nexport const anchorClick: FAnchorClick = (href: string, target = '_top', remove = false): HTMLAnchorElement | null => {\n anchorClick.aElement = anchorClick.aElement || document.createElement('a')\n\n const { aElement } = anchorClick\n\n aElement.setAttribute('href', href)\n aElement.setAttribute('target', target)\n\n aElement.dataset.date = `${Date.now()}`\n aElement.click()\n if (remove) {\n aElement.remove()\n anchorClick.aElement = null\n }\n\n return aElement\n}\n\n\n\nexport type NoopEvent = {\n preventDefault?: () => void\n stopPropagation?: () => void\n stopImmediatePropagation?: () => void\n} | Event\n\nexport const noop = (event?: NoopEvent): void => {\n event?.preventDefault?.()\n event?.stopPropagation?.()\n event?.stopImmediatePropagation?.()\n}\n"],"names":["_len","arguments","length","classes","Array","_key","filter","className","Boolean","join","event","_event$preventDefault","_event$stopPropagatio","_event$stopImmediateP","preventDefault","call","stopPropagation","stopImmediatePropagation","props","dataProps","restProps","Object","entries","forEach","_ref","key","value","substr"],"mappings":"oHAY0B,WAAA,IAAA,IAAAA,EAAAC,UAAAC,OAAIC,EAAOC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAPF,EAAOE,GAAAJ,UAAAI,GAAA,OAA2BF,EAC7DG,QAAQC,GAAgD,iBAAdA,GAAP,MAAiCA,IACpED,OAAOE,SAASC,KAAK,IAAI,eAuFPC,IAA4B,IAAAC,EAAAC,EAAAC,EAC/CH,SAAqBC,QAAhBA,EAALD,EAAOI,0BAAcH,GAArBA,EAAAI,KAAAL,GACAA,SAAsBE,QAAjBA,EAALF,EAAOM,2BAAeJ,GAAtBA,EAAAG,KAAAL,GACAA,SAA+BG,QAA1BA,EAALH,EAAOO,oCAAwBJ,GAA/BA,EAAAE,KAAAL,EAAmC,qBAlFVQ,IACzB,MAAMC,EAAqC,CAAE,EACvCC,EAAqC,CAAE,EAS7C,OAPAC,OAAOC,QAAQJ,GAAOK,SAAQC,IAAkB,IAAhBC,EAAKC,GAAMF,EAChB,UAArBC,EAAIE,OAAO,EAAG,IAAuC,SAArBF,EAAIE,OAAO,EAAG,GAChDR,EAAUM,GAAOC,EAEjBN,EAAUK,GAAOC,CACnB,IAEK,CAAEP,YAAWC,YAAW"}
|
|
1
|
+
{"version":3,"file":"ui.js","sources":["../../../../../../src/core/utils/helpers/ui.ts"],"sourcesContent":["export const mapSerReplacer\n= (key: string, value: unknown): unknown | { dataType: string; value: Array<unknown>} => {\n if (value instanceof Map) {\n return {\n dataType: 'Map',\n value: Array.from(value.entries()), // or with spread: value: [...value]\n }\n }\n return value\n}\n\nexport type TClassName = string | boolean | null | undefined\nexport const classNames = (...classes: TClassName[]): string => classes\n .filter((className: TClassName) => (typeof className === 'string' && className !== undefined && className !== null))\n .filter(Boolean).join(' ')\n\n\nexport type PropsCategoriesType = {\n dataProps: Record<string, unknown>\n restProps: Record<string, unknown>\n};\n\nexport const parseProps = (props: Record<string, unknown>):PropsCategoriesType => {\n const dataProps: Record<string, unknown> = {}\n const restProps: Record<string, unknown> = {}\n\n Object.entries(props).forEach(([key, value]) => {\n if (key.substr(0, 5) === 'data-' || key.substr(0, 4) === 'data') {\n dataProps[key] = value\n } else {\n restProps[key] = value\n }\n })\n return { dataProps, restProps }\n}\n\n\n\ntype GeneratorIdCallable = (token: string, increment?: boolean, forcedValue?: number | undefined) => string\ntype GenerateId = { tokens?: Record<string, number | null | undefined> } & GeneratorIdCallable\n\nexport const generateId: GenerateId = (\n token: string,\n increment = true,\n forcedValue: number | undefined = undefined,\n) => {\n generateId.tokens = generateId.tokens || {}\n\n if (forcedValue !== undefined && forcedValue !== null) {\n generateId.tokens[token] = forcedValue\n return `${token}${generateId?.tokens?.[token] as number}`\n }\n\n const noValue = generateId?.tokens[token] === undefined || generateId?.tokens[token] === null\n\n generateId.tokens[token] = generateId.tokens[token] || 0\n\n if (noValue) {\n return `${token}${0}`\n }\n\n if (increment) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n generateId.tokens[token] += 1\n\n return `${token}${generateId?.tokens?.[token] as number}`\n }\n\n return `${token}${generateId?.tokens?.[token] as number}`\n}\n\ntype FAnchorClick = { aElement?: HTMLAnchorElement | null }\n & ((href: string, target?: string, remove?: boolean) => void)\n\nexport const anchorClick: FAnchorClick = (href: string, target = '_top', remove = false): HTMLAnchorElement | null => {\n anchorClick.aElement = anchorClick.aElement || document.createElement('a')\n\n const { aElement } = anchorClick\n\n aElement.setAttribute('href', href)\n aElement.setAttribute('target', target)\n\n aElement.dataset.date = `${Date.now()}`\n aElement.click()\n if (remove) {\n aElement.remove()\n anchorClick.aElement = null\n }\n\n return aElement\n}\n\n\n\nexport type NoopEvent = {\n preventDefault?: () => void\n stopPropagation?: () => void\n stopImmediatePropagation?: () => void\n} | Event\n\nexport const noop = (event?: NoopEvent): void => {\n event?.preventDefault?.()\n event?.stopPropagation?.()\n event?.stopImmediatePropagation?.()\n}\n\n/**\n * Type definition for theme map.\n * @typedef {Object} ThemeMap\n * @property {string} dark - CSS class for the dark theme.\n * @property {string} light - CSS class for the light theme.\n */\nexport type ThemeMap = {\n dark: string\n light: string\n}\n\nlet baseThemes: ThemeMap = {\n dark: 'theme-dark',\n light: 'theme-light',\n}\n\n/**\n * Gets the base themes.\n * @returns {ThemeMap} The current base themes.\n */\nexport const getBaseThemes = (): ThemeMap => baseThemes\n\n/**\n * Sets the base theme class names.\n * @param {ThemeMap} themes - Object containing the CSS classes for dark and light themes.\n */\nexport const setThemeClassNames = (themes: ThemeMap): void => {\n baseThemes = themes\n}\n\n/**\n * Switches the color theme of the document.\n * @param {boolean} isDark - Flag to determine if the dark theme should be applied.\n * @param {HTMLElement} [htmlElement] - The HTML element to which the theme will be applied.\n * @param {boolean} [findShadows=true] - Flag to determine if shadow DOM elements should also be themed.\n */\nexport const switchColorTheme = (isDark: boolean, htmlElement?: HTMLElement, findShadows = true): void => {\n const oldClass = isDark ? baseThemes.light : baseThemes.dark\n const newClass = isDark ? baseThemes.dark : baseThemes.light\n\n if (htmlElement) {\n htmlElement.classList.remove(oldClass)\n htmlElement.classList.remove(newClass)\n htmlElement.classList.add(newClass)\n }\n\n if (typeof document !== 'undefined') {\n document.querySelectorAll(`.${oldClass}`).forEach((element) => {\n element.classList.add(`.${newClass}`)\n element.classList.remove(`.${oldClass}`)\n })\n\n if (findShadows) {\n document.querySelectorAll('.shadow-div').forEach((element) => {\n element.shadowRoot?.querySelector(`.${oldClass}`)?.classList.add(newClass)\n element.shadowRoot?.querySelector(`.${oldClass}`)?.classList.remove(oldClass)\n })\n\n document.querySelectorAll('esmf-wrapper').forEach((element) => {\n element.shadowRoot?.querySelector(`.${oldClass}`)?.classList.add(newClass)\n element.shadowRoot?.querySelector(`.${oldClass}`)?.classList.remove(oldClass)\n\n const firstChild: HTMLElement = element.shadowRoot?.childNodes[0] as HTMLElement\n\n if (firstChild) {\n firstChild.classList.add(newClass)\n firstChild.classList.remove(oldClass)\n }\n })\n }\n }\n}\n\n/**\n * Updates the color theme of the document.\n * @param {boolean} [isDark] - Optional flag to determine if the dark theme should be applied.\n * @param {HTMLElement} [htmlElement] - The HTML element to which the theme will be applied.\n */\nexport const updateColorTheme = (isDark?: boolean, htmlElement?: HTMLElement): void => {\n let resolvedIsDark: boolean = isDark || false\n\n if (typeof document !== 'undefined' && isDark === undefined) {\n resolvedIsDark = document.body.classList.contains(baseThemes.dark)\n }\n switchColorTheme(resolvedIsDark, htmlElement || document.body)\n}\n\nconst windowMatchMediaChangeEventType = 'change'\n\n/**\n * Observes the user's theme preference and applies the appropriate theme.\n * @param {() => HTMLElement} [getHtmlElement] - Function to get the HTML element to which the theme will be applied.\n * @param {(isDark: boolean) => void} [switchCallback] - Callback function to execute when the theme changes.\n * @returns {() => void} Function to stop observing the theme preference.\n */\nexport const observeThemePreference = (\n getHtmlElement: () => HTMLElement = (): HTMLElement => document.body,\n switchCallback: (isDark: boolean) => void = (isDark: boolean): boolean => isDark,\n): () => void => {\n const switchColorThemeHandler = (isDark: boolean): void => {\n const htmlElement = getHtmlElement()\n\n switchColorTheme?.(isDark, htmlElement)\n switchCallback?.(isDark)\n }\n\n const changeDarkColorThemeHandler = (event: MediaQueryListEvent): void => {\n switchColorThemeHandler(event.matches)\n }\n\n const changeLightColorThemeHandler = (event: MediaQueryListEvent): void => {\n switchColorThemeHandler(!event.matches)\n }\n\n const isDark = window.matchMedia('(prefers-color-scheme: dark)')\n\n try {\n window.matchMedia('(prefers-color-scheme: dark)').removeEventListener(\n windowMatchMediaChangeEventType, changeDarkColorThemeHandler,\n )\n window.matchMedia('(prefers-color-scheme: light)').removeEventListener(\n windowMatchMediaChangeEventType, changeLightColorThemeHandler,\n )\n } catch (error) {\n console.error(`Error::observeThemePreference::removeEventListener: ${error}`)\n }\n\n switchColorThemeHandler(isDark?.matches)\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener(\n windowMatchMediaChangeEventType, changeDarkColorThemeHandler,\n )\n window.matchMedia('(prefers-color-scheme: light)').addEventListener(\n windowMatchMediaChangeEventType, changeLightColorThemeHandler,\n )\n\n return () => {\n window.matchMedia('(prefers-color-scheme: dark)').removeEventListener(\n windowMatchMediaChangeEventType, changeDarkColorThemeHandler,\n )\n window.matchMedia('(prefers-color-scheme: light)').removeEventListener(\n windowMatchMediaChangeEventType, changeLightColorThemeHandler,\n )\n }\n}\n"],"names":["_len","arguments","length","classes","Array","_key","filter","className","Boolean","join","event","_event$preventDefault","_event$stopPropagatio","_event$stopImmediateP","preventDefault","call","stopPropagation","stopImmediatePropagation","props","dataProps","restProps","Object","entries","forEach","_ref","key","value","substr"],"mappings":"oHAY0B,WAAA,IAAA,IAAAA,EAAAC,UAAAC,OAAIC,EAAOC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAPF,EAAOE,GAAAJ,UAAAI,GAAA,OAA2BF,EAC7DG,QAAQC,GAAgD,iBAAdA,GAAP,MAAiCA,IACpED,OAAOE,SAASC,KAAK,IAAI,eAuFPC,IAA4B,IAAAC,EAAAC,EAAAC,EAC/CH,SAAqBC,QAAhBA,EAALD,EAAOI,0BAAcH,GAArBA,EAAAI,KAAAL,GACAA,SAAsBE,QAAjBA,EAALF,EAAOM,2BAAeJ,GAAtBA,EAAAG,KAAAL,GACAA,SAA+BG,QAA1BA,EAALH,EAAOO,oCAAwBJ,GAA/BA,EAAAE,KAAAL,EAAmC,qBAlFVQ,IACzB,MAAMC,EAAqC,CAAE,EACvCC,EAAqC,CAAE,EAS7C,OAPAC,OAAOC,QAAQJ,GAAOK,SAAQC,IAAkB,IAAhBC,EAAKC,GAAMF,EAChB,UAArBC,EAAIE,OAAO,EAAG,IAAuC,SAArBF,EAAIE,OAAO,EAAG,GAChDR,EAAUM,GAAOC,EAEjBN,EAAUK,GAAOC,CACnB,IAEK,CAAEP,YAAWC,YAAW"}
|