{"version":3,"file":"AccordionItem.mjs","names":["Flexbox"],"sources":["../../src/Accordion/AccordionItem.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { AnimatePresence } from 'motion/react';\nimport {\n  type ComponentPropsWithoutRef,\n  type CSSProperties,\n  type KeyboardEvent,\n  memo,\n  type ReactNode,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n} from 'react';\nimport useMergeState from 'use-merge-value';\n\nimport Block from '@/Block';\nimport { Flexbox } from '@/Flex';\nimport { type MotionComponentType, useMotionComponent } from '@/MotionProvider';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport ArrowIcon from './ArrowIcon';\nimport { useAccordionContext } from './context';\nimport { styles } from './style';\nimport { type AccordionItemProps } from './type';\n\ntype AccordionContentBaseProps = {\n  children?: ReactNode;\n  className?: string;\n  contentInnerClassName: string;\n  style?: CSSProperties;\n};\n\ntype AccordionStaticContentProps = AccordionContentBaseProps & {\n  isOpen: boolean;\n  keepContentMounted: boolean;\n};\n\ntype MotionDivProps = ComponentPropsWithoutRef<MotionComponentType['div']>;\n\ntype AccordionMotionContentProps = AccordionContentBaseProps & {\n  contextMotionProps?: MotionDivProps;\n  isOpen: boolean;\n  skipInitialAnimation: boolean;\n};\n\ntype AccordionItemContentProps = AccordionContentBaseProps & {\n  contextMotionProps?: MotionDivProps;\n  disableAnimation: boolean;\n  isOpen: boolean;\n  keepContentMounted: boolean;\n  skipInitialAnimation: boolean;\n};\n\nconst motionContainerStyle: CSSProperties = { overflow: 'hidden' };\n\nconst AccordionStaticContent = memo<AccordionStaticContentProps>(\n  ({ className, style, children, contentInnerClassName, isOpen, keepContentMounted }) => {\n    if (keepContentMounted) {\n      return (\n        <div\n          className={className}\n          role=\"region\"\n          style={{\n            display: isOpen ? 'block' : 'none',\n            ...style,\n          }}\n        >\n          <div className={contentInnerClassName}>{children}</div>\n        </div>\n      );\n    }\n\n    if (!isOpen) return null;\n\n    return (\n      <div className={className} role=\"region\" style={style}>\n        <div className={contentInnerClassName}>{children}</div>\n      </div>\n    );\n  },\n);\n\nAccordionStaticContent.displayName = 'AccordionStaticContent';\n\nconst AccordionMotionContent = memo<AccordionMotionContentProps>(\n  ({\n    contextMotionProps,\n    className,\n    style,\n    children,\n    contentInnerClassName,\n    isOpen,\n    skipInitialAnimation,\n  }) => {\n    const Motion = useMotionComponent();\n\n    const motionProps = useMemo(\n      () => ({\n        animate: 'enter',\n        exit: 'exit',\n        initial: skipInitialAnimation ? false : 'exit',\n        variants: {\n          enter: {\n            height: 'auto',\n            opacity: 1,\n            transition: {\n              duration: 0.2,\n              ease: [0.4, 0, 0.2, 1],\n            },\n          },\n          exit: {\n            height: 0,\n            opacity: 0,\n            transition: {\n              duration: 0.2,\n              ease: [0.4, 0, 0.2, 1],\n            },\n          },\n        },\n        ...contextMotionProps,\n      }),\n      [contextMotionProps, skipInitialAnimation],\n    );\n\n    return (\n      <AnimatePresence initial={false}>\n        {isOpen ? (\n          <Motion.div {...(motionProps as any)} style={motionContainerStyle}>\n            <div className={className} role=\"region\" style={style}>\n              <div className={contentInnerClassName}>{children}</div>\n            </div>\n          </Motion.div>\n        ) : null}\n      </AnimatePresence>\n    );\n  },\n);\n\nAccordionMotionContent.displayName = 'AccordionMotionContent';\n\nconst AccordionItemContent = memo<AccordionItemContentProps>(\n  ({\n    disableAnimation,\n    isOpen,\n    keepContentMounted,\n    className,\n    style,\n    children,\n    contentInnerClassName,\n    contextMotionProps,\n    skipInitialAnimation,\n  }) => {\n    if (disableAnimation || !keepContentMounted) {\n      return (\n        <AccordionStaticContent\n          className={className}\n          contentInnerClassName={contentInnerClassName}\n          isOpen={isOpen}\n          keepContentMounted={keepContentMounted}\n          style={style}\n        >\n          {children}\n        </AccordionStaticContent>\n      );\n    }\n\n    return (\n      <AccordionMotionContent\n        className={className}\n        contentInnerClassName={contentInnerClassName}\n        contextMotionProps={contextMotionProps}\n        isOpen={isOpen}\n        skipInitialAnimation={skipInitialAnimation}\n        style={style}\n      >\n        {children}\n      </AccordionMotionContent>\n    );\n  },\n);\n\nAccordionItemContent.displayName = 'AccordionItemContent';\n\nconst AccordionItem = memo<AccordionItemProps>(\n  ({\n    itemKey,\n    title,\n    children,\n    action,\n    alwaysShowAction = false,\n    disabled = false,\n    allowExpand = true,\n    hideIndicator: itemHideIndicator,\n    indicatorPlacement: itemIndicatorPlacement,\n    indicator: customIndicator,\n    classNames,\n    paddingInline = 16,\n    paddingBlock = 8,\n    padding,\n    ref,\n    variant: customVariant,\n    styles: customStyles,\n    headerWrapper,\n    defaultExpand,\n    expand,\n    onExpandChange,\n  }) => {\n    const context = useAccordionContext();\n\n    // Determine if using standalone mode (has expand or defaultExpand props)\n    const isStandalone = expand !== undefined || defaultExpand !== undefined;\n\n    // Standalone state management\n    const [isExpandedStandalone, setIsExpandedStandalone] = useMergeState<boolean>(\n      defaultExpand ?? false,\n      {\n        onChange: onExpandChange,\n        value: expand,\n      },\n    );\n\n    // Context values (may be null if used standalone)\n    const contextIsExpanded = context?.isExpanded;\n    const contextOnToggle = context?.onToggle;\n    const contextHideIndicator = context?.hideIndicator;\n    const contextIndicatorPlacement = context?.indicatorPlacement;\n    const contextKeepContentMounted = context?.keepContentMounted;\n    const contextDisableAnimation = context?.disableAnimation;\n    const contextMotionProps = context?.motionProps;\n    const contextVariant = context?.variant ?? 'borderless';\n\n    const isInitialRenderRef = useRef(true);\n\n    useEffect(() => {\n      isInitialRenderRef.current = false;\n    }, []);\n\n    // Determine expanded state\n    const isOpen = isStandalone\n      ? isExpandedStandalone\n      : contextIsExpanded\n        ? contextIsExpanded(itemKey)\n        : false;\n\n    // Determine other props with fallbacks\n    const hideIndicatorFinal = itemHideIndicator ?? contextHideIndicator ?? false;\n    const indicatorPlacementFinal = itemIndicatorPlacement ?? contextIndicatorPlacement ?? 'start';\n    const keepContentMounted = contextKeepContentMounted ?? true;\n    const disableAnimation = contextDisableAnimation ?? false;\n    const variant = customVariant || contextVariant;\n\n    const handleToggle = useCallback(() => {\n      // If allowExpand is false, only allow controlled expansion via expand prop\n      if (!allowExpand) return;\n\n      if (!disabled) {\n        if (isStandalone) {\n          setIsExpandedStandalone(!isExpandedStandalone);\n        } else if (contextOnToggle) {\n          contextOnToggle(itemKey);\n        }\n      }\n    }, [\n      allowExpand,\n      disabled,\n      isStandalone,\n      setIsExpandedStandalone,\n      isExpandedStandalone,\n      contextOnToggle,\n      itemKey,\n    ]);\n\n    const handleKeyDown = useCallback(\n      (e: KeyboardEvent) => {\n        // If allowExpand is false, disable keyboard toggle\n        if (!allowExpand || disabled) return;\n\n        switch (e.key) {\n          case 'Enter':\n          case ' ': {\n            e.preventDefault();\n            handleToggle();\n            break;\n          }\n        }\n      },\n      [allowExpand, disabled, handleToggle],\n    );\n\n    const preventTitleTextSelection = useCallback((e: any) => {\n      // Prevent browser from creating a selection range on double/multi click,\n      // which can accidentally select the content region.\n      if (e?.detail > 1) e.preventDefault();\n    }, []);\n\n    // Build indicator\n    const indicator = useMemo(() => {\n      if (!allowExpand || hideIndicatorFinal) return null;\n\n      if (customIndicator) {\n        if (typeof customIndicator === 'function') {\n          return (\n            <span\n              aria-hidden=\"true\"\n              className={cx(styles.indicator, classNames?.indicator)}\n              style={customStyles?.indicator}\n            >\n              {customIndicator({ isDisabled: disabled, isOpen })}\n            </span>\n          );\n        }\n        return (\n          <span\n            aria-hidden=\"true\"\n            className={cx(styles.indicator, classNames?.indicator)}\n            style={customStyles?.indicator}\n          >\n            {customIndicator}\n          </span>\n        );\n      }\n\n      return (\n        <span\n          aria-hidden=\"true\"\n          className={cx(styles.indicator, classNames?.indicator)}\n          style={customStyles?.indicator}\n        >\n          <ArrowIcon className={cx(styles.icon, isOpen && styles.iconRotate)} />\n        </span>\n      );\n    }, [\n      allowExpand,\n      hideIndicatorFinal,\n      customIndicator,\n      disabled,\n      isOpen,\n      classNames,\n      customStyles,\n    ]);\n\n    const skipInitialAnimation = isInitialRenderRef.current && isOpen;\n\n    const contentClassName = useMemo(\n      () => cx('accordion-content', styles.content, classNames?.content),\n      [classNames?.content],\n    );\n\n    const titleNode = useMemo(\n      () =>\n        typeof title === 'string' ? (\n          <Text ellipsis className={classNames?.title} style={customStyles?.title}>\n            {title}\n          </Text>\n        ) : (\n          title\n        ),\n      [title, classNames?.title, customStyles?.title],\n    );\n\n    const actionNode = useMemo(\n      () =>\n        action && (\n          <Flexbox\n            horizontal\n            align={'center'}\n            flex={'none'}\n            gap={4}\n            style={customStyles?.action}\n            className={cx(\n              'accordion-action',\n              styles.action,\n              alwaysShowAction && styles.actionVisible,\n              classNames?.action,\n            )}\n            onClick={stopPropagation}\n          >\n            {action}\n          </Flexbox>\n        ),\n      [action, alwaysShowAction, cx, styles, classNames?.action, customStyles?.action],\n    );\n\n    const headerElement = useMemo(() => {\n      const header = (\n        <Block\n          horizontal\n          className={cx('accordion-header', styles.header, classNames?.header)}\n          clickable={!disabled && allowExpand}\n          gap={4}\n          justify={'space-between'}\n          padding={padding}\n          paddingBlock={paddingBlock}\n          paddingInline={paddingInline}\n          ref={ref}\n          variant={customVariant || variant}\n          style={{\n            alignItems: 'center',\n            cursor: disabled ? 'not-allowed' : allowExpand ? 'pointer' : 'default',\n            opacity: disabled ? 0.5 : undefined,\n            overflow: 'hidden',\n            width: '100%',\n            ...customStyles?.header,\n          }}\n          onClick={handleToggle}\n          onKeyDown={handleKeyDown}\n        >\n          {indicatorPlacementFinal === 'start' ? (\n            <>\n              <Flexbox\n                horizontal\n                align={'center'}\n                className={styles.titleWrapper}\n                flex={1}\n                gap={2}\n                style={{\n                  overflow: 'hidden',\n                }}\n                onDoubleClick={preventTitleTextSelection}\n                onMouseDown={preventTitleTextSelection}\n              >\n                {titleNode}\n                {indicator}\n              </Flexbox>\n              <Flexbox horizontal align={'center'} flex={'none'} gap={4}>\n                {actionNode}\n              </Flexbox>\n            </>\n          ) : (\n            <>\n              <Flexbox\n                horizontal\n                align={'center'}\n                className={styles.titleWrapper}\n                flex={1}\n                gap={2}\n                style={{\n                  overflow: 'hidden',\n                }}\n                onDoubleClick={preventTitleTextSelection}\n                onMouseDown={preventTitleTextSelection}\n              >\n                {titleNode}\n              </Flexbox>\n              <Flexbox horizontal align={'center'} flex={'none'} gap={4}>\n                {actionNode}\n                {indicator}\n              </Flexbox>\n            </>\n          )}\n        </Block>\n      );\n      if (headerWrapper) {\n        return headerWrapper(header);\n      }\n      return header;\n    }, [\n      classNames?.header,\n      disabled,\n      allowExpand,\n      padding,\n      paddingBlock,\n      paddingInline,\n      ref,\n      customVariant,\n      variant,\n      customStyles?.header,\n      handleToggle,\n      handleKeyDown,\n      indicatorPlacementFinal,\n      preventTitleTextSelection,\n      titleNode,\n      indicator,\n      actionNode,\n      headerWrapper,\n    ]);\n\n    return (\n      <div\n        className={cx('accordion-item', styles.item, classNames?.base)}\n        style={customStyles?.base}\n      >\n        {headerElement}\n        <AccordionItemContent\n          className={contentClassName}\n          contentInnerClassName={styles.contentInner}\n          contextMotionProps={contextMotionProps}\n          disableAnimation={!!disableAnimation}\n          isOpen={isOpen}\n          keepContentMounted={!!keepContentMounted}\n          skipInitialAnimation={skipInitialAnimation}\n          style={customStyles?.content}\n        >\n          {children}\n        </AccordionItemContent>\n      </div>\n    );\n  },\n);\n\nAccordionItem.displayName = 'AccordionItem';\n\nexport default AccordionItem;\n"],"mappings":"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"}