@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
1 lines • 7.73 kB
Source Map (JSON)
{"version":3,"file":"tabs.cjs","names":["createSlotComponent","tabsStyle","useTabs","useValue","TabDescendantsContext","TabPanelDescendantsContext","TabsContext","styled","useTabsContext","rest","useTab","TabsPanels: FC<TabsPanelsProps>","useTabPanel","useLazyMount"],"sources":["../../../../src/components/tabs/tabs.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, PropsWithChildren, ReactNode } from \"react\"\nimport type { HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { UseLazyMountProps } from \"../../hooks/use-lazy-mount\"\nimport type { TabsStyle } from \"./tabs.style\"\nimport type { UseTabPanelProps, UseTabProps, UseTabsProps } from \"./use-tabs\"\nimport { useMemo } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { useLazyMount } from \"../../hooks/use-lazy-mount\"\nimport { useValue } from \"../../hooks/use-value\"\nimport { isNull, isUndefined } from \"../../utils\"\nimport { tabsStyle } from \"./tabs.style\"\nimport {\n TabDescendantsContext,\n TabPanelDescendantsContext,\n TabsContext,\n useTab,\n useTabPanel,\n useTabs,\n useTabsContext,\n} from \"./use-tabs\"\n\ninterface ComponentContext\n extends Pick<TabsRootProps, \"items\" | \"lazy\" | \"lazyBehavior\"> {}\n\nexport interface TabsItem extends Omit<TabsTabProps, \"index\"> {\n /**\n * The content for panel element.\n */\n panel: ReactNode\n /**\n * The content for tab element.\n */\n tab: ReactNode\n /**\n * Props for panel element.\n */\n panelProps?: TabsPanelProps\n}\n\nexport interface TabsRootProps\n extends Omit<HTMLStyledProps, \"onChange\">,\n Omit<UseTabsProps, \"orientation\">,\n Pick<UseLazyMountProps, \"lazy\" | \"lazyBehavior\">,\n ThemeProps<TabsStyle> {\n /**\n * If provided, generate tab and panel components based on tabs.\n */\n items?: TabsItem[]\n}\n\nconst {\n ComponentContext,\n PropsContext: TabsPropsContext,\n useComponentContext,\n usePropsContext: useTabsPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<TabsRootProps, TabsStyle, ComponentContext>(\n \"tabs\",\n tabsStyle,\n)\n\nexport { TabsPropsContext, useTabsPropsContext }\n\n/**\n * `Tabs` is a component for switching between different display areas.\n *\n * @see https://yamada-ui.com/docs/components/tabs\n */\nexport const TabsRoot = withProvider<\"div\", TabsRootProps, \"orientation\">(\n ({\n children,\n items,\n lazy,\n lazyBehavior,\n orientation: orientationProp,\n ...rest\n }) => {\n const computedOrientation = useValue(orientationProp)\n const {\n id,\n focusedIndex,\n index,\n manual,\n orientation,\n setFocusedIndex,\n setIndex,\n tabDescendants,\n tabPanelDescendants,\n getListProps,\n getRootProps,\n } = useTabs({ orientation: computedOrientation, ...rest })\n const componentContext = useMemo(\n () => ({ items, lazy, lazyBehavior }),\n [items, lazy, lazyBehavior],\n )\n const tabsContext = useMemo(\n () => ({\n id,\n focusedIndex,\n index,\n manual,\n orientation,\n setFocusedIndex,\n setIndex,\n getListProps,\n }),\n [\n id,\n manual,\n focusedIndex,\n index,\n orientation,\n setFocusedIndex,\n setIndex,\n getListProps,\n ],\n )\n\n return (\n <TabDescendantsContext value={tabDescendants}>\n <TabPanelDescendantsContext value={tabPanelDescendants}>\n <TabsContext value={tabsContext}>\n <ComponentContext value={componentContext}>\n <styled.div {...getRootProps()}>{children}</styled.div>\n </ComponentContext>\n </TabsContext>\n </TabPanelDescendantsContext>\n </TabDescendantsContext>\n )\n },\n \"root\",\n { transferProps: [\"orientation\"] },\n)()\n\nexport interface TabsListProps extends HTMLStyledProps {}\n\nexport const TabsList = withContext<\"div\", TabsListProps>(\n ({ children, ...rest }) => {\n const { items } = useComponentContext()\n const { getListProps } = useTabsContext()\n const computedChildren = useMemo(() => {\n if (children) {\n return children\n } else {\n return items?.map(\n (\n { id, panel: _panel, tab, panelProps: _panelProps, ...rest },\n index,\n ) =>\n isUndefined(tab) || isNull(tab) ? null : (\n <TabsTab id={id} key={id ?? index} index={index} {...rest}>\n {tab}\n </TabsTab>\n ),\n )\n }\n }, [children, items])\n\n return <styled.div {...getListProps(rest)}>{computedChildren}</styled.div>\n },\n \"list\",\n)()\n\nexport interface TabsTabProps extends HTMLStyledProps<\"button\">, UseTabProps {}\n\nexport const TabsTab = withContext<\"button\", TabsTabProps>(\"button\", \"tab\")(\n undefined,\n (props) => {\n const { getRootProps } = useTab(props)\n\n return getRootProps()\n },\n)\n\nexport interface TabsPanelsProps extends PropsWithChildren {}\n\nexport const TabsPanels: FC<TabsPanelsProps> = ({ children }) => {\n const { items } = useComponentContext()\n\n return useMemo(() => {\n if (children) {\n return children\n } else {\n return items?.map(({ id, panel, panelProps }, index) =>\n isUndefined(panel) || isNull(panel) ? null : (\n <TabsPanel key={id ?? index} index={index} {...panelProps}>\n {panel}\n </TabsPanel>\n ),\n )\n }\n }, [children, items])\n}\n\nexport interface TabsPanelProps extends HTMLStyledProps, UseTabPanelProps {}\n\nexport const TabsPanel = withContext<\"div\", TabsPanelProps>(\"div\", \"panel\")(\n undefined,\n (props) => {\n const { lazy, lazyBehavior } = useComponentContext()\n const { selected: mounted, getRootProps } = useTabPanel(props)\n const children = useLazyMount({ lazy, lazyBehavior, mounted, ...props })\n\n return { ...getRootProps(), children }\n },\n)\n"],"mappings":";;;;;;;;;;;;;;;;;AAoDA,MAAM,EACJ,kBACA,cAAc,kBACd,qBACA,iBAAiB,qBACjB,aACA,iBACEA,6CACF,QACAC,6BACD;;;;;;AASD,MAAa,WAAW,cACrB,EACC,UACA,OACA,MACA,cACA,aAAa,gBACb,GAAG,WACC;CAEJ,MAAM,EACJ,IACA,cACA,OACA,QACA,aACA,iBACA,UACA,gBACA,qBACA,cACA,iBACEC,yBAAQ;EAAE,aAbcC,uCAAS,gBAAgB;EAaL,GAAG;EAAM,CAAC;CAC1D,MAAM,6CACG;EAAE;EAAO;EAAM;EAAc,GACpC;EAAC;EAAO;EAAM;EAAa,CAC5B;AAwBD,QACE,2CAACC;EAAsB,OAAO;YAC5B,2CAACC;GAA2B,OAAO;aACjC,2CAACC;IAAY,iCAzBV;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD,GACD;KACE;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD,CACF;cAMO,2CAAC;KAAiB,OAAO;eACvB,2CAACC,uBAAO;MAAI,GAAI,cAAc;MAAG;OAAsB;MACtC;KACP;IACa;GACP;GAG5B,QACA,EAAE,eAAe,CAAC,cAAc,EAAE,CACnC,EAAE;AAIH,MAAa,WAAW,aACrB,EAAE,SAAU,GAAG,WAAW;CACzB,MAAM,EAAE,UAAU,qBAAqB;CACvC,MAAM,EAAE,iBAAiBC,iCAAgB;CACzC,MAAM,4CAAiC;AACrC,MAAI,SACF,QAAO;MAEP,QAAO,OAAO,KAEV,EAAE,IAAI,OAAO,QAAQ,KAAK,YAAY,YAAa,GAAGC,UACtD,6DAEY,IAAI,kDAAW,IAAI,GAAG,OAChC,2CAAC;GAAY;GAA6B;GAAO,GAAIA;aAClD;KADmB,MAAM,MAElB,CAEf;IAEF,CAAC,UAAU,MAAM,CAAC;AAErB,QAAO,2CAACF,uBAAO;EAAI,GAAI,aAAa,KAAK;YAAG;GAA8B;GAE5E,OACD,EAAE;AAIH,MAAa,UAAU,YAAoC,UAAU,MAAM,CACzE,SACC,UAAU;CACT,MAAM,EAAE,iBAAiBG,wBAAO,MAAM;AAEtC,QAAO,cAAc;EAExB;AAID,MAAaC,cAAmC,EAAE,eAAe;CAC/D,MAAM,EAAE,UAAU,qBAAqB;AAEvC,iCAAqB;AACnB,MAAI,SACF,QAAO;MAEP,QAAO,OAAO,KAAK,EAAE,IAAI,OAAO,cAAc,6DAChC,MAAM,kDAAW,MAAM,GAAG,OACpC,2CAAC;GAAmC;GAAO,GAAI;aAC5C;KADa,MAAM,MAEV,CAEf;IAEF,CAAC,UAAU,MAAM,CAAC;;AAKvB,MAAa,YAAY,YAAmC,OAAO,QAAQ,CACzE,SACC,UAAU;CACT,MAAM,EAAE,MAAM,iBAAiB,qBAAqB;CACpD,MAAM,EAAE,UAAU,SAAS,iBAAiBC,6BAAY,MAAM;CAC9D,MAAM,WAAWC,gDAAa;EAAE;EAAM;EAAc;EAAS,GAAG;EAAO,CAAC;AAExE,QAAO;EAAE,GAAG,cAAc;EAAE;EAAU;EAEzC"}