@yamada-ui/tabs
Version:
Yamada UI tabs component
1 lines • 4.51 kB
Source Map (JSON)
{"version":3,"sources":["../src/tab.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport type { UseClickableProps } from \"@yamada-ui/use-clickable\"\nimport type { Merge } from \"@yamada-ui/utils\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { Ripple, useRipple } from \"@yamada-ui/ripple\"\nimport { useClickable } from \"@yamada-ui/use-clickable\"\nimport { cx, handlerAll, mergeRefs } from \"@yamada-ui/utils\"\nimport { useId } from \"react\"\nimport {\n useTabDescendant,\n useTabPanelDescendant,\n useTabsContext,\n} from \"./tabs-context\"\n\nexport interface TabProps\n extends Merge<UseClickableProps<HTMLButtonElement>, HTMLUIProps<\"button\">> {}\n\nexport const Tab = forwardRef<TabProps, \"button\">(\n (\n {\n id,\n className,\n children,\n clickOnEnter,\n clickOnSpace,\n isDisabled,\n disabled = isDisabled,\n isFocusable,\n focusable = isFocusable,\n ...rest\n },\n ref,\n ) => {\n const uuid = useId()\n const {\n disableRipple,\n manual,\n orientation,\n selectedIndex,\n setFocusedIndex,\n setSelectedIndex,\n styles,\n } = useTabsContext()\n const { index, register } = useTabDescendant({\n disabled: disabled && !focusable,\n })\n const { descendants } = useTabPanelDescendant()\n const tabpanelId = descendants.value(index)?.node.id\n const isSelected = index === selectedIndex\n const css: CSSUIObject = {\n alignItems: \"center\",\n display: \"flex\",\n justifyContent: \"center\",\n outline: \"0\",\n overflow: \"hidden\",\n position: \"relative\",\n ...styles.tab,\n }\n\n id ??= uuid\n\n const onFocus = () => {\n setFocusedIndex(index)\n\n if (!manual && !(disabled && focusable)) setSelectedIndex(index)\n }\n\n const clickableProps = useClickable<HTMLButtonElement>({\n id,\n \"aria-controls\": tabpanelId,\n \"aria-selected\": isSelected,\n\n role: \"tab\",\n ...rest,\n ref: mergeRefs(register, ref),\n clickOnEnter,\n clickOnSpace,\n disabled,\n focusable,\n focusOnClick: false,\n onClick: handlerAll(rest.onClick, () => setSelectedIndex(index)),\n onFocus: disabled ? undefined : handlerAll(rest.onFocus, onFocus),\n })\n const { onPointerDown, ...rippleProps } = useRipple({\n ...clickableProps,\n disabled: disableRipple || disabled,\n })\n\n return (\n <ui.button\n className={cx(\"ui-tabs__tab\", className)}\n __css={css}\n {...clickableProps}\n type=\"button\"\n data-orientation={orientation}\n tabIndex={isSelected ? 0 : -1}\n onPointerDown={onPointerDown}\n >\n {children}\n\n <Ripple {...rippleProps} />\n </ui.button>\n )\n },\n)\n\nTab.displayName = \"Tab\"\nTab.__ui__ = \"Tab\"\n"],"mappings":";;;;;;;;AAGA,SAAS,YAAY,UAAU;AAC/B,SAAS,QAAQ,iBAAiB;AAClC,SAAS,oBAAoB;AAC7B,SAAS,IAAI,YAAY,iBAAiB;AAC1C,SAAS,aAAa;AAkFhB,SAWE,KAXF;AAxEC,IAAM,MAAM;AAAA,EACjB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,GACA,QACG;AAhCP;AAiCI,UAAM,OAAO,MAAM;AACnB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,eAAe;AACnB,UAAM,EAAE,OAAO,SAAS,IAAI,iBAAiB;AAAA,MAC3C,UAAU,YAAY,CAAC;AAAA,IACzB,CAAC;AACD,UAAM,EAAE,YAAY,IAAI,sBAAsB;AAC9C,UAAM,cAAa,iBAAY,MAAM,KAAK,MAAvB,mBAA0B,KAAK;AAClD,UAAM,aAAa,UAAU;AAC7B,UAAM,MAAmB;AAAA,MACvB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG,OAAO;AAAA,IACZ;AAEA,2BAAO;AAEP,UAAM,UAAU,MAAM;AACpB,sBAAgB,KAAK;AAErB,UAAI,CAAC,UAAU,EAAE,YAAY,WAAY,kBAAiB,KAAK;AAAA,IACjE;AAEA,UAAM,iBAAiB,aAAgC;AAAA,MACrD;AAAA,MACA,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MAEjB,MAAM;AAAA,MACN,GAAG;AAAA,MACH,KAAK,UAAU,UAAU,GAAG;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd,SAAS,WAAW,KAAK,SAAS,MAAM,iBAAiB,KAAK,CAAC;AAAA,MAC/D,SAAS,WAAW,SAAY,WAAW,KAAK,SAAS,OAAO;AAAA,IAClE,CAAC;AACD,UAAM,EAAE,eAAe,GAAG,YAAY,IAAI,UAAU;AAAA,MAClD,GAAG;AAAA,MACH,UAAU,iBAAiB;AAAA,IAC7B,CAAC;AAED,WACE;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC,WAAW,GAAG,gBAAgB,SAAS;AAAA,QACvC,OAAO;AAAA,QACN,GAAG;AAAA,QACJ,MAAK;AAAA,QACL,oBAAkB;AAAA,QAClB,UAAU,aAAa,IAAI;AAAA,QAC3B;AAAA,QAEC;AAAA;AAAA,UAED,oBAAC,UAAQ,GAAG,aAAa;AAAA;AAAA;AAAA,IAC3B;AAAA,EAEJ;AACF;AAEA,IAAI,cAAc;AAClB,IAAI,SAAS;","names":[]}