UNPKG

@yamada-ui/tabs

Version:

Yamada UI tabs component

1 lines 3.98 kB
{"version":3,"sources":["../src/tab-list.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport type { KeyboardEvent, KeyboardEventHandler } from \"react\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { cx, handlerAll } from \"@yamada-ui/utils\"\nimport { useCallback } from \"react\"\nimport { useTabDescendantsContext, useTabsContext } from \"./tabs-context\"\n\nexport interface TabListProps extends HTMLUIProps {}\n\nexport const TabList = forwardRef<TabListProps, \"div\">(\n ({ className, ...rest }, ref) => {\n const { focusedIndex, orientation, styles, tabListProps } = useTabsContext()\n const descendants = useTabDescendantsContext()\n const isVertical = orientation === \"vertical\"\n\n const onNext = useCallback(() => {\n const next = descendants.enabledNextValue(focusedIndex)\n\n if (next) next.node.focus()\n }, [descendants, focusedIndex])\n\n const onPrev = useCallback(() => {\n const prev = descendants.enabledPrevValue(focusedIndex)\n\n if (prev) prev.node.focus()\n }, [descendants, focusedIndex])\n\n const onFirst = useCallback(() => {\n const first = descendants.enabledFirstValue()\n\n if (first) first.node.focus()\n }, [descendants])\n\n const onLast = useCallback(() => {\n const last = descendants.enabledLastValue()\n\n if (last) last.node.focus()\n }, [descendants])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent) => {\n const actions: { [key: string]: KeyboardEventHandler } = {\n ArrowDown: () => (isVertical ? onNext() : {}),\n ArrowLeft: () => (!isVertical ? onPrev() : {}),\n ArrowRight: () => (!isVertical ? onNext() : {}),\n ArrowUp: () => (isVertical ? onPrev() : {}),\n End: onLast,\n Home: onFirst,\n }\n\n const action = actions[ev.key]\n\n if (!action) return\n\n ev.preventDefault()\n action(ev)\n },\n [onFirst, onLast, isVertical, onPrev, onNext],\n )\n\n const css: CSSUIObject = { display: \"flex\", ...styles.tabList }\n\n return (\n <ui.div\n ref={ref}\n className={cx(\"ui-tabs__list\", className)}\n aria-orientation={orientation}\n role=\"tablist\"\n __css={css}\n {...tabListProps}\n {...rest}\n onKeyDown={handlerAll(rest.onKeyDown, onKeyDown)}\n />\n )\n },\n)\n\nTabList.displayName = \"TabList\"\nTabList.__ui__ = \"TabList\"\n"],"mappings":";;;;;;;AAEA,SAAS,YAAY,UAAU;AAC/B,SAAS,IAAI,kBAAkB;AAC/B,SAAS,mBAAmB;AA2DtB;AAtDC,IAAM,UAAU;AAAA,EACrB,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ;AAC/B,UAAM,EAAE,cAAc,aAAa,QAAQ,aAAa,IAAI,eAAe;AAC3E,UAAM,cAAc,yBAAyB;AAC7C,UAAM,aAAa,gBAAgB;AAEnC,UAAM,SAAS,YAAY,MAAM;AAC/B,YAAM,OAAO,YAAY,iBAAiB,YAAY;AAEtD,UAAI,KAAM,MAAK,KAAK,MAAM;AAAA,IAC5B,GAAG,CAAC,aAAa,YAAY,CAAC;AAE9B,UAAM,SAAS,YAAY,MAAM;AAC/B,YAAM,OAAO,YAAY,iBAAiB,YAAY;AAEtD,UAAI,KAAM,MAAK,KAAK,MAAM;AAAA,IAC5B,GAAG,CAAC,aAAa,YAAY,CAAC;AAE9B,UAAM,UAAU,YAAY,MAAM;AAChC,YAAM,QAAQ,YAAY,kBAAkB;AAE5C,UAAI,MAAO,OAAM,KAAK,MAAM;AAAA,IAC9B,GAAG,CAAC,WAAW,CAAC;AAEhB,UAAM,SAAS,YAAY,MAAM;AAC/B,YAAM,OAAO,YAAY,iBAAiB;AAE1C,UAAI,KAAM,MAAK,KAAK,MAAM;AAAA,IAC5B,GAAG,CAAC,WAAW,CAAC;AAEhB,UAAM,YAAY;AAAA,MAChB,CAAC,OAAsB;AACrB,cAAM,UAAmD;AAAA,UACvD,WAAW,MAAO,aAAa,OAAO,IAAI,CAAC;AAAA,UAC3C,WAAW,MAAO,CAAC,aAAa,OAAO,IAAI,CAAC;AAAA,UAC5C,YAAY,MAAO,CAAC,aAAa,OAAO,IAAI,CAAC;AAAA,UAC7C,SAAS,MAAO,aAAa,OAAO,IAAI,CAAC;AAAA,UACzC,KAAK;AAAA,UACL,MAAM;AAAA,QACR;AAEA,cAAM,SAAS,QAAQ,GAAG,GAAG;AAE7B,YAAI,CAAC,OAAQ;AAEb,WAAG,eAAe;AAClB,eAAO,EAAE;AAAA,MACX;AAAA,MACA,CAAC,SAAS,QAAQ,YAAY,QAAQ,MAAM;AAAA,IAC9C;AAEA,UAAM,MAAmB,EAAE,SAAS,QAAQ,GAAG,OAAO,QAAQ;AAE9D,WACE;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,WAAW,GAAG,iBAAiB,SAAS;AAAA,QACxC,oBAAkB;AAAA,QAClB,MAAK;AAAA,QACL,OAAO;AAAA,QACN,GAAG;AAAA,QACH,GAAG;AAAA,QACJ,WAAW,WAAW,KAAK,WAAW,SAAS;AAAA;AAAA,IACjD;AAAA,EAEJ;AACF;AAEA,QAAQ,cAAc;AACtB,QAAQ,SAAS;","names":[]}