@vitus-labs/elements 1.3.1 → 1.3.2-alpha.2

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/lib/index.d.ts CHANGED
@@ -584,14 +584,6 @@ declare const Component$3: FC<Context & {
584
584
  }>;
585
585
  //#endregion
586
586
  //#region src/Overlay/useOverlay.d.ts
587
- /**
588
- * Core hook powering the Overlay component. Manages open/close state, DOM
589
- * event listeners (click, hover, scroll, resize, ESC key), and dynamic
590
- * positioning of overlay content relative to its trigger. Supports dropdown,
591
- * tooltip, popover, and modal types with automatic edge-of-viewport flipping.
592
- * Event handlers are throttled for performance, and nested overlay blocking
593
- * is coordinated through the overlay context.
594
- */
595
587
  type Align$1 = 'bottom' | 'top' | 'left' | 'right';
596
588
  type AlignX$2 = 'left' | 'center' | 'right';
597
589
  type AlignY$2 = 'bottom' | 'top' | 'center';
@@ -1 +1 @@
1
- {"version":3,"file":"index2.d.ts","names":[],"sources":["../src/types.ts","../src/Element/types.ts","../src/Element/component.tsx","../src/Element/withEqualSizeBeforeAfter.tsx","../src/helpers/Iterator/types.tsx","../src/List/component.tsx","../src/List/withActiveState.tsx","../src/Overlay/context.tsx","../src/Overlay/useOverlay.tsx","../src/Overlay/component.tsx","../src/Portal/component.ts","../src/Text/component.tsx","../src/Util/component.tsx"],"mappings":"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"}
1
+ {"version":3,"file":"index2.d.ts","names":[],"sources":["../src/types.ts","../src/Element/types.ts","../src/Element/component.tsx","../src/Element/withEqualSizeBeforeAfter.tsx","../src/helpers/Iterator/types.tsx","../src/List/component.tsx","../src/List/withActiveState.tsx","../src/Overlay/context.tsx","../src/Overlay/useOverlay.tsx","../src/Overlay/component.tsx","../src/Portal/component.ts","../src/Text/component.tsx","../src/Util/component.tsx"],"mappings":"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"}
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["styles","component","Component","Styled","component","styles","component","Component","Styled","component","Component","Wrapper","Content","name","component","Component","component","Component","Iterator","Element","name","component","Component","name","component","context","Provider","Component","Portal","name","component","Component","Styled","name","component","Component","component"],"sources":["../src/constants.ts","../src/utils.ts","../src/helpers/Content/styled.ts","../src/helpers/Content/component.tsx","../src/helpers/Content/index.ts","../src/helpers/Wrapper/styled.ts","../src/helpers/Wrapper/constants.ts","../src/helpers/Wrapper/utils.ts","../src/helpers/Wrapper/component.tsx","../src/helpers/Wrapper/index.ts","../src/Element/constants.ts","../src/Element/utils.ts","../src/Element/component.tsx","../src/Element/withEqualSizeBeforeAfter.tsx","../src/Element/index.ts","../src/helpers/Iterator/component.tsx","../src/helpers/Iterator/index.ts","../src/List/component.tsx","../src/List/withActiveState.tsx","../src/List/index.ts","../src/Portal/component.ts","../src/Portal/index.ts","../src/Overlay/context.tsx","../src/Overlay/useOverlay.tsx","../src/Overlay/component.tsx","../src/Overlay/index.ts","../src/Text/styled.ts","../src/Text/component.tsx","../src/Text/index.ts","../src/Util/component.tsx","../src/Util/index.ts"],"sourcesContent":["export const PKG_NAME = '@vitus-labs/elements' as const\n","export const IS_DEVELOPMENT = process.env.NODE_ENV !== 'production'\n","/**\n * Styled component for content areas (before/content/after). Applies\n * responsive flex alignment, gap spacing between slots based on parent\n * direction (margin-right for inline, margin-bottom for rows), and\n * equalCols flex distribution. The \"content\" slot gets `flex: 1` to\n * fill remaining space between before and after.\n */\nimport { config } from '@vitus-labs/core'\nimport {\n alignContent,\n extendCss,\n makeItResponsive,\n value,\n} from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps, ThemeProps } from './types'\n\nconst { styled, css, component } = config\n\nconst equalColsCSS = `\n flex: 1;\n`\n\nconst typeContentCSS = `\n flex: 1;\n`\n\n// --------------------------------------------------------\n// calculate spacing between before / content / after\n// --------------------------------------------------------\nconst gapDimensions = {\n inline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n reverseInline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n rows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n reverseRows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n} as const\n\nconst calculateGap = ({\n direction,\n type,\n value,\n}: {\n direction: keyof typeof gapDimensions\n type: ThemeProps['contentType']\n value: any\n}) => {\n if (!direction || !type || type === 'content') return undefined\n\n const finalStyles = `${gapDimensions[direction][type]}: ${value};`\n\n return finalStyles\n}\n\n// --------------------------------------------------------\n// calculations of styles to be rendered\n// --------------------------------------------------------\nconst styles: ResponsiveStylesCallback = ({ css, theme: t, rootSize }) => css`\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.equalCols && equalColsCSS};\n\n ${\n t.gap &&\n t.contentType &&\n calculateGap({\n direction: t.parentDirection,\n type: t.contentType,\n value: value(t.gap, rootSize),\n })\n };\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : ''\n\nconst StyledComponent = styled(component)<any>`\n ${platformCSS};\n\n display: flex;\n align-self: stretch;\n flex-wrap: wrap;\n\n ${({ $contentType }: StyledProps) =>\n $contentType === 'content' && typeContentCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n\nexport default StyledComponent\n","/**\n * Memoized content area used inside Element to render one of the three\n * layout slots (before, content, after). Passes alignment, direction,\n * gap, and equalCols styling props to the underlying styled component.\n * Adds a `data-vl-element` attribute in development for debugging.\n */\nimport type { FC } from 'react'\nimport { memo } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props } from './types'\n\nconst Component: FC<Partial<Props>> = ({\n contentType,\n tag,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extendCss,\n ...props\n}) => {\n const debugProps = IS_DEVELOPMENT\n ? {\n 'data-vl-element': contentType,\n }\n : {}\n\n const stylingProps = {\n contentType,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extraStyles: extendCss,\n }\n\n return (\n <Styled\n as={tag}\n $contentType={contentType}\n $element={stylingProps}\n {...debugProps}\n {...props}\n />\n )\n}\n\nexport default memo(Component)\n","import component from './component'\n\nexport default component\n","/**\n * Styled component for the Element wrapper layer. Handles responsive\n * block/inline-flex display, direction, alignment, and custom CSS injection.\n * Includes special handling for the `parentFix` / `childFix` flags that\n * split flex behavior across two DOM nodes for button/fieldset/legend\n * elements where a single flex container is insufficient.\n */\nimport { config } from '@vitus-labs/core'\nimport { alignContent, extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps } from './types'\n\nconst { styled, css, component } = config\n\nconst childFixCSS = `\n display: flex;\n flex: 1;\n width: 100%;\n height: 100%;\n`\n\nconst parentFixCSS = `\n flex-direction: column;\n`\n\nconst parentFixBlockCSS = `\n width: 100%;\n`\n\nconst fullHeightCSS = `\n height: 100%;\n`\n\nconst blockCSS = `\n align-self: stretch;\n`\n\nconst childFixPosition = (isBlock?: boolean) =>\n `display: ${isBlock ? 'flex' : 'inline-flex'};`\n\nconst styles: ResponsiveStylesCallback = ({ theme: t, css }) => css`\n ${__WEB__ && t.alignY === 'block' && fullHeightCSS};\n\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.block && blockCSS};\n\n ${__WEB__ && !t.childFix && childFixPosition(t.block)};\n ${__WEB__ && t.parentFix && t.block && parentFixBlockCSS};\n ${__WEB__ && t.parentFix && parentFixCSS};\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : `display: flex;`\n\nexport default styled(component)<any>`\n position: relative;\n ${platformCSS};\n\n ${({ $childFix }: StyledProps) => $childFix && childFixCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n","/* eslint-disable import/prefer-default-export */\n/**\n * HTML elements that need a two-layer DOM workaround because browsers do not\n * fully support flexbox layout on button, fieldset, and legend elements.\n * @see https://stackoverflow.com/questions/35464067/flexbox-not-working-on-button-or-fieldset-elements\n */\nexport const INLINE_ELEMENTS_FLEX_FIX = {\n button: true,\n fieldset: true,\n legend: true,\n}\n","/* eslint-disable import/prefer-default-export */\nimport { INLINE_ELEMENTS_FLEX_FIX } from './constants'\n\ntype IsWebFixNeeded = (tag?: string) => boolean\nexport const isWebFixNeeded: IsWebFixNeeded = (tag) => {\n if (tag && tag in INLINE_ELEMENTS_FLEX_FIX) return true\n return false\n}\n","/**\n * Wrapper component that serves as the outermost styled container for Element.\n * Uses forwardRef for ref forwarding to the underlying DOM node. On web, it\n * detects button/fieldset/legend tags and applies a two-layer flex fix\n * (parent + child Styled) because these HTML elements do not natively\n * support `display: flex` consistently across browsers.\n */\nimport { forwardRef } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props, Reference } from './types'\nimport { isWebFixNeeded } from './utils'\n\nconst DEV_PROPS: Record<string, string> = IS_DEVELOPMENT\n ? { 'data-vl-element': 'Element' }\n : {}\n\n// eslint-disable-next-line react/display-name\nconst Component = forwardRef<Reference, Partial<Props>>(\n (\n {\n children,\n tag,\n block,\n extendCss,\n direction,\n alignX,\n alignY,\n equalCols,\n isInline,\n ...props\n },\n ref,\n ) => {\n const COMMON_PROPS = {\n ...props,\n ...DEV_PROPS,\n ref,\n as: tag,\n }\n\n const needsFix = __WEB__\n ? !props.dangerouslySetInnerHTML && isWebFixNeeded(tag)\n : false\n\n if (!needsFix || __NATIVE__) {\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n block,\n direction,\n alignX,\n alignY,\n equalCols,\n extraStyles: extendCss,\n }}\n >\n {children}\n </Styled>\n )\n }\n\n // eslint-disable-next-line no-nested-ternary\n const asTag = __WEB__ ? (isInline ? 'span' : 'div') : undefined\n\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n parentFix: true,\n block,\n extraStyles: extendCss,\n }}\n >\n <Styled\n as={asTag}\n $childFix\n $element={{\n childFix: true,\n direction,\n alignX,\n alignY,\n equalCols,\n }}\n >\n {children}\n </Styled>\n </Styled>\n )\n },\n)\n\nexport default Component\n","import component from './component'\n\nexport default component\n","/** Props consumed by Element that should not be forwarded to the underlying DOM node. */\nexport const RESERVED_PROPS = [\n 'innerRef',\n 'tag',\n 'block',\n 'label',\n 'children',\n 'beforeContent',\n 'afterContent',\n\n 'equalCols',\n 'vertical',\n 'direction',\n 'alignX',\n 'alignY',\n\n 'css',\n 'contentCss',\n 'beforeContentCss',\n 'afterContentCss',\n\n 'contentDirection',\n 'contentAlignX',\n 'contentAlignY',\n\n 'beforeContentDirection',\n 'beforeContentAlignX',\n 'beforeContentAlignY',\n\n 'afterContentDirection',\n 'afterContentAlignX',\n 'afterContentAlignY',\n] as const\n\n/**\n * HTML tags that are inline-level by default. When Element renders one of\n * these tags, child Content wrappers use `span` instead of `div` to\n * preserve valid HTML nesting.\n */\nexport const INLINE_ELEMENTS = {\n span: true,\n a: true,\n button: true,\n input: true,\n label: true,\n select: true,\n textarea: true,\n br: true,\n img: true,\n strong: true,\n small: true,\n code: true,\n b: true,\n big: true,\n i: true,\n tt: true,\n abbr: true,\n acronym: true,\n cite: true,\n dfn: true,\n em: true,\n kbd: true,\n samp: true,\n var: true,\n bdo: true,\n map: true,\n object: true,\n q: true,\n script: true,\n sub: true,\n sup: true,\n}\n\n/**\n * HTML void/self-closing elements that cannot have children. When Element\n * detects one of these tags, it skips rendering beforeContent/content/afterContent\n * and returns the Wrapper alone.\n */\nexport const EMPTY_ELEMENTS = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n textarea: true,\n // 'meta': true,\n // 'param': true,\n source: true,\n track: true,\n wbr: true,\n}\n","import { EMPTY_ELEMENTS, INLINE_ELEMENTS } from './constants'\n\ntype GetValue = (tag?: string) => boolean\n\n/** Checks whether the given HTML tag is an inline-level element, used to determine sub-tag nesting. */\nexport const isInlineElement: GetValue = (tag) => {\n if (tag && tag in INLINE_ELEMENTS) return true\n return false\n}\n\n/** Checks whether the given HTML tag is a void element that cannot have children. */\nexport const getShouldBeEmpty: GetValue = (tag) => {\n if (tag && tag in EMPTY_ELEMENTS) return true\n return false\n}\n","/**\n * Core building block of the elements package. Renders a three-section layout\n * (beforeContent / content / afterContent) inside a flex Wrapper. When only\n * content is present, the Wrapper inherits content-level alignment directly\n * to avoid an unnecessary nesting layer. Handles HTML-specific edge cases\n * like void elements (input, img) and inline elements (span, a) by\n * skipping children or switching sub-tags accordingly.\n */\nimport { render } from '@vitus-labs/core'\nimport { forwardRef, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport { Content, Wrapper } from '~/helpers'\nimport type { VLElement } from './types'\nimport { getShouldBeEmpty, isInlineElement } from './utils'\n\nconst defaultDirection = 'inline'\nconst defaultContentDirection = 'rows'\nconst defaultAlignX = 'left'\nconst defaultAlignY = 'center'\n\nconst Component: VLElement = forwardRef(\n (\n {\n innerRef,\n tag,\n label,\n content,\n children,\n beforeContent,\n afterContent,\n\n block,\n equalCols,\n gap,\n\n direction,\n alignX = defaultAlignX,\n alignY = defaultAlignY,\n\n css,\n contentCss,\n beforeContentCss,\n afterContentCss,\n\n contentDirection = defaultContentDirection,\n contentAlignX = defaultAlignX,\n contentAlignY = defaultAlignY,\n\n beforeContentDirection = defaultDirection,\n beforeContentAlignX = defaultAlignX,\n beforeContentAlignY = defaultAlignY,\n\n afterContentDirection = defaultDirection,\n afterContentAlignX = defaultAlignX,\n afterContentAlignY = defaultAlignY,\n\n ...props\n },\n ref,\n ) => {\n // --------------------------------------------------------\n // check if should render only single element\n // --------------------------------------------------------\n const shouldBeEmpty = __WEB__\n ? !!props.dangerouslySetInnerHTML || getShouldBeEmpty(tag)\n : false\n\n // --------------------------------------------------------\n // if not single element, calculate values\n // --------------------------------------------------------\n const isSimpleElement = !beforeContent && !afterContent\n const CHILDREN = children ?? content ?? label\n\n const isInline = __WEB__ ? isInlineElement(tag) : false\n const SUB_TAG = __WEB__ && isInline ? 'span' : undefined\n\n // --------------------------------------------------------\n // direction & alignX & alignY calculations\n // --------------------------------------------------------\n const { wrapperDirection, wrapperAlignX, wrapperAlignY } = useMemo(() => {\n let wrapperDirection: typeof direction = direction\n let wrapperAlignX: typeof alignX = alignX\n let wrapperAlignY: typeof alignY = alignY\n\n if (isSimpleElement) {\n if (contentDirection) wrapperDirection = contentDirection\n if (contentAlignX) wrapperAlignX = contentAlignX\n if (contentAlignY) wrapperAlignY = contentAlignY\n } else if (direction) {\n wrapperDirection = direction\n } else {\n wrapperDirection = defaultDirection\n }\n\n return { wrapperDirection, wrapperAlignX, wrapperAlignY }\n }, [\n isSimpleElement,\n contentDirection,\n contentAlignX,\n contentAlignY,\n alignX,\n alignY,\n direction,\n ])\n\n // --------------------------------------------------------\n // common wrapper props\n // --------------------------------------------------------\n const WRAPPER_PROPS = {\n ref: ref ?? innerRef,\n extendCss: css,\n tag,\n block,\n direction: wrapperDirection,\n alignX: wrapperAlignX,\n alignY: wrapperAlignY,\n as: undefined, // reset styled-components `as` prop\n }\n\n // --------------------------------------------------------\n // return simple/empty element like input or image etc.\n // --------------------------------------------------------\n if (shouldBeEmpty) {\n return <Wrapper {...props} {...WRAPPER_PROPS} />\n }\n\n const contentRenderOutput = render(CHILDREN)\n\n return (\n <Wrapper {...props} {...WRAPPER_PROPS} isInline={isInline}>\n {beforeContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"before\"\n parentDirection={wrapperDirection}\n extendCss={beforeContentCss}\n direction={beforeContentDirection}\n alignX={beforeContentAlignX}\n alignY={beforeContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(beforeContent)}\n </Content>\n )}\n\n {isSimpleElement ? (\n contentRenderOutput\n ) : (\n <Content\n tag={SUB_TAG}\n contentType=\"content\"\n parentDirection={wrapperDirection}\n extendCss={contentCss}\n direction={contentDirection}\n alignX={contentAlignX}\n alignY={contentAlignY}\n equalCols={equalCols}\n >\n {contentRenderOutput}\n </Content>\n )}\n\n {afterContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"after\"\n parentDirection={wrapperDirection}\n extendCss={afterContentCss}\n direction={afterContentDirection}\n alignX={afterContentAlignX}\n alignY={afterContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(afterContent)}\n </Content>\n )}\n </Wrapper>\n )\n },\n)\n\nconst name = `${PKG_NAME}/Element` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that equalizes the dimensions of beforeContent and afterContent areas.\n * After render, it measures both DOM nodes via useLayoutEffect and sets the\n * larger dimension on both so they match. Uses width for inline direction\n * and height for rows direction. This is useful for centering the main\n * content when before/after slots have different intrinsic sizes.\n */\nimport { type Ref, useImperativeHandle, useLayoutEffect, useRef } from 'react'\nimport type { Props as ElementProps } from './types'\n\nconst types = {\n height: 'offsetHeight',\n width: 'offsetWidth',\n} as const\n\ntype DimensionType = keyof typeof types\n\nconst equalize = (\n beforeEl: HTMLElement,\n afterEl: HTMLElement,\n type: DimensionType,\n) => {\n const prop = types[type]\n const beforeSize = beforeEl[prop]\n const afterSize = afterEl[prop]\n\n if (Number.isInteger(beforeSize) && Number.isInteger(afterSize)) {\n const maxSize = `${Math.max(beforeSize, afterSize)}px`\n beforeEl.style[type] = maxSize\n afterEl.style[type] = maxSize\n }\n}\n\ntype Props = ElementProps &\n Partial<{\n equalBeforeAfter: boolean\n ref: Ref<HTMLElement>\n }>\n\nconst withEqualBeforeAfter = (WrappedComponent: any) => {\n const displayName =\n WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\n\n const Enhanced = ({\n equalBeforeAfter,\n direction,\n afterContent,\n beforeContent,\n ref,\n ...rest\n }: Props) => {\n const internalRef = useRef<HTMLElement>(null)\n\n useImperativeHandle(ref, () => internalRef.current as HTMLElement)\n\n useLayoutEffect(() => {\n if (!equalBeforeAfter || !beforeContent || !afterContent) return\n if (!internalRef.current) return\n\n const el = internalRef.current\n const beforeEl = el.firstElementChild as HTMLElement | null\n const afterEl = el.lastElementChild as HTMLElement | null\n\n if (beforeEl && afterEl && beforeEl !== afterEl) {\n equalize(beforeEl, afterEl, direction === 'rows' ? 'height' : 'width')\n }\n })\n\n return (\n <WrappedComponent\n {...rest}\n afterContent={afterContent}\n beforeContent={beforeContent}\n ref={internalRef}\n />\n )\n }\n\n Enhanced.displayName = `withEqualSizeBeforeAfter(${displayName})`\n\n return Enhanced\n}\n\nexport default withEqualBeforeAfter\n","import component from './component'\nimport type { Props, VLElement } from './types'\nimport withEqualSizeBeforeAfter from './withEqualSizeBeforeAfter'\n\nexport { withEqualSizeBeforeAfter }\nexport type { Props, VLElement }\n\nexport default component\n","/**\n * Data-driven list renderer that supports three input modes: React children\n * (including fragments), an array of primitives, or an array of objects.\n * Each item receives positional metadata (first, last, odd, even, position)\n * and optional injected props via `itemProps`. Items can be individually\n * wrapped with `wrapComponent`. Children always take priority over the\n * component+data prop pattern.\n */\nimport { isEmpty, render } from '@vitus-labs/core'\nimport {\n Children,\n type FC,\n type ReactElement,\n type ReactNode,\n useCallback,\n useMemo,\n} from 'react'\nimport { isFragment } from 'react-is'\nimport type { ExtendedProps, ObjectValue, Props, SimpleValue } from './types'\n\ntype ClassifiedData =\n | { type: 'simple'; data: SimpleValue[] }\n | { type: 'complex'; data: ObjectValue[] }\n | null\n\nconst classifyData = (data: unknown[]): ClassifiedData => {\n const items = data.filter(\n (item) =>\n item != null && !(typeof item === 'object' && isEmpty(item as any)),\n )\n\n if (items.length === 0) return null\n\n let isSimple = true\n let isComplex = true\n\n for (const item of items) {\n if (typeof item === 'string' || typeof item === 'number') {\n isComplex = false\n } else if (typeof item === 'object') {\n isSimple = false\n } else {\n isSimple = false\n isComplex = false\n }\n }\n\n if (isSimple) return { type: 'simple', data: items as SimpleValue[] }\n if (isComplex) return { type: 'complex', data: items as ObjectValue[] }\n return null\n}\n\nconst RESERVED_PROPS = [\n 'children',\n 'component',\n 'wrapComponent',\n 'data',\n 'itemKey',\n 'valueName',\n 'itemProps',\n 'wrapProps',\n] as const\n\ntype AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => ExtendedProps\n\nconst attachItemProps: AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => {\n const position = i + 1\n\n return {\n index: i,\n first: position === 1,\n last: position === length,\n odd: position % 2 === 1,\n even: position % 2 === 0,\n position,\n }\n}\n\ntype Static = {\n isIterator: true\n RESERVED_PROPS: typeof RESERVED_PROPS\n}\n\nconst Component: FC<Props> & Static = (props) => {\n const {\n itemKey,\n valueName,\n children,\n component,\n data,\n wrapComponent: Wrapper,\n wrapProps,\n itemProps,\n } = props\n\n const injectItemProps = useMemo(\n () => (typeof itemProps === 'function' ? itemProps : () => itemProps),\n [itemProps],\n )\n\n const injectWrapItemProps = useMemo(\n () => (typeof wrapProps === 'function' ? wrapProps : () => wrapProps),\n [wrapProps],\n )\n\n const getKey = useCallback(\n (item: string | number, index: number) => {\n if (typeof itemKey === 'function') return itemKey(item, index)\n\n return index\n },\n [itemKey],\n )\n\n const renderChild = (child: ReactNode, total = 1, i = 0) => {\n if (!itemProps && !Wrapper) return child\n\n const extendedProps = attachItemProps({\n i,\n length: total,\n })\n\n const finalItemProps = itemProps ? injectItemProps({}, extendedProps) : {}\n\n // if no props extension is required, just return children\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({}, extendedProps)\n : {}\n\n return (\n <Wrapper key={i} {...finalWrapProps}>\n {render(child, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(child, {\n key: i,\n ...finalItemProps,\n })\n }\n\n // --------------------------------------------------------\n // render children\n // --------------------------------------------------------\n const renderChildren = () => {\n if (!children) return null\n\n // if children is Array\n if (Array.isArray(children)) {\n return Children.map(children, (item, i) =>\n renderChild(item, children.length, i),\n )\n }\n\n // if children is Fragment\n if (isFragment(children)) {\n const fragmentChildren = (\n children as ReactElement<{ children: ReactNode[] }>\n ).props.children\n const childrenLength = fragmentChildren.length\n\n return fragmentChildren.map((item, i) =>\n renderChild(item, childrenLength, i),\n )\n }\n\n // if single child\n return renderChild(children)\n }\n\n // --------------------------------------------------------\n // render array of strings or numbers\n // --------------------------------------------------------\n const renderSimpleArray = (data: SimpleValue[]) => {\n const { length } = data\n\n // if the data array is empty\n if (length === 0) return null\n\n return data.map((item, i) => {\n const key = getKey(item, i)\n const keyName = valueName ?? 'children'\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps\n ? injectItemProps({ [keyName]: item }, extendedProps)\n : {}),\n [keyName]: item,\n }\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({ [keyName]: item }, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(component, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(component, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render array of objects\n // --------------------------------------------------------\n const getObjectKey = (item: ObjectValue, index: number) => {\n if (!itemKey) return item.key ?? item.id ?? item.itemId ?? index\n if (typeof itemKey === 'function') return itemKey(item, index)\n if (typeof itemKey === 'string') return item[itemKey]\n\n return index\n }\n\n const renderComplexArray = (data: ObjectValue[]) => {\n const { length } = data\n\n if (length === 0) return null\n\n return data.map((item, i) => {\n const { component: itemComponent, ...restItem } = item\n const renderItem = itemComponent ?? component\n const key = getObjectKey(restItem, i)\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps ? injectItemProps(item, extendedProps) : {}),\n ...restItem,\n }\n\n if (Wrapper && !itemComponent) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps(item, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(renderItem, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(renderItem, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render list items\n // --------------------------------------------------------\n const renderItems = () => {\n // --------------------------------------------------------\n // children have priority over props component + data\n // --------------------------------------------------------\n if (children) return renderChildren()\n\n // --------------------------------------------------------\n // render props component + data\n // single pass: filter nullish/empty and determine array type\n // --------------------------------------------------------\n if (component && Array.isArray(data)) {\n const classified = classifyData(data)\n if (!classified) return null\n if (classified.type === 'simple')\n return renderSimpleArray(classified.data)\n return renderComplexArray(classified.data)\n }\n\n // --------------------------------------------------------\n // if there are no children or valid react component and data as an array,\n // return null to prevent error\n // --------------------------------------------------------\n return null\n }\n\n return renderItems()\n}\n\nComponent.isIterator = true\nComponent.RESERVED_PROPS = RESERVED_PROPS\n\nexport default Component\n","import component from './component'\nimport type {\n ElementType,\n ExtendedProps,\n ObjectValue,\n Props,\n PropsCallback,\n} from './types'\n\nexport type { Props, PropsCallback, ObjectValue, ExtendedProps, ElementType }\n\nexport default component\n","/**\n * List component that combines Iterator (data-driven rendering) with an\n * optional Element root wrapper. When `rootElement` is false (default),\n * it renders a bare Iterator as a fragment. When true, the Iterator output\n * is wrapped in an Element that receives all non-iterator props (e.g.,\n * layout, alignment, css), allowing the list to be styled as a single block.\n */\nimport { omit, pick } from '@vitus-labs/core'\nimport { forwardRef } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLElement } from '~/Element'\nimport Element from '~/Element'\nimport type { Props as IteratorProps } from '~/helpers/Iterator'\nimport Iterator from '~/helpers/Iterator'\nimport type { MergeTypes } from '~/types'\n\ntype ListProps = {\n /**\n * A boolean value. When set to `false`, component returns `React.Fragment`\n * When set to `true`, component returns as the **root** element `Element`\n * component.\n */\n rootElement?: boolean\n /**\n * Label prop from `Element` component is being ignored.\n */\n label: never\n /**\n * Content prop from `Element` component is being ignored.\n */\n content: never\n}\n\nexport type Props = MergeTypes<[IteratorProps, ListProps]>\n\nconst Component: VLElement<Props> = forwardRef(\n ({ rootElement = false, ...props }, ref) => {\n const renderedList = <Iterator {...pick(props, Iterator.RESERVED_PROPS)} />\n\n if (!rootElement) return renderedList\n\n return (\n <Element ref={ref} {...omit(props, Iterator.RESERVED_PROPS)}>\n {renderedList}\n </Element>\n )\n },\n)\n\nconst name = `${PKG_NAME}/List` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that adds single or multi selection state management to a list component.\n * Tracks which items are active via a scalar key (single mode) or a Map of\n * key-to-boolean entries (multi mode). Injects `itemProps` callback that\n * provides each item with `active`, `handleItemActive`, `toggleItemActive`,\n * and other selection helpers. Supports `activeItemRequired` to prevent\n * deselecting the last active item.\n */\n// @ts-nocheck\nimport { useEffect, useState } from 'react'\nimport type { SimpleHoc } from '~/types'\n\nconst RESERVED_KEYS = [\n 'type',\n 'activeItems',\n 'itemProps',\n 'activeItemRequired',\n] as const\n\ntype Key = string | number\ntype MultipleMap = Map<Key, boolean>\n\ninterface ItemPropsData {\n key: Key\n first: boolean\n last: boolean\n odd: boolean\n even: boolean\n position: number\n}\n\ninterface Props {\n type?: 'single' | 'multi'\n activeItemRequired?: boolean\n activeItems?: Key | (string | number)[]\n itemProps?:\n | Record<string, unknown>\n | ((props: Record<string, unknown>) => Record<string, unknown>)\n}\n\nconst component: SimpleHoc<Props> = (WrappedComponent) => {\n const displayName =\n WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n const Enhanced = (props: Props) => {\n const {\n type = 'single',\n activeItemRequired,\n activeItems,\n itemProps = {},\n ...rest\n } = props\n\n type InitActiveItems = () => Key | MultipleMap | undefined\n const initActiveItems: InitActiveItems = () => {\n if (type === 'single') {\n if (!Array.isArray(activeItems)) {\n return activeItems\n }\n } else if (type === 'multi') {\n const activeItemsHelper = Array.isArray(activeItems)\n ? activeItems\n : [activeItems]\n\n return new Map(activeItemsHelper.map((id) => [id, true]))\n }\n\n return undefined\n }\n\n const [innerActiveItems, setActiveItems] = useState(initActiveItems())\n\n const countActiveItems = (data) => {\n let result = 0\n\n data.forEach((value) => {\n if (value) result += 1\n })\n\n return result\n }\n\n const updateItemState = (key: Key) => {\n if (type === 'single') {\n setActiveItems((prevState) => {\n if (activeItemRequired) return key\n if (prevState === key) return undefined\n\n return key\n })\n } else if (type === 'multi') {\n setActiveItems((prevState: MultipleMap) => {\n // TODO: add conditional type to fix this\n const activeItems = new Map(prevState)\n\n if (\n activeItemRequired &&\n activeItems.get(key) &&\n countActiveItems(activeItems) === 1\n ) {\n return activeItems\n }\n\n activeItems.set(key, !activeItems.get(key))\n return activeItems\n })\n } else {\n setActiveItems(undefined)\n }\n }\n\n const handleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const updateAllItemsState = (status) => {\n if (!status) {\n setActiveItems(new Map())\n }\n }\n\n const setItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const unsetItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const toggleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n // const setAllItemsActive = () => {\n // updateAllItemsState(true)\n // }\n\n const unsetAllItemsActive = () => {\n updateAllItemsState(false)\n }\n\n const isItemActive = (key: Key): boolean => {\n if (!innerActiveItems) return false\n if (type === 'single') return innerActiveItems === key\n if (type === 'multi' && innerActiveItems instanceof Map) {\n return !!innerActiveItems.get(key)\n }\n return false\n }\n\n const attachMultipleProps = {\n unsetAllItemsActive,\n }\n\n const attachItemProps = (props: ItemPropsData) => {\n const { key } = props\n\n const defaultItemProps =\n typeof itemProps === 'object' ? itemProps : itemProps(props)\n\n const result = {\n ...defaultItemProps,\n active: isItemActive(key),\n handleItemActive: () => handleItemActive(key),\n setItemActive,\n unsetItemActive,\n toggleItemActive,\n ...(type === 'multi' ? attachMultipleProps : {}),\n }\n\n return result\n }\n\n useEffect(() => {\n if (type === 'single' && Array.isArray(activeItems)) {\n if (process.env.NODE_ENV !== 'production') {\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(\n '[@vitus-labs/elements] List/withActiveState: ' +\n '`activeItems` was passed as an array but `type` is \"single\". ' +\n 'In single selection mode, `activeItems` should be a single key (string | number). ' +\n 'The array value will be ignored.',\n )\n }\n }\n }, [type, activeItems])\n\n return <WrappedComponent {...rest} itemProps={attachItemProps} />\n }\n Enhanced.RESERVED_KEYS = RESERVED_KEYS\n Enhanced.displayName = `@vitus-labs/elements/List/withActiveState(${displayName})`\n\n return Enhanced\n}\n\nexport default component\n","import type { Props } from './component'\nimport component from './component'\nimport withActiveState from './withActiveState'\n\nexport type { Props }\nexport { withActiveState }\n\nexport default component\n","/**\n * Portal component that creates a new DOM element on mount, appends it to\n * the target location (defaults to document.body), and uses React's\n * createPortal to render children into it. The DOM element is cleaned up\n * on unmount. Accepts a custom DOMLocation for rendering into specific\n * containers (e.g., a modal root).\n */\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n */\n DOMLocation?: HTMLElement\n /**\n * Children to be rendered within **Portal** component.\n */\n children: ReactNode\n /**\n * Valid HTML Tag\n */\n tag?: string\n}\n\nconst Component: VLComponent<Props> = ({\n DOMLocation,\n tag = 'div',\n children,\n}: Props) => {\n const [element, setElement] = useState<HTMLElement>()\n\n useEffect(() => {\n if (!tag) return undefined\n\n const position = DOMLocation ?? document.body\n const element = document.createElement(tag)\n setElement(element)\n\n position.appendChild(element)\n\n return () => {\n position.removeChild(element)\n }\n }, [tag, DOMLocation])\n\n if (!tag || !element) return null\n\n return createPortal(children, element)\n}\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Portal` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Context for nested overlay coordination. When a child overlay opens, it\n * sets the parent's blocked state to true, preventing the parent from\n * closing in response to click/hover events that belong to the child.\n */\nimport {\n createContext,\n type FC,\n type ReactNode,\n useContext,\n useMemo,\n} from 'react'\n\nexport interface Context {\n blocked: boolean\n setBlocked: () => void\n setUnblocked: () => void\n}\n\nconst context = createContext<Context>({} as Context)\n\nconst { Provider } = context\n\nexport const useOverlayContext = () => useContext(context)\n\nconst Component: FC<Context & { children: ReactNode }> = ({\n children,\n blocked,\n setBlocked,\n setUnblocked,\n}) => {\n const ctx = useMemo(\n () => ({\n blocked,\n setBlocked,\n setUnblocked,\n }),\n [blocked, setBlocked, setUnblocked],\n )\n\n return <Provider value={ctx}>{children}</Provider>\n}\n\nexport default Component\n","/**\n * Core hook powering the Overlay component. Manages open/close state, DOM\n * event listeners (click, hover, scroll, resize, ESC key), and dynamic\n * positioning of overlay content relative to its trigger. Supports dropdown,\n * tooltip, popover, and modal types with automatic edge-of-viewport flipping.\n * Event handlers are throttled for performance, and nested overlay blocking\n * is coordinated through the overlay context.\n */\n/* eslint-disable no-console */\n\nimport { context, throttle } from '@vitus-labs/core'\nimport { value } from '@vitus-labs/unistyle'\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Provider, { useOverlayContext } from './context'\n\ntype OverlayPosition = Partial<{\n top: number | string\n bottom: number | string\n left: number | string\n right: number | string\n}>\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\nexport type UseOverlayProps = Partial<{\n /**\n * Defines default state whether **Overlay** component should be active.\n * @defaultValue `false`\n */\n isOpen: boolean\n /**\n * Defines `event` when **Overlay** is supposed to be open.\n *\n * When `manual` is set, callbacks needs to be applied to make it working.\n * @defaultValue `click`\n */\n openOn: 'click' | 'hover' | 'manual'\n /**\n * Defines `event` when **Overlay** is supposed to be closed.\n * @defaultValue `click`\n */\n closeOn:\n | 'click'\n | 'clickOnTrigger'\n | 'clickOutsideContent'\n | 'hover'\n | 'manual'\n\n /**\n * Defines what type of **Overlay** will be created. Type `modal`\n * has different positioning calculations than others.\n * @defaultValue `dropdown`\n */\n type: 'dropdown' | 'tooltip' | 'popover' | 'modal' | 'custom'\n /**\n * Defines how `content` is treated regarding CSS positioning.\n * @defaultValue `fixed`\n */\n position: 'absolute' | 'fixed' | 'relative' | 'static'\n /**\n * Defines from which side is `content` aligned to `trigger` (top, left, bottom, right).\n * For more specific alignment configuration can be used `alignX` and/or `alignY` prop.\n * @defaultValue `bottom`\n */\n align: Align\n /**\n * Defines how `content` is aligned to `trigger` on axis X\n * @defaultValue `left`\n */\n alignX: AlignX\n /**\n * Defines how `content` is aligned to `trigger` on axis Y\n * @defaultValue `bottom`\n */\n alignY: AlignY\n /**\n * Defines `margin` from trigger on axis X.\n * @defaultValue `0`\n */\n offsetX: number\n /**\n * Defines `margin` from trigger on axis Y.\n * @defaultValue `0`\n */\n offsetY: number\n /**\n * Performance helper. Value defined in milliseconds for `throttling`\n * recalculations\n * @defaultValue `200`\n */\n throttleDelay: number\n /**\n * A valid HTML element. Prop can be used for ability to handle properly\n * scrolling inside custom scrollable HTML element.\n */\n parentContainer: HTMLElement | null\n /**\n * Defines whether active **Overlay** is supposed to be closed on pressing\n * `ESC` key.\n * @defaultValue `true`\n */\n closeOnEsc: boolean\n /**\n * When set to `true`, **Overlay** is automatically closed and is blocked for\n * being opened.\n */\n disabled: boolean\n /**\n * A callback hook to be called when **Overlay** is being opened. Does not\n * accept any arguments.\n */\n onOpen: () => void\n /**\n * A callback hook to be called when **Overlay** is being closed. Does not\n * accept any arguments.\n */\n onClose: () => void\n}>\n\ntype PositionResult = {\n pos: OverlayPosition\n resolvedAlignX: AlignX\n resolvedAlignY: AlignY\n}\n\nconst sel = <T,>(cond: boolean, a: T, b: T): T => (cond ? a : b)\n\nconst devWarn = (msg: string) => {\n if (!IS_DEVELOPMENT) return\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(msg)\n}\n\nconst calcDropdownVertical = (\n c: DOMRect,\n t: DOMRect,\n align: 'top' | 'bottom',\n alignX: AlignX,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const topPos = t.top - offsetY - c.height\n const bottomPos = t.bottom + offsetY\n const leftPos = t.left + offsetX\n const rightPos = t.right - offsetX - c.width\n\n const fitsTop = topPos >= 0\n const fitsBottom = bottomPos + c.height <= window.innerHeight\n const fitsLeft = leftPos + c.width <= window.innerWidth\n const fitsRight = rightPos >= 0\n\n const useTop = sel(align === 'top', fitsTop, !fitsBottom)\n pos.top = sel(useTop, topPos, bottomPos)\n const resolvedAlignY: AlignY = sel(useTop, 'top', 'bottom')\n\n let resolvedAlignX: AlignX = alignX\n if (alignX === 'left') {\n pos.left = sel(fitsLeft, leftPos, rightPos)\n resolvedAlignX = sel(fitsLeft, 'left', 'right')\n } else if (alignX === 'right') {\n pos.left = sel(fitsRight, rightPos, leftPos)\n resolvedAlignX = sel(fitsRight, 'right', 'left')\n } else {\n const center = t.left + (t.right - t.left) / 2 - c.width / 2\n const fitsCL = center >= 0\n const fitsCR = center + c.width <= window.innerWidth\n\n if (fitsCL && fitsCR) {\n resolvedAlignX = 'center'\n pos.left = center\n } else if (fitsCL) {\n resolvedAlignX = 'left'\n pos.left = leftPos\n } else if (fitsCR) {\n resolvedAlignX = 'right'\n pos.left = rightPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcDropdownHorizontal = (\n c: DOMRect,\n t: DOMRect,\n align: 'left' | 'right',\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const leftPos = t.left - offsetX - c.width\n const rightPos = t.right + offsetX\n const topPos = t.top + offsetY\n const bottomPos = t.bottom - offsetY - c.height\n\n const fitsLeft = leftPos >= 0\n const fitsRight = rightPos + c.width <= window.innerWidth\n const fitsTop = topPos + c.height <= window.innerHeight\n const fitsBottom = bottomPos >= 0\n\n const useLeft = sel(align === 'left', fitsLeft, !fitsRight)\n pos.left = sel(useLeft, leftPos, rightPos)\n const resolvedAlignX: AlignX = sel(useLeft, 'left', 'right')\n\n let resolvedAlignY: AlignY = alignY\n if (alignY === 'top') {\n pos.top = sel(fitsTop, topPos, bottomPos)\n resolvedAlignY = sel(fitsTop, 'top', 'bottom')\n } else if (alignY === 'bottom') {\n pos.top = sel(fitsBottom, bottomPos, topPos)\n resolvedAlignY = sel(fitsBottom, 'bottom', 'top')\n } else {\n const center = t.top + (t.bottom - t.top) / 2 - c.height / 2\n const fitsCT = center >= 0\n const fitsCB = center + c.height <= window.innerHeight\n\n if (fitsCT && fitsCB) {\n resolvedAlignY = 'center'\n pos.top = center\n } else if (fitsCT) {\n resolvedAlignY = 'top'\n pos.top = topPos\n } else if (fitsCB) {\n resolvedAlignY = 'bottom'\n pos.top = bottomPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcModalPos = (\n c: DOMRect,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): OverlayPosition => {\n const pos: OverlayPosition = {}\n\n switch (alignX) {\n case 'right':\n pos.right = offsetX\n break\n case 'left':\n pos.left = offsetX\n break\n case 'center':\n pos.left = window.innerWidth / 2 - c.width / 2\n break\n default:\n pos.right = offsetX\n }\n\n switch (alignY) {\n case 'top':\n pos.top = offsetY\n break\n case 'center':\n pos.top = window.innerHeight / 2 - c.height / 2\n break\n case 'bottom':\n pos.bottom = offsetY\n break\n default:\n pos.top = offsetY\n }\n\n return pos\n}\n\nconst adjustForAncestor = (\n pos: OverlayPosition,\n ancestor: { top: number; left: number },\n): OverlayPosition => {\n if (ancestor.top === 0 && ancestor.left === 0) return pos\n\n const result = { ...pos }\n if (typeof result.top === 'number') result.top -= ancestor.top\n if (typeof result.bottom === 'number') result.bottom += ancestor.top\n if (typeof result.left === 'number') result.left -= ancestor.left\n if (typeof result.right === 'number') result.right += ancestor.left\n\n return result\n}\n\ntype ComputeResult = {\n pos: OverlayPosition\n resolvedAlignX?: AlignX\n resolvedAlignY?: AlignY\n}\n\nconst computePosition = (\n type: string,\n align: Align,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n triggerEl: HTMLElement | null,\n contentEl: HTMLElement | null,\n ancestorOffset: { top: number; left: number },\n): ComputeResult => {\n const isDropdown = ['dropdown', 'tooltip', 'popover'].includes(type)\n\n if (isDropdown && (!triggerEl || !contentEl)) {\n devWarn(\n `[@vitus-labs/elements] Overlay (${type}): ` +\n `${triggerEl ? 'contentRef' : 'triggerRef'} is not attached. ` +\n 'Position cannot be calculated without both refs.',\n )\n return { pos: {} }\n }\n\n if (isDropdown && triggerEl && contentEl) {\n const c = contentEl.getBoundingClientRect()\n const t = triggerEl.getBoundingClientRect()\n const result =\n align === 'top' || align === 'bottom'\n ? calcDropdownVertical(c, t, align, alignX, offsetX, offsetY)\n : calcDropdownHorizontal(\n c,\n t,\n align as 'left' | 'right',\n alignY,\n offsetX,\n offsetY,\n )\n\n return {\n pos: adjustForAncestor(result.pos, ancestorOffset),\n resolvedAlignX: result.resolvedAlignX,\n resolvedAlignY: result.resolvedAlignY,\n }\n }\n\n if (type === 'modal') {\n if (!contentEl) {\n devWarn(\n '[@vitus-labs/elements] Overlay (modal): contentRef is not attached. ' +\n 'Modal position cannot be calculated without a content element.',\n )\n return { pos: {} }\n }\n const c = contentEl.getBoundingClientRect()\n return {\n pos: adjustForAncestor(\n calcModalPos(c, alignX, alignY, offsetX, offsetY),\n ancestorOffset,\n ),\n }\n }\n\n return { pos: {} }\n}\n\nconst processVisibilityEvent = (\n e: Event,\n active: boolean,\n openOn: string,\n closeOn: string,\n isTrigger: (e: Event) => boolean,\n isContent: (e: Event) => boolean,\n showContent: () => void,\n hideContent: () => void,\n) => {\n // Open on click (hover is handled by dedicated mouseenter/mouseleave)\n if (!active && openOn === 'click' && e.type === 'click' && isTrigger(e)) {\n showContent()\n return\n }\n\n if (!active) return\n\n // Close handlers\n if (closeOn === 'hover' && e.type === 'scroll') {\n hideContent()\n return\n }\n\n if (e.type !== 'click') return\n\n if (closeOn === 'click') {\n hideContent()\n } else if (closeOn === 'clickOnTrigger' && isTrigger(e)) {\n hideContent()\n } else if (closeOn === 'clickOutsideContent' && !isContent(e)) {\n hideContent()\n }\n}\n\nconst useOverlay = ({\n isOpen = false,\n openOn = 'click', // click | hover\n closeOn = 'click', // click | 'clickOnTrigger' | 'clickOutsideContent' | hover | manual\n type = 'dropdown', // dropdown | tooltip | popover | modal\n position = 'fixed', // absolute | fixed | relative | static\n align = 'bottom', // main align prop top | left | bottom | right\n alignX = 'left', // left | center | right\n alignY = 'bottom', // top | center | bottom\n offsetX = 0,\n offsetY = 0,\n throttleDelay = 200,\n parentContainer,\n closeOnEsc = true,\n disabled,\n onOpen,\n onClose,\n}: Partial<UseOverlayProps> = {}) => {\n const { rootSize } = useContext(context) as { rootSize: number }\n const ctx = useOverlayContext()\n const [isContentLoaded, setContentLoaded] = useState(false)\n\n const [innerAlignX, setInnerAlignX] = useState(alignX)\n const [innerAlignY, setInnerAlignY] = useState(alignY)\n\n const [blocked, handleBlocked] = useState(false)\n const [active, handleActive] = useState(isOpen)\n\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLElement>(null)\n\n const setBlocked = useCallback(() => handleBlocked(true), [])\n const setUnblocked = useCallback(() => handleBlocked(false), [])\n\n const showContent = useCallback(() => {\n handleActive(true)\n }, [])\n\n const hideContent = useCallback(() => {\n handleActive(false)\n }, [])\n\n // For position: absolute, getBoundingClientRect() returns viewport-relative\n // values but the element is positioned relative to its offsetParent.\n // We need to subtract the offsetParent's viewport rect to get correct coords.\n const getAncestorOffset = useCallback(() => {\n if (position !== 'absolute' || !contentRef.current) {\n return { top: 0, left: 0 }\n }\n\n const offsetParent = contentRef.current.offsetParent as HTMLElement | null\n if (!offsetParent || offsetParent === document.body) {\n return { top: 0, left: 0 }\n }\n\n const rect = offsetParent.getBoundingClientRect()\n return { top: rect.top, left: rect.left }\n }, [position])\n\n const calculateContentPosition = useCallback(() => {\n if (!active || !isContentLoaded) return {}\n\n const result = computePosition(\n type,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n triggerRef.current,\n contentRef.current,\n getAncestorOffset(),\n )\n\n if (result.resolvedAlignX) setInnerAlignX(result.resolvedAlignX)\n if (result.resolvedAlignY) setInnerAlignY(result.resolvedAlignY)\n\n return result.pos\n }, [\n isContentLoaded,\n active,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n type,\n getAncestorOffset,\n ])\n\n const assignContentPosition = useCallback(\n (values: OverlayPosition = {}) => {\n if (!contentRef.current) return\n\n const el = contentRef.current\n const setValue = (param?: string | number) =>\n value(param, rootSize) as string\n\n el.style.position = position\n\n // Reset all directional properties first, then apply only the ones\n // present in `values`. This prevents stale values lingering when the\n // overlay flips direction (e.g. top→bottom leaves old `top` behind).\n el.style.top = values.top != null ? setValue(values.top) : ''\n el.style.bottom = values.bottom != null ? setValue(values.bottom) : ''\n el.style.left = values.left != null ? setValue(values.left) : ''\n el.style.right = values.right != null ? setValue(values.right) : ''\n },\n [position, rootSize],\n )\n\n const setContentPosition = useCallback(() => {\n const currentPosition = calculateContentPosition()\n assignContentPosition(currentPosition)\n }, [assignContentPosition, calculateContentPosition])\n\n const isNodeOrChild = useCallback(\n (ref: { current: HTMLElement | null }) => (e: Event) => {\n if (e?.target && ref.current) {\n return (\n ref.current.contains(e.target as Element) || e.target === ref.current\n )\n }\n\n return false\n },\n [],\n )\n\n const handleVisibilityByEventType = useCallback(\n (e: Event) => {\n if (blocked || disabled) return\n\n processVisibilityEvent(\n e,\n active,\n openOn,\n closeOn,\n isNodeOrChild(triggerRef),\n isNodeOrChild(contentRef),\n showContent,\n hideContent,\n )\n },\n [\n active,\n blocked,\n disabled,\n openOn,\n closeOn,\n hideContent,\n showContent,\n isNodeOrChild,\n ],\n )\n\n // Use refs to avoid stale closures in throttled callbacks.\n // The throttled wrappers are stable (only recreated if throttleDelay changes),\n // but always call the latest version of the underlying function via the ref.\n const latestSetContentPosition = useRef(setContentPosition)\n latestSetContentPosition.current = setContentPosition\n\n const latestHandleVisibility = useRef(handleVisibilityByEventType)\n latestHandleVisibility.current = handleVisibilityByEventType\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleContentPosition = useMemo(\n () => throttle(() => latestSetContentPosition.current(), throttleDelay),\n [throttleDelay],\n )\n\n const handleClick = handleVisibilityByEventType\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleVisibility = useMemo(\n () =>\n throttle((e: Event) => latestHandleVisibility.current(e), throttleDelay),\n [throttleDelay],\n )\n\n // --------------------------------------------------------------------------\n // useEffects\n // --------------------------------------------------------------------------\n useEffect(() => {\n setInnerAlignX(alignX)\n setInnerAlignY(alignY)\n\n if (disabled) {\n hideContent()\n }\n }, [disabled, alignX, alignY, hideContent])\n\n useEffect(() => {\n if (!active || !isContentLoaded) return undefined\n\n // First call positions immediately; the rAF callback re-measures after\n // the browser has had a chance to reflow, catching any geometry changes\n // caused by the initial positioning (e.g. content becoming visible).\n setContentPosition()\n const rafId = requestAnimationFrame(() => setContentPosition())\n\n return () => cancelAnimationFrame(rafId)\n }, [active, isContentLoaded, setContentPosition])\n\n // Track previous active state so callbacks only fire on actual transitions,\n // not on every dependency change or unmount-while-closed.\n const prevActiveRef = useRef(false)\n useEffect(() => {\n const wasActive = prevActiveRef.current\n prevActiveRef.current = active\n\n if (active && !wasActive) {\n onOpen?.()\n ctx.setBlocked?.()\n } else if (!active && wasActive) {\n setContentLoaded(false)\n onClose?.()\n ctx.setUnblocked?.()\n } else if (!active) {\n setContentLoaded(false)\n }\n\n return () => {\n // On unmount, only clean up if currently active\n if (active) {\n onClose?.()\n ctx.setUnblocked?.()\n }\n }\n }, [active, ctx, onClose, onOpen])\n\n // handle closing only when content is active\n useEffect(() => {\n if (!closeOnEsc || !active || blocked) return undefined\n\n const handleEscKey = (e: any) => {\n if (e.key === 'Escape') {\n hideContent()\n }\n }\n\n window.addEventListener('keydown', handleEscKey)\n\n return () => {\n window.removeEventListener('keydown', handleEscKey)\n }\n }, [active, blocked, closeOnEsc, hideContent])\n\n // handles repositioning of content on document events\n useEffect(() => {\n if (!active) return undefined\n\n const shouldSetOverflow = type === 'modal'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n if (shouldSetOverflow) document.body.style.overflow = 'hidden'\n window.addEventListener('resize', handleContentPosition)\n window.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n if (shouldSetOverflow) document.body.style.overflow = ''\n window.removeEventListener('resize', handleContentPosition)\n window.removeEventListener('scroll', onScroll)\n }\n }, [active, type, handleVisibility, handleContentPosition])\n\n // handles repositioning of content on a custom element if defined\n useEffect(() => {\n if (!active || !parentContainer) return undefined\n\n // eslint-disable-next-line no-param-reassign\n if (closeOn !== 'hover') parentContainer.style.overflow = 'hidden'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n parentContainer.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n // eslint-disable-next-line no-param-reassign\n parentContainer.style.overflow = ''\n parentContainer.removeEventListener('scroll', onScroll)\n }\n }, [\n active,\n parentContainer,\n closeOn,\n handleContentPosition,\n handleVisibility,\n ])\n\n // Click-based open/close: attach to window\n useEffect(() => {\n if (blocked || disabled) return undefined\n\n const enabledClick =\n openOn === 'click' ||\n ['click', 'clickOnTrigger', 'clickOutsideContent'].includes(closeOn)\n\n if (enabledClick) {\n window.addEventListener('click', handleClick)\n }\n\n return () => {\n window.removeEventListener('click', handleClick)\n }\n }, [openOn, closeOn, blocked, disabled, handleClick])\n\n // Hover-based open/close: mouseenter/mouseleave on trigger + content\n // instead of window-level mousemove (which fires on every pixel of movement).\n // A short timeout bridges the gap between trigger and content elements.\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: isContentLoaded signals contentRef.current is available so the effect re-runs to attach listeners\n useEffect(() => {\n const enabledHover = openOn === 'hover' || closeOn === 'hover'\n if (blocked || disabled || !enabledHover) return undefined\n\n const trigger = triggerRef.current\n const content = contentRef.current\n\n const clearHoverTimeout = () => {\n if (hoverTimeoutRef.current != null) {\n clearTimeout(hoverTimeoutRef.current)\n hoverTimeoutRef.current = null\n }\n }\n\n const scheduleHide = () => {\n clearHoverTimeout()\n hoverTimeoutRef.current = setTimeout(hideContent, 100)\n }\n\n const onTriggerEnter = () => {\n clearHoverTimeout()\n if (openOn === 'hover' && !active) showContent()\n }\n\n const onTriggerLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n const onContentEnter = () => {\n clearHoverTimeout()\n }\n\n const onContentLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n if (trigger) {\n trigger.addEventListener('mouseenter', onTriggerEnter)\n trigger.addEventListener('mouseleave', onTriggerLeave)\n }\n\n if (content) {\n content.addEventListener('mouseenter', onContentEnter)\n content.addEventListener('mouseleave', onContentLeave)\n }\n\n return () => {\n clearHoverTimeout()\n if (trigger) {\n trigger.removeEventListener('mouseenter', onTriggerEnter)\n trigger.removeEventListener('mouseleave', onTriggerLeave)\n }\n if (content) {\n content.removeEventListener('mouseenter', onContentEnter)\n content.removeEventListener('mouseleave', onContentLeave)\n }\n }\n }, [\n active,\n isContentLoaded,\n blocked,\n disabled,\n openOn,\n closeOn,\n showContent,\n hideContent,\n ])\n\n // hack-ish way to load content correctly on the first load\n // as `contentRef` is loaded dynamically\n const contentRefCallback = useCallback((node: HTMLElement) => {\n if (node) {\n contentRef.current = node\n setContentLoaded(true)\n }\n }, [])\n\n return {\n triggerRef,\n contentRef: contentRefCallback,\n active,\n align,\n alignX: innerAlignX,\n alignY: innerAlignY,\n showContent,\n hideContent,\n blocked,\n setBlocked,\n setUnblocked,\n Provider,\n }\n}\n\nexport default useOverlay\n","/**\n * Overlay component that renders a trigger element and conditionally shows\n * content via a Portal. The trigger receives a ref and optional show/hide\n * callbacks; the content is positioned and managed by the useOverlay hook.\n * A context Provider wraps the content to support nested overlays (e.g.,\n * a dropdown inside another dropdown) via blocked-state propagation.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport Portal from '~/Portal'\nimport type { Content, VLComponent } from '~/types'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nconst IS_BROWSER = typeof window !== 'undefined'\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\ntype TriggerRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n }>,\n) => ReactNode\n\ntype ContentRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n align: Align\n alignX: AlignX\n alignY: AlignY\n }>,\n) => ReactNode\n\nexport type Props = {\n /**\n * Children to be rendered within **Overlay** component when Overlay is active.\n */\n children: ContentRenderer | Content\n /**\n * React component to be used as a trigger (e.g. `Button` for opening\n * dropdowns). Component must acept accept `ref` or any other prop name\n * defined in `triggerRefName` prop.\n */\n trigger: TriggerRenderer | Content\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n *\n * For more information follow [Portal](https://vitus-labs.com/docs/ui-system/elements/portal)\n * component.\n */\n DOMLocation?: HTMLElement\n /**\n * Defines a prop name to be used for passing `ref` for **trigger**. By default,\n * the value is `ref`.\n */\n triggerRefName?: string\n /**\n * Defines a prop name to be used for passing `ref` for **content** (passed `children`).\n * By default, the value is `ref`.\n */\n contentRefName?: string\n} & UseOverlayProps\n\nconst Component: VLComponent<Props> = ({\n children,\n trigger,\n DOMLocation,\n triggerRefName = 'ref',\n contentRefName = 'ref',\n ...props\n}) => {\n const {\n active,\n triggerRef,\n contentRef,\n showContent,\n hideContent,\n align,\n alignX,\n alignY,\n Provider,\n ...ctx\n } = useOverlay(props)\n\n const { openOn, closeOn } = props\n\n const passHandlers = useMemo(\n () =>\n openOn === 'manual' ||\n closeOn === 'manual' ||\n closeOn === 'clickOutsideContent',\n [openOn, closeOn],\n )\n\n return (\n <>\n {render(trigger, {\n [triggerRefName]: triggerRef,\n active,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n\n {IS_BROWSER && active && (\n <Portal DOMLocation={DOMLocation}>\n <Provider {...ctx}>\n {render(children, {\n [contentRefName]: contentRef,\n active,\n align,\n alignX,\n alignY,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n </Provider>\n </Portal>\n )}\n </>\n )\n}\n\nconst name = `${PKG_NAME}/Overlay` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import component, { type Props } from './component'\nimport OverlayProvider from './context'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nexport type { Props, UseOverlayProps }\n\nexport { useOverlay, OverlayProvider }\n\nexport default component\n","/**\n * Styled text primitive that inherits color, font-weight, and line-height\n * from its parent so it blends seamlessly into any context. Additional\n * styles can be injected via the responsive `extraStyles` prop processed\n * through makeItResponsive.\n */\nimport { config } from '@vitus-labs/core'\nimport { extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\n\nconst { styled, css, textComponent } = config\n\nconst styles: ResponsiveStylesCallback = ({ css, theme: t }) => css`\n ${t.extraStyles && extendCss(t.extraStyles)};\n`\n\nexport default styled(textComponent)`\n color: inherit;\n font-weight: inherit;\n line-height: 1;\n\n ${makeItResponsive({\n key: '$text',\n styles,\n css,\n normalize: false,\n })};\n`\n","/**\n * Text component for rendering inline or block-level text. Supports a\n * `paragraph` shorthand that automatically renders as a `<p>` tag, or\n * a custom `tag` for semantic HTML (h1-h6, span, etc.). Marked with\n * a static `isText` flag so other components can detect text children.\n */\nimport type { HTMLTextTags } from '@vitus-labs/core'\nimport {\n type ForwardRefRenderFunction,\n forwardRef,\n type ReactNode,\n} from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { ExtendCss, VLForwardedComponent } from '~/types'\nimport Styled from './styled'\n\nexport type Props = Partial<{\n /**\n * Label can be used instead of children for inline syntax. But **children** prop takes a precedence\n */\n label: ReactNode\n /**\n * Children to be rendered within **Text** component.\n */\n children: ReactNode\n /**\n * Defines whether should behave as a block text element. Automatically adds **p** HTML tag\n */\n paragraph: boolean\n /**\n * Defines what kind of HTML tag should be rendered\n */\n tag: HTMLTextTags\n /**\n * If an additional styling needs to be added, it can be do so via injecting styles using this property.\n */\n css: ExtendCss\n}>\n\ntype RenderContent = (as?: any) => ReturnType<ForwardRefRenderFunction<Props>>\n\nconst Component: VLForwardedComponent<Props> & {\n isText?: true\n} = forwardRef(({ paragraph, label, children, tag, css, ...props }, ref) => {\n const renderContent: RenderContent = (as = undefined) => (\n <Styled ref={ref} as={as} $text={{ extraStyles: css }} {...props}>\n {children ?? label}\n </Styled>\n )\n\n let finalTag: string | undefined\n\n if (__WEB__) {\n if (paragraph) finalTag = 'p'\n else {\n finalTag = tag\n }\n }\n\n return renderContent(finalTag)\n})\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Text` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\nComponent.isText = true\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Utility wrapper that injects className and/or style props into its\n * children without adding any DOM nodes of its own. Uses the core `render`\n * helper to clone children with the merged props.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Children to be rendered within **Util** component.\n */\n children: ReactNode\n /**\n * Class name(s) to be added to children component.\n */\n className?: string | string[]\n /**\n * Style property to extend children component inline styles\n */\n style?: Record<string, unknown>\n}\n\nconst Component: VLComponent<Props> = ({ children, className, style }) => {\n const mergedClasses = useMemo(\n () => (Array.isArray(className) ? className.join(' ') : className),\n [className],\n )\n\n const finalProps: Record<string, any> = {}\n if (style) finalProps.style = style\n if (mergedClasses) finalProps.className = mergedClasses\n\n return render(children, finalProps)\n}\n\nconst name = `${PKG_NAME}/Util` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["styles","component","Component","Styled","component","styles","component","Component","Styled","component","Component","Wrapper","Content","name","component","Component","component","Component","Iterator","Element","name","component","Component","name","component","context","Provider","Component","Portal","name","component","Component","Styled","name","component","Component","component"],"sources":["../src/constants.ts","../src/utils.ts","../src/helpers/Content/styled.ts","../src/helpers/Content/component.tsx","../src/helpers/Content/index.ts","../src/helpers/Wrapper/styled.ts","../src/helpers/Wrapper/constants.ts","../src/helpers/Wrapper/utils.ts","../src/helpers/Wrapper/component.tsx","../src/helpers/Wrapper/index.ts","../src/Element/constants.ts","../src/Element/utils.ts","../src/Element/component.tsx","../src/Element/withEqualSizeBeforeAfter.tsx","../src/Element/index.ts","../src/helpers/Iterator/component.tsx","../src/helpers/Iterator/index.ts","../src/List/component.tsx","../src/List/withActiveState.tsx","../src/List/index.ts","../src/Portal/component.ts","../src/Portal/index.ts","../src/Overlay/context.tsx","../src/Overlay/useOverlay.tsx","../src/Overlay/component.tsx","../src/Overlay/index.ts","../src/Text/styled.ts","../src/Text/component.tsx","../src/Text/index.ts","../src/Util/component.tsx","../src/Util/index.ts"],"sourcesContent":["export const PKG_NAME = '@vitus-labs/elements' as const\n","export const IS_DEVELOPMENT = process.env.NODE_ENV !== 'production'\n","/**\n * Styled component for content areas (before/content/after). Applies\n * responsive flex alignment, gap spacing between slots based on parent\n * direction (margin-right for inline, margin-bottom for rows), and\n * equalCols flex distribution. The \"content\" slot gets `flex: 1` to\n * fill remaining space between before and after.\n */\nimport { config } from '@vitus-labs/core'\nimport {\n alignContent,\n extendCss,\n makeItResponsive,\n value,\n} from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps, ThemeProps } from './types'\n\nconst { styled, css, component } = config\n\nconst equalColsCSS = `\n flex: 1;\n`\n\nconst typeContentCSS = `\n flex: 1;\n`\n\n// --------------------------------------------------------\n// calculate spacing between before / content / after\n// --------------------------------------------------------\nconst gapDimensions = {\n inline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n reverseInline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n rows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n reverseRows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n} as const\n\nconst calculateGap = ({\n direction,\n type,\n value,\n}: {\n direction: keyof typeof gapDimensions\n type: ThemeProps['contentType']\n value: any\n}) => {\n if (!direction || !type || type === 'content') return undefined\n\n const finalStyles = `${gapDimensions[direction][type]}: ${value};`\n\n return finalStyles\n}\n\n// --------------------------------------------------------\n// calculations of styles to be rendered\n// --------------------------------------------------------\nconst styles: ResponsiveStylesCallback = ({ css, theme: t, rootSize }) => css`\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.equalCols && equalColsCSS};\n\n ${\n t.gap &&\n t.contentType &&\n calculateGap({\n direction: t.parentDirection,\n type: t.contentType,\n value: value(t.gap, rootSize),\n })\n };\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : ''\n\nconst StyledComponent = styled(component)<any>`\n ${platformCSS};\n\n display: flex;\n align-self: stretch;\n flex-wrap: wrap;\n\n ${({ $contentType }: StyledProps) =>\n $contentType === 'content' && typeContentCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n\nexport default StyledComponent\n","/**\n * Memoized content area used inside Element to render one of the three\n * layout slots (before, content, after). Passes alignment, direction,\n * gap, and equalCols styling props to the underlying styled component.\n * Adds a `data-vl-element` attribute in development for debugging.\n */\nimport type { FC } from 'react'\nimport { memo } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props } from './types'\n\nconst Component: FC<Partial<Props>> = ({\n contentType,\n tag,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extendCss,\n ...props\n}) => {\n const debugProps = IS_DEVELOPMENT\n ? {\n 'data-vl-element': contentType,\n }\n : {}\n\n const stylingProps = {\n contentType,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extraStyles: extendCss,\n }\n\n return (\n <Styled\n as={tag}\n $contentType={contentType}\n $element={stylingProps}\n {...debugProps}\n {...props}\n />\n )\n}\n\nexport default memo(Component)\n","import component from './component'\n\nexport default component\n","/**\n * Styled component for the Element wrapper layer. Handles responsive\n * block/inline-flex display, direction, alignment, and custom CSS injection.\n * Includes special handling for the `parentFix` / `childFix` flags that\n * split flex behavior across two DOM nodes for button/fieldset/legend\n * elements where a single flex container is insufficient.\n */\nimport { config } from '@vitus-labs/core'\nimport { alignContent, extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps } from './types'\n\nconst { styled, css, component } = config\n\nconst childFixCSS = `\n display: flex;\n flex: 1;\n width: 100%;\n height: 100%;\n`\n\nconst parentFixCSS = `\n flex-direction: column;\n`\n\nconst parentFixBlockCSS = `\n width: 100%;\n`\n\nconst fullHeightCSS = `\n height: 100%;\n`\n\nconst blockCSS = `\n align-self: stretch;\n`\n\nconst childFixPosition = (isBlock?: boolean) =>\n `display: ${isBlock ? 'flex' : 'inline-flex'};`\n\nconst styles: ResponsiveStylesCallback = ({ theme: t, css }) => css`\n ${__WEB__ && t.alignY === 'block' && fullHeightCSS};\n\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.block && blockCSS};\n\n ${__WEB__ && !t.childFix && childFixPosition(t.block)};\n ${__WEB__ && t.parentFix && t.block && parentFixBlockCSS};\n ${__WEB__ && t.parentFix && parentFixCSS};\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : `display: flex;`\n\nexport default styled(component)<any>`\n position: relative;\n ${platformCSS};\n\n ${({ $childFix }: StyledProps) => $childFix && childFixCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n","/**\n * HTML elements that need a two-layer DOM workaround because browsers do not\n * fully support flexbox layout on button, fieldset, and legend elements.\n * @see https://stackoverflow.com/questions/35464067/flexbox-not-working-on-button-or-fieldset-elements\n */\nexport const INLINE_ELEMENTS_FLEX_FIX = {\n button: true,\n fieldset: true,\n legend: true,\n}\n","import { INLINE_ELEMENTS_FLEX_FIX } from './constants'\n\ntype IsWebFixNeeded = (tag?: string) => boolean\nexport const isWebFixNeeded: IsWebFixNeeded = (tag) => {\n if (tag && tag in INLINE_ELEMENTS_FLEX_FIX) return true\n return false\n}\n","/**\n * Wrapper component that serves as the outermost styled container for Element.\n * Uses forwardRef for ref forwarding to the underlying DOM node. On web, it\n * detects button/fieldset/legend tags and applies a two-layer flex fix\n * (parent + child Styled) because these HTML elements do not natively\n * support `display: flex` consistently across browsers.\n */\nimport { forwardRef } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props, Reference } from './types'\nimport { isWebFixNeeded } from './utils'\n\nconst DEV_PROPS: Record<string, string> = IS_DEVELOPMENT\n ? { 'data-vl-element': 'Element' }\n : {}\n\nconst Component = forwardRef<Reference, Partial<Props>>(\n (\n {\n children,\n tag,\n block,\n extendCss,\n direction,\n alignX,\n alignY,\n equalCols,\n isInline,\n ...props\n },\n ref,\n ) => {\n const COMMON_PROPS = {\n ...props,\n ...DEV_PROPS,\n ref,\n as: tag,\n }\n\n const needsFix = __WEB__\n ? !props.dangerouslySetInnerHTML && isWebFixNeeded(tag)\n : false\n\n if (!needsFix || __NATIVE__) {\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n block,\n direction,\n alignX,\n alignY,\n equalCols,\n extraStyles: extendCss,\n }}\n >\n {children}\n </Styled>\n )\n }\n\n const asTag = __WEB__ ? (isInline ? 'span' : 'div') : undefined\n\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n parentFix: true,\n block,\n extraStyles: extendCss,\n }}\n >\n <Styled\n as={asTag}\n $childFix\n $element={{\n childFix: true,\n direction,\n alignX,\n alignY,\n equalCols,\n }}\n >\n {children}\n </Styled>\n </Styled>\n )\n },\n)\n\nexport default Component\n","import component from './component'\n\nexport default component\n","/** Props consumed by Element that should not be forwarded to the underlying DOM node. */\nexport const RESERVED_PROPS = [\n 'innerRef',\n 'tag',\n 'block',\n 'label',\n 'children',\n 'beforeContent',\n 'afterContent',\n\n 'equalCols',\n 'vertical',\n 'direction',\n 'alignX',\n 'alignY',\n\n 'css',\n 'contentCss',\n 'beforeContentCss',\n 'afterContentCss',\n\n 'contentDirection',\n 'contentAlignX',\n 'contentAlignY',\n\n 'beforeContentDirection',\n 'beforeContentAlignX',\n 'beforeContentAlignY',\n\n 'afterContentDirection',\n 'afterContentAlignX',\n 'afterContentAlignY',\n] as const\n\n/**\n * HTML tags that are inline-level by default. When Element renders one of\n * these tags, child Content wrappers use `span` instead of `div` to\n * preserve valid HTML nesting.\n */\nexport const INLINE_ELEMENTS = {\n span: true,\n a: true,\n button: true,\n input: true,\n label: true,\n select: true,\n textarea: true,\n br: true,\n img: true,\n strong: true,\n small: true,\n code: true,\n b: true,\n big: true,\n i: true,\n tt: true,\n abbr: true,\n acronym: true,\n cite: true,\n dfn: true,\n em: true,\n kbd: true,\n samp: true,\n var: true,\n bdo: true,\n map: true,\n object: true,\n q: true,\n script: true,\n sub: true,\n sup: true,\n}\n\n/**\n * HTML void/self-closing elements that cannot have children. When Element\n * detects one of these tags, it skips rendering beforeContent/content/afterContent\n * and returns the Wrapper alone.\n */\nexport const EMPTY_ELEMENTS = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n textarea: true,\n // 'meta': true,\n // 'param': true,\n source: true,\n track: true,\n wbr: true,\n}\n","import { EMPTY_ELEMENTS, INLINE_ELEMENTS } from './constants'\n\ntype GetValue = (tag?: string) => boolean\n\n/** Checks whether the given HTML tag is an inline-level element, used to determine sub-tag nesting. */\nexport const isInlineElement: GetValue = (tag) => {\n if (tag && tag in INLINE_ELEMENTS) return true\n return false\n}\n\n/** Checks whether the given HTML tag is a void element that cannot have children. */\nexport const getShouldBeEmpty: GetValue = (tag) => {\n if (tag && tag in EMPTY_ELEMENTS) return true\n return false\n}\n","/**\n * Core building block of the elements package. Renders a three-section layout\n * (beforeContent / content / afterContent) inside a flex Wrapper. When only\n * content is present, the Wrapper inherits content-level alignment directly\n * to avoid an unnecessary nesting layer. Handles HTML-specific edge cases\n * like void elements (input, img) and inline elements (span, a) by\n * skipping children or switching sub-tags accordingly.\n */\nimport { render } from '@vitus-labs/core'\nimport { forwardRef, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport { Content, Wrapper } from '~/helpers'\nimport type { VLElement } from './types'\nimport { getShouldBeEmpty, isInlineElement } from './utils'\n\nconst defaultDirection = 'inline'\nconst defaultContentDirection = 'rows'\nconst defaultAlignX = 'left'\nconst defaultAlignY = 'center'\n\nconst Component: VLElement = forwardRef(\n (\n {\n innerRef,\n tag,\n label,\n content,\n children,\n beforeContent,\n afterContent,\n\n block,\n equalCols,\n gap,\n\n direction,\n alignX = defaultAlignX,\n alignY = defaultAlignY,\n\n css,\n contentCss,\n beforeContentCss,\n afterContentCss,\n\n contentDirection = defaultContentDirection,\n contentAlignX = defaultAlignX,\n contentAlignY = defaultAlignY,\n\n beforeContentDirection = defaultDirection,\n beforeContentAlignX = defaultAlignX,\n beforeContentAlignY = defaultAlignY,\n\n afterContentDirection = defaultDirection,\n afterContentAlignX = defaultAlignX,\n afterContentAlignY = defaultAlignY,\n\n ...props\n },\n ref,\n ) => {\n // --------------------------------------------------------\n // check if should render only single element\n // --------------------------------------------------------\n const shouldBeEmpty = __WEB__\n ? !!props.dangerouslySetInnerHTML || getShouldBeEmpty(tag)\n : false\n\n // --------------------------------------------------------\n // if not single element, calculate values\n // --------------------------------------------------------\n const isSimpleElement = !beforeContent && !afterContent\n const CHILDREN = children ?? content ?? label\n\n const isInline = __WEB__ ? isInlineElement(tag) : false\n const SUB_TAG = __WEB__ && isInline ? 'span' : undefined\n\n // --------------------------------------------------------\n // direction & alignX & alignY calculations\n // --------------------------------------------------------\n const { wrapperDirection, wrapperAlignX, wrapperAlignY } = useMemo(() => {\n let wrapperDirection: typeof direction = direction\n let wrapperAlignX: typeof alignX = alignX\n let wrapperAlignY: typeof alignY = alignY\n\n if (isSimpleElement) {\n if (contentDirection) wrapperDirection = contentDirection\n if (contentAlignX) wrapperAlignX = contentAlignX\n if (contentAlignY) wrapperAlignY = contentAlignY\n } else if (direction) {\n wrapperDirection = direction\n } else {\n wrapperDirection = defaultDirection\n }\n\n return { wrapperDirection, wrapperAlignX, wrapperAlignY }\n }, [\n isSimpleElement,\n contentDirection,\n contentAlignX,\n contentAlignY,\n alignX,\n alignY,\n direction,\n ])\n\n // --------------------------------------------------------\n // common wrapper props\n // --------------------------------------------------------\n const WRAPPER_PROPS = {\n ref: ref ?? innerRef,\n extendCss: css,\n tag,\n block,\n direction: wrapperDirection,\n alignX: wrapperAlignX,\n alignY: wrapperAlignY,\n as: undefined, // reset styled-components `as` prop\n }\n\n // --------------------------------------------------------\n // return simple/empty element like input or image etc.\n // --------------------------------------------------------\n if (shouldBeEmpty) {\n return <Wrapper {...props} {...WRAPPER_PROPS} />\n }\n\n const contentRenderOutput = render(CHILDREN)\n\n return (\n <Wrapper {...props} {...WRAPPER_PROPS} isInline={isInline}>\n {beforeContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"before\"\n parentDirection={wrapperDirection}\n extendCss={beforeContentCss}\n direction={beforeContentDirection}\n alignX={beforeContentAlignX}\n alignY={beforeContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(beforeContent)}\n </Content>\n )}\n\n {isSimpleElement ? (\n contentRenderOutput\n ) : (\n <Content\n tag={SUB_TAG}\n contentType=\"content\"\n parentDirection={wrapperDirection}\n extendCss={contentCss}\n direction={contentDirection}\n alignX={contentAlignX}\n alignY={contentAlignY}\n equalCols={equalCols}\n >\n {contentRenderOutput}\n </Content>\n )}\n\n {afterContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"after\"\n parentDirection={wrapperDirection}\n extendCss={afterContentCss}\n direction={afterContentDirection}\n alignX={afterContentAlignX}\n alignY={afterContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(afterContent)}\n </Content>\n )}\n </Wrapper>\n )\n },\n)\n\nconst name = `${PKG_NAME}/Element` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that equalizes the dimensions of beforeContent and afterContent areas.\n * After render, it measures both DOM nodes via useLayoutEffect and sets the\n * larger dimension on both so they match. Uses width for inline direction\n * and height for rows direction. This is useful for centering the main\n * content when before/after slots have different intrinsic sizes.\n */\nimport { type Ref, useImperativeHandle, useLayoutEffect, useRef } from 'react'\nimport type { Props as ElementProps } from './types'\n\nconst types = {\n height: 'offsetHeight',\n width: 'offsetWidth',\n} as const\n\ntype DimensionType = keyof typeof types\n\nconst equalize = (\n beforeEl: HTMLElement,\n afterEl: HTMLElement,\n type: DimensionType,\n) => {\n const prop = types[type]\n const beforeSize = beforeEl[prop]\n const afterSize = afterEl[prop]\n\n if (Number.isInteger(beforeSize) && Number.isInteger(afterSize)) {\n const maxSize = `${Math.max(beforeSize, afterSize)}px`\n beforeEl.style[type] = maxSize\n afterEl.style[type] = maxSize\n }\n}\n\ntype Props = ElementProps &\n Partial<{\n equalBeforeAfter: boolean\n ref: Ref<HTMLElement>\n }>\n\nconst withEqualBeforeAfter = (WrappedComponent: any) => {\n const displayName =\n WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\n\n const Enhanced = ({\n equalBeforeAfter,\n direction,\n afterContent,\n beforeContent,\n ref,\n ...rest\n }: Props) => {\n const internalRef = useRef<HTMLElement>(null)\n\n useImperativeHandle(ref, () => internalRef.current as HTMLElement)\n\n useLayoutEffect(() => {\n if (!equalBeforeAfter || !beforeContent || !afterContent) return\n if (!internalRef.current) return\n\n const el = internalRef.current\n const beforeEl = el.firstElementChild as HTMLElement | null\n const afterEl = el.lastElementChild as HTMLElement | null\n\n if (beforeEl && afterEl && beforeEl !== afterEl) {\n equalize(beforeEl, afterEl, direction === 'rows' ? 'height' : 'width')\n }\n })\n\n return (\n <WrappedComponent\n {...rest}\n afterContent={afterContent}\n beforeContent={beforeContent}\n ref={internalRef}\n />\n )\n }\n\n Enhanced.displayName = `withEqualSizeBeforeAfter(${displayName})`\n\n return Enhanced\n}\n\nexport default withEqualBeforeAfter\n","import component from './component'\nimport type { Props, VLElement } from './types'\nimport withEqualSizeBeforeAfter from './withEqualSizeBeforeAfter'\n\nexport { withEqualSizeBeforeAfter }\nexport type { Props, VLElement }\n\nexport default component\n","/**\n * Data-driven list renderer that supports three input modes: React children\n * (including fragments), an array of primitives, or an array of objects.\n * Each item receives positional metadata (first, last, odd, even, position)\n * and optional injected props via `itemProps`. Items can be individually\n * wrapped with `wrapComponent`. Children always take priority over the\n * component+data prop pattern.\n */\nimport { isEmpty, render } from '@vitus-labs/core'\nimport {\n Children,\n type FC,\n type ReactElement,\n type ReactNode,\n useCallback,\n useMemo,\n} from 'react'\nimport { isFragment } from 'react-is'\nimport type { ExtendedProps, ObjectValue, Props, SimpleValue } from './types'\n\ntype ClassifiedData =\n | { type: 'simple'; data: SimpleValue[] }\n | { type: 'complex'; data: ObjectValue[] }\n | null\n\nconst classifyData = (data: unknown[]): ClassifiedData => {\n const items = data.filter(\n (item) =>\n item != null && !(typeof item === 'object' && isEmpty(item as any)),\n )\n\n if (items.length === 0) return null\n\n let isSimple = true\n let isComplex = true\n\n for (const item of items) {\n if (typeof item === 'string' || typeof item === 'number') {\n isComplex = false\n } else if (typeof item === 'object') {\n isSimple = false\n } else {\n isSimple = false\n isComplex = false\n }\n }\n\n if (isSimple) return { type: 'simple', data: items as SimpleValue[] }\n if (isComplex) return { type: 'complex', data: items as ObjectValue[] }\n return null\n}\n\nconst RESERVED_PROPS = [\n 'children',\n 'component',\n 'wrapComponent',\n 'data',\n 'itemKey',\n 'valueName',\n 'itemProps',\n 'wrapProps',\n] as const\n\ntype AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => ExtendedProps\n\nconst attachItemProps: AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => {\n const position = i + 1\n\n return {\n index: i,\n first: position === 1,\n last: position === length,\n odd: position % 2 === 1,\n even: position % 2 === 0,\n position,\n }\n}\n\ntype Static = {\n isIterator: true\n RESERVED_PROPS: typeof RESERVED_PROPS\n}\n\nconst Component: FC<Props> & Static = (props) => {\n const {\n itemKey,\n valueName,\n children,\n component,\n data,\n wrapComponent: Wrapper,\n wrapProps,\n itemProps,\n } = props\n\n const injectItemProps = useMemo(\n () => (typeof itemProps === 'function' ? itemProps : () => itemProps),\n [itemProps],\n )\n\n const injectWrapItemProps = useMemo(\n () => (typeof wrapProps === 'function' ? wrapProps : () => wrapProps),\n [wrapProps],\n )\n\n const getKey = useCallback(\n (item: string | number, index: number) => {\n if (typeof itemKey === 'function') return itemKey(item, index)\n\n return index\n },\n [itemKey],\n )\n\n const renderChild = (child: ReactNode, total = 1, i = 0) => {\n if (!itemProps && !Wrapper) return child\n\n const extendedProps = attachItemProps({\n i,\n length: total,\n })\n\n const finalItemProps = itemProps ? injectItemProps({}, extendedProps) : {}\n\n // if no props extension is required, just return children\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({}, extendedProps)\n : {}\n\n return (\n <Wrapper key={i} {...finalWrapProps}>\n {render(child, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(child, {\n key: i,\n ...finalItemProps,\n })\n }\n\n // --------------------------------------------------------\n // render children\n // --------------------------------------------------------\n const renderChildren = () => {\n if (!children) return null\n\n // if children is Array\n if (Array.isArray(children)) {\n return Children.map(children, (item, i) =>\n renderChild(item, children.length, i),\n )\n }\n\n // if children is Fragment\n if (isFragment(children)) {\n const fragmentChildren = (\n children as ReactElement<{ children: ReactNode[] }>\n ).props.children\n const childrenLength = fragmentChildren.length\n\n return fragmentChildren.map((item, i) =>\n renderChild(item, childrenLength, i),\n )\n }\n\n // if single child\n return renderChild(children)\n }\n\n // --------------------------------------------------------\n // render array of strings or numbers\n // --------------------------------------------------------\n const renderSimpleArray = (data: SimpleValue[]) => {\n const { length } = data\n\n // if the data array is empty\n if (length === 0) return null\n\n return data.map((item, i) => {\n const key = getKey(item, i)\n const keyName = valueName ?? 'children'\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps\n ? injectItemProps({ [keyName]: item }, extendedProps)\n : {}),\n [keyName]: item,\n }\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({ [keyName]: item }, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(component, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(component, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render array of objects\n // --------------------------------------------------------\n const getObjectKey = (item: ObjectValue, index: number) => {\n if (!itemKey) return item.key ?? item.id ?? item.itemId ?? index\n if (typeof itemKey === 'function') return itemKey(item, index)\n if (typeof itemKey === 'string') return item[itemKey]\n\n return index\n }\n\n const renderComplexArray = (data: ObjectValue[]) => {\n const { length } = data\n\n if (length === 0) return null\n\n return data.map((item, i) => {\n const { component: itemComponent, ...restItem } = item\n const renderItem = itemComponent ?? component\n const key = getObjectKey(restItem, i)\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps ? injectItemProps(item, extendedProps) : {}),\n ...restItem,\n }\n\n if (Wrapper && !itemComponent) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps(item, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(renderItem, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(renderItem, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render list items\n // --------------------------------------------------------\n const renderItems = () => {\n // --------------------------------------------------------\n // children have priority over props component + data\n // --------------------------------------------------------\n if (children) return renderChildren()\n\n // --------------------------------------------------------\n // render props component + data\n // single pass: filter nullish/empty and determine array type\n // --------------------------------------------------------\n if (component && Array.isArray(data)) {\n const classified = classifyData(data)\n if (!classified) return null\n if (classified.type === 'simple')\n return renderSimpleArray(classified.data)\n return renderComplexArray(classified.data)\n }\n\n // --------------------------------------------------------\n // if there are no children or valid react component and data as an array,\n // return null to prevent error\n // --------------------------------------------------------\n return null\n }\n\n return renderItems()\n}\n\nComponent.isIterator = true\nComponent.RESERVED_PROPS = RESERVED_PROPS\n\nexport default Component\n","import component from './component'\nimport type {\n ElementType,\n ExtendedProps,\n ObjectValue,\n Props,\n PropsCallback,\n} from './types'\n\nexport type { Props, PropsCallback, ObjectValue, ExtendedProps, ElementType }\n\nexport default component\n","/**\n * List component that combines Iterator (data-driven rendering) with an\n * optional Element root wrapper. When `rootElement` is false (default),\n * it renders a bare Iterator as a fragment. When true, the Iterator output\n * is wrapped in an Element that receives all non-iterator props (e.g.,\n * layout, alignment, css), allowing the list to be styled as a single block.\n */\nimport { omit, pick } from '@vitus-labs/core'\nimport { forwardRef } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLElement } from '~/Element'\nimport Element from '~/Element'\nimport type { Props as IteratorProps } from '~/helpers/Iterator'\nimport Iterator from '~/helpers/Iterator'\nimport type { MergeTypes } from '~/types'\n\ntype ListProps = {\n /**\n * A boolean value. When set to `false`, component returns `React.Fragment`\n * When set to `true`, component returns as the **root** element `Element`\n * component.\n */\n rootElement?: boolean\n /**\n * Label prop from `Element` component is being ignored.\n */\n label: never\n /**\n * Content prop from `Element` component is being ignored.\n */\n content: never\n}\n\nexport type Props = MergeTypes<[IteratorProps, ListProps]>\n\nconst Component: VLElement<Props> = forwardRef(\n ({ rootElement = false, ...props }, ref) => {\n const renderedList = <Iterator {...pick(props, Iterator.RESERVED_PROPS)} />\n\n if (!rootElement) return renderedList\n\n return (\n <Element ref={ref} {...omit(props, Iterator.RESERVED_PROPS)}>\n {renderedList}\n </Element>\n )\n },\n)\n\nconst name = `${PKG_NAME}/List` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that adds single or multi selection state management to a list component.\n * Tracks which items are active via a scalar key (single mode) or a Map of\n * key-to-boolean entries (multi mode). Injects `itemProps` callback that\n * provides each item with `active`, `handleItemActive`, `toggleItemActive`,\n * and other selection helpers. Supports `activeItemRequired` to prevent\n * deselecting the last active item.\n */\n// @ts-nocheck\nimport { useEffect, useState } from 'react'\nimport type { SimpleHoc } from '~/types'\n\nconst RESERVED_KEYS = [\n 'type',\n 'activeItems',\n 'itemProps',\n 'activeItemRequired',\n] as const\n\ntype Key = string | number\ntype MultipleMap = Map<Key, boolean>\n\ninterface ItemPropsData {\n key: Key\n first: boolean\n last: boolean\n odd: boolean\n even: boolean\n position: number\n}\n\ninterface Props {\n type?: 'single' | 'multi'\n activeItemRequired?: boolean\n activeItems?: Key | (string | number)[]\n itemProps?:\n | Record<string, unknown>\n | ((props: Record<string, unknown>) => Record<string, unknown>)\n}\n\nconst component: SimpleHoc<Props> = (WrappedComponent) => {\n const displayName =\n WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n const Enhanced = (props: Props) => {\n const {\n type = 'single',\n activeItemRequired,\n activeItems,\n itemProps = {},\n ...rest\n } = props\n\n type InitActiveItems = () => Key | MultipleMap | undefined\n const initActiveItems: InitActiveItems = () => {\n if (type === 'single') {\n if (!Array.isArray(activeItems)) {\n return activeItems\n }\n } else if (type === 'multi') {\n const activeItemsHelper = Array.isArray(activeItems)\n ? activeItems\n : [activeItems]\n\n return new Map(activeItemsHelper.map((id) => [id, true]))\n }\n\n return undefined\n }\n\n const [innerActiveItems, setActiveItems] = useState(initActiveItems())\n\n const countActiveItems = (data) => {\n let result = 0\n\n data.forEach((value) => {\n if (value) result += 1\n })\n\n return result\n }\n\n const updateItemState = (key: Key) => {\n if (type === 'single') {\n setActiveItems((prevState) => {\n if (activeItemRequired) return key\n if (prevState === key) return undefined\n\n return key\n })\n } else if (type === 'multi') {\n setActiveItems((prevState: MultipleMap) => {\n // TODO: add conditional type to fix this\n const activeItems = new Map(prevState)\n\n if (\n activeItemRequired &&\n activeItems.get(key) &&\n countActiveItems(activeItems) === 1\n ) {\n return activeItems\n }\n\n activeItems.set(key, !activeItems.get(key))\n return activeItems\n })\n } else {\n setActiveItems(undefined)\n }\n }\n\n const handleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const updateAllItemsState = (status) => {\n if (!status) {\n setActiveItems(new Map())\n }\n }\n\n const setItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const unsetItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const toggleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n // const setAllItemsActive = () => {\n // updateAllItemsState(true)\n // }\n\n const unsetAllItemsActive = () => {\n updateAllItemsState(false)\n }\n\n const isItemActive = (key: Key): boolean => {\n if (!innerActiveItems) return false\n if (type === 'single') return innerActiveItems === key\n if (type === 'multi' && innerActiveItems instanceof Map) {\n return !!innerActiveItems.get(key)\n }\n return false\n }\n\n const attachMultipleProps = {\n unsetAllItemsActive,\n }\n\n const attachItemProps = (props: ItemPropsData) => {\n const { key } = props\n\n const defaultItemProps =\n typeof itemProps === 'object' ? itemProps : itemProps(props)\n\n const result = {\n ...defaultItemProps,\n active: isItemActive(key),\n handleItemActive: () => handleItemActive(key),\n setItemActive,\n unsetItemActive,\n toggleItemActive,\n ...(type === 'multi' ? attachMultipleProps : {}),\n }\n\n return result\n }\n\n useEffect(() => {\n if (type === 'single' && Array.isArray(activeItems)) {\n if (process.env.NODE_ENV !== 'production') {\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(\n '[@vitus-labs/elements] List/withActiveState: ' +\n '`activeItems` was passed as an array but `type` is \"single\". ' +\n 'In single selection mode, `activeItems` should be a single key (string | number). ' +\n 'The array value will be ignored.',\n )\n }\n }\n }, [type, activeItems])\n\n return <WrappedComponent {...rest} itemProps={attachItemProps} />\n }\n Enhanced.RESERVED_KEYS = RESERVED_KEYS\n Enhanced.displayName = `@vitus-labs/elements/List/withActiveState(${displayName})`\n\n return Enhanced\n}\n\nexport default component\n","import type { Props } from './component'\nimport component from './component'\nimport withActiveState from './withActiveState'\n\nexport type { Props }\nexport { withActiveState }\n\nexport default component\n","/**\n * Portal component that creates a new DOM element on mount, appends it to\n * the target location (defaults to document.body), and uses React's\n * createPortal to render children into it. The DOM element is cleaned up\n * on unmount. Accepts a custom DOMLocation for rendering into specific\n * containers (e.g., a modal root).\n */\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n */\n DOMLocation?: HTMLElement\n /**\n * Children to be rendered within **Portal** component.\n */\n children: ReactNode\n /**\n * Valid HTML Tag\n */\n tag?: string\n}\n\nconst Component: VLComponent<Props> = ({\n DOMLocation,\n tag = 'div',\n children,\n}: Props) => {\n const [element, setElement] = useState<HTMLElement>()\n\n useEffect(() => {\n if (!tag) return undefined\n\n const position = DOMLocation ?? document.body\n const element = document.createElement(tag)\n setElement(element)\n\n position.appendChild(element)\n\n return () => {\n position.removeChild(element)\n }\n }, [tag, DOMLocation])\n\n if (!tag || !element) return null\n\n return createPortal(children, element)\n}\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Portal` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Context for nested overlay coordination. When a child overlay opens, it\n * sets the parent's blocked state to true, preventing the parent from\n * closing in response to click/hover events that belong to the child.\n */\nimport {\n createContext,\n type FC,\n type ReactNode,\n useContext,\n useMemo,\n} from 'react'\n\nexport interface Context {\n blocked: boolean\n setBlocked: () => void\n setUnblocked: () => void\n}\n\nconst context = createContext<Context>({} as Context)\n\nconst { Provider } = context\n\nexport const useOverlayContext = () => useContext(context)\n\nconst Component: FC<Context & { children: ReactNode }> = ({\n children,\n blocked,\n setBlocked,\n setUnblocked,\n}) => {\n const ctx = useMemo(\n () => ({\n blocked,\n setBlocked,\n setUnblocked,\n }),\n [blocked, setBlocked, setUnblocked],\n )\n\n return <Provider value={ctx}>{children}</Provider>\n}\n\nexport default Component\n","/**\n * Core hook powering the Overlay component. Manages open/close state, DOM\n * event listeners (click, hover, scroll, resize, ESC key), and dynamic\n * positioning of overlay content relative to its trigger. Supports dropdown,\n * tooltip, popover, and modal types with automatic edge-of-viewport flipping.\n * Event handlers are throttled for performance, and nested overlay blocking\n * is coordinated through the overlay context.\n */\nimport { context, throttle } from '@vitus-labs/core'\nimport { value } from '@vitus-labs/unistyle'\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Provider, { useOverlayContext } from './context'\n\ntype OverlayPosition = Partial<{\n top: number | string\n bottom: number | string\n left: number | string\n right: number | string\n}>\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\nexport type UseOverlayProps = Partial<{\n /**\n * Defines default state whether **Overlay** component should be active.\n * @defaultValue `false`\n */\n isOpen: boolean\n /**\n * Defines `event` when **Overlay** is supposed to be open.\n *\n * When `manual` is set, callbacks needs to be applied to make it working.\n * @defaultValue `click`\n */\n openOn: 'click' | 'hover' | 'manual'\n /**\n * Defines `event` when **Overlay** is supposed to be closed.\n * @defaultValue `click`\n */\n closeOn:\n | 'click'\n | 'clickOnTrigger'\n | 'clickOutsideContent'\n | 'hover'\n | 'manual'\n\n /**\n * Defines what type of **Overlay** will be created. Type `modal`\n * has different positioning calculations than others.\n * @defaultValue `dropdown`\n */\n type: 'dropdown' | 'tooltip' | 'popover' | 'modal' | 'custom'\n /**\n * Defines how `content` is treated regarding CSS positioning.\n * @defaultValue `fixed`\n */\n position: 'absolute' | 'fixed' | 'relative' | 'static'\n /**\n * Defines from which side is `content` aligned to `trigger` (top, left, bottom, right).\n * For more specific alignment configuration can be used `alignX` and/or `alignY` prop.\n * @defaultValue `bottom`\n */\n align: Align\n /**\n * Defines how `content` is aligned to `trigger` on axis X\n * @defaultValue `left`\n */\n alignX: AlignX\n /**\n * Defines how `content` is aligned to `trigger` on axis Y\n * @defaultValue `bottom`\n */\n alignY: AlignY\n /**\n * Defines `margin` from trigger on axis X.\n * @defaultValue `0`\n */\n offsetX: number\n /**\n * Defines `margin` from trigger on axis Y.\n * @defaultValue `0`\n */\n offsetY: number\n /**\n * Performance helper. Value defined in milliseconds for `throttling`\n * recalculations\n * @defaultValue `200`\n */\n throttleDelay: number\n /**\n * A valid HTML element. Prop can be used for ability to handle properly\n * scrolling inside custom scrollable HTML element.\n */\n parentContainer: HTMLElement | null\n /**\n * Defines whether active **Overlay** is supposed to be closed on pressing\n * `ESC` key.\n * @defaultValue `true`\n */\n closeOnEsc: boolean\n /**\n * When set to `true`, **Overlay** is automatically closed and is blocked for\n * being opened.\n */\n disabled: boolean\n /**\n * A callback hook to be called when **Overlay** is being opened. Does not\n * accept any arguments.\n */\n onOpen: () => void\n /**\n * A callback hook to be called when **Overlay** is being closed. Does not\n * accept any arguments.\n */\n onClose: () => void\n}>\n\ntype PositionResult = {\n pos: OverlayPosition\n resolvedAlignX: AlignX\n resolvedAlignY: AlignY\n}\n\nconst sel = <T,>(cond: boolean, a: T, b: T): T => (cond ? a : b)\n\nconst devWarn = (msg: string) => {\n if (!IS_DEVELOPMENT) return\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(msg)\n}\n\nconst calcDropdownVertical = (\n c: DOMRect,\n t: DOMRect,\n align: 'top' | 'bottom',\n alignX: AlignX,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const topPos = t.top - offsetY - c.height\n const bottomPos = t.bottom + offsetY\n const leftPos = t.left + offsetX\n const rightPos = t.right - offsetX - c.width\n\n const fitsTop = topPos >= 0\n const fitsBottom = bottomPos + c.height <= window.innerHeight\n const fitsLeft = leftPos + c.width <= window.innerWidth\n const fitsRight = rightPos >= 0\n\n const useTop = sel(align === 'top', fitsTop, !fitsBottom)\n pos.top = sel(useTop, topPos, bottomPos)\n const resolvedAlignY: AlignY = sel(useTop, 'top', 'bottom')\n\n let resolvedAlignX: AlignX = alignX\n if (alignX === 'left') {\n pos.left = sel(fitsLeft, leftPos, rightPos)\n resolvedAlignX = sel(fitsLeft, 'left', 'right')\n } else if (alignX === 'right') {\n pos.left = sel(fitsRight, rightPos, leftPos)\n resolvedAlignX = sel(fitsRight, 'right', 'left')\n } else {\n const center = t.left + (t.right - t.left) / 2 - c.width / 2\n const fitsCL = center >= 0\n const fitsCR = center + c.width <= window.innerWidth\n\n if (fitsCL && fitsCR) {\n resolvedAlignX = 'center'\n pos.left = center\n } else if (fitsCL) {\n resolvedAlignX = 'left'\n pos.left = leftPos\n } else if (fitsCR) {\n resolvedAlignX = 'right'\n pos.left = rightPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcDropdownHorizontal = (\n c: DOMRect,\n t: DOMRect,\n align: 'left' | 'right',\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const leftPos = t.left - offsetX - c.width\n const rightPos = t.right + offsetX\n const topPos = t.top + offsetY\n const bottomPos = t.bottom - offsetY - c.height\n\n const fitsLeft = leftPos >= 0\n const fitsRight = rightPos + c.width <= window.innerWidth\n const fitsTop = topPos + c.height <= window.innerHeight\n const fitsBottom = bottomPos >= 0\n\n const useLeft = sel(align === 'left', fitsLeft, !fitsRight)\n pos.left = sel(useLeft, leftPos, rightPos)\n const resolvedAlignX: AlignX = sel(useLeft, 'left', 'right')\n\n let resolvedAlignY: AlignY = alignY\n if (alignY === 'top') {\n pos.top = sel(fitsTop, topPos, bottomPos)\n resolvedAlignY = sel(fitsTop, 'top', 'bottom')\n } else if (alignY === 'bottom') {\n pos.top = sel(fitsBottom, bottomPos, topPos)\n resolvedAlignY = sel(fitsBottom, 'bottom', 'top')\n } else {\n const center = t.top + (t.bottom - t.top) / 2 - c.height / 2\n const fitsCT = center >= 0\n const fitsCB = center + c.height <= window.innerHeight\n\n if (fitsCT && fitsCB) {\n resolvedAlignY = 'center'\n pos.top = center\n } else if (fitsCT) {\n resolvedAlignY = 'top'\n pos.top = topPos\n } else if (fitsCB) {\n resolvedAlignY = 'bottom'\n pos.top = bottomPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcModalPos = (\n c: DOMRect,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): OverlayPosition => {\n const pos: OverlayPosition = {}\n\n switch (alignX) {\n case 'right':\n pos.right = offsetX\n break\n case 'left':\n pos.left = offsetX\n break\n case 'center':\n pos.left = window.innerWidth / 2 - c.width / 2\n break\n default:\n pos.right = offsetX\n }\n\n switch (alignY) {\n case 'top':\n pos.top = offsetY\n break\n case 'center':\n pos.top = window.innerHeight / 2 - c.height / 2\n break\n case 'bottom':\n pos.bottom = offsetY\n break\n default:\n pos.top = offsetY\n }\n\n return pos\n}\n\nconst adjustForAncestor = (\n pos: OverlayPosition,\n ancestor: { top: number; left: number },\n): OverlayPosition => {\n if (ancestor.top === 0 && ancestor.left === 0) return pos\n\n const result = { ...pos }\n if (typeof result.top === 'number') result.top -= ancestor.top\n if (typeof result.bottom === 'number') result.bottom += ancestor.top\n if (typeof result.left === 'number') result.left -= ancestor.left\n if (typeof result.right === 'number') result.right += ancestor.left\n\n return result\n}\n\ntype ComputeResult = {\n pos: OverlayPosition\n resolvedAlignX?: AlignX\n resolvedAlignY?: AlignY\n}\n\nconst computePosition = (\n type: string,\n align: Align,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n triggerEl: HTMLElement | null,\n contentEl: HTMLElement | null,\n ancestorOffset: { top: number; left: number },\n): ComputeResult => {\n const isDropdown = ['dropdown', 'tooltip', 'popover'].includes(type)\n\n if (isDropdown && (!triggerEl || !contentEl)) {\n devWarn(\n `[@vitus-labs/elements] Overlay (${type}): ` +\n `${triggerEl ? 'contentRef' : 'triggerRef'} is not attached. ` +\n 'Position cannot be calculated without both refs.',\n )\n return { pos: {} }\n }\n\n if (isDropdown && triggerEl && contentEl) {\n const c = contentEl.getBoundingClientRect()\n const t = triggerEl.getBoundingClientRect()\n const result =\n align === 'top' || align === 'bottom'\n ? calcDropdownVertical(c, t, align, alignX, offsetX, offsetY)\n : calcDropdownHorizontal(\n c,\n t,\n align as 'left' | 'right',\n alignY,\n offsetX,\n offsetY,\n )\n\n return {\n pos: adjustForAncestor(result.pos, ancestorOffset),\n resolvedAlignX: result.resolvedAlignX,\n resolvedAlignY: result.resolvedAlignY,\n }\n }\n\n if (type === 'modal') {\n if (!contentEl) {\n devWarn(\n '[@vitus-labs/elements] Overlay (modal): contentRef is not attached. ' +\n 'Modal position cannot be calculated without a content element.',\n )\n return { pos: {} }\n }\n const c = contentEl.getBoundingClientRect()\n return {\n pos: adjustForAncestor(\n calcModalPos(c, alignX, alignY, offsetX, offsetY),\n ancestorOffset,\n ),\n }\n }\n\n return { pos: {} }\n}\n\nconst processVisibilityEvent = (\n e: Event,\n active: boolean,\n openOn: string,\n closeOn: string,\n isTrigger: (e: Event) => boolean,\n isContent: (e: Event) => boolean,\n showContent: () => void,\n hideContent: () => void,\n) => {\n // Open on click (hover is handled by dedicated mouseenter/mouseleave)\n if (!active && openOn === 'click' && e.type === 'click' && isTrigger(e)) {\n showContent()\n return\n }\n\n if (!active) return\n\n // Close handlers\n if (closeOn === 'hover' && e.type === 'scroll') {\n hideContent()\n return\n }\n\n if (e.type !== 'click') return\n\n if (closeOn === 'click') {\n hideContent()\n } else if (closeOn === 'clickOnTrigger' && isTrigger(e)) {\n hideContent()\n } else if (closeOn === 'clickOutsideContent' && !isContent(e)) {\n hideContent()\n }\n}\n\nconst useOverlay = ({\n isOpen = false,\n openOn = 'click', // click | hover\n closeOn = 'click', // click | 'clickOnTrigger' | 'clickOutsideContent' | hover | manual\n type = 'dropdown', // dropdown | tooltip | popover | modal\n position = 'fixed', // absolute | fixed | relative | static\n align = 'bottom', // main align prop top | left | bottom | right\n alignX = 'left', // left | center | right\n alignY = 'bottom', // top | center | bottom\n offsetX = 0,\n offsetY = 0,\n throttleDelay = 200,\n parentContainer,\n closeOnEsc = true,\n disabled,\n onOpen,\n onClose,\n}: Partial<UseOverlayProps> = {}) => {\n const { rootSize } = useContext(context) as { rootSize: number }\n const ctx = useOverlayContext()\n const [isContentLoaded, setContentLoaded] = useState(false)\n\n const [innerAlignX, setInnerAlignX] = useState(alignX)\n const [innerAlignY, setInnerAlignY] = useState(alignY)\n\n const [blocked, handleBlocked] = useState(false)\n const [active, handleActive] = useState(isOpen)\n\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLElement>(null)\n\n const setBlocked = useCallback(() => handleBlocked(true), [])\n const setUnblocked = useCallback(() => handleBlocked(false), [])\n\n const showContent = useCallback(() => {\n handleActive(true)\n }, [])\n\n const hideContent = useCallback(() => {\n handleActive(false)\n }, [])\n\n // For position: absolute, getBoundingClientRect() returns viewport-relative\n // values but the element is positioned relative to its offsetParent.\n // We need to subtract the offsetParent's viewport rect to get correct coords.\n const getAncestorOffset = useCallback(() => {\n if (position !== 'absolute' || !contentRef.current) {\n return { top: 0, left: 0 }\n }\n\n const offsetParent = contentRef.current.offsetParent as HTMLElement | null\n if (!offsetParent || offsetParent === document.body) {\n return { top: 0, left: 0 }\n }\n\n const rect = offsetParent.getBoundingClientRect()\n return { top: rect.top, left: rect.left }\n }, [position])\n\n const calculateContentPosition = useCallback(() => {\n if (!active || !isContentLoaded) return {}\n\n const result = computePosition(\n type,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n triggerRef.current,\n contentRef.current,\n getAncestorOffset(),\n )\n\n if (result.resolvedAlignX) setInnerAlignX(result.resolvedAlignX)\n if (result.resolvedAlignY) setInnerAlignY(result.resolvedAlignY)\n\n return result.pos\n }, [\n isContentLoaded,\n active,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n type,\n getAncestorOffset,\n ])\n\n const assignContentPosition = useCallback(\n (values: OverlayPosition = {}) => {\n if (!contentRef.current) return\n\n const el = contentRef.current\n const setValue = (param?: string | number) =>\n value(param, rootSize) as string\n\n el.style.position = position\n\n // Reset all directional properties first, then apply only the ones\n // present in `values`. This prevents stale values lingering when the\n // overlay flips direction (e.g. top→bottom leaves old `top` behind).\n el.style.top = values.top != null ? setValue(values.top) : ''\n el.style.bottom = values.bottom != null ? setValue(values.bottom) : ''\n el.style.left = values.left != null ? setValue(values.left) : ''\n el.style.right = values.right != null ? setValue(values.right) : ''\n },\n [position, rootSize],\n )\n\n const setContentPosition = useCallback(() => {\n const currentPosition = calculateContentPosition()\n assignContentPosition(currentPosition)\n }, [assignContentPosition, calculateContentPosition])\n\n const isNodeOrChild = useCallback(\n (ref: { current: HTMLElement | null }) => (e: Event) => {\n if (e?.target && ref.current) {\n return (\n ref.current.contains(e.target as Element) || e.target === ref.current\n )\n }\n\n return false\n },\n [],\n )\n\n const handleVisibilityByEventType = useCallback(\n (e: Event) => {\n if (blocked || disabled) return\n\n processVisibilityEvent(\n e,\n active,\n openOn,\n closeOn,\n isNodeOrChild(triggerRef),\n isNodeOrChild(contentRef),\n showContent,\n hideContent,\n )\n },\n [\n active,\n blocked,\n disabled,\n openOn,\n closeOn,\n hideContent,\n showContent,\n isNodeOrChild,\n ],\n )\n\n // Use refs to avoid stale closures in throttled callbacks.\n // The throttled wrappers are stable (only recreated if throttleDelay changes),\n // but always call the latest version of the underlying function via the ref.\n const latestSetContentPosition = useRef(setContentPosition)\n latestSetContentPosition.current = setContentPosition\n\n const latestHandleVisibility = useRef(handleVisibilityByEventType)\n latestHandleVisibility.current = handleVisibilityByEventType\n\n const handleContentPosition = useMemo(\n () => throttle(() => latestSetContentPosition.current(), throttleDelay),\n [throttleDelay],\n )\n\n const handleClick = handleVisibilityByEventType\n\n const handleVisibility = useMemo(\n () =>\n throttle((e: Event) => latestHandleVisibility.current(e), throttleDelay),\n [throttleDelay],\n )\n\n // --------------------------------------------------------------------------\n // useEffects\n // --------------------------------------------------------------------------\n useEffect(() => {\n setInnerAlignX(alignX)\n setInnerAlignY(alignY)\n\n if (disabled) {\n hideContent()\n }\n }, [disabled, alignX, alignY, hideContent])\n\n useEffect(() => {\n if (!active || !isContentLoaded) return undefined\n\n // First call positions immediately; the rAF callback re-measures after\n // the browser has had a chance to reflow, catching any geometry changes\n // caused by the initial positioning (e.g. content becoming visible).\n setContentPosition()\n const rafId = requestAnimationFrame(() => setContentPosition())\n\n return () => cancelAnimationFrame(rafId)\n }, [active, isContentLoaded, setContentPosition])\n\n // Track previous active state so callbacks only fire on actual transitions,\n // not on every dependency change or unmount-while-closed.\n const prevActiveRef = useRef(false)\n useEffect(() => {\n const wasActive = prevActiveRef.current\n prevActiveRef.current = active\n\n if (active && !wasActive) {\n onOpen?.()\n ctx.setBlocked?.()\n } else if (!active && wasActive) {\n setContentLoaded(false)\n onClose?.()\n ctx.setUnblocked?.()\n } else if (!active) {\n setContentLoaded(false)\n }\n\n return () => {\n // On unmount, only clean up if currently active\n if (active) {\n onClose?.()\n ctx.setUnblocked?.()\n }\n }\n }, [active, ctx, onClose, onOpen])\n\n // handle closing only when content is active\n useEffect(() => {\n if (!closeOnEsc || !active || blocked) return undefined\n\n const handleEscKey = (e: any) => {\n if (e.key === 'Escape') {\n hideContent()\n }\n }\n\n window.addEventListener('keydown', handleEscKey)\n\n return () => {\n window.removeEventListener('keydown', handleEscKey)\n }\n }, [active, blocked, closeOnEsc, hideContent])\n\n // handles repositioning of content on document events\n useEffect(() => {\n if (!active) return undefined\n\n const shouldSetOverflow = type === 'modal'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n if (shouldSetOverflow) document.body.style.overflow = 'hidden'\n window.addEventListener('resize', handleContentPosition)\n window.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n if (shouldSetOverflow) document.body.style.overflow = ''\n window.removeEventListener('resize', handleContentPosition)\n window.removeEventListener('scroll', onScroll)\n }\n }, [active, type, handleVisibility, handleContentPosition])\n\n // handles repositioning of content on a custom element if defined\n useEffect(() => {\n if (!active || !parentContainer) return undefined\n\n if (closeOn !== 'hover') parentContainer.style.overflow = 'hidden'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n parentContainer.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n parentContainer.style.overflow = ''\n parentContainer.removeEventListener('scroll', onScroll)\n }\n }, [\n active,\n parentContainer,\n closeOn,\n handleContentPosition,\n handleVisibility,\n ])\n\n // Click-based open/close: attach to window\n useEffect(() => {\n if (blocked || disabled) return undefined\n\n const enabledClick =\n openOn === 'click' ||\n ['click', 'clickOnTrigger', 'clickOutsideContent'].includes(closeOn)\n\n if (enabledClick) {\n window.addEventListener('click', handleClick)\n }\n\n return () => {\n window.removeEventListener('click', handleClick)\n }\n }, [openOn, closeOn, blocked, disabled, handleClick])\n\n // Hover-based open/close: mouseenter/mouseleave on trigger + content\n // instead of window-level mousemove (which fires on every pixel of movement).\n // A short timeout bridges the gap between trigger and content elements.\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: isContentLoaded signals contentRef.current is available so the effect re-runs to attach listeners\n useEffect(() => {\n const enabledHover = openOn === 'hover' || closeOn === 'hover'\n if (blocked || disabled || !enabledHover) return undefined\n\n const trigger = triggerRef.current\n const content = contentRef.current\n\n const clearHoverTimeout = () => {\n if (hoverTimeoutRef.current != null) {\n clearTimeout(hoverTimeoutRef.current)\n hoverTimeoutRef.current = null\n }\n }\n\n const scheduleHide = () => {\n clearHoverTimeout()\n hoverTimeoutRef.current = setTimeout(hideContent, 100)\n }\n\n const onTriggerEnter = () => {\n clearHoverTimeout()\n if (openOn === 'hover' && !active) showContent()\n }\n\n const onTriggerLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n const onContentEnter = () => {\n clearHoverTimeout()\n }\n\n const onContentLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n if (trigger) {\n trigger.addEventListener('mouseenter', onTriggerEnter)\n trigger.addEventListener('mouseleave', onTriggerLeave)\n }\n\n if (content) {\n content.addEventListener('mouseenter', onContentEnter)\n content.addEventListener('mouseleave', onContentLeave)\n }\n\n return () => {\n clearHoverTimeout()\n if (trigger) {\n trigger.removeEventListener('mouseenter', onTriggerEnter)\n trigger.removeEventListener('mouseleave', onTriggerLeave)\n }\n if (content) {\n content.removeEventListener('mouseenter', onContentEnter)\n content.removeEventListener('mouseleave', onContentLeave)\n }\n }\n }, [\n active,\n isContentLoaded,\n blocked,\n disabled,\n openOn,\n closeOn,\n showContent,\n hideContent,\n ])\n\n // hack-ish way to load content correctly on the first load\n // as `contentRef` is loaded dynamically\n const contentRefCallback = useCallback((node: HTMLElement) => {\n if (node) {\n contentRef.current = node\n setContentLoaded(true)\n }\n }, [])\n\n return {\n triggerRef,\n contentRef: contentRefCallback,\n active,\n align,\n alignX: innerAlignX,\n alignY: innerAlignY,\n showContent,\n hideContent,\n blocked,\n setBlocked,\n setUnblocked,\n Provider,\n }\n}\n\nexport default useOverlay\n","/**\n * Overlay component that renders a trigger element and conditionally shows\n * content via a Portal. The trigger receives a ref and optional show/hide\n * callbacks; the content is positioned and managed by the useOverlay hook.\n * A context Provider wraps the content to support nested overlays (e.g.,\n * a dropdown inside another dropdown) via blocked-state propagation.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport Portal from '~/Portal'\nimport type { Content, VLComponent } from '~/types'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nconst IS_BROWSER = typeof window !== 'undefined'\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\ntype TriggerRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n }>,\n) => ReactNode\n\ntype ContentRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n align: Align\n alignX: AlignX\n alignY: AlignY\n }>,\n) => ReactNode\n\nexport type Props = {\n /**\n * Children to be rendered within **Overlay** component when Overlay is active.\n */\n children: ContentRenderer | Content\n /**\n * React component to be used as a trigger (e.g. `Button` for opening\n * dropdowns). Component must acept accept `ref` or any other prop name\n * defined in `triggerRefName` prop.\n */\n trigger: TriggerRenderer | Content\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n *\n * For more information follow [Portal](https://vitus-labs.com/docs/ui-system/elements/portal)\n * component.\n */\n DOMLocation?: HTMLElement\n /**\n * Defines a prop name to be used for passing `ref` for **trigger**. By default,\n * the value is `ref`.\n */\n triggerRefName?: string\n /**\n * Defines a prop name to be used for passing `ref` for **content** (passed `children`).\n * By default, the value is `ref`.\n */\n contentRefName?: string\n} & UseOverlayProps\n\nconst Component: VLComponent<Props> = ({\n children,\n trigger,\n DOMLocation,\n triggerRefName = 'ref',\n contentRefName = 'ref',\n ...props\n}) => {\n const {\n active,\n triggerRef,\n contentRef,\n showContent,\n hideContent,\n align,\n alignX,\n alignY,\n Provider,\n ...ctx\n } = useOverlay(props)\n\n const { openOn, closeOn } = props\n\n const passHandlers = useMemo(\n () =>\n openOn === 'manual' ||\n closeOn === 'manual' ||\n closeOn === 'clickOutsideContent',\n [openOn, closeOn],\n )\n\n return (\n <>\n {render(trigger, {\n [triggerRefName]: triggerRef,\n active,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n\n {IS_BROWSER && active && (\n <Portal DOMLocation={DOMLocation}>\n <Provider {...ctx}>\n {render(children, {\n [contentRefName]: contentRef,\n active,\n align,\n alignX,\n alignY,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n </Provider>\n </Portal>\n )}\n </>\n )\n}\n\nconst name = `${PKG_NAME}/Overlay` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import component, { type Props } from './component'\nimport OverlayProvider from './context'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nexport type { Props, UseOverlayProps }\n\nexport { useOverlay, OverlayProvider }\n\nexport default component\n","/**\n * Styled text primitive that inherits color, font-weight, and line-height\n * from its parent so it blends seamlessly into any context. Additional\n * styles can be injected via the responsive `extraStyles` prop processed\n * through makeItResponsive.\n */\nimport { config } from '@vitus-labs/core'\nimport { extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\n\nconst { styled, css, textComponent } = config\n\nconst styles: ResponsiveStylesCallback = ({ css, theme: t }) => css`\n ${t.extraStyles && extendCss(t.extraStyles)};\n`\n\nexport default styled(textComponent)`\n color: inherit;\n font-weight: inherit;\n line-height: 1;\n\n ${makeItResponsive({\n key: '$text',\n styles,\n css,\n normalize: false,\n })};\n`\n","/**\n * Text component for rendering inline or block-level text. Supports a\n * `paragraph` shorthand that automatically renders as a `<p>` tag, or\n * a custom `tag` for semantic HTML (h1-h6, span, etc.). Marked with\n * a static `isText` flag so other components can detect text children.\n */\nimport type { HTMLTextTags } from '@vitus-labs/core'\nimport {\n type ForwardRefRenderFunction,\n forwardRef,\n type ReactNode,\n} from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { ExtendCss, VLForwardedComponent } from '~/types'\nimport Styled from './styled'\n\nexport type Props = Partial<{\n /**\n * Label can be used instead of children for inline syntax. But **children** prop takes a precedence\n */\n label: ReactNode\n /**\n * Children to be rendered within **Text** component.\n */\n children: ReactNode\n /**\n * Defines whether should behave as a block text element. Automatically adds **p** HTML tag\n */\n paragraph: boolean\n /**\n * Defines what kind of HTML tag should be rendered\n */\n tag: HTMLTextTags\n /**\n * If an additional styling needs to be added, it can be do so via injecting styles using this property.\n */\n css: ExtendCss\n}>\n\ntype RenderContent = (as?: any) => ReturnType<ForwardRefRenderFunction<Props>>\n\nconst Component: VLForwardedComponent<Props> & {\n isText?: true\n} = forwardRef(({ paragraph, label, children, tag, css, ...props }, ref) => {\n const renderContent: RenderContent = (as = undefined) => (\n <Styled ref={ref} as={as} $text={{ extraStyles: css }} {...props}>\n {children ?? label}\n </Styled>\n )\n\n let finalTag: string | undefined\n\n if (__WEB__) {\n if (paragraph) finalTag = 'p'\n else {\n finalTag = tag\n }\n }\n\n return renderContent(finalTag)\n})\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Text` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\nComponent.isText = true\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Utility wrapper that injects className and/or style props into its\n * children without adding any DOM nodes of its own. Uses the core `render`\n * helper to clone children with the merged props.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Children to be rendered within **Util** component.\n */\n children: ReactNode\n /**\n * Class name(s) to be added to children component.\n */\n className?: string | string[]\n /**\n * Style property to extend children component inline styles\n */\n style?: Record<string, unknown>\n}\n\nconst Component: VLComponent<Props> = ({ children, className, style }) => {\n const mergedClasses = useMemo(\n () => (Array.isArray(className) ? className.join(' ') : className),\n [className],\n )\n\n const finalProps: Record<string, any> = {}\n if (style) finalProps.style = style\n if (mergedClasses) finalProps.className = mergedClasses\n\n return render(children, finalProps)\n}\n\nconst name = `${PKG_NAME}/Util` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vitus-labs-elements.native.js","names":["styles","component","Component","Styled","component","styles","component","Component","Styled","component","Component","Wrapper","Content","name","component","Component","component","Component","Iterator","Element","name","component","Component","name","component","context","Provider","Component","Portal","name","component","Component","Styled","name","component","Component","component"],"sources":["../src/constants.ts","../src/utils.ts","../src/helpers/Content/styled.ts","../src/helpers/Content/component.tsx","../src/helpers/Content/index.ts","../src/helpers/Wrapper/styled.ts","../src/helpers/Wrapper/component.tsx","../src/helpers/Wrapper/index.ts","../src/Element/component.tsx","../src/Element/withEqualSizeBeforeAfter.tsx","../src/Element/index.ts","../src/helpers/Iterator/component.tsx","../src/helpers/Iterator/index.ts","../src/List/component.tsx","../src/List/withActiveState.tsx","../src/List/index.ts","../src/Portal/component.ts","../src/Portal/index.ts","../src/Overlay/context.tsx","../src/Overlay/useOverlay.tsx","../src/Overlay/component.tsx","../src/Overlay/index.ts","../src/Text/styled.ts","../src/Text/component.tsx","../src/Text/index.ts","../src/Util/component.tsx","../src/Util/index.ts"],"sourcesContent":["export const PKG_NAME = '@vitus-labs/elements' as const\n","export const IS_DEVELOPMENT = process.env.NODE_ENV !== 'production'\n","/**\n * Styled component for content areas (before/content/after). Applies\n * responsive flex alignment, gap spacing between slots based on parent\n * direction (margin-right for inline, margin-bottom for rows), and\n * equalCols flex distribution. The \"content\" slot gets `flex: 1` to\n * fill remaining space between before and after.\n */\nimport { config } from '@vitus-labs/core'\nimport {\n alignContent,\n extendCss,\n makeItResponsive,\n value,\n} from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps, ThemeProps } from './types'\n\nconst { styled, css, component } = config\n\nconst equalColsCSS = `\n flex: 1;\n`\n\nconst typeContentCSS = `\n flex: 1;\n`\n\n// --------------------------------------------------------\n// calculate spacing between before / content / after\n// --------------------------------------------------------\nconst gapDimensions = {\n inline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n reverseInline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n rows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n reverseRows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n} as const\n\nconst calculateGap = ({\n direction,\n type,\n value,\n}: {\n direction: keyof typeof gapDimensions\n type: ThemeProps['contentType']\n value: any\n}) => {\n if (!direction || !type || type === 'content') return undefined\n\n const finalStyles = `${gapDimensions[direction][type]}: ${value};`\n\n return finalStyles\n}\n\n// --------------------------------------------------------\n// calculations of styles to be rendered\n// --------------------------------------------------------\nconst styles: ResponsiveStylesCallback = ({ css, theme: t, rootSize }) => css`\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.equalCols && equalColsCSS};\n\n ${\n t.gap &&\n t.contentType &&\n calculateGap({\n direction: t.parentDirection,\n type: t.contentType,\n value: value(t.gap, rootSize),\n })\n };\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : ''\n\nconst StyledComponent = styled(component)<any>`\n ${platformCSS};\n\n display: flex;\n align-self: stretch;\n flex-wrap: wrap;\n\n ${({ $contentType }: StyledProps) =>\n $contentType === 'content' && typeContentCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n\nexport default StyledComponent\n","/**\n * Memoized content area used inside Element to render one of the three\n * layout slots (before, content, after). Passes alignment, direction,\n * gap, and equalCols styling props to the underlying styled component.\n * Adds a `data-vl-element` attribute in development for debugging.\n */\nimport type { FC } from 'react'\nimport { memo } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props } from './types'\n\nconst Component: FC<Partial<Props>> = ({\n contentType,\n tag,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extendCss,\n ...props\n}) => {\n const debugProps = IS_DEVELOPMENT\n ? {\n 'data-vl-element': contentType,\n }\n : {}\n\n const stylingProps = {\n contentType,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extraStyles: extendCss,\n }\n\n return (\n <Styled\n as={tag}\n $contentType={contentType}\n $element={stylingProps}\n {...debugProps}\n {...props}\n />\n )\n}\n\nexport default memo(Component)\n","import component from './component'\n\nexport default component\n","/**\n * Styled component for the Element wrapper layer. Handles responsive\n * block/inline-flex display, direction, alignment, and custom CSS injection.\n * Includes special handling for the `parentFix` / `childFix` flags that\n * split flex behavior across two DOM nodes for button/fieldset/legend\n * elements where a single flex container is insufficient.\n */\nimport { config } from '@vitus-labs/core'\nimport { alignContent, extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps } from './types'\n\nconst { styled, css, component } = config\n\nconst childFixCSS = `\n display: flex;\n flex: 1;\n width: 100%;\n height: 100%;\n`\n\nconst parentFixCSS = `\n flex-direction: column;\n`\n\nconst parentFixBlockCSS = `\n width: 100%;\n`\n\nconst fullHeightCSS = `\n height: 100%;\n`\n\nconst blockCSS = `\n align-self: stretch;\n`\n\nconst childFixPosition = (isBlock?: boolean) =>\n `display: ${isBlock ? 'flex' : 'inline-flex'};`\n\nconst styles: ResponsiveStylesCallback = ({ theme: t, css }) => css`\n ${__WEB__ && t.alignY === 'block' && fullHeightCSS};\n\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.block && blockCSS};\n\n ${__WEB__ && !t.childFix && childFixPosition(t.block)};\n ${__WEB__ && t.parentFix && t.block && parentFixBlockCSS};\n ${__WEB__ && t.parentFix && parentFixCSS};\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : `display: flex;`\n\nexport default styled(component)<any>`\n position: relative;\n ${platformCSS};\n\n ${({ $childFix }: StyledProps) => $childFix && childFixCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n","/**\n * Wrapper component that serves as the outermost styled container for Element.\n * Uses forwardRef for ref forwarding to the underlying DOM node. On web, it\n * detects button/fieldset/legend tags and applies a two-layer flex fix\n * (parent + child Styled) because these HTML elements do not natively\n * support `display: flex` consistently across browsers.\n */\nimport { forwardRef } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props, Reference } from './types'\nimport { isWebFixNeeded } from './utils'\n\nconst DEV_PROPS: Record<string, string> = IS_DEVELOPMENT\n ? { 'data-vl-element': 'Element' }\n : {}\n\n// eslint-disable-next-line react/display-name\nconst Component = forwardRef<Reference, Partial<Props>>(\n (\n {\n children,\n tag,\n block,\n extendCss,\n direction,\n alignX,\n alignY,\n equalCols,\n isInline,\n ...props\n },\n ref,\n ) => {\n const COMMON_PROPS = {\n ...props,\n ...DEV_PROPS,\n ref,\n as: tag,\n }\n\n const needsFix = __WEB__\n ? !props.dangerouslySetInnerHTML && isWebFixNeeded(tag)\n : false\n\n if (!needsFix || __NATIVE__) {\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n block,\n direction,\n alignX,\n alignY,\n equalCols,\n extraStyles: extendCss,\n }}\n >\n {children}\n </Styled>\n )\n }\n\n // eslint-disable-next-line no-nested-ternary\n const asTag = __WEB__ ? (isInline ? 'span' : 'div') : undefined\n\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n parentFix: true,\n block,\n extraStyles: extendCss,\n }}\n >\n <Styled\n as={asTag}\n $childFix\n $element={{\n childFix: true,\n direction,\n alignX,\n alignY,\n equalCols,\n }}\n >\n {children}\n </Styled>\n </Styled>\n )\n },\n)\n\nexport default Component\n","import component from './component'\n\nexport default component\n","/**\n * Core building block of the elements package. Renders a three-section layout\n * (beforeContent / content / afterContent) inside a flex Wrapper. When only\n * content is present, the Wrapper inherits content-level alignment directly\n * to avoid an unnecessary nesting layer. Handles HTML-specific edge cases\n * like void elements (input, img) and inline elements (span, a) by\n * skipping children or switching sub-tags accordingly.\n */\nimport { render } from '@vitus-labs/core'\nimport { forwardRef, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport { Content, Wrapper } from '~/helpers'\nimport type { VLElement } from './types'\nimport { getShouldBeEmpty, isInlineElement } from './utils'\n\nconst defaultDirection = 'inline'\nconst defaultContentDirection = 'rows'\nconst defaultAlignX = 'left'\nconst defaultAlignY = 'center'\n\nconst Component: VLElement = forwardRef(\n (\n {\n innerRef,\n tag,\n label,\n content,\n children,\n beforeContent,\n afterContent,\n\n block,\n equalCols,\n gap,\n\n direction,\n alignX = defaultAlignX,\n alignY = defaultAlignY,\n\n css,\n contentCss,\n beforeContentCss,\n afterContentCss,\n\n contentDirection = defaultContentDirection,\n contentAlignX = defaultAlignX,\n contentAlignY = defaultAlignY,\n\n beforeContentDirection = defaultDirection,\n beforeContentAlignX = defaultAlignX,\n beforeContentAlignY = defaultAlignY,\n\n afterContentDirection = defaultDirection,\n afterContentAlignX = defaultAlignX,\n afterContentAlignY = defaultAlignY,\n\n ...props\n },\n ref,\n ) => {\n // --------------------------------------------------------\n // check if should render only single element\n // --------------------------------------------------------\n const shouldBeEmpty = __WEB__\n ? !!props.dangerouslySetInnerHTML || getShouldBeEmpty(tag)\n : false\n\n // --------------------------------------------------------\n // if not single element, calculate values\n // --------------------------------------------------------\n const isSimpleElement = !beforeContent && !afterContent\n const CHILDREN = children ?? content ?? label\n\n const isInline = __WEB__ ? isInlineElement(tag) : false\n const SUB_TAG = __WEB__ && isInline ? 'span' : undefined\n\n // --------------------------------------------------------\n // direction & alignX & alignY calculations\n // --------------------------------------------------------\n const { wrapperDirection, wrapperAlignX, wrapperAlignY } = useMemo(() => {\n let wrapperDirection: typeof direction = direction\n let wrapperAlignX: typeof alignX = alignX\n let wrapperAlignY: typeof alignY = alignY\n\n if (isSimpleElement) {\n if (contentDirection) wrapperDirection = contentDirection\n if (contentAlignX) wrapperAlignX = contentAlignX\n if (contentAlignY) wrapperAlignY = contentAlignY\n } else if (direction) {\n wrapperDirection = direction\n } else {\n wrapperDirection = defaultDirection\n }\n\n return { wrapperDirection, wrapperAlignX, wrapperAlignY }\n }, [\n isSimpleElement,\n contentDirection,\n contentAlignX,\n contentAlignY,\n alignX,\n alignY,\n direction,\n ])\n\n // --------------------------------------------------------\n // common wrapper props\n // --------------------------------------------------------\n const WRAPPER_PROPS = {\n ref: ref ?? innerRef,\n extendCss: css,\n tag,\n block,\n direction: wrapperDirection,\n alignX: wrapperAlignX,\n alignY: wrapperAlignY,\n as: undefined, // reset styled-components `as` prop\n }\n\n // --------------------------------------------------------\n // return simple/empty element like input or image etc.\n // --------------------------------------------------------\n if (shouldBeEmpty) {\n return <Wrapper {...props} {...WRAPPER_PROPS} />\n }\n\n const contentRenderOutput = render(CHILDREN)\n\n return (\n <Wrapper {...props} {...WRAPPER_PROPS} isInline={isInline}>\n {beforeContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"before\"\n parentDirection={wrapperDirection}\n extendCss={beforeContentCss}\n direction={beforeContentDirection}\n alignX={beforeContentAlignX}\n alignY={beforeContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(beforeContent)}\n </Content>\n )}\n\n {isSimpleElement ? (\n contentRenderOutput\n ) : (\n <Content\n tag={SUB_TAG}\n contentType=\"content\"\n parentDirection={wrapperDirection}\n extendCss={contentCss}\n direction={contentDirection}\n alignX={contentAlignX}\n alignY={contentAlignY}\n equalCols={equalCols}\n >\n {contentRenderOutput}\n </Content>\n )}\n\n {afterContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"after\"\n parentDirection={wrapperDirection}\n extendCss={afterContentCss}\n direction={afterContentDirection}\n alignX={afterContentAlignX}\n alignY={afterContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(afterContent)}\n </Content>\n )}\n </Wrapper>\n )\n },\n)\n\nconst name = `${PKG_NAME}/Element` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that equalizes the dimensions of beforeContent and afterContent areas.\n * After render, it measures both DOM nodes via useLayoutEffect and sets the\n * larger dimension on both so they match. Uses width for inline direction\n * and height for rows direction. This is useful for centering the main\n * content when before/after slots have different intrinsic sizes.\n */\nimport { type Ref, useImperativeHandle, useLayoutEffect, useRef } from 'react'\nimport type { Props as ElementProps } from './types'\n\nconst types = {\n height: 'offsetHeight',\n width: 'offsetWidth',\n} as const\n\ntype DimensionType = keyof typeof types\n\nconst equalize = (\n beforeEl: HTMLElement,\n afterEl: HTMLElement,\n type: DimensionType,\n) => {\n const prop = types[type]\n const beforeSize = beforeEl[prop]\n const afterSize = afterEl[prop]\n\n if (Number.isInteger(beforeSize) && Number.isInteger(afterSize)) {\n const maxSize = `${Math.max(beforeSize, afterSize)}px`\n beforeEl.style[type] = maxSize\n afterEl.style[type] = maxSize\n }\n}\n\ntype Props = ElementProps &\n Partial<{\n equalBeforeAfter: boolean\n ref: Ref<HTMLElement>\n }>\n\nconst withEqualBeforeAfter = (WrappedComponent: any) => {\n const displayName =\n WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\n\n const Enhanced = ({\n equalBeforeAfter,\n direction,\n afterContent,\n beforeContent,\n ref,\n ...rest\n }: Props) => {\n const internalRef = useRef<HTMLElement>(null)\n\n useImperativeHandle(ref, () => internalRef.current as HTMLElement)\n\n useLayoutEffect(() => {\n if (!equalBeforeAfter || !beforeContent || !afterContent) return\n if (!internalRef.current) return\n\n const el = internalRef.current\n const beforeEl = el.firstElementChild as HTMLElement | null\n const afterEl = el.lastElementChild as HTMLElement | null\n\n if (beforeEl && afterEl && beforeEl !== afterEl) {\n equalize(beforeEl, afterEl, direction === 'rows' ? 'height' : 'width')\n }\n })\n\n return (\n <WrappedComponent\n {...rest}\n afterContent={afterContent}\n beforeContent={beforeContent}\n ref={internalRef}\n />\n )\n }\n\n Enhanced.displayName = `withEqualSizeBeforeAfter(${displayName})`\n\n return Enhanced\n}\n\nexport default withEqualBeforeAfter\n","import component from './component'\nimport type { Props, VLElement } from './types'\nimport withEqualSizeBeforeAfter from './withEqualSizeBeforeAfter'\n\nexport { withEqualSizeBeforeAfter }\nexport type { Props, VLElement }\n\nexport default component\n","/**\n * Data-driven list renderer that supports three input modes: React children\n * (including fragments), an array of primitives, or an array of objects.\n * Each item receives positional metadata (first, last, odd, even, position)\n * and optional injected props via `itemProps`. Items can be individually\n * wrapped with `wrapComponent`. Children always take priority over the\n * component+data prop pattern.\n */\nimport { isEmpty, render } from '@vitus-labs/core'\nimport {\n Children,\n type FC,\n type ReactElement,\n type ReactNode,\n useCallback,\n useMemo,\n} from 'react'\nimport { isFragment } from 'react-is'\nimport type { ExtendedProps, ObjectValue, Props, SimpleValue } from './types'\n\ntype ClassifiedData =\n | { type: 'simple'; data: SimpleValue[] }\n | { type: 'complex'; data: ObjectValue[] }\n | null\n\nconst classifyData = (data: unknown[]): ClassifiedData => {\n const items = data.filter(\n (item) =>\n item != null && !(typeof item === 'object' && isEmpty(item as any)),\n )\n\n if (items.length === 0) return null\n\n let isSimple = true\n let isComplex = true\n\n for (const item of items) {\n if (typeof item === 'string' || typeof item === 'number') {\n isComplex = false\n } else if (typeof item === 'object') {\n isSimple = false\n } else {\n isSimple = false\n isComplex = false\n }\n }\n\n if (isSimple) return { type: 'simple', data: items as SimpleValue[] }\n if (isComplex) return { type: 'complex', data: items as ObjectValue[] }\n return null\n}\n\nconst RESERVED_PROPS = [\n 'children',\n 'component',\n 'wrapComponent',\n 'data',\n 'itemKey',\n 'valueName',\n 'itemProps',\n 'wrapProps',\n] as const\n\ntype AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => ExtendedProps\n\nconst attachItemProps: AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => {\n const position = i + 1\n\n return {\n index: i,\n first: position === 1,\n last: position === length,\n odd: position % 2 === 1,\n even: position % 2 === 0,\n position,\n }\n}\n\ntype Static = {\n isIterator: true\n RESERVED_PROPS: typeof RESERVED_PROPS\n}\n\nconst Component: FC<Props> & Static = (props) => {\n const {\n itemKey,\n valueName,\n children,\n component,\n data,\n wrapComponent: Wrapper,\n wrapProps,\n itemProps,\n } = props\n\n const injectItemProps = useMemo(\n () => (typeof itemProps === 'function' ? itemProps : () => itemProps),\n [itemProps],\n )\n\n const injectWrapItemProps = useMemo(\n () => (typeof wrapProps === 'function' ? wrapProps : () => wrapProps),\n [wrapProps],\n )\n\n const getKey = useCallback(\n (item: string | number, index: number) => {\n if (typeof itemKey === 'function') return itemKey(item, index)\n\n return index\n },\n [itemKey],\n )\n\n const renderChild = (child: ReactNode, total = 1, i = 0) => {\n if (!itemProps && !Wrapper) return child\n\n const extendedProps = attachItemProps({\n i,\n length: total,\n })\n\n const finalItemProps = itemProps ? injectItemProps({}, extendedProps) : {}\n\n // if no props extension is required, just return children\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({}, extendedProps)\n : {}\n\n return (\n <Wrapper key={i} {...finalWrapProps}>\n {render(child, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(child, {\n key: i,\n ...finalItemProps,\n })\n }\n\n // --------------------------------------------------------\n // render children\n // --------------------------------------------------------\n const renderChildren = () => {\n if (!children) return null\n\n // if children is Array\n if (Array.isArray(children)) {\n return Children.map(children, (item, i) =>\n renderChild(item, children.length, i),\n )\n }\n\n // if children is Fragment\n if (isFragment(children)) {\n const fragmentChildren = (\n children as ReactElement<{ children: ReactNode[] }>\n ).props.children\n const childrenLength = fragmentChildren.length\n\n return fragmentChildren.map((item, i) =>\n renderChild(item, childrenLength, i),\n )\n }\n\n // if single child\n return renderChild(children)\n }\n\n // --------------------------------------------------------\n // render array of strings or numbers\n // --------------------------------------------------------\n const renderSimpleArray = (data: SimpleValue[]) => {\n const { length } = data\n\n // if the data array is empty\n if (length === 0) return null\n\n return data.map((item, i) => {\n const key = getKey(item, i)\n const keyName = valueName ?? 'children'\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps\n ? injectItemProps({ [keyName]: item }, extendedProps)\n : {}),\n [keyName]: item,\n }\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({ [keyName]: item }, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(component, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(component, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render array of objects\n // --------------------------------------------------------\n const getObjectKey = (item: ObjectValue, index: number) => {\n if (!itemKey) return item.key ?? item.id ?? item.itemId ?? index\n if (typeof itemKey === 'function') return itemKey(item, index)\n if (typeof itemKey === 'string') return item[itemKey]\n\n return index\n }\n\n const renderComplexArray = (data: ObjectValue[]) => {\n const { length } = data\n\n if (length === 0) return null\n\n return data.map((item, i) => {\n const { component: itemComponent, ...restItem } = item\n const renderItem = itemComponent ?? component\n const key = getObjectKey(restItem, i)\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps ? injectItemProps(item, extendedProps) : {}),\n ...restItem,\n }\n\n if (Wrapper && !itemComponent) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps(item, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(renderItem, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(renderItem, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render list items\n // --------------------------------------------------------\n const renderItems = () => {\n // --------------------------------------------------------\n // children have priority over props component + data\n // --------------------------------------------------------\n if (children) return renderChildren()\n\n // --------------------------------------------------------\n // render props component + data\n // single pass: filter nullish/empty and determine array type\n // --------------------------------------------------------\n if (component && Array.isArray(data)) {\n const classified = classifyData(data)\n if (!classified) return null\n if (classified.type === 'simple')\n return renderSimpleArray(classified.data)\n return renderComplexArray(classified.data)\n }\n\n // --------------------------------------------------------\n // if there are no children or valid react component and data as an array,\n // return null to prevent error\n // --------------------------------------------------------\n return null\n }\n\n return renderItems()\n}\n\nComponent.isIterator = true\nComponent.RESERVED_PROPS = RESERVED_PROPS\n\nexport default Component\n","import component from './component'\nimport type {\n ElementType,\n ExtendedProps,\n ObjectValue,\n Props,\n PropsCallback,\n} from './types'\n\nexport type { Props, PropsCallback, ObjectValue, ExtendedProps, ElementType }\n\nexport default component\n","/**\n * List component that combines Iterator (data-driven rendering) with an\n * optional Element root wrapper. When `rootElement` is false (default),\n * it renders a bare Iterator as a fragment. When true, the Iterator output\n * is wrapped in an Element that receives all non-iterator props (e.g.,\n * layout, alignment, css), allowing the list to be styled as a single block.\n */\nimport { omit, pick } from '@vitus-labs/core'\nimport { forwardRef } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLElement } from '~/Element'\nimport Element from '~/Element'\nimport type { Props as IteratorProps } from '~/helpers/Iterator'\nimport Iterator from '~/helpers/Iterator'\nimport type { MergeTypes } from '~/types'\n\ntype ListProps = {\n /**\n * A boolean value. When set to `false`, component returns `React.Fragment`\n * When set to `true`, component returns as the **root** element `Element`\n * component.\n */\n rootElement?: boolean\n /**\n * Label prop from `Element` component is being ignored.\n */\n label: never\n /**\n * Content prop from `Element` component is being ignored.\n */\n content: never\n}\n\nexport type Props = MergeTypes<[IteratorProps, ListProps]>\n\nconst Component: VLElement<Props> = forwardRef(\n ({ rootElement = false, ...props }, ref) => {\n const renderedList = <Iterator {...pick(props, Iterator.RESERVED_PROPS)} />\n\n if (!rootElement) return renderedList\n\n return (\n <Element ref={ref} {...omit(props, Iterator.RESERVED_PROPS)}>\n {renderedList}\n </Element>\n )\n },\n)\n\nconst name = `${PKG_NAME}/List` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that adds single or multi selection state management to a list component.\n * Tracks which items are active via a scalar key (single mode) or a Map of\n * key-to-boolean entries (multi mode). Injects `itemProps` callback that\n * provides each item with `active`, `handleItemActive`, `toggleItemActive`,\n * and other selection helpers. Supports `activeItemRequired` to prevent\n * deselecting the last active item.\n */\n// @ts-nocheck\nimport { useEffect, useState } from 'react'\nimport type { SimpleHoc } from '~/types'\n\nconst RESERVED_KEYS = [\n 'type',\n 'activeItems',\n 'itemProps',\n 'activeItemRequired',\n] as const\n\ntype Key = string | number\ntype MultipleMap = Map<Key, boolean>\n\ninterface ItemPropsData {\n key: Key\n first: boolean\n last: boolean\n odd: boolean\n even: boolean\n position: number\n}\n\ninterface Props {\n type?: 'single' | 'multi'\n activeItemRequired?: boolean\n activeItems?: Key | (string | number)[]\n itemProps?:\n | Record<string, unknown>\n | ((props: Record<string, unknown>) => Record<string, unknown>)\n}\n\nconst component: SimpleHoc<Props> = (WrappedComponent) => {\n const displayName =\n WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n const Enhanced = (props: Props) => {\n const {\n type = 'single',\n activeItemRequired,\n activeItems,\n itemProps = {},\n ...rest\n } = props\n\n type InitActiveItems = () => Key | MultipleMap | undefined\n const initActiveItems: InitActiveItems = () => {\n if (type === 'single') {\n if (!Array.isArray(activeItems)) {\n return activeItems\n }\n } else if (type === 'multi') {\n const activeItemsHelper = Array.isArray(activeItems)\n ? activeItems\n : [activeItems]\n\n return new Map(activeItemsHelper.map((id) => [id, true]))\n }\n\n return undefined\n }\n\n const [innerActiveItems, setActiveItems] = useState(initActiveItems())\n\n const countActiveItems = (data) => {\n let result = 0\n\n data.forEach((value) => {\n if (value) result += 1\n })\n\n return result\n }\n\n const updateItemState = (key: Key) => {\n if (type === 'single') {\n setActiveItems((prevState) => {\n if (activeItemRequired) return key\n if (prevState === key) return undefined\n\n return key\n })\n } else if (type === 'multi') {\n setActiveItems((prevState: MultipleMap) => {\n // TODO: add conditional type to fix this\n const activeItems = new Map(prevState)\n\n if (\n activeItemRequired &&\n activeItems.get(key) &&\n countActiveItems(activeItems) === 1\n ) {\n return activeItems\n }\n\n activeItems.set(key, !activeItems.get(key))\n return activeItems\n })\n } else {\n setActiveItems(undefined)\n }\n }\n\n const handleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const updateAllItemsState = (status) => {\n if (!status) {\n setActiveItems(new Map())\n }\n }\n\n const setItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const unsetItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const toggleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n // const setAllItemsActive = () => {\n // updateAllItemsState(true)\n // }\n\n const unsetAllItemsActive = () => {\n updateAllItemsState(false)\n }\n\n const isItemActive = (key: Key): boolean => {\n if (!innerActiveItems) return false\n if (type === 'single') return innerActiveItems === key\n if (type === 'multi' && innerActiveItems instanceof Map) {\n return !!innerActiveItems.get(key)\n }\n return false\n }\n\n const attachMultipleProps = {\n unsetAllItemsActive,\n }\n\n const attachItemProps = (props: ItemPropsData) => {\n const { key } = props\n\n const defaultItemProps =\n typeof itemProps === 'object' ? itemProps : itemProps(props)\n\n const result = {\n ...defaultItemProps,\n active: isItemActive(key),\n handleItemActive: () => handleItemActive(key),\n setItemActive,\n unsetItemActive,\n toggleItemActive,\n ...(type === 'multi' ? attachMultipleProps : {}),\n }\n\n return result\n }\n\n useEffect(() => {\n if (type === 'single' && Array.isArray(activeItems)) {\n if (process.env.NODE_ENV !== 'production') {\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(\n '[@vitus-labs/elements] List/withActiveState: ' +\n '`activeItems` was passed as an array but `type` is \"single\". ' +\n 'In single selection mode, `activeItems` should be a single key (string | number). ' +\n 'The array value will be ignored.',\n )\n }\n }\n }, [type, activeItems])\n\n return <WrappedComponent {...rest} itemProps={attachItemProps} />\n }\n Enhanced.RESERVED_KEYS = RESERVED_KEYS\n Enhanced.displayName = `@vitus-labs/elements/List/withActiveState(${displayName})`\n\n return Enhanced\n}\n\nexport default component\n","import type { Props } from './component'\nimport component from './component'\nimport withActiveState from './withActiveState'\n\nexport type { Props }\nexport { withActiveState }\n\nexport default component\n","/**\n * Portal component that creates a new DOM element on mount, appends it to\n * the target location (defaults to document.body), and uses React's\n * createPortal to render children into it. The DOM element is cleaned up\n * on unmount. Accepts a custom DOMLocation for rendering into specific\n * containers (e.g., a modal root).\n */\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n */\n DOMLocation?: HTMLElement\n /**\n * Children to be rendered within **Portal** component.\n */\n children: ReactNode\n /**\n * Valid HTML Tag\n */\n tag?: string\n}\n\nconst Component: VLComponent<Props> = ({\n DOMLocation,\n tag = 'div',\n children,\n}: Props) => {\n const [element, setElement] = useState<HTMLElement>()\n\n useEffect(() => {\n if (!tag) return undefined\n\n const position = DOMLocation ?? document.body\n const element = document.createElement(tag)\n setElement(element)\n\n position.appendChild(element)\n\n return () => {\n position.removeChild(element)\n }\n }, [tag, DOMLocation])\n\n if (!tag || !element) return null\n\n return createPortal(children, element)\n}\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Portal` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Context for nested overlay coordination. When a child overlay opens, it\n * sets the parent's blocked state to true, preventing the parent from\n * closing in response to click/hover events that belong to the child.\n */\nimport {\n createContext,\n type FC,\n type ReactNode,\n useContext,\n useMemo,\n} from 'react'\n\nexport interface Context {\n blocked: boolean\n setBlocked: () => void\n setUnblocked: () => void\n}\n\nconst context = createContext<Context>({} as Context)\n\nconst { Provider } = context\n\nexport const useOverlayContext = () => useContext(context)\n\nconst Component: FC<Context & { children: ReactNode }> = ({\n children,\n blocked,\n setBlocked,\n setUnblocked,\n}) => {\n const ctx = useMemo(\n () => ({\n blocked,\n setBlocked,\n setUnblocked,\n }),\n [blocked, setBlocked, setUnblocked],\n )\n\n return <Provider value={ctx}>{children}</Provider>\n}\n\nexport default Component\n","/**\n * Core hook powering the Overlay component. Manages open/close state, DOM\n * event listeners (click, hover, scroll, resize, ESC key), and dynamic\n * positioning of overlay content relative to its trigger. Supports dropdown,\n * tooltip, popover, and modal types with automatic edge-of-viewport flipping.\n * Event handlers are throttled for performance, and nested overlay blocking\n * is coordinated through the overlay context.\n */\n/* eslint-disable no-console */\n\nimport { context, throttle } from '@vitus-labs/core'\nimport { value } from '@vitus-labs/unistyle'\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Provider, { useOverlayContext } from './context'\n\ntype OverlayPosition = Partial<{\n top: number | string\n bottom: number | string\n left: number | string\n right: number | string\n}>\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\nexport type UseOverlayProps = Partial<{\n /**\n * Defines default state whether **Overlay** component should be active.\n * @defaultValue `false`\n */\n isOpen: boolean\n /**\n * Defines `event` when **Overlay** is supposed to be open.\n *\n * When `manual` is set, callbacks needs to be applied to make it working.\n * @defaultValue `click`\n */\n openOn: 'click' | 'hover' | 'manual'\n /**\n * Defines `event` when **Overlay** is supposed to be closed.\n * @defaultValue `click`\n */\n closeOn:\n | 'click'\n | 'clickOnTrigger'\n | 'clickOutsideContent'\n | 'hover'\n | 'manual'\n\n /**\n * Defines what type of **Overlay** will be created. Type `modal`\n * has different positioning calculations than others.\n * @defaultValue `dropdown`\n */\n type: 'dropdown' | 'tooltip' | 'popover' | 'modal' | 'custom'\n /**\n * Defines how `content` is treated regarding CSS positioning.\n * @defaultValue `fixed`\n */\n position: 'absolute' | 'fixed' | 'relative' | 'static'\n /**\n * Defines from which side is `content` aligned to `trigger` (top, left, bottom, right).\n * For more specific alignment configuration can be used `alignX` and/or `alignY` prop.\n * @defaultValue `bottom`\n */\n align: Align\n /**\n * Defines how `content` is aligned to `trigger` on axis X\n * @defaultValue `left`\n */\n alignX: AlignX\n /**\n * Defines how `content` is aligned to `trigger` on axis Y\n * @defaultValue `bottom`\n */\n alignY: AlignY\n /**\n * Defines `margin` from trigger on axis X.\n * @defaultValue `0`\n */\n offsetX: number\n /**\n * Defines `margin` from trigger on axis Y.\n * @defaultValue `0`\n */\n offsetY: number\n /**\n * Performance helper. Value defined in milliseconds for `throttling`\n * recalculations\n * @defaultValue `200`\n */\n throttleDelay: number\n /**\n * A valid HTML element. Prop can be used for ability to handle properly\n * scrolling inside custom scrollable HTML element.\n */\n parentContainer: HTMLElement | null\n /**\n * Defines whether active **Overlay** is supposed to be closed on pressing\n * `ESC` key.\n * @defaultValue `true`\n */\n closeOnEsc: boolean\n /**\n * When set to `true`, **Overlay** is automatically closed and is blocked for\n * being opened.\n */\n disabled: boolean\n /**\n * A callback hook to be called when **Overlay** is being opened. Does not\n * accept any arguments.\n */\n onOpen: () => void\n /**\n * A callback hook to be called when **Overlay** is being closed. Does not\n * accept any arguments.\n */\n onClose: () => void\n}>\n\ntype PositionResult = {\n pos: OverlayPosition\n resolvedAlignX: AlignX\n resolvedAlignY: AlignY\n}\n\nconst sel = <T,>(cond: boolean, a: T, b: T): T => (cond ? a : b)\n\nconst devWarn = (msg: string) => {\n if (!IS_DEVELOPMENT) return\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(msg)\n}\n\nconst calcDropdownVertical = (\n c: DOMRect,\n t: DOMRect,\n align: 'top' | 'bottom',\n alignX: AlignX,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const topPos = t.top - offsetY - c.height\n const bottomPos = t.bottom + offsetY\n const leftPos = t.left + offsetX\n const rightPos = t.right - offsetX - c.width\n\n const fitsTop = topPos >= 0\n const fitsBottom = bottomPos + c.height <= window.innerHeight\n const fitsLeft = leftPos + c.width <= window.innerWidth\n const fitsRight = rightPos >= 0\n\n const useTop = sel(align === 'top', fitsTop, !fitsBottom)\n pos.top = sel(useTop, topPos, bottomPos)\n const resolvedAlignY: AlignY = sel(useTop, 'top', 'bottom')\n\n let resolvedAlignX: AlignX = alignX\n if (alignX === 'left') {\n pos.left = sel(fitsLeft, leftPos, rightPos)\n resolvedAlignX = sel(fitsLeft, 'left', 'right')\n } else if (alignX === 'right') {\n pos.left = sel(fitsRight, rightPos, leftPos)\n resolvedAlignX = sel(fitsRight, 'right', 'left')\n } else {\n const center = t.left + (t.right - t.left) / 2 - c.width / 2\n const fitsCL = center >= 0\n const fitsCR = center + c.width <= window.innerWidth\n\n if (fitsCL && fitsCR) {\n resolvedAlignX = 'center'\n pos.left = center\n } else if (fitsCL) {\n resolvedAlignX = 'left'\n pos.left = leftPos\n } else if (fitsCR) {\n resolvedAlignX = 'right'\n pos.left = rightPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcDropdownHorizontal = (\n c: DOMRect,\n t: DOMRect,\n align: 'left' | 'right',\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const leftPos = t.left - offsetX - c.width\n const rightPos = t.right + offsetX\n const topPos = t.top + offsetY\n const bottomPos = t.bottom - offsetY - c.height\n\n const fitsLeft = leftPos >= 0\n const fitsRight = rightPos + c.width <= window.innerWidth\n const fitsTop = topPos + c.height <= window.innerHeight\n const fitsBottom = bottomPos >= 0\n\n const useLeft = sel(align === 'left', fitsLeft, !fitsRight)\n pos.left = sel(useLeft, leftPos, rightPos)\n const resolvedAlignX: AlignX = sel(useLeft, 'left', 'right')\n\n let resolvedAlignY: AlignY = alignY\n if (alignY === 'top') {\n pos.top = sel(fitsTop, topPos, bottomPos)\n resolvedAlignY = sel(fitsTop, 'top', 'bottom')\n } else if (alignY === 'bottom') {\n pos.top = sel(fitsBottom, bottomPos, topPos)\n resolvedAlignY = sel(fitsBottom, 'bottom', 'top')\n } else {\n const center = t.top + (t.bottom - t.top) / 2 - c.height / 2\n const fitsCT = center >= 0\n const fitsCB = center + c.height <= window.innerHeight\n\n if (fitsCT && fitsCB) {\n resolvedAlignY = 'center'\n pos.top = center\n } else if (fitsCT) {\n resolvedAlignY = 'top'\n pos.top = topPos\n } else if (fitsCB) {\n resolvedAlignY = 'bottom'\n pos.top = bottomPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcModalPos = (\n c: DOMRect,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): OverlayPosition => {\n const pos: OverlayPosition = {}\n\n switch (alignX) {\n case 'right':\n pos.right = offsetX\n break\n case 'left':\n pos.left = offsetX\n break\n case 'center':\n pos.left = window.innerWidth / 2 - c.width / 2\n break\n default:\n pos.right = offsetX\n }\n\n switch (alignY) {\n case 'top':\n pos.top = offsetY\n break\n case 'center':\n pos.top = window.innerHeight / 2 - c.height / 2\n break\n case 'bottom':\n pos.bottom = offsetY\n break\n default:\n pos.top = offsetY\n }\n\n return pos\n}\n\nconst adjustForAncestor = (\n pos: OverlayPosition,\n ancestor: { top: number; left: number },\n): OverlayPosition => {\n if (ancestor.top === 0 && ancestor.left === 0) return pos\n\n const result = { ...pos }\n if (typeof result.top === 'number') result.top -= ancestor.top\n if (typeof result.bottom === 'number') result.bottom += ancestor.top\n if (typeof result.left === 'number') result.left -= ancestor.left\n if (typeof result.right === 'number') result.right += ancestor.left\n\n return result\n}\n\ntype ComputeResult = {\n pos: OverlayPosition\n resolvedAlignX?: AlignX\n resolvedAlignY?: AlignY\n}\n\nconst computePosition = (\n type: string,\n align: Align,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n triggerEl: HTMLElement | null,\n contentEl: HTMLElement | null,\n ancestorOffset: { top: number; left: number },\n): ComputeResult => {\n const isDropdown = ['dropdown', 'tooltip', 'popover'].includes(type)\n\n if (isDropdown && (!triggerEl || !contentEl)) {\n devWarn(\n `[@vitus-labs/elements] Overlay (${type}): ` +\n `${triggerEl ? 'contentRef' : 'triggerRef'} is not attached. ` +\n 'Position cannot be calculated without both refs.',\n )\n return { pos: {} }\n }\n\n if (isDropdown && triggerEl && contentEl) {\n const c = contentEl.getBoundingClientRect()\n const t = triggerEl.getBoundingClientRect()\n const result =\n align === 'top' || align === 'bottom'\n ? calcDropdownVertical(c, t, align, alignX, offsetX, offsetY)\n : calcDropdownHorizontal(\n c,\n t,\n align as 'left' | 'right',\n alignY,\n offsetX,\n offsetY,\n )\n\n return {\n pos: adjustForAncestor(result.pos, ancestorOffset),\n resolvedAlignX: result.resolvedAlignX,\n resolvedAlignY: result.resolvedAlignY,\n }\n }\n\n if (type === 'modal') {\n if (!contentEl) {\n devWarn(\n '[@vitus-labs/elements] Overlay (modal): contentRef is not attached. ' +\n 'Modal position cannot be calculated without a content element.',\n )\n return { pos: {} }\n }\n const c = contentEl.getBoundingClientRect()\n return {\n pos: adjustForAncestor(\n calcModalPos(c, alignX, alignY, offsetX, offsetY),\n ancestorOffset,\n ),\n }\n }\n\n return { pos: {} }\n}\n\nconst processVisibilityEvent = (\n e: Event,\n active: boolean,\n openOn: string,\n closeOn: string,\n isTrigger: (e: Event) => boolean,\n isContent: (e: Event) => boolean,\n showContent: () => void,\n hideContent: () => void,\n) => {\n // Open on click (hover is handled by dedicated mouseenter/mouseleave)\n if (!active && openOn === 'click' && e.type === 'click' && isTrigger(e)) {\n showContent()\n return\n }\n\n if (!active) return\n\n // Close handlers\n if (closeOn === 'hover' && e.type === 'scroll') {\n hideContent()\n return\n }\n\n if (e.type !== 'click') return\n\n if (closeOn === 'click') {\n hideContent()\n } else if (closeOn === 'clickOnTrigger' && isTrigger(e)) {\n hideContent()\n } else if (closeOn === 'clickOutsideContent' && !isContent(e)) {\n hideContent()\n }\n}\n\nconst useOverlay = ({\n isOpen = false,\n openOn = 'click', // click | hover\n closeOn = 'click', // click | 'clickOnTrigger' | 'clickOutsideContent' | hover | manual\n type = 'dropdown', // dropdown | tooltip | popover | modal\n position = 'fixed', // absolute | fixed | relative | static\n align = 'bottom', // main align prop top | left | bottom | right\n alignX = 'left', // left | center | right\n alignY = 'bottom', // top | center | bottom\n offsetX = 0,\n offsetY = 0,\n throttleDelay = 200,\n parentContainer,\n closeOnEsc = true,\n disabled,\n onOpen,\n onClose,\n}: Partial<UseOverlayProps> = {}) => {\n const { rootSize } = useContext(context) as { rootSize: number }\n const ctx = useOverlayContext()\n const [isContentLoaded, setContentLoaded] = useState(false)\n\n const [innerAlignX, setInnerAlignX] = useState(alignX)\n const [innerAlignY, setInnerAlignY] = useState(alignY)\n\n const [blocked, handleBlocked] = useState(false)\n const [active, handleActive] = useState(isOpen)\n\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLElement>(null)\n\n const setBlocked = useCallback(() => handleBlocked(true), [])\n const setUnblocked = useCallback(() => handleBlocked(false), [])\n\n const showContent = useCallback(() => {\n handleActive(true)\n }, [])\n\n const hideContent = useCallback(() => {\n handleActive(false)\n }, [])\n\n // For position: absolute, getBoundingClientRect() returns viewport-relative\n // values but the element is positioned relative to its offsetParent.\n // We need to subtract the offsetParent's viewport rect to get correct coords.\n const getAncestorOffset = useCallback(() => {\n if (position !== 'absolute' || !contentRef.current) {\n return { top: 0, left: 0 }\n }\n\n const offsetParent = contentRef.current.offsetParent as HTMLElement | null\n if (!offsetParent || offsetParent === document.body) {\n return { top: 0, left: 0 }\n }\n\n const rect = offsetParent.getBoundingClientRect()\n return { top: rect.top, left: rect.left }\n }, [position])\n\n const calculateContentPosition = useCallback(() => {\n if (!active || !isContentLoaded) return {}\n\n const result = computePosition(\n type,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n triggerRef.current,\n contentRef.current,\n getAncestorOffset(),\n )\n\n if (result.resolvedAlignX) setInnerAlignX(result.resolvedAlignX)\n if (result.resolvedAlignY) setInnerAlignY(result.resolvedAlignY)\n\n return result.pos\n }, [\n isContentLoaded,\n active,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n type,\n getAncestorOffset,\n ])\n\n const assignContentPosition = useCallback(\n (values: OverlayPosition = {}) => {\n if (!contentRef.current) return\n\n const el = contentRef.current\n const setValue = (param?: string | number) =>\n value(param, rootSize) as string\n\n el.style.position = position\n\n // Reset all directional properties first, then apply only the ones\n // present in `values`. This prevents stale values lingering when the\n // overlay flips direction (e.g. top→bottom leaves old `top` behind).\n el.style.top = values.top != null ? setValue(values.top) : ''\n el.style.bottom = values.bottom != null ? setValue(values.bottom) : ''\n el.style.left = values.left != null ? setValue(values.left) : ''\n el.style.right = values.right != null ? setValue(values.right) : ''\n },\n [position, rootSize],\n )\n\n const setContentPosition = useCallback(() => {\n const currentPosition = calculateContentPosition()\n assignContentPosition(currentPosition)\n }, [assignContentPosition, calculateContentPosition])\n\n const isNodeOrChild = useCallback(\n (ref: { current: HTMLElement | null }) => (e: Event) => {\n if (e?.target && ref.current) {\n return (\n ref.current.contains(e.target as Element) || e.target === ref.current\n )\n }\n\n return false\n },\n [],\n )\n\n const handleVisibilityByEventType = useCallback(\n (e: Event) => {\n if (blocked || disabled) return\n\n processVisibilityEvent(\n e,\n active,\n openOn,\n closeOn,\n isNodeOrChild(triggerRef),\n isNodeOrChild(contentRef),\n showContent,\n hideContent,\n )\n },\n [\n active,\n blocked,\n disabled,\n openOn,\n closeOn,\n hideContent,\n showContent,\n isNodeOrChild,\n ],\n )\n\n // Use refs to avoid stale closures in throttled callbacks.\n // The throttled wrappers are stable (only recreated if throttleDelay changes),\n // but always call the latest version of the underlying function via the ref.\n const latestSetContentPosition = useRef(setContentPosition)\n latestSetContentPosition.current = setContentPosition\n\n const latestHandleVisibility = useRef(handleVisibilityByEventType)\n latestHandleVisibility.current = handleVisibilityByEventType\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleContentPosition = useMemo(\n () => throttle(() => latestSetContentPosition.current(), throttleDelay),\n [throttleDelay],\n )\n\n const handleClick = handleVisibilityByEventType\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleVisibility = useMemo(\n () =>\n throttle((e: Event) => latestHandleVisibility.current(e), throttleDelay),\n [throttleDelay],\n )\n\n // --------------------------------------------------------------------------\n // useEffects\n // --------------------------------------------------------------------------\n useEffect(() => {\n setInnerAlignX(alignX)\n setInnerAlignY(alignY)\n\n if (disabled) {\n hideContent()\n }\n }, [disabled, alignX, alignY, hideContent])\n\n useEffect(() => {\n if (!active || !isContentLoaded) return undefined\n\n // First call positions immediately; the rAF callback re-measures after\n // the browser has had a chance to reflow, catching any geometry changes\n // caused by the initial positioning (e.g. content becoming visible).\n setContentPosition()\n const rafId = requestAnimationFrame(() => setContentPosition())\n\n return () => cancelAnimationFrame(rafId)\n }, [active, isContentLoaded, setContentPosition])\n\n // Track previous active state so callbacks only fire on actual transitions,\n // not on every dependency change or unmount-while-closed.\n const prevActiveRef = useRef(false)\n useEffect(() => {\n const wasActive = prevActiveRef.current\n prevActiveRef.current = active\n\n if (active && !wasActive) {\n onOpen?.()\n ctx.setBlocked?.()\n } else if (!active && wasActive) {\n setContentLoaded(false)\n onClose?.()\n ctx.setUnblocked?.()\n } else if (!active) {\n setContentLoaded(false)\n }\n\n return () => {\n // On unmount, only clean up if currently active\n if (active) {\n onClose?.()\n ctx.setUnblocked?.()\n }\n }\n }, [active, ctx, onClose, onOpen])\n\n // handle closing only when content is active\n useEffect(() => {\n if (!closeOnEsc || !active || blocked) return undefined\n\n const handleEscKey = (e: any) => {\n if (e.key === 'Escape') {\n hideContent()\n }\n }\n\n window.addEventListener('keydown', handleEscKey)\n\n return () => {\n window.removeEventListener('keydown', handleEscKey)\n }\n }, [active, blocked, closeOnEsc, hideContent])\n\n // handles repositioning of content on document events\n useEffect(() => {\n if (!active) return undefined\n\n const shouldSetOverflow = type === 'modal'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n if (shouldSetOverflow) document.body.style.overflow = 'hidden'\n window.addEventListener('resize', handleContentPosition)\n window.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n if (shouldSetOverflow) document.body.style.overflow = ''\n window.removeEventListener('resize', handleContentPosition)\n window.removeEventListener('scroll', onScroll)\n }\n }, [active, type, handleVisibility, handleContentPosition])\n\n // handles repositioning of content on a custom element if defined\n useEffect(() => {\n if (!active || !parentContainer) return undefined\n\n // eslint-disable-next-line no-param-reassign\n if (closeOn !== 'hover') parentContainer.style.overflow = 'hidden'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n parentContainer.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n // eslint-disable-next-line no-param-reassign\n parentContainer.style.overflow = ''\n parentContainer.removeEventListener('scroll', onScroll)\n }\n }, [\n active,\n parentContainer,\n closeOn,\n handleContentPosition,\n handleVisibility,\n ])\n\n // Click-based open/close: attach to window\n useEffect(() => {\n if (blocked || disabled) return undefined\n\n const enabledClick =\n openOn === 'click' ||\n ['click', 'clickOnTrigger', 'clickOutsideContent'].includes(closeOn)\n\n if (enabledClick) {\n window.addEventListener('click', handleClick)\n }\n\n return () => {\n window.removeEventListener('click', handleClick)\n }\n }, [openOn, closeOn, blocked, disabled, handleClick])\n\n // Hover-based open/close: mouseenter/mouseleave on trigger + content\n // instead of window-level mousemove (which fires on every pixel of movement).\n // A short timeout bridges the gap between trigger and content elements.\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: isContentLoaded signals contentRef.current is available so the effect re-runs to attach listeners\n useEffect(() => {\n const enabledHover = openOn === 'hover' || closeOn === 'hover'\n if (blocked || disabled || !enabledHover) return undefined\n\n const trigger = triggerRef.current\n const content = contentRef.current\n\n const clearHoverTimeout = () => {\n if (hoverTimeoutRef.current != null) {\n clearTimeout(hoverTimeoutRef.current)\n hoverTimeoutRef.current = null\n }\n }\n\n const scheduleHide = () => {\n clearHoverTimeout()\n hoverTimeoutRef.current = setTimeout(hideContent, 100)\n }\n\n const onTriggerEnter = () => {\n clearHoverTimeout()\n if (openOn === 'hover' && !active) showContent()\n }\n\n const onTriggerLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n const onContentEnter = () => {\n clearHoverTimeout()\n }\n\n const onContentLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n if (trigger) {\n trigger.addEventListener('mouseenter', onTriggerEnter)\n trigger.addEventListener('mouseleave', onTriggerLeave)\n }\n\n if (content) {\n content.addEventListener('mouseenter', onContentEnter)\n content.addEventListener('mouseleave', onContentLeave)\n }\n\n return () => {\n clearHoverTimeout()\n if (trigger) {\n trigger.removeEventListener('mouseenter', onTriggerEnter)\n trigger.removeEventListener('mouseleave', onTriggerLeave)\n }\n if (content) {\n content.removeEventListener('mouseenter', onContentEnter)\n content.removeEventListener('mouseleave', onContentLeave)\n }\n }\n }, [\n active,\n isContentLoaded,\n blocked,\n disabled,\n openOn,\n closeOn,\n showContent,\n hideContent,\n ])\n\n // hack-ish way to load content correctly on the first load\n // as `contentRef` is loaded dynamically\n const contentRefCallback = useCallback((node: HTMLElement) => {\n if (node) {\n contentRef.current = node\n setContentLoaded(true)\n }\n }, [])\n\n return {\n triggerRef,\n contentRef: contentRefCallback,\n active,\n align,\n alignX: innerAlignX,\n alignY: innerAlignY,\n showContent,\n hideContent,\n blocked,\n setBlocked,\n setUnblocked,\n Provider,\n }\n}\n\nexport default useOverlay\n","/**\n * Overlay component that renders a trigger element and conditionally shows\n * content via a Portal. The trigger receives a ref and optional show/hide\n * callbacks; the content is positioned and managed by the useOverlay hook.\n * A context Provider wraps the content to support nested overlays (e.g.,\n * a dropdown inside another dropdown) via blocked-state propagation.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport Portal from '~/Portal'\nimport type { Content, VLComponent } from '~/types'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nconst IS_BROWSER = typeof window !== 'undefined'\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\ntype TriggerRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n }>,\n) => ReactNode\n\ntype ContentRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n align: Align\n alignX: AlignX\n alignY: AlignY\n }>,\n) => ReactNode\n\nexport type Props = {\n /**\n * Children to be rendered within **Overlay** component when Overlay is active.\n */\n children: ContentRenderer | Content\n /**\n * React component to be used as a trigger (e.g. `Button` for opening\n * dropdowns). Component must acept accept `ref` or any other prop name\n * defined in `triggerRefName` prop.\n */\n trigger: TriggerRenderer | Content\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n *\n * For more information follow [Portal](https://vitus-labs.com/docs/ui-system/elements/portal)\n * component.\n */\n DOMLocation?: HTMLElement\n /**\n * Defines a prop name to be used for passing `ref` for **trigger**. By default,\n * the value is `ref`.\n */\n triggerRefName?: string\n /**\n * Defines a prop name to be used for passing `ref` for **content** (passed `children`).\n * By default, the value is `ref`.\n */\n contentRefName?: string\n} & UseOverlayProps\n\nconst Component: VLComponent<Props> = ({\n children,\n trigger,\n DOMLocation,\n triggerRefName = 'ref',\n contentRefName = 'ref',\n ...props\n}) => {\n const {\n active,\n triggerRef,\n contentRef,\n showContent,\n hideContent,\n align,\n alignX,\n alignY,\n Provider,\n ...ctx\n } = useOverlay(props)\n\n const { openOn, closeOn } = props\n\n const passHandlers = useMemo(\n () =>\n openOn === 'manual' ||\n closeOn === 'manual' ||\n closeOn === 'clickOutsideContent',\n [openOn, closeOn],\n )\n\n return (\n <>\n {render(trigger, {\n [triggerRefName]: triggerRef,\n active,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n\n {IS_BROWSER && active && (\n <Portal DOMLocation={DOMLocation}>\n <Provider {...ctx}>\n {render(children, {\n [contentRefName]: contentRef,\n active,\n align,\n alignX,\n alignY,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n </Provider>\n </Portal>\n )}\n </>\n )\n}\n\nconst name = `${PKG_NAME}/Overlay` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import component, { type Props } from './component'\nimport OverlayProvider from './context'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nexport type { Props, UseOverlayProps }\n\nexport { useOverlay, OverlayProvider }\n\nexport default component\n","/**\n * Styled text primitive that inherits color, font-weight, and line-height\n * from its parent so it blends seamlessly into any context. Additional\n * styles can be injected via the responsive `extraStyles` prop processed\n * through makeItResponsive.\n */\nimport { config } from '@vitus-labs/core'\nimport { extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\n\nconst { styled, css, textComponent } = config\n\nconst styles: ResponsiveStylesCallback = ({ css, theme: t }) => css`\n ${t.extraStyles && extendCss(t.extraStyles)};\n`\n\nexport default styled(textComponent)`\n color: inherit;\n font-weight: inherit;\n line-height: 1;\n\n ${makeItResponsive({\n key: '$text',\n styles,\n css,\n normalize: false,\n })};\n`\n","/**\n * Text component for rendering inline or block-level text. Supports a\n * `paragraph` shorthand that automatically renders as a `<p>` tag, or\n * a custom `tag` for semantic HTML (h1-h6, span, etc.). Marked with\n * a static `isText` flag so other components can detect text children.\n */\nimport type { HTMLTextTags } from '@vitus-labs/core'\nimport {\n type ForwardRefRenderFunction,\n forwardRef,\n type ReactNode,\n} from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { ExtendCss, VLForwardedComponent } from '~/types'\nimport Styled from './styled'\n\nexport type Props = Partial<{\n /**\n * Label can be used instead of children for inline syntax. But **children** prop takes a precedence\n */\n label: ReactNode\n /**\n * Children to be rendered within **Text** component.\n */\n children: ReactNode\n /**\n * Defines whether should behave as a block text element. Automatically adds **p** HTML tag\n */\n paragraph: boolean\n /**\n * Defines what kind of HTML tag should be rendered\n */\n tag: HTMLTextTags\n /**\n * If an additional styling needs to be added, it can be do so via injecting styles using this property.\n */\n css: ExtendCss\n}>\n\ntype RenderContent = (as?: any) => ReturnType<ForwardRefRenderFunction<Props>>\n\nconst Component: VLForwardedComponent<Props> & {\n isText?: true\n} = forwardRef(({ paragraph, label, children, tag, css, ...props }, ref) => {\n const renderContent: RenderContent = (as = undefined) => (\n <Styled ref={ref} as={as} $text={{ extraStyles: css }} {...props}>\n {children ?? label}\n </Styled>\n )\n\n let finalTag: string | undefined\n\n if (__WEB__) {\n if (paragraph) finalTag = 'p'\n else {\n finalTag = tag\n }\n }\n\n return renderContent(finalTag)\n})\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Text` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\nComponent.isText = true\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Utility wrapper that injects className and/or style props into its\n * children without adding any DOM nodes of its own. Uses the core `render`\n * helper to clone children with the merged props.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Children to be rendered within **Util** component.\n */\n children: ReactNode\n /**\n * Class name(s) to be added to children component.\n */\n className?: string | string[]\n /**\n * Style property to extend children component inline styles\n */\n style?: Record<string, unknown>\n}\n\nconst Component: VLComponent<Props> = ({ children, className, style }) => {\n const mergedClasses = useMemo(\n () => (Array.isArray(className) ? className.join(' ') : className),\n [className],\n )\n\n const finalProps: Record<string, any> = {}\n if (style) finalProps.style = style\n if (mergedClasses) finalProps.className = mergedClasses\n\n return render(children, finalProps)\n}\n\nconst name = `${PKG_NAME}/Util` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n"],"mappings":"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"}
1
+ {"version":3,"file":"vitus-labs-elements.native.js","names":["styles","component","Component","Styled","component","styles","component","Component","Styled","component","Component","Wrapper","Content","name","component","Component","component","Component","Iterator","Element","name","component","Component","name","component","context","Provider","Component","Portal","name","component","Component","Styled","name","component","Component","component"],"sources":["../src/constants.ts","../src/utils.ts","../src/helpers/Content/styled.ts","../src/helpers/Content/component.tsx","../src/helpers/Content/index.ts","../src/helpers/Wrapper/styled.ts","../src/helpers/Wrapper/component.tsx","../src/helpers/Wrapper/index.ts","../src/Element/component.tsx","../src/Element/withEqualSizeBeforeAfter.tsx","../src/Element/index.ts","../src/helpers/Iterator/component.tsx","../src/helpers/Iterator/index.ts","../src/List/component.tsx","../src/List/withActiveState.tsx","../src/List/index.ts","../src/Portal/component.ts","../src/Portal/index.ts","../src/Overlay/context.tsx","../src/Overlay/useOverlay.tsx","../src/Overlay/component.tsx","../src/Overlay/index.ts","../src/Text/styled.ts","../src/Text/component.tsx","../src/Text/index.ts","../src/Util/component.tsx","../src/Util/index.ts"],"sourcesContent":["export const PKG_NAME = '@vitus-labs/elements' as const\n","export const IS_DEVELOPMENT = process.env.NODE_ENV !== 'production'\n","/**\n * Styled component for content areas (before/content/after). Applies\n * responsive flex alignment, gap spacing between slots based on parent\n * direction (margin-right for inline, margin-bottom for rows), and\n * equalCols flex distribution. The \"content\" slot gets `flex: 1` to\n * fill remaining space between before and after.\n */\nimport { config } from '@vitus-labs/core'\nimport {\n alignContent,\n extendCss,\n makeItResponsive,\n value,\n} from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps, ThemeProps } from './types'\n\nconst { styled, css, component } = config\n\nconst equalColsCSS = `\n flex: 1;\n`\n\nconst typeContentCSS = `\n flex: 1;\n`\n\n// --------------------------------------------------------\n// calculate spacing between before / content / after\n// --------------------------------------------------------\nconst gapDimensions = {\n inline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n reverseInline: {\n before: 'margin-right',\n after: 'margin-left',\n },\n rows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n reverseRows: {\n before: 'margin-bottom',\n after: 'margin-top',\n },\n} as const\n\nconst calculateGap = ({\n direction,\n type,\n value,\n}: {\n direction: keyof typeof gapDimensions\n type: ThemeProps['contentType']\n value: any\n}) => {\n if (!direction || !type || type === 'content') return undefined\n\n const finalStyles = `${gapDimensions[direction][type]}: ${value};`\n\n return finalStyles\n}\n\n// --------------------------------------------------------\n// calculations of styles to be rendered\n// --------------------------------------------------------\nconst styles: ResponsiveStylesCallback = ({ css, theme: t, rootSize }) => css`\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.equalCols && equalColsCSS};\n\n ${\n t.gap &&\n t.contentType &&\n calculateGap({\n direction: t.parentDirection,\n type: t.contentType,\n value: value(t.gap, rootSize),\n })\n };\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : ''\n\nconst StyledComponent = styled(component)<any>`\n ${platformCSS};\n\n display: flex;\n align-self: stretch;\n flex-wrap: wrap;\n\n ${({ $contentType }: StyledProps) =>\n $contentType === 'content' && typeContentCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n\nexport default StyledComponent\n","/**\n * Memoized content area used inside Element to render one of the three\n * layout slots (before, content, after). Passes alignment, direction,\n * gap, and equalCols styling props to the underlying styled component.\n * Adds a `data-vl-element` attribute in development for debugging.\n */\nimport type { FC } from 'react'\nimport { memo } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props } from './types'\n\nconst Component: FC<Partial<Props>> = ({\n contentType,\n tag,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extendCss,\n ...props\n}) => {\n const debugProps = IS_DEVELOPMENT\n ? {\n 'data-vl-element': contentType,\n }\n : {}\n\n const stylingProps = {\n contentType,\n parentDirection,\n direction,\n alignX,\n alignY,\n equalCols,\n gap,\n extraStyles: extendCss,\n }\n\n return (\n <Styled\n as={tag}\n $contentType={contentType}\n $element={stylingProps}\n {...debugProps}\n {...props}\n />\n )\n}\n\nexport default memo(Component)\n","import component from './component'\n\nexport default component\n","/**\n * Styled component for the Element wrapper layer. Handles responsive\n * block/inline-flex display, direction, alignment, and custom CSS injection.\n * Includes special handling for the `parentFix` / `childFix` flags that\n * split flex behavior across two DOM nodes for button/fieldset/legend\n * elements where a single flex container is insufficient.\n */\nimport { config } from '@vitus-labs/core'\nimport { alignContent, extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\nimport type { StyledProps } from './types'\n\nconst { styled, css, component } = config\n\nconst childFixCSS = `\n display: flex;\n flex: 1;\n width: 100%;\n height: 100%;\n`\n\nconst parentFixCSS = `\n flex-direction: column;\n`\n\nconst parentFixBlockCSS = `\n width: 100%;\n`\n\nconst fullHeightCSS = `\n height: 100%;\n`\n\nconst blockCSS = `\n align-self: stretch;\n`\n\nconst childFixPosition = (isBlock?: boolean) =>\n `display: ${isBlock ? 'flex' : 'inline-flex'};`\n\nconst styles: ResponsiveStylesCallback = ({ theme: t, css }) => css`\n ${__WEB__ && t.alignY === 'block' && fullHeightCSS};\n\n ${alignContent({\n direction: t.direction,\n alignX: t.alignX,\n alignY: t.alignY,\n })};\n\n ${t.block && blockCSS};\n\n ${__WEB__ && !t.childFix && childFixPosition(t.block)};\n ${__WEB__ && t.parentFix && t.block && parentFixBlockCSS};\n ${__WEB__ && t.parentFix && parentFixCSS};\n\n ${t.extraStyles && extendCss(t.extraStyles as any)};\n`\n\nconst platformCSS = __WEB__ ? `box-sizing: border-box;` : `display: flex;`\n\nexport default styled(component)<any>`\n position: relative;\n ${platformCSS};\n\n ${({ $childFix }: StyledProps) => $childFix && childFixCSS};\n\n ${makeItResponsive({\n key: '$element',\n styles,\n css,\n normalize: true,\n })};\n`\n","/**\n * Wrapper component that serves as the outermost styled container for Element.\n * Uses forwardRef for ref forwarding to the underlying DOM node. On web, it\n * detects button/fieldset/legend tags and applies a two-layer flex fix\n * (parent + child Styled) because these HTML elements do not natively\n * support `display: flex` consistently across browsers.\n */\nimport { forwardRef } from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Styled from './styled'\nimport type { Props, Reference } from './types'\nimport { isWebFixNeeded } from './utils'\n\nconst DEV_PROPS: Record<string, string> = IS_DEVELOPMENT\n ? { 'data-vl-element': 'Element' }\n : {}\n\nconst Component = forwardRef<Reference, Partial<Props>>(\n (\n {\n children,\n tag,\n block,\n extendCss,\n direction,\n alignX,\n alignY,\n equalCols,\n isInline,\n ...props\n },\n ref,\n ) => {\n const COMMON_PROPS = {\n ...props,\n ...DEV_PROPS,\n ref,\n as: tag,\n }\n\n const needsFix = __WEB__\n ? !props.dangerouslySetInnerHTML && isWebFixNeeded(tag)\n : false\n\n if (!needsFix || __NATIVE__) {\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n block,\n direction,\n alignX,\n alignY,\n equalCols,\n extraStyles: extendCss,\n }}\n >\n {children}\n </Styled>\n )\n }\n\n const asTag = __WEB__ ? (isInline ? 'span' : 'div') : undefined\n\n return (\n <Styled\n {...COMMON_PROPS}\n $element={{\n parentFix: true,\n block,\n extraStyles: extendCss,\n }}\n >\n <Styled\n as={asTag}\n $childFix\n $element={{\n childFix: true,\n direction,\n alignX,\n alignY,\n equalCols,\n }}\n >\n {children}\n </Styled>\n </Styled>\n )\n },\n)\n\nexport default Component\n","import component from './component'\n\nexport default component\n","/**\n * Core building block of the elements package. Renders a three-section layout\n * (beforeContent / content / afterContent) inside a flex Wrapper. When only\n * content is present, the Wrapper inherits content-level alignment directly\n * to avoid an unnecessary nesting layer. Handles HTML-specific edge cases\n * like void elements (input, img) and inline elements (span, a) by\n * skipping children or switching sub-tags accordingly.\n */\nimport { render } from '@vitus-labs/core'\nimport { forwardRef, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport { Content, Wrapper } from '~/helpers'\nimport type { VLElement } from './types'\nimport { getShouldBeEmpty, isInlineElement } from './utils'\n\nconst defaultDirection = 'inline'\nconst defaultContentDirection = 'rows'\nconst defaultAlignX = 'left'\nconst defaultAlignY = 'center'\n\nconst Component: VLElement = forwardRef(\n (\n {\n innerRef,\n tag,\n label,\n content,\n children,\n beforeContent,\n afterContent,\n\n block,\n equalCols,\n gap,\n\n direction,\n alignX = defaultAlignX,\n alignY = defaultAlignY,\n\n css,\n contentCss,\n beforeContentCss,\n afterContentCss,\n\n contentDirection = defaultContentDirection,\n contentAlignX = defaultAlignX,\n contentAlignY = defaultAlignY,\n\n beforeContentDirection = defaultDirection,\n beforeContentAlignX = defaultAlignX,\n beforeContentAlignY = defaultAlignY,\n\n afterContentDirection = defaultDirection,\n afterContentAlignX = defaultAlignX,\n afterContentAlignY = defaultAlignY,\n\n ...props\n },\n ref,\n ) => {\n // --------------------------------------------------------\n // check if should render only single element\n // --------------------------------------------------------\n const shouldBeEmpty = __WEB__\n ? !!props.dangerouslySetInnerHTML || getShouldBeEmpty(tag)\n : false\n\n // --------------------------------------------------------\n // if not single element, calculate values\n // --------------------------------------------------------\n const isSimpleElement = !beforeContent && !afterContent\n const CHILDREN = children ?? content ?? label\n\n const isInline = __WEB__ ? isInlineElement(tag) : false\n const SUB_TAG = __WEB__ && isInline ? 'span' : undefined\n\n // --------------------------------------------------------\n // direction & alignX & alignY calculations\n // --------------------------------------------------------\n const { wrapperDirection, wrapperAlignX, wrapperAlignY } = useMemo(() => {\n let wrapperDirection: typeof direction = direction\n let wrapperAlignX: typeof alignX = alignX\n let wrapperAlignY: typeof alignY = alignY\n\n if (isSimpleElement) {\n if (contentDirection) wrapperDirection = contentDirection\n if (contentAlignX) wrapperAlignX = contentAlignX\n if (contentAlignY) wrapperAlignY = contentAlignY\n } else if (direction) {\n wrapperDirection = direction\n } else {\n wrapperDirection = defaultDirection\n }\n\n return { wrapperDirection, wrapperAlignX, wrapperAlignY }\n }, [\n isSimpleElement,\n contentDirection,\n contentAlignX,\n contentAlignY,\n alignX,\n alignY,\n direction,\n ])\n\n // --------------------------------------------------------\n // common wrapper props\n // --------------------------------------------------------\n const WRAPPER_PROPS = {\n ref: ref ?? innerRef,\n extendCss: css,\n tag,\n block,\n direction: wrapperDirection,\n alignX: wrapperAlignX,\n alignY: wrapperAlignY,\n as: undefined, // reset styled-components `as` prop\n }\n\n // --------------------------------------------------------\n // return simple/empty element like input or image etc.\n // --------------------------------------------------------\n if (shouldBeEmpty) {\n return <Wrapper {...props} {...WRAPPER_PROPS} />\n }\n\n const contentRenderOutput = render(CHILDREN)\n\n return (\n <Wrapper {...props} {...WRAPPER_PROPS} isInline={isInline}>\n {beforeContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"before\"\n parentDirection={wrapperDirection}\n extendCss={beforeContentCss}\n direction={beforeContentDirection}\n alignX={beforeContentAlignX}\n alignY={beforeContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(beforeContent)}\n </Content>\n )}\n\n {isSimpleElement ? (\n contentRenderOutput\n ) : (\n <Content\n tag={SUB_TAG}\n contentType=\"content\"\n parentDirection={wrapperDirection}\n extendCss={contentCss}\n direction={contentDirection}\n alignX={contentAlignX}\n alignY={contentAlignY}\n equalCols={equalCols}\n >\n {contentRenderOutput}\n </Content>\n )}\n\n {afterContent && (\n <Content\n tag={SUB_TAG}\n contentType=\"after\"\n parentDirection={wrapperDirection}\n extendCss={afterContentCss}\n direction={afterContentDirection}\n alignX={afterContentAlignX}\n alignY={afterContentAlignY}\n equalCols={equalCols}\n gap={gap}\n >\n {render(afterContent)}\n </Content>\n )}\n </Wrapper>\n )\n },\n)\n\nconst name = `${PKG_NAME}/Element` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that equalizes the dimensions of beforeContent and afterContent areas.\n * After render, it measures both DOM nodes via useLayoutEffect and sets the\n * larger dimension on both so they match. Uses width for inline direction\n * and height for rows direction. This is useful for centering the main\n * content when before/after slots have different intrinsic sizes.\n */\nimport { type Ref, useImperativeHandle, useLayoutEffect, useRef } from 'react'\nimport type { Props as ElementProps } from './types'\n\nconst types = {\n height: 'offsetHeight',\n width: 'offsetWidth',\n} as const\n\ntype DimensionType = keyof typeof types\n\nconst equalize = (\n beforeEl: HTMLElement,\n afterEl: HTMLElement,\n type: DimensionType,\n) => {\n const prop = types[type]\n const beforeSize = beforeEl[prop]\n const afterSize = afterEl[prop]\n\n if (Number.isInteger(beforeSize) && Number.isInteger(afterSize)) {\n const maxSize = `${Math.max(beforeSize, afterSize)}px`\n beforeEl.style[type] = maxSize\n afterEl.style[type] = maxSize\n }\n}\n\ntype Props = ElementProps &\n Partial<{\n equalBeforeAfter: boolean\n ref: Ref<HTMLElement>\n }>\n\nconst withEqualBeforeAfter = (WrappedComponent: any) => {\n const displayName =\n WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\n\n const Enhanced = ({\n equalBeforeAfter,\n direction,\n afterContent,\n beforeContent,\n ref,\n ...rest\n }: Props) => {\n const internalRef = useRef<HTMLElement>(null)\n\n useImperativeHandle(ref, () => internalRef.current as HTMLElement)\n\n useLayoutEffect(() => {\n if (!equalBeforeAfter || !beforeContent || !afterContent) return\n if (!internalRef.current) return\n\n const el = internalRef.current\n const beforeEl = el.firstElementChild as HTMLElement | null\n const afterEl = el.lastElementChild as HTMLElement | null\n\n if (beforeEl && afterEl && beforeEl !== afterEl) {\n equalize(beforeEl, afterEl, direction === 'rows' ? 'height' : 'width')\n }\n })\n\n return (\n <WrappedComponent\n {...rest}\n afterContent={afterContent}\n beforeContent={beforeContent}\n ref={internalRef}\n />\n )\n }\n\n Enhanced.displayName = `withEqualSizeBeforeAfter(${displayName})`\n\n return Enhanced\n}\n\nexport default withEqualBeforeAfter\n","import component from './component'\nimport type { Props, VLElement } from './types'\nimport withEqualSizeBeforeAfter from './withEqualSizeBeforeAfter'\n\nexport { withEqualSizeBeforeAfter }\nexport type { Props, VLElement }\n\nexport default component\n","/**\n * Data-driven list renderer that supports three input modes: React children\n * (including fragments), an array of primitives, or an array of objects.\n * Each item receives positional metadata (first, last, odd, even, position)\n * and optional injected props via `itemProps`. Items can be individually\n * wrapped with `wrapComponent`. Children always take priority over the\n * component+data prop pattern.\n */\nimport { isEmpty, render } from '@vitus-labs/core'\nimport {\n Children,\n type FC,\n type ReactElement,\n type ReactNode,\n useCallback,\n useMemo,\n} from 'react'\nimport { isFragment } from 'react-is'\nimport type { ExtendedProps, ObjectValue, Props, SimpleValue } from './types'\n\ntype ClassifiedData =\n | { type: 'simple'; data: SimpleValue[] }\n | { type: 'complex'; data: ObjectValue[] }\n | null\n\nconst classifyData = (data: unknown[]): ClassifiedData => {\n const items = data.filter(\n (item) =>\n item != null && !(typeof item === 'object' && isEmpty(item as any)),\n )\n\n if (items.length === 0) return null\n\n let isSimple = true\n let isComplex = true\n\n for (const item of items) {\n if (typeof item === 'string' || typeof item === 'number') {\n isComplex = false\n } else if (typeof item === 'object') {\n isSimple = false\n } else {\n isSimple = false\n isComplex = false\n }\n }\n\n if (isSimple) return { type: 'simple', data: items as SimpleValue[] }\n if (isComplex) return { type: 'complex', data: items as ObjectValue[] }\n return null\n}\n\nconst RESERVED_PROPS = [\n 'children',\n 'component',\n 'wrapComponent',\n 'data',\n 'itemKey',\n 'valueName',\n 'itemProps',\n 'wrapProps',\n] as const\n\ntype AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => ExtendedProps\n\nconst attachItemProps: AttachItemProps = ({\n i,\n length,\n}: {\n i: number\n length: number\n}) => {\n const position = i + 1\n\n return {\n index: i,\n first: position === 1,\n last: position === length,\n odd: position % 2 === 1,\n even: position % 2 === 0,\n position,\n }\n}\n\ntype Static = {\n isIterator: true\n RESERVED_PROPS: typeof RESERVED_PROPS\n}\n\nconst Component: FC<Props> & Static = (props) => {\n const {\n itemKey,\n valueName,\n children,\n component,\n data,\n wrapComponent: Wrapper,\n wrapProps,\n itemProps,\n } = props\n\n const injectItemProps = useMemo(\n () => (typeof itemProps === 'function' ? itemProps : () => itemProps),\n [itemProps],\n )\n\n const injectWrapItemProps = useMemo(\n () => (typeof wrapProps === 'function' ? wrapProps : () => wrapProps),\n [wrapProps],\n )\n\n const getKey = useCallback(\n (item: string | number, index: number) => {\n if (typeof itemKey === 'function') return itemKey(item, index)\n\n return index\n },\n [itemKey],\n )\n\n const renderChild = (child: ReactNode, total = 1, i = 0) => {\n if (!itemProps && !Wrapper) return child\n\n const extendedProps = attachItemProps({\n i,\n length: total,\n })\n\n const finalItemProps = itemProps ? injectItemProps({}, extendedProps) : {}\n\n // if no props extension is required, just return children\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({}, extendedProps)\n : {}\n\n return (\n <Wrapper key={i} {...finalWrapProps}>\n {render(child, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(child, {\n key: i,\n ...finalItemProps,\n })\n }\n\n // --------------------------------------------------------\n // render children\n // --------------------------------------------------------\n const renderChildren = () => {\n if (!children) return null\n\n // if children is Array\n if (Array.isArray(children)) {\n return Children.map(children, (item, i) =>\n renderChild(item, children.length, i),\n )\n }\n\n // if children is Fragment\n if (isFragment(children)) {\n const fragmentChildren = (\n children as ReactElement<{ children: ReactNode[] }>\n ).props.children\n const childrenLength = fragmentChildren.length\n\n return fragmentChildren.map((item, i) =>\n renderChild(item, childrenLength, i),\n )\n }\n\n // if single child\n return renderChild(children)\n }\n\n // --------------------------------------------------------\n // render array of strings or numbers\n // --------------------------------------------------------\n const renderSimpleArray = (data: SimpleValue[]) => {\n const { length } = data\n\n // if the data array is empty\n if (length === 0) return null\n\n return data.map((item, i) => {\n const key = getKey(item, i)\n const keyName = valueName ?? 'children'\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps\n ? injectItemProps({ [keyName]: item }, extendedProps)\n : {}),\n [keyName]: item,\n }\n\n if (Wrapper) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps({ [keyName]: item }, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(component, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(component, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render array of objects\n // --------------------------------------------------------\n const getObjectKey = (item: ObjectValue, index: number) => {\n if (!itemKey) return item.key ?? item.id ?? item.itemId ?? index\n if (typeof itemKey === 'function') return itemKey(item, index)\n if (typeof itemKey === 'string') return item[itemKey]\n\n return index\n }\n\n const renderComplexArray = (data: ObjectValue[]) => {\n const { length } = data\n\n if (length === 0) return null\n\n return data.map((item, i) => {\n const { component: itemComponent, ...restItem } = item\n const renderItem = itemComponent ?? component\n const key = getObjectKey(restItem, i)\n const extendedProps = attachItemProps({\n i,\n length,\n })\n\n const finalItemProps = {\n ...(itemProps ? injectItemProps(item, extendedProps) : {}),\n ...restItem,\n }\n\n if (Wrapper && !itemComponent) {\n const finalWrapProps = wrapProps\n ? injectWrapItemProps(item, extendedProps)\n : {}\n\n return (\n <Wrapper key={key} {...finalWrapProps}>\n {render(renderItem, finalItemProps)}\n </Wrapper>\n )\n }\n\n return render(renderItem, { key, ...finalItemProps })\n })\n }\n\n // --------------------------------------------------------\n // render list items\n // --------------------------------------------------------\n const renderItems = () => {\n // --------------------------------------------------------\n // children have priority over props component + data\n // --------------------------------------------------------\n if (children) return renderChildren()\n\n // --------------------------------------------------------\n // render props component + data\n // single pass: filter nullish/empty and determine array type\n // --------------------------------------------------------\n if (component && Array.isArray(data)) {\n const classified = classifyData(data)\n if (!classified) return null\n if (classified.type === 'simple')\n return renderSimpleArray(classified.data)\n return renderComplexArray(classified.data)\n }\n\n // --------------------------------------------------------\n // if there are no children or valid react component and data as an array,\n // return null to prevent error\n // --------------------------------------------------------\n return null\n }\n\n return renderItems()\n}\n\nComponent.isIterator = true\nComponent.RESERVED_PROPS = RESERVED_PROPS\n\nexport default Component\n","import component from './component'\nimport type {\n ElementType,\n ExtendedProps,\n ObjectValue,\n Props,\n PropsCallback,\n} from './types'\n\nexport type { Props, PropsCallback, ObjectValue, ExtendedProps, ElementType }\n\nexport default component\n","/**\n * List component that combines Iterator (data-driven rendering) with an\n * optional Element root wrapper. When `rootElement` is false (default),\n * it renders a bare Iterator as a fragment. When true, the Iterator output\n * is wrapped in an Element that receives all non-iterator props (e.g.,\n * layout, alignment, css), allowing the list to be styled as a single block.\n */\nimport { omit, pick } from '@vitus-labs/core'\nimport { forwardRef } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLElement } from '~/Element'\nimport Element from '~/Element'\nimport type { Props as IteratorProps } from '~/helpers/Iterator'\nimport Iterator from '~/helpers/Iterator'\nimport type { MergeTypes } from '~/types'\n\ntype ListProps = {\n /**\n * A boolean value. When set to `false`, component returns `React.Fragment`\n * When set to `true`, component returns as the **root** element `Element`\n * component.\n */\n rootElement?: boolean\n /**\n * Label prop from `Element` component is being ignored.\n */\n label: never\n /**\n * Content prop from `Element` component is being ignored.\n */\n content: never\n}\n\nexport type Props = MergeTypes<[IteratorProps, ListProps]>\n\nconst Component: VLElement<Props> = forwardRef(\n ({ rootElement = false, ...props }, ref) => {\n const renderedList = <Iterator {...pick(props, Iterator.RESERVED_PROPS)} />\n\n if (!rootElement) return renderedList\n\n return (\n <Element ref={ref} {...omit(props, Iterator.RESERVED_PROPS)}>\n {renderedList}\n </Element>\n )\n },\n)\n\nconst name = `${PKG_NAME}/List` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","/**\n * HOC that adds single or multi selection state management to a list component.\n * Tracks which items are active via a scalar key (single mode) or a Map of\n * key-to-boolean entries (multi mode). Injects `itemProps` callback that\n * provides each item with `active`, `handleItemActive`, `toggleItemActive`,\n * and other selection helpers. Supports `activeItemRequired` to prevent\n * deselecting the last active item.\n */\n// @ts-nocheck\nimport { useEffect, useState } from 'react'\nimport type { SimpleHoc } from '~/types'\n\nconst RESERVED_KEYS = [\n 'type',\n 'activeItems',\n 'itemProps',\n 'activeItemRequired',\n] as const\n\ntype Key = string | number\ntype MultipleMap = Map<Key, boolean>\n\ninterface ItemPropsData {\n key: Key\n first: boolean\n last: boolean\n odd: boolean\n even: boolean\n position: number\n}\n\ninterface Props {\n type?: 'single' | 'multi'\n activeItemRequired?: boolean\n activeItems?: Key | (string | number)[]\n itemProps?:\n | Record<string, unknown>\n | ((props: Record<string, unknown>) => Record<string, unknown>)\n}\n\nconst component: SimpleHoc<Props> = (WrappedComponent) => {\n const displayName =\n WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n const Enhanced = (props: Props) => {\n const {\n type = 'single',\n activeItemRequired,\n activeItems,\n itemProps = {},\n ...rest\n } = props\n\n type InitActiveItems = () => Key | MultipleMap | undefined\n const initActiveItems: InitActiveItems = () => {\n if (type === 'single') {\n if (!Array.isArray(activeItems)) {\n return activeItems\n }\n } else if (type === 'multi') {\n const activeItemsHelper = Array.isArray(activeItems)\n ? activeItems\n : [activeItems]\n\n return new Map(activeItemsHelper.map((id) => [id, true]))\n }\n\n return undefined\n }\n\n const [innerActiveItems, setActiveItems] = useState(initActiveItems())\n\n const countActiveItems = (data) => {\n let result = 0\n\n data.forEach((value) => {\n if (value) result += 1\n })\n\n return result\n }\n\n const updateItemState = (key: Key) => {\n if (type === 'single') {\n setActiveItems((prevState) => {\n if (activeItemRequired) return key\n if (prevState === key) return undefined\n\n return key\n })\n } else if (type === 'multi') {\n setActiveItems((prevState: MultipleMap) => {\n // TODO: add conditional type to fix this\n const activeItems = new Map(prevState)\n\n if (\n activeItemRequired &&\n activeItems.get(key) &&\n countActiveItems(activeItems) === 1\n ) {\n return activeItems\n }\n\n activeItems.set(key, !activeItems.get(key))\n return activeItems\n })\n } else {\n setActiveItems(undefined)\n }\n }\n\n const handleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const updateAllItemsState = (status) => {\n if (!status) {\n setActiveItems(new Map())\n }\n }\n\n const setItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const unsetItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n const toggleItemActive = (key: Key) => {\n updateItemState(key)\n }\n\n // const setAllItemsActive = () => {\n // updateAllItemsState(true)\n // }\n\n const unsetAllItemsActive = () => {\n updateAllItemsState(false)\n }\n\n const isItemActive = (key: Key): boolean => {\n if (!innerActiveItems) return false\n if (type === 'single') return innerActiveItems === key\n if (type === 'multi' && innerActiveItems instanceof Map) {\n return !!innerActiveItems.get(key)\n }\n return false\n }\n\n const attachMultipleProps = {\n unsetAllItemsActive,\n }\n\n const attachItemProps = (props: ItemPropsData) => {\n const { key } = props\n\n const defaultItemProps =\n typeof itemProps === 'object' ? itemProps : itemProps(props)\n\n const result = {\n ...defaultItemProps,\n active: isItemActive(key),\n handleItemActive: () => handleItemActive(key),\n setItemActive,\n unsetItemActive,\n toggleItemActive,\n ...(type === 'multi' ? attachMultipleProps : {}),\n }\n\n return result\n }\n\n useEffect(() => {\n if (type === 'single' && Array.isArray(activeItems)) {\n if (process.env.NODE_ENV !== 'production') {\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(\n '[@vitus-labs/elements] List/withActiveState: ' +\n '`activeItems` was passed as an array but `type` is \"single\". ' +\n 'In single selection mode, `activeItems` should be a single key (string | number). ' +\n 'The array value will be ignored.',\n )\n }\n }\n }, [type, activeItems])\n\n return <WrappedComponent {...rest} itemProps={attachItemProps} />\n }\n Enhanced.RESERVED_KEYS = RESERVED_KEYS\n Enhanced.displayName = `@vitus-labs/elements/List/withActiveState(${displayName})`\n\n return Enhanced\n}\n\nexport default component\n","import type { Props } from './component'\nimport component from './component'\nimport withActiveState from './withActiveState'\n\nexport type { Props }\nexport { withActiveState }\n\nexport default component\n","/**\n * Portal component that creates a new DOM element on mount, appends it to\n * the target location (defaults to document.body), and uses React's\n * createPortal to render children into it. The DOM element is cleaned up\n * on unmount. Accepts a custom DOMLocation for rendering into specific\n * containers (e.g., a modal root).\n */\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n */\n DOMLocation?: HTMLElement\n /**\n * Children to be rendered within **Portal** component.\n */\n children: ReactNode\n /**\n * Valid HTML Tag\n */\n tag?: string\n}\n\nconst Component: VLComponent<Props> = ({\n DOMLocation,\n tag = 'div',\n children,\n}: Props) => {\n const [element, setElement] = useState<HTMLElement>()\n\n useEffect(() => {\n if (!tag) return undefined\n\n const position = DOMLocation ?? document.body\n const element = document.createElement(tag)\n setElement(element)\n\n position.appendChild(element)\n\n return () => {\n position.removeChild(element)\n }\n }, [tag, DOMLocation])\n\n if (!tag || !element) return null\n\n return createPortal(children, element)\n}\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Portal` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Context for nested overlay coordination. When a child overlay opens, it\n * sets the parent's blocked state to true, preventing the parent from\n * closing in response to click/hover events that belong to the child.\n */\nimport {\n createContext,\n type FC,\n type ReactNode,\n useContext,\n useMemo,\n} from 'react'\n\nexport interface Context {\n blocked: boolean\n setBlocked: () => void\n setUnblocked: () => void\n}\n\nconst context = createContext<Context>({} as Context)\n\nconst { Provider } = context\n\nexport const useOverlayContext = () => useContext(context)\n\nconst Component: FC<Context & { children: ReactNode }> = ({\n children,\n blocked,\n setBlocked,\n setUnblocked,\n}) => {\n const ctx = useMemo(\n () => ({\n blocked,\n setBlocked,\n setUnblocked,\n }),\n [blocked, setBlocked, setUnblocked],\n )\n\n return <Provider value={ctx}>{children}</Provider>\n}\n\nexport default Component\n","/**\n * Core hook powering the Overlay component. Manages open/close state, DOM\n * event listeners (click, hover, scroll, resize, ESC key), and dynamic\n * positioning of overlay content relative to its trigger. Supports dropdown,\n * tooltip, popover, and modal types with automatic edge-of-viewport flipping.\n * Event handlers are throttled for performance, and nested overlay blocking\n * is coordinated through the overlay context.\n */\nimport { context, throttle } from '@vitus-labs/core'\nimport { value } from '@vitus-labs/unistyle'\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { IS_DEVELOPMENT } from '~/utils'\nimport Provider, { useOverlayContext } from './context'\n\ntype OverlayPosition = Partial<{\n top: number | string\n bottom: number | string\n left: number | string\n right: number | string\n}>\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\nexport type UseOverlayProps = Partial<{\n /**\n * Defines default state whether **Overlay** component should be active.\n * @defaultValue `false`\n */\n isOpen: boolean\n /**\n * Defines `event` when **Overlay** is supposed to be open.\n *\n * When `manual` is set, callbacks needs to be applied to make it working.\n * @defaultValue `click`\n */\n openOn: 'click' | 'hover' | 'manual'\n /**\n * Defines `event` when **Overlay** is supposed to be closed.\n * @defaultValue `click`\n */\n closeOn:\n | 'click'\n | 'clickOnTrigger'\n | 'clickOutsideContent'\n | 'hover'\n | 'manual'\n\n /**\n * Defines what type of **Overlay** will be created. Type `modal`\n * has different positioning calculations than others.\n * @defaultValue `dropdown`\n */\n type: 'dropdown' | 'tooltip' | 'popover' | 'modal' | 'custom'\n /**\n * Defines how `content` is treated regarding CSS positioning.\n * @defaultValue `fixed`\n */\n position: 'absolute' | 'fixed' | 'relative' | 'static'\n /**\n * Defines from which side is `content` aligned to `trigger` (top, left, bottom, right).\n * For more specific alignment configuration can be used `alignX` and/or `alignY` prop.\n * @defaultValue `bottom`\n */\n align: Align\n /**\n * Defines how `content` is aligned to `trigger` on axis X\n * @defaultValue `left`\n */\n alignX: AlignX\n /**\n * Defines how `content` is aligned to `trigger` on axis Y\n * @defaultValue `bottom`\n */\n alignY: AlignY\n /**\n * Defines `margin` from trigger on axis X.\n * @defaultValue `0`\n */\n offsetX: number\n /**\n * Defines `margin` from trigger on axis Y.\n * @defaultValue `0`\n */\n offsetY: number\n /**\n * Performance helper. Value defined in milliseconds for `throttling`\n * recalculations\n * @defaultValue `200`\n */\n throttleDelay: number\n /**\n * A valid HTML element. Prop can be used for ability to handle properly\n * scrolling inside custom scrollable HTML element.\n */\n parentContainer: HTMLElement | null\n /**\n * Defines whether active **Overlay** is supposed to be closed on pressing\n * `ESC` key.\n * @defaultValue `true`\n */\n closeOnEsc: boolean\n /**\n * When set to `true`, **Overlay** is automatically closed and is blocked for\n * being opened.\n */\n disabled: boolean\n /**\n * A callback hook to be called when **Overlay** is being opened. Does not\n * accept any arguments.\n */\n onOpen: () => void\n /**\n * A callback hook to be called when **Overlay** is being closed. Does not\n * accept any arguments.\n */\n onClose: () => void\n}>\n\ntype PositionResult = {\n pos: OverlayPosition\n resolvedAlignX: AlignX\n resolvedAlignY: AlignY\n}\n\nconst sel = <T,>(cond: boolean, a: T, b: T): T => (cond ? a : b)\n\nconst devWarn = (msg: string) => {\n if (!IS_DEVELOPMENT) return\n // biome-ignore lint/suspicious/noConsole: dev-mode warning\n console.warn(msg)\n}\n\nconst calcDropdownVertical = (\n c: DOMRect,\n t: DOMRect,\n align: 'top' | 'bottom',\n alignX: AlignX,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const topPos = t.top - offsetY - c.height\n const bottomPos = t.bottom + offsetY\n const leftPos = t.left + offsetX\n const rightPos = t.right - offsetX - c.width\n\n const fitsTop = topPos >= 0\n const fitsBottom = bottomPos + c.height <= window.innerHeight\n const fitsLeft = leftPos + c.width <= window.innerWidth\n const fitsRight = rightPos >= 0\n\n const useTop = sel(align === 'top', fitsTop, !fitsBottom)\n pos.top = sel(useTop, topPos, bottomPos)\n const resolvedAlignY: AlignY = sel(useTop, 'top', 'bottom')\n\n let resolvedAlignX: AlignX = alignX\n if (alignX === 'left') {\n pos.left = sel(fitsLeft, leftPos, rightPos)\n resolvedAlignX = sel(fitsLeft, 'left', 'right')\n } else if (alignX === 'right') {\n pos.left = sel(fitsRight, rightPos, leftPos)\n resolvedAlignX = sel(fitsRight, 'right', 'left')\n } else {\n const center = t.left + (t.right - t.left) / 2 - c.width / 2\n const fitsCL = center >= 0\n const fitsCR = center + c.width <= window.innerWidth\n\n if (fitsCL && fitsCR) {\n resolvedAlignX = 'center'\n pos.left = center\n } else if (fitsCL) {\n resolvedAlignX = 'left'\n pos.left = leftPos\n } else if (fitsCR) {\n resolvedAlignX = 'right'\n pos.left = rightPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcDropdownHorizontal = (\n c: DOMRect,\n t: DOMRect,\n align: 'left' | 'right',\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): PositionResult => {\n const pos: OverlayPosition = {}\n\n const leftPos = t.left - offsetX - c.width\n const rightPos = t.right + offsetX\n const topPos = t.top + offsetY\n const bottomPos = t.bottom - offsetY - c.height\n\n const fitsLeft = leftPos >= 0\n const fitsRight = rightPos + c.width <= window.innerWidth\n const fitsTop = topPos + c.height <= window.innerHeight\n const fitsBottom = bottomPos >= 0\n\n const useLeft = sel(align === 'left', fitsLeft, !fitsRight)\n pos.left = sel(useLeft, leftPos, rightPos)\n const resolvedAlignX: AlignX = sel(useLeft, 'left', 'right')\n\n let resolvedAlignY: AlignY = alignY\n if (alignY === 'top') {\n pos.top = sel(fitsTop, topPos, bottomPos)\n resolvedAlignY = sel(fitsTop, 'top', 'bottom')\n } else if (alignY === 'bottom') {\n pos.top = sel(fitsBottom, bottomPos, topPos)\n resolvedAlignY = sel(fitsBottom, 'bottom', 'top')\n } else {\n const center = t.top + (t.bottom - t.top) / 2 - c.height / 2\n const fitsCT = center >= 0\n const fitsCB = center + c.height <= window.innerHeight\n\n if (fitsCT && fitsCB) {\n resolvedAlignY = 'center'\n pos.top = center\n } else if (fitsCT) {\n resolvedAlignY = 'top'\n pos.top = topPos\n } else if (fitsCB) {\n resolvedAlignY = 'bottom'\n pos.top = bottomPos\n }\n }\n\n return { pos, resolvedAlignX, resolvedAlignY }\n}\n\nconst calcModalPos = (\n c: DOMRect,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n): OverlayPosition => {\n const pos: OverlayPosition = {}\n\n switch (alignX) {\n case 'right':\n pos.right = offsetX\n break\n case 'left':\n pos.left = offsetX\n break\n case 'center':\n pos.left = window.innerWidth / 2 - c.width / 2\n break\n default:\n pos.right = offsetX\n }\n\n switch (alignY) {\n case 'top':\n pos.top = offsetY\n break\n case 'center':\n pos.top = window.innerHeight / 2 - c.height / 2\n break\n case 'bottom':\n pos.bottom = offsetY\n break\n default:\n pos.top = offsetY\n }\n\n return pos\n}\n\nconst adjustForAncestor = (\n pos: OverlayPosition,\n ancestor: { top: number; left: number },\n): OverlayPosition => {\n if (ancestor.top === 0 && ancestor.left === 0) return pos\n\n const result = { ...pos }\n if (typeof result.top === 'number') result.top -= ancestor.top\n if (typeof result.bottom === 'number') result.bottom += ancestor.top\n if (typeof result.left === 'number') result.left -= ancestor.left\n if (typeof result.right === 'number') result.right += ancestor.left\n\n return result\n}\n\ntype ComputeResult = {\n pos: OverlayPosition\n resolvedAlignX?: AlignX\n resolvedAlignY?: AlignY\n}\n\nconst computePosition = (\n type: string,\n align: Align,\n alignX: AlignX,\n alignY: AlignY,\n offsetX: number,\n offsetY: number,\n triggerEl: HTMLElement | null,\n contentEl: HTMLElement | null,\n ancestorOffset: { top: number; left: number },\n): ComputeResult => {\n const isDropdown = ['dropdown', 'tooltip', 'popover'].includes(type)\n\n if (isDropdown && (!triggerEl || !contentEl)) {\n devWarn(\n `[@vitus-labs/elements] Overlay (${type}): ` +\n `${triggerEl ? 'contentRef' : 'triggerRef'} is not attached. ` +\n 'Position cannot be calculated without both refs.',\n )\n return { pos: {} }\n }\n\n if (isDropdown && triggerEl && contentEl) {\n const c = contentEl.getBoundingClientRect()\n const t = triggerEl.getBoundingClientRect()\n const result =\n align === 'top' || align === 'bottom'\n ? calcDropdownVertical(c, t, align, alignX, offsetX, offsetY)\n : calcDropdownHorizontal(\n c,\n t,\n align as 'left' | 'right',\n alignY,\n offsetX,\n offsetY,\n )\n\n return {\n pos: adjustForAncestor(result.pos, ancestorOffset),\n resolvedAlignX: result.resolvedAlignX,\n resolvedAlignY: result.resolvedAlignY,\n }\n }\n\n if (type === 'modal') {\n if (!contentEl) {\n devWarn(\n '[@vitus-labs/elements] Overlay (modal): contentRef is not attached. ' +\n 'Modal position cannot be calculated without a content element.',\n )\n return { pos: {} }\n }\n const c = contentEl.getBoundingClientRect()\n return {\n pos: adjustForAncestor(\n calcModalPos(c, alignX, alignY, offsetX, offsetY),\n ancestorOffset,\n ),\n }\n }\n\n return { pos: {} }\n}\n\nconst processVisibilityEvent = (\n e: Event,\n active: boolean,\n openOn: string,\n closeOn: string,\n isTrigger: (e: Event) => boolean,\n isContent: (e: Event) => boolean,\n showContent: () => void,\n hideContent: () => void,\n) => {\n // Open on click (hover is handled by dedicated mouseenter/mouseleave)\n if (!active && openOn === 'click' && e.type === 'click' && isTrigger(e)) {\n showContent()\n return\n }\n\n if (!active) return\n\n // Close handlers\n if (closeOn === 'hover' && e.type === 'scroll') {\n hideContent()\n return\n }\n\n if (e.type !== 'click') return\n\n if (closeOn === 'click') {\n hideContent()\n } else if (closeOn === 'clickOnTrigger' && isTrigger(e)) {\n hideContent()\n } else if (closeOn === 'clickOutsideContent' && !isContent(e)) {\n hideContent()\n }\n}\n\nconst useOverlay = ({\n isOpen = false,\n openOn = 'click', // click | hover\n closeOn = 'click', // click | 'clickOnTrigger' | 'clickOutsideContent' | hover | manual\n type = 'dropdown', // dropdown | tooltip | popover | modal\n position = 'fixed', // absolute | fixed | relative | static\n align = 'bottom', // main align prop top | left | bottom | right\n alignX = 'left', // left | center | right\n alignY = 'bottom', // top | center | bottom\n offsetX = 0,\n offsetY = 0,\n throttleDelay = 200,\n parentContainer,\n closeOnEsc = true,\n disabled,\n onOpen,\n onClose,\n}: Partial<UseOverlayProps> = {}) => {\n const { rootSize } = useContext(context) as { rootSize: number }\n const ctx = useOverlayContext()\n const [isContentLoaded, setContentLoaded] = useState(false)\n\n const [innerAlignX, setInnerAlignX] = useState(alignX)\n const [innerAlignY, setInnerAlignY] = useState(alignY)\n\n const [blocked, handleBlocked] = useState(false)\n const [active, handleActive] = useState(isOpen)\n\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLElement>(null)\n\n const setBlocked = useCallback(() => handleBlocked(true), [])\n const setUnblocked = useCallback(() => handleBlocked(false), [])\n\n const showContent = useCallback(() => {\n handleActive(true)\n }, [])\n\n const hideContent = useCallback(() => {\n handleActive(false)\n }, [])\n\n // For position: absolute, getBoundingClientRect() returns viewport-relative\n // values but the element is positioned relative to its offsetParent.\n // We need to subtract the offsetParent's viewport rect to get correct coords.\n const getAncestorOffset = useCallback(() => {\n if (position !== 'absolute' || !contentRef.current) {\n return { top: 0, left: 0 }\n }\n\n const offsetParent = contentRef.current.offsetParent as HTMLElement | null\n if (!offsetParent || offsetParent === document.body) {\n return { top: 0, left: 0 }\n }\n\n const rect = offsetParent.getBoundingClientRect()\n return { top: rect.top, left: rect.left }\n }, [position])\n\n const calculateContentPosition = useCallback(() => {\n if (!active || !isContentLoaded) return {}\n\n const result = computePosition(\n type,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n triggerRef.current,\n contentRef.current,\n getAncestorOffset(),\n )\n\n if (result.resolvedAlignX) setInnerAlignX(result.resolvedAlignX)\n if (result.resolvedAlignY) setInnerAlignY(result.resolvedAlignY)\n\n return result.pos\n }, [\n isContentLoaded,\n active,\n align,\n alignX,\n alignY,\n offsetX,\n offsetY,\n type,\n getAncestorOffset,\n ])\n\n const assignContentPosition = useCallback(\n (values: OverlayPosition = {}) => {\n if (!contentRef.current) return\n\n const el = contentRef.current\n const setValue = (param?: string | number) =>\n value(param, rootSize) as string\n\n el.style.position = position\n\n // Reset all directional properties first, then apply only the ones\n // present in `values`. This prevents stale values lingering when the\n // overlay flips direction (e.g. top→bottom leaves old `top` behind).\n el.style.top = values.top != null ? setValue(values.top) : ''\n el.style.bottom = values.bottom != null ? setValue(values.bottom) : ''\n el.style.left = values.left != null ? setValue(values.left) : ''\n el.style.right = values.right != null ? setValue(values.right) : ''\n },\n [position, rootSize],\n )\n\n const setContentPosition = useCallback(() => {\n const currentPosition = calculateContentPosition()\n assignContentPosition(currentPosition)\n }, [assignContentPosition, calculateContentPosition])\n\n const isNodeOrChild = useCallback(\n (ref: { current: HTMLElement | null }) => (e: Event) => {\n if (e?.target && ref.current) {\n return (\n ref.current.contains(e.target as Element) || e.target === ref.current\n )\n }\n\n return false\n },\n [],\n )\n\n const handleVisibilityByEventType = useCallback(\n (e: Event) => {\n if (blocked || disabled) return\n\n processVisibilityEvent(\n e,\n active,\n openOn,\n closeOn,\n isNodeOrChild(triggerRef),\n isNodeOrChild(contentRef),\n showContent,\n hideContent,\n )\n },\n [\n active,\n blocked,\n disabled,\n openOn,\n closeOn,\n hideContent,\n showContent,\n isNodeOrChild,\n ],\n )\n\n // Use refs to avoid stale closures in throttled callbacks.\n // The throttled wrappers are stable (only recreated if throttleDelay changes),\n // but always call the latest version of the underlying function via the ref.\n const latestSetContentPosition = useRef(setContentPosition)\n latestSetContentPosition.current = setContentPosition\n\n const latestHandleVisibility = useRef(handleVisibilityByEventType)\n latestHandleVisibility.current = handleVisibilityByEventType\n\n const handleContentPosition = useMemo(\n () => throttle(() => latestSetContentPosition.current(), throttleDelay),\n [throttleDelay],\n )\n\n const handleClick = handleVisibilityByEventType\n\n const handleVisibility = useMemo(\n () =>\n throttle((e: Event) => latestHandleVisibility.current(e), throttleDelay),\n [throttleDelay],\n )\n\n // --------------------------------------------------------------------------\n // useEffects\n // --------------------------------------------------------------------------\n useEffect(() => {\n setInnerAlignX(alignX)\n setInnerAlignY(alignY)\n\n if (disabled) {\n hideContent()\n }\n }, [disabled, alignX, alignY, hideContent])\n\n useEffect(() => {\n if (!active || !isContentLoaded) return undefined\n\n // First call positions immediately; the rAF callback re-measures after\n // the browser has had a chance to reflow, catching any geometry changes\n // caused by the initial positioning (e.g. content becoming visible).\n setContentPosition()\n const rafId = requestAnimationFrame(() => setContentPosition())\n\n return () => cancelAnimationFrame(rafId)\n }, [active, isContentLoaded, setContentPosition])\n\n // Track previous active state so callbacks only fire on actual transitions,\n // not on every dependency change or unmount-while-closed.\n const prevActiveRef = useRef(false)\n useEffect(() => {\n const wasActive = prevActiveRef.current\n prevActiveRef.current = active\n\n if (active && !wasActive) {\n onOpen?.()\n ctx.setBlocked?.()\n } else if (!active && wasActive) {\n setContentLoaded(false)\n onClose?.()\n ctx.setUnblocked?.()\n } else if (!active) {\n setContentLoaded(false)\n }\n\n return () => {\n // On unmount, only clean up if currently active\n if (active) {\n onClose?.()\n ctx.setUnblocked?.()\n }\n }\n }, [active, ctx, onClose, onOpen])\n\n // handle closing only when content is active\n useEffect(() => {\n if (!closeOnEsc || !active || blocked) return undefined\n\n const handleEscKey = (e: any) => {\n if (e.key === 'Escape') {\n hideContent()\n }\n }\n\n window.addEventListener('keydown', handleEscKey)\n\n return () => {\n window.removeEventListener('keydown', handleEscKey)\n }\n }, [active, blocked, closeOnEsc, hideContent])\n\n // handles repositioning of content on document events\n useEffect(() => {\n if (!active) return undefined\n\n const shouldSetOverflow = type === 'modal'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n if (shouldSetOverflow) document.body.style.overflow = 'hidden'\n window.addEventListener('resize', handleContentPosition)\n window.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n if (shouldSetOverflow) document.body.style.overflow = ''\n window.removeEventListener('resize', handleContentPosition)\n window.removeEventListener('scroll', onScroll)\n }\n }, [active, type, handleVisibility, handleContentPosition])\n\n // handles repositioning of content on a custom element if defined\n useEffect(() => {\n if (!active || !parentContainer) return undefined\n\n if (closeOn !== 'hover') parentContainer.style.overflow = 'hidden'\n\n const onScroll = (e: Event) => {\n handleContentPosition()\n handleVisibility(e)\n }\n\n parentContainer.addEventListener('scroll', onScroll, { passive: true })\n\n return () => {\n parentContainer.style.overflow = ''\n parentContainer.removeEventListener('scroll', onScroll)\n }\n }, [\n active,\n parentContainer,\n closeOn,\n handleContentPosition,\n handleVisibility,\n ])\n\n // Click-based open/close: attach to window\n useEffect(() => {\n if (blocked || disabled) return undefined\n\n const enabledClick =\n openOn === 'click' ||\n ['click', 'clickOnTrigger', 'clickOutsideContent'].includes(closeOn)\n\n if (enabledClick) {\n window.addEventListener('click', handleClick)\n }\n\n return () => {\n window.removeEventListener('click', handleClick)\n }\n }, [openOn, closeOn, blocked, disabled, handleClick])\n\n // Hover-based open/close: mouseenter/mouseleave on trigger + content\n // instead of window-level mousemove (which fires on every pixel of movement).\n // A short timeout bridges the gap between trigger and content elements.\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: isContentLoaded signals contentRef.current is available so the effect re-runs to attach listeners\n useEffect(() => {\n const enabledHover = openOn === 'hover' || closeOn === 'hover'\n if (blocked || disabled || !enabledHover) return undefined\n\n const trigger = triggerRef.current\n const content = contentRef.current\n\n const clearHoverTimeout = () => {\n if (hoverTimeoutRef.current != null) {\n clearTimeout(hoverTimeoutRef.current)\n hoverTimeoutRef.current = null\n }\n }\n\n const scheduleHide = () => {\n clearHoverTimeout()\n hoverTimeoutRef.current = setTimeout(hideContent, 100)\n }\n\n const onTriggerEnter = () => {\n clearHoverTimeout()\n if (openOn === 'hover' && !active) showContent()\n }\n\n const onTriggerLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n const onContentEnter = () => {\n clearHoverTimeout()\n }\n\n const onContentLeave = () => {\n if (closeOn === 'hover' && active) scheduleHide()\n }\n\n if (trigger) {\n trigger.addEventListener('mouseenter', onTriggerEnter)\n trigger.addEventListener('mouseleave', onTriggerLeave)\n }\n\n if (content) {\n content.addEventListener('mouseenter', onContentEnter)\n content.addEventListener('mouseleave', onContentLeave)\n }\n\n return () => {\n clearHoverTimeout()\n if (trigger) {\n trigger.removeEventListener('mouseenter', onTriggerEnter)\n trigger.removeEventListener('mouseleave', onTriggerLeave)\n }\n if (content) {\n content.removeEventListener('mouseenter', onContentEnter)\n content.removeEventListener('mouseleave', onContentLeave)\n }\n }\n }, [\n active,\n isContentLoaded,\n blocked,\n disabled,\n openOn,\n closeOn,\n showContent,\n hideContent,\n ])\n\n // hack-ish way to load content correctly on the first load\n // as `contentRef` is loaded dynamically\n const contentRefCallback = useCallback((node: HTMLElement) => {\n if (node) {\n contentRef.current = node\n setContentLoaded(true)\n }\n }, [])\n\n return {\n triggerRef,\n contentRef: contentRefCallback,\n active,\n align,\n alignX: innerAlignX,\n alignY: innerAlignY,\n showContent,\n hideContent,\n blocked,\n setBlocked,\n setUnblocked,\n Provider,\n }\n}\n\nexport default useOverlay\n","/**\n * Overlay component that renders a trigger element and conditionally shows\n * content via a Portal. The trigger receives a ref and optional show/hide\n * callbacks; the content is positioned and managed by the useOverlay hook.\n * A context Provider wraps the content to support nested overlays (e.g.,\n * a dropdown inside another dropdown) via blocked-state propagation.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport Portal from '~/Portal'\nimport type { Content, VLComponent } from '~/types'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nconst IS_BROWSER = typeof window !== 'undefined'\n\ntype Align = 'bottom' | 'top' | 'left' | 'right'\ntype AlignX = 'left' | 'center' | 'right'\ntype AlignY = 'bottom' | 'top' | 'center'\n\ntype TriggerRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n }>,\n) => ReactNode\n\ntype ContentRenderer = (\n props: Partial<{\n active: boolean\n showContent: () => void\n hideContent: () => void\n align: Align\n alignX: AlignX\n alignY: AlignY\n }>,\n) => ReactNode\n\nexport type Props = {\n /**\n * Children to be rendered within **Overlay** component when Overlay is active.\n */\n children: ContentRenderer | Content\n /**\n * React component to be used as a trigger (e.g. `Button` for opening\n * dropdowns). Component must acept accept `ref` or any other prop name\n * defined in `triggerRefName` prop.\n */\n trigger: TriggerRenderer | Content\n /**\n * Defines a HTML DOM where children to be appended. Component uses JavaScript\n * [`Node.appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)\n *\n * For more information follow [Portal](https://vitus-labs.com/docs/ui-system/elements/portal)\n * component.\n */\n DOMLocation?: HTMLElement\n /**\n * Defines a prop name to be used for passing `ref` for **trigger**. By default,\n * the value is `ref`.\n */\n triggerRefName?: string\n /**\n * Defines a prop name to be used for passing `ref` for **content** (passed `children`).\n * By default, the value is `ref`.\n */\n contentRefName?: string\n} & UseOverlayProps\n\nconst Component: VLComponent<Props> = ({\n children,\n trigger,\n DOMLocation,\n triggerRefName = 'ref',\n contentRefName = 'ref',\n ...props\n}) => {\n const {\n active,\n triggerRef,\n contentRef,\n showContent,\n hideContent,\n align,\n alignX,\n alignY,\n Provider,\n ...ctx\n } = useOverlay(props)\n\n const { openOn, closeOn } = props\n\n const passHandlers = useMemo(\n () =>\n openOn === 'manual' ||\n closeOn === 'manual' ||\n closeOn === 'clickOutsideContent',\n [openOn, closeOn],\n )\n\n return (\n <>\n {render(trigger, {\n [triggerRefName]: triggerRef,\n active,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n\n {IS_BROWSER && active && (\n <Portal DOMLocation={DOMLocation}>\n <Provider {...ctx}>\n {render(children, {\n [contentRefName]: contentRef,\n active,\n align,\n alignX,\n alignY,\n ...(passHandlers ? { showContent, hideContent } : {}),\n })}\n </Provider>\n </Portal>\n )}\n </>\n )\n}\n\nconst name = `${PKG_NAME}/Overlay` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import component, { type Props } from './component'\nimport OverlayProvider from './context'\nimport useOverlay, { type UseOverlayProps } from './useOverlay'\n\nexport type { Props, UseOverlayProps }\n\nexport { useOverlay, OverlayProvider }\n\nexport default component\n","/**\n * Styled text primitive that inherits color, font-weight, and line-height\n * from its parent so it blends seamlessly into any context. Additional\n * styles can be injected via the responsive `extraStyles` prop processed\n * through makeItResponsive.\n */\nimport { config } from '@vitus-labs/core'\nimport { extendCss, makeItResponsive } from '@vitus-labs/unistyle'\nimport type { ResponsiveStylesCallback } from '~/types'\n\nconst { styled, css, textComponent } = config\n\nconst styles: ResponsiveStylesCallback = ({ css, theme: t }) => css`\n ${t.extraStyles && extendCss(t.extraStyles)};\n`\n\nexport default styled(textComponent)`\n color: inherit;\n font-weight: inherit;\n line-height: 1;\n\n ${makeItResponsive({\n key: '$text',\n styles,\n css,\n normalize: false,\n })};\n`\n","/**\n * Text component for rendering inline or block-level text. Supports a\n * `paragraph` shorthand that automatically renders as a `<p>` tag, or\n * a custom `tag` for semantic HTML (h1-h6, span, etc.). Marked with\n * a static `isText` flag so other components can detect text children.\n */\nimport type { HTMLTextTags } from '@vitus-labs/core'\nimport {\n type ForwardRefRenderFunction,\n forwardRef,\n type ReactNode,\n} from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { ExtendCss, VLForwardedComponent } from '~/types'\nimport Styled from './styled'\n\nexport type Props = Partial<{\n /**\n * Label can be used instead of children for inline syntax. But **children** prop takes a precedence\n */\n label: ReactNode\n /**\n * Children to be rendered within **Text** component.\n */\n children: ReactNode\n /**\n * Defines whether should behave as a block text element. Automatically adds **p** HTML tag\n */\n paragraph: boolean\n /**\n * Defines what kind of HTML tag should be rendered\n */\n tag: HTMLTextTags\n /**\n * If an additional styling needs to be added, it can be do so via injecting styles using this property.\n */\n css: ExtendCss\n}>\n\ntype RenderContent = (as?: any) => ReturnType<ForwardRefRenderFunction<Props>>\n\nconst Component: VLForwardedComponent<Props> & {\n isText?: true\n} = forwardRef(({ paragraph, label, children, tag, css, ...props }, ref) => {\n const renderContent: RenderContent = (as = undefined) => (\n <Styled ref={ref} as={as} $text={{ extraStyles: css }} {...props}>\n {children ?? label}\n </Styled>\n )\n\n let finalTag: string | undefined\n\n if (__WEB__) {\n if (paragraph) finalTag = 'p'\n else {\n finalTag = tag\n }\n }\n\n return renderContent(finalTag)\n})\n\n// ----------------------------------------------\n// DEFINE STATICS\n// ----------------------------------------------\nconst name = `${PKG_NAME}/Text` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\nComponent.isText = true\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n","/**\n * Utility wrapper that injects className and/or style props into its\n * children without adding any DOM nodes of its own. Uses the core `render`\n * helper to clone children with the merged props.\n */\nimport { render } from '@vitus-labs/core'\nimport { type ReactNode, useMemo } from 'react'\nimport { PKG_NAME } from '~/constants'\nimport type { VLComponent } from '~/types'\n\nexport interface Props {\n /**\n * Children to be rendered within **Util** component.\n */\n children: ReactNode\n /**\n * Class name(s) to be added to children component.\n */\n className?: string | string[]\n /**\n * Style property to extend children component inline styles\n */\n style?: Record<string, unknown>\n}\n\nconst Component: VLComponent<Props> = ({ children, className, style }) => {\n const mergedClasses = useMemo(\n () => (Array.isArray(className) ? className.join(' ') : className),\n [className],\n )\n\n const finalProps: Record<string, any> = {}\n if (style) finalProps.style = style\n if (mergedClasses) finalProps.className = mergedClasses\n\n return render(children, finalProps)\n}\n\nconst name = `${PKG_NAME}/Util` as const\n\nComponent.displayName = name\nComponent.pkgName = PKG_NAME\nComponent.VITUS_LABS__COMPONENT = name\n\nexport default Component\n","import type { Props } from './component'\nimport component from './component'\n\nexport type { Props }\nexport default component\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitus-labs/elements",
3
- "version": "1.3.1",
3
+ "version": "1.3.2-alpha.2+5db1de0",
4
4
  "license": "MIT",
5
5
  "author": "Vit Bokisch <vit@bokisch.cz>",
6
6
  "maintainers": [
@@ -55,15 +55,15 @@
55
55
  "styled-components": ">= 6"
56
56
  },
57
57
  "devDependencies": {
58
- "@vitus-labs/core": "1.3.1",
59
- "@vitus-labs/rocketstyle": "1.3.1",
58
+ "@vitus-labs/core": "1.3.2-alpha.2+5db1de0",
59
+ "@vitus-labs/rocketstyle": "1.3.2-alpha.2+5db1de0",
60
60
  "@vitus-labs/tools-rolldown": "^1.6.0",
61
61
  "@vitus-labs/tools-storybook": "^1.6.0",
62
62
  "@vitus-labs/tools-typescript": "^1.6.0",
63
- "@vitus-labs/unistyle": "1.3.1"
63
+ "@vitus-labs/unistyle": "1.3.2-alpha.2+5db1de0"
64
64
  },
65
65
  "dependencies": {
66
66
  "react-is": "^19.2.3"
67
67
  },
68
- "gitHead": "bb22d6fa565082f85feab8275cb01ec51e4fc531"
68
+ "gitHead": "5db1de07a7b0efa905c31b01c21b2576fc68e664"
69
69
  }