{"version":3,"file":"Header.cjs","sources":["../../../src/components/Header/Header.tsx"],"sourcesContent":["import {\n  type ComponentProps,\n  type FC,\n  type MouseEvent,\n  type PropsWithChildren,\n  type ReactElement,\n  type ReactNode,\n  memo,\n  useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { Button } from '../Button'\nimport { Cluster } from '../Layout'\nimport { SmartHRLogo } from '../SmartHRLogo'\nimport { Text } from '../Text'\n\nimport { AppLauncher, HeaderDropdownMenuButton } from '.'\n\nconst classNameGenerator = tv({\n  slots: {\n    wrapper: ['smarthr-ui-Header', 'shr-bg-brand shr-px-1.25', 'max-md:shr-px-0.75'],\n    logoLink: [\n      'smarthr-ui-Header-logoLink',\n      /* ロゴが持つ padding 分だけ調整 */\n      '-shr-ms-0.75',\n      'focus-visible:shr-focus-indicator',\n    ],\n    tenantInfo: ['smarthr-ui-Header-tenantInfo', 'shr-ms-auto'],\n    tenantNameText: 'shr-px-0.25',\n    actions: ['smarthr-ui-Header-actions', 'shr-ms-auto'],\n  },\n  variants: {\n    enableNew: {\n      true: {\n        wrapper: [\n          'shr-border-0 shr-border-b shr-border-t-6 shr-border-solid shr-border-b-default shr-border-t-brand shr-bg-white shr-px-1.5',\n        ],\n        logoLink: '',\n        tenantInfo: '',\n        tenantNameText: '',\n        actions: 'shr-py-0.5',\n      },\n    },\n  },\n})\n\ntype Tenant = PropsWithChildren<{\n  id: string\n  name: ReactNode\n}>\n\ntype AbstractProps = PropsWithChildren<{\n  /** ロゴ */\n  logo?: ReactElement\n  /** ロゴリンク */\n  logoHref?: string\n  /** 機能名（enableNew と合わせて使います） */\n  featureName?: ReactNode\n  /** 機能群（enableNew と合わせて使います） */\n  apps?: ComponentProps<typeof AppLauncher>['apps']\n  /** テナント一覧 */\n  tenants?: Tenant[]\n  /** 現在のテナント ID */\n  currentTenantId?: string\n  /** テナントが選択された時に発火するコールバック関数 */\n  onTenantSelect?: (id: string) => void\n  /** @deprecated internal-ui から利用するので使わないでください。 */\n  enableNew?: boolean\n}> &\n  VariantProps<typeof classNameGenerator>\ntype Props = AbstractProps & Omit<ComponentProps<'header'>, keyof AbstractProps>\n\nconst COMMON_GAP = { column: 0.25, row: 0 } as const\nconst CHILDREN_GAP = { column: 0.5, row: 0.25 } as const\n\nexport const Header: FC<Props> = ({\n  enableNew,\n  logo,\n  logoHref,\n  featureName,\n  apps,\n  tenants,\n  currentTenantId,\n  onTenantSelect,\n  children,\n  className,\n}) => {\n  const classNames = useMemo(() => {\n    const {\n      wrapper,\n      logoLink,\n      tenantInfo: tenantInfoStyle,\n      tenantNameText,\n      actions,\n    } = classNameGenerator({ enableNew })\n\n    return {\n      wrapper: wrapper({ className }),\n      logoLink: logoLink(),\n      tenantInfo: tenantInfoStyle(),\n      tenantNameText: tenantNameText(),\n      actions: actions(),\n    }\n  }, [enableNew, className])\n\n  return (\n    <Cluster as=\"header\" justify=\"space-between\" gap={COMMON_GAP} className={classNames.wrapper}>\n      <Cluster align=\"center\" gap={COMMON_GAP}>\n        <Logo href={logoHref} enableNew={enableNew} className={classNames.logoLink}>\n          {logo}\n        </Logo>\n        {enableNew ? (\n          <MemoizedAppLauncher featureName={featureName} apps={apps} enableNew={enableNew} />\n        ) : (\n          <TenantSwitcher\n            currentTenantId={currentTenantId}\n            tenants={tenants}\n            classNames={classNames}\n            onTenantSelect={onTenantSelect}\n          />\n        )}\n      </Cluster>\n      <Cluster align=\"center\" justify=\"flex-end\" gap={CHILDREN_GAP} className={classNames.actions}>\n        {children}\n      </Cluster>\n    </Cluster>\n  )\n}\n\nconst Logo = memo<\n  Pick<Props, 'enableNew'> & { children: Props['logo']; href: Props['logoHref']; className: string }\n>(({ children, href, enableNew, className }) => (\n  <a href={href || '/'} className={className}>\n    {children || <SmartHRLogo fill={enableNew ? 'brand' : undefined} className=\"shr-p-0.75\" />}\n  </a>\n))\n\nconst MemoizedAppLauncher = memo<Pick<Props, 'featureName' | 'apps' | 'enableNew'>>(\n  ({ featureName, apps = [], enableNew }) => {\n    const decorators = useMemo(() => {\n      if (!featureName) {\n        return undefined\n      }\n\n      return { triggerLabel: () => featureName }\n    }, [featureName])\n\n    return featureName && <AppLauncher apps={apps} enableNew={enableNew} decorators={decorators} />\n  },\n)\n\nconst TenantSwitcher = memo<\n  Pick<Props, 'currentTenantId' | 'tenants' | 'onTenantSelect'> & {\n    classNames: { tenantInfo: string; tenantNameText: string }\n  }\n>(({ currentTenantId, tenants, classNames, onTenantSelect }) => {\n  const currentTenantName = useMemo(() => {\n    if (tenants && tenants.length >= 1) {\n      const current = tenants.find(({ id }) => id === currentTenantId)\n\n      return current ? current.name : tenants[0].name\n    }\n\n    return undefined\n  }, [currentTenantId, tenants])\n\n  return (\n    currentTenantName && (\n      <div className={classNames.tenantInfo}>\n        {tenants && tenants.length > 1 ? (\n          <MultiTenantDropdownMenuButton\n            trigger={currentTenantName}\n            tenants={tenants}\n            onTenantSelect={onTenantSelect}\n          />\n        ) : (\n          <Text color=\"TEXT_WHITE\" className={classNames.tenantNameText}>\n            {currentTenantName}\n          </Text>\n        )}\n      </div>\n    )\n  )\n})\n\nconst MultiTenantDropdownMenuButton = memo<\n  Pick<Required<Props>, 'tenants'> & Pick<Props, 'onTenantSelect'> & { trigger: ReactNode }\n>(({ trigger, tenants, onTenantSelect }) => {\n  const onClick = useMemo(\n    () =>\n      onTenantSelect\n        ? (e: MouseEvent<HTMLButtonElement>) => {\n            onTenantSelect(e.currentTarget.value)\n          }\n        : undefined,\n    [onTenantSelect],\n  )\n\n  return (\n    <HeaderDropdownMenuButton trigger={trigger}>\n      {tenants.map(({ id, name }) => (\n        <Button key={id} value={id} onClick={onClick}>\n          {name}\n        </Button>\n      ))}\n    </HeaderDropdownMenuButton>\n  )\n})\n"],"names":["tv","useMemo","_jsxs","Cluster","_jsx","memo","SmartHRLogo","AppLauncher","Text","HeaderDropdownMenuButton","Button"],"mappings":"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"}