{"version":3,"file":"TabItem.cjs","sources":["../../../src/components/TabBar/TabItem.tsx"],"sourcesContent":["import {\n  type ComponentProps,\n  type FC,\n  type MouseEvent,\n  type PropsWithChildren,\n  type ReactNode,\n  memo,\n  useCallback,\n  useMemo,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { UnstyledButton } from '../Button'\nimport { FaCircleInfoIcon } from '../Icon'\nimport { Tooltip } from '../Tooltip'\n\nconst classNameGenerator = tv({\n  slots: {\n    wrapper: [\n      'smarthr-ui-TabItem',\n      'shr-group/tabitem',\n      'shr-relative shr-inline-flex shr-items-center shr-gap-0.5 shr-px-1 shr-py-0.75',\n      'hover:shr-bg-white-darken',\n      'focus-visible:shr-focus-indicator focus-visible:shr-z-1',\n      'disabled:shr-cursor-not-allowed disabled:shr-bg-transparent',\n      'aria-selected:before:shr-absolute aria-selected:before:shr-inset-x-0 aria-selected:before:shr-bottom-0 aria-selected:before:shr-z-1 aria-selected:before:shr-block aria-selected:before:shr-h-0.25 aria-selected:before:shr-bg-main aria-selected:before:shr-content-[\"\"]',\n      'forced-colors:aria-selected:before:shr-bg-[Highlight]',\n    ],\n    label: [\n      'shr-font-bold shr-leading-none shr-text-grey',\n      'group-hover/tabitem:shr-text-black',\n      'group-disabled/tabitem:shr-text-grey/50',\n      'group-aria-selected/tabitem:shr-text-black',\n    ],\n    suffixWrapper: [\n      // Badge など内包要素に依って高さが変わらないようにするため、ネガティブマージンを指定\n      '-shr-my-0.25',\n      // 内包アイコンの leading を詰める\n      '[&_.smarthr-ui-Icon]:shr-block',\n    ],\n  },\n})\n\ntype AbstractProps = PropsWithChildren<{\n  /** タブの ID */\n  id: string\n  /** ボタン内の末尾に表示する内容 */\n  suffix?: ReactNode\n  /** `true` のとき、タブが選択状態のスタイルになる */\n  selected?: boolean\n  /** `true` のとき、タブを無効状態にしてクリック不能にする */\n  disabled?: boolean\n  /**\n   * 無効な理由\n   */\n  disabledReason?: {\n    icon?: ReactNode\n    message: ReactNode\n  }\n  /** タブをクリックした時に発火するコールバック関数 */\n  onClick: (tabId: string) => void\n}>\ntype Props = AbstractProps &\n  Omit<ComponentProps<typeof UnstyledButton>, keyof AbstractProps | 'aria-selected' | 'type'>\n\nexport const TabItem: FC<Props> = ({ selected = false, disabled, disabledReason, ...rest }) => {\n  const tabAttrs = {\n    role: 'tab',\n    'aria-selected': selected,\n  }\n\n  if (disabled && disabledReason) {\n    const Icon = disabledReason.icon || <FaCircleInfoIcon color=\"TEXT_GREY\" />\n\n    return (\n      <Tooltip\n        {...tabAttrs}\n        message={disabledReason.message}\n        ariaDescribedbyTarget=\"inner\"\n        aria-disabled={disabled}\n        className=\"focus-visible:shr-focus-indicator\"\n      >\n        <TabButton {...rest} disabled={disabled} suffix={Icon} />\n      </Tooltip>\n    )\n  }\n\n  return <TabButton {...rest} {...tabAttrs} disabled={disabled} />\n}\n\nconst TabButton: FC<Props> = ({ id, children, suffix, onClick, className, ...rest }) => {\n  const classNames = useMemo(() => {\n    const { wrapper, label, suffixWrapper } = classNameGenerator()\n\n    return {\n      wrapper: wrapper({ className }),\n      label: label(),\n      suffixWrapper: suffixWrapper(),\n    }\n  }, [className])\n\n  const actualOnClick = useCallback(\n    (e: MouseEvent<HTMLButtonElement>) => onClick(e.currentTarget.value),\n    [onClick],\n  )\n\n  return (\n    <UnstyledButton\n      {...rest}\n      type=\"button\"\n      value={id}\n      id={id}\n      className={classNames.wrapper}\n      onClick={actualOnClick}\n    >\n      <TabLabel className={classNames.label}>{children}</TabLabel>\n      <TabButtonSuffix className={classNames.suffixWrapper}>{suffix}</TabButtonSuffix>\n    </UnstyledButton>\n  )\n}\n\nconst TabLabel = memo<PropsWithChildren<{ className: string }>>(({ children, className }) => (\n  <span className={className}>{children}</span>\n))\nconst TabButtonSuffix = memo<PropsWithChildren<{ className: string }>>(\n  ({ children, className }) => children && <span className={className}>{children}</span>,\n)\n"],"names":["tv","_jsx","FaCircleInfoIcon","Tooltip","useMemo","useCallback","_jsxs","UnstyledButton","memo"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,kBAAkB,GAAGA,QAAE,CAAC;AAC5B,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE;YACP,oBAAoB;YACpB,mBAAmB;YACnB,gFAAgF;YAChF,2BAA2B;YAC3B,yDAAyD;YACzD,6DAA6D;YAC7D,2QAA2Q;YAC3Q,uDAAuD;AACxD,SAAA;AACD,QAAA,KAAK,EAAE;YACL,8CAA8C;YAC9C,oCAAoC;YACpC,yCAAyC;YACzC,4CAA4C;AAC7C,SAAA;AACD,QAAA,aAAa,EAAE;;YAEb,cAAc;;YAEd,gCAAgC;AACjC,SAAA;AACF,KAAA;AACF,CAAA,CAAC;AAwBK,MAAM,OAAO,GAAc,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,KAAI;AAC5F,IAAA,MAAM,QAAQ,GAAG;AACf,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,eAAe,EAAE,QAAQ;KAC1B;AAED,IAAA,IAAI,QAAQ,IAAI,cAAc,EAAE;AAC9B,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,IAAIC,cAAA,CAACC,uCAAgB,EAAA,EAAC,KAAK,EAAC,WAAW,GAAG;AAE1E,QAAA,QACED,cAAA,CAACE,kCAAO,EAAA,EAAA,GACF,QAAQ,EACZ,OAAO,EAAE,cAAc,CAAC,OAAO,EAC/B,qBAAqB,EAAC,OAAO,mBACd,QAAQ,EACvB,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAE7CF,cAAA,CAAC,SAAS,EAAA,EAAA,GAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAA,CAAI,EAAA,CACjD;IAEd;IAEA,OAAOA,cAAA,CAAC,SAAS,EAAA,EAAA,GAAK,IAAI,EAAA,GAAM,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAA,CAAI;AAClE;AAEA,MAAM,SAAS,GAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,KAAI;AACrF,IAAA,MAAM,UAAU,GAAGG,aAAO,CAAC,MAAK;QAC9B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,kBAAkB,EAAE;QAE9D,OAAO;AACL,YAAA,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;YAC/B,KAAK,EAAE,KAAK,EAAE;YACd,aAAa,EAAE,aAAa,EAAE;SAC/B;AACH,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAEf,MAAM,aAAa,GAAGC,iBAAW,CAC/B,CAAC,CAAgC,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EACpE,CAAC,OAAO,CAAC,CACV;IAED,QACEC,eAAA,CAACC,+CAAc,EAAA,EAAA,GACT,IAAI,EACR,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,EAAE,EACT,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,UAAU,CAAC,OAAO,EAC7B,OAAO,EAAE,aAAa,EAAA,QAAA,EAAA,CAEtBN,cAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAE,UAAU,CAAC,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAY,EAC5DA,eAAC,eAAe,EAAA,EAAC,SAAS,EAAE,UAAU,CAAC,aAAa,EAAA,QAAA,EAAG,MAAM,EAAA,CAAmB,CAAA,EAAA,CACjE;AAErB,CAAC;AAED,MAAM,QAAQ,GAAGO,UAAI,CAA2C,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MACtFP,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,SAAS,YAAG,QAAQ,EAAA,CAAQ,CAC9C,CAAC;AACF,MAAM,eAAe,GAAGO,UAAI,CAC1B,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,QAAQ,IAAIP,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,SAAS,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAQ,CACvF;;;;"}