{"version":3,"file":"AppNavi.cjs","sources":["../../../src/components/AppNavi/AppNavi.tsx"],"sourcesContent":["import {\n  Children,\n  type ComponentPropsWithoutRef,\n  type FC,\n  Fragment,\n  type PropsWithChildren,\n  type ReactNode,\n  isValidElement,\n  memo,\n  useId,\n  useMemo,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { Nav } from '../SectioningContent'\nimport { StatusLabel } from '../StatusLabel'\n\nimport { AppNaviAnchor, type AppNaviAnchorProps } from './AppNaviAnchor'\nimport { AppNaviButton, type AppNaviButtonProps } from './AppNaviButton'\nimport { AppNaviCustomTag, type AppNaviCustomTagProps } from './AppNaviCustomTag'\nimport { AppNaviDropdown, type AppNaviDropdownProps } from './AppNaviDropdown'\n\ntype AbstractProps = PropsWithChildren<{\n  /** ラベルのテキスト */\n  label?: ReactNode\n  /** 表示するボタンの Props の配列\n   * @deprecated AppNaviButton などのコンポーネントを組み合わせて組み上げてください\n   */\n  buttons?: Array<\n    AppNaviButtonProps | AppNaviAnchorProps | AppNaviDropdownProps | AppNaviCustomTagProps\n  >\n  /** ドロップダウンにキャレットを表示するかどうか\n   * @deprecated キャレットの省略は非推奨です\n   */\n  displayDropdownCaret?: boolean\n  /** 追加の領域 */\n  additionalArea?: ReactNode\n}>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'div'>, keyof AbstractProps>\n\nconst classNameGenerator = tv({\n  slots: {\n    wrapper: [\n      'smarthr-ui-AppNavi',\n      'shr-flex shr-min-w-max shr-items-center shr-bg-white shr-px-1.5 shr-shadow-layer-1',\n    ],\n    statusLabel: ['smarthr-ui-AppNavi-label', 'shr-me-1 shr-shrink-0'],\n    buttonsEl: [\n      'smarthr-ui-AppNavi-buttons',\n      'shr-flex shr-items-stretch shr-gap-1 shr-self-stretch',\n    ],\n    listItem: ['smarthr-ui-AppNavi-listItem', 'shr-list-none'],\n    additionalAreaEl: 'shr-ms-auto',\n  },\n})\n\nconst { wrapper, statusLabel, buttonsEl, listItem, additionalAreaEl } = classNameGenerator()\nconst classNames = {\n  statusLabel: statusLabel(),\n  buttonsEl: buttonsEl(),\n  listItem: listItem(),\n  additionalAreaEl: additionalAreaEl(),\n}\n\nexport const AppNavi: FC<Props> = ({\n  label,\n  buttons,\n  className,\n  children,\n  displayDropdownCaret,\n  additionalArea,\n  ...rest\n}) => {\n  const labelId = useId()\n  const wrapperClassName = useMemo(() => wrapper({ className }), [className])\n\n  return (\n    <Nav {...rest} aria-labelledby={labelId} className={wrapperClassName}>\n      <MemoizedStatusLabel id={labelId}>{label}</MemoizedStatusLabel>\n      <ul className={classNames.buttonsEl}>\n        {buttons &&\n          buttons.map((button, i) => (\n            <li key={i} className={classNames.listItem}>\n              {'tag' in button ? (\n                <AppNaviCustomTag {...button} />\n              ) : 'href' in button ? (\n                <AppNaviAnchor {...button} />\n              ) : 'dropdownContent' in button ? (\n                <AppNaviDropdown {...button} displayCaret={displayDropdownCaret} />\n              ) : (\n                <AppNaviButton {...button} />\n              )}\n            </li>\n          ))}\n        {renderButtons(children)}\n      </ul>\n\n      {additionalArea && <div className={classNames.additionalAreaEl}>{additionalArea}</div>}\n    </Nav>\n  )\n}\n\nconst MemoizedStatusLabel = memo<PropsWithChildren<{ id: string }>>(\n  ({ id, children }) =>\n    children && (\n      <StatusLabel aria-hidden={true} id={id} className={classNames.statusLabel}>\n        {children}\n      </StatusLabel>\n    ),\n)\n\nconst renderButtons = (children: ReactNode) =>\n  Children.map(children, (child): ReactNode => {\n    if (!child || !isValidElement(child)) {\n      return null\n    }\n\n    if (child.type === Fragment) {\n      return renderButtons(child.props.children)\n    }\n\n    return <li className={classNames.listItem}>{child}</li>\n  })\n"],"names":["tv","useId","useMemo","_jsxs","Nav","_jsx","AppNaviCustomTag","AppNaviAnchor","AppNaviDropdown","AppNaviButton","memo","StatusLabel","Children","isValidElement","Fragment"],"mappings":"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"}