@sikt/sds-tabs 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.ts +4 -4
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cjs/index.d.ts
CHANGED
|
@@ -8,25 +8,25 @@ interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
|
8
8
|
children: ReactNode;
|
|
9
9
|
className?: string;
|
|
10
10
|
}
|
|
11
|
-
declare const Tabs: ({ defaultIndex, onChange, isSelectOnFocus, children, className, ...rest }: TabsProps) => JSX.Element;
|
|
11
|
+
declare const Tabs: ({ defaultIndex, onChange, isSelectOnFocus, children, className, ...rest }: TabsProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
interface TabListProps extends HTMLAttributes<HTMLDivElement> {
|
|
13
13
|
children: ReactNode;
|
|
14
14
|
"aria-label": string;
|
|
15
15
|
className?: string;
|
|
16
16
|
}
|
|
17
|
-
declare const TabList: ({ children, "aria-label": ariaLabel, className, ...rest }: TabListProps) => JSX.Element;
|
|
17
|
+
declare const TabList: ({ children, "aria-label": ariaLabel, className, ...rest }: TabListProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
18
|
interface TabProps extends HTMLAttributes<HTMLButtonElement> {
|
|
19
19
|
children: ReactNode;
|
|
20
20
|
className?: string;
|
|
21
21
|
icon?: ReactNode;
|
|
22
22
|
badge?: ReactNode;
|
|
23
23
|
}
|
|
24
|
-
declare const Tab: ({ children, className, icon, badge, ...rest }: TabProps) => JSX.Element;
|
|
24
|
+
declare const Tab: ({ children, className, icon, badge, ...rest }: TabProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
25
|
interface TabPanelProps {
|
|
26
26
|
children: ReactNode;
|
|
27
27
|
className?: string;
|
|
28
28
|
}
|
|
29
|
-
declare const TabPanel: ({ children, className, ...rest }: TabPanelProps) => JSX.Element;
|
|
29
|
+
declare const TabPanel: ({ children, className, ...rest }: TabPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
30
|
interface TabLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
31
31
|
children: ReactNode;
|
|
32
32
|
className?: string;
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),s=require("react"),t=require("clsx");const a=s.createContext(null),n=s.forwardRef((({children:a,className:n,icon:l,badge:i,href:d,isSelected:r,...c},o)=>e.jsxs("a",{className:t("sds-tabs__tab","sds-tab-link",r&&"sds-tab-link--selected",n),href:d,ref:o,...c,children:[l&&e.jsx("div",{className:"sds-tabs__tab-icon",children:l}),a,i&&e.jsx("div",{className:"sds-tabs__tab-badge",children:r?s.isValidElement(i)&&s.cloneElement(i,{visibility:"high"}):i})]})));n.displayName="TabLink",exports.Tab=({children:n,className:l,icon:i,badge:d,...r})=>{const{index:c}=r,{id:o,count:b,isSelectOnFocus:
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),s=require("react"),t=require("clsx");const a=s.createContext(null),n=s.forwardRef((({children:a,className:n,icon:l,badge:i,href:d,isSelected:r,...c},o)=>e.jsxs("a",{className:t("sds-tabs__tab","sds-tab-link",r&&"sds-tab-link--selected",n),href:d,ref:o,...c,children:[l&&e.jsx("div",{className:"sds-tabs__tab-icon",children:l}),a,i&&e.jsx("div",{className:"sds-tabs__tab-badge",children:r?s.isValidElement(i)&&s.cloneElement(i,{visibility:"high"}):i})]})));n.displayName="TabLink",exports.Tab=({children:n,className:l,icon:i,badge:d,...r})=>{const{index:c}=r,{id:o,count:b,isSelectOnFocus:x,selectedIndex:u,setSelectedIndex:h,setPreviousIndex:m}=s.useContext(a),f=c===u,p=e=>{x&&(m(u),h(e))};return e.jsxs("button",{className:t("sds-tabs__tab",l),role:"tab","aria-selected":f,"aria-controls":`panel-${o}-${c}`,id:`tab-${o}-${c}`,tabIndex:f?0:-1,onClick:()=>{m(u),h(c)},onKeyDown:e=>{const s=b-1,t=e.currentTarget,a=t.parentElement?.firstChild,n=t.parentElement?.lastChild;if("ArrowLeft"===e.key){const e=t.previousSibling;c>0?e.focus():n.focus(),p(u>0?u-1:s)}else if("ArrowRight"===e.key){const e=t.nextSibling;c<s?e.focus():a.focus(),p(u<s?u+1:0)}else"Home"===e.key?(a.focus(),p(0)):"End"===e.key?(n.focus(),p(s)):"Enter"!==e.key&&"Space"!==e.code||h(c)},...r,children:[i&&e.jsx("span",{className:"sds-tabs__tab-icon",children:i}),n,d&&e.jsx("span",{className:"sds-tabs__tab-badge",children:f?s.isValidElement(d)&&s.cloneElement(d,{visibility:"high"}):d})]})},exports.TabLink=n,exports.TabList=({children:a,"aria-label":n,className:l,...i})=>{const d=s.Children.toArray(a);return e.jsx("div",{className:t("sds-tabs__tab-list",l),role:"tablist","aria-label":n,...i,children:s.Children.map(d,((t,a)=>{if(s.isValidElement(t))return e.jsx(e.Fragment,{children:s.cloneElement(t,{index:a})})}))})},exports.TabPanel=({children:n,className:l,...i})=>{const{index:d}=i,{id:r,selectedIndex:c}=s.useContext(a),o=d===c;return e.jsx("div",{className:t("sds-tabs__tab-panel",l),id:`panel-${r}-${d}`,role:"tabpanel",tabIndex:o?0:-1,"aria-labelledby":`tab-${r}-${d}`,hidden:!o,...i,children:n})},exports.Tabs=({defaultIndex:n=0,onChange:l,isSelectOnFocus:i=!1,children:d,className:r,...c})=>{const[o,b]=s.useState(n),[x,u]=s.useState(n),h=s.useId();s.useEffect((()=>{l&&x!==o&&l(o)}),[l,o]);const m=s.Children.toArray(d),f=m.length-1;return e.jsx(a.Provider,{value:{id:h,count:f,isSelectOnFocus:i,selectedIndex:o,setSelectedIndex:b,setPreviousIndex:u},children:e.jsx("div",{className:t("sds-tabs",r),...c,children:s.Children.map(m,((t,a)=>s.isValidElement(t)&&a>0?e.jsx(e.Fragment,{children:s.cloneElement(t,{index:a-1})}):t))})})};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../Tabs.tsx","../../TabLink.tsx","../../Tab.tsx","../../TabList.tsx","../../TabPanel.tsx"],"sourcesContent":["import React, {\n Children,\n ReactNode,\n cloneElement,\n useId,\n useState,\n isValidElement,\n createContext,\n ReactElement,\n useEffect,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tabs.pcss\";\nimport { TabPanelProps } from \"./TabPanel\";\n\nexport type TabsContextType = {\n id: string;\n count: number;\n isSelectOnFocus: boolean;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n setPreviousIndex: (index: number) => void;\n};\n\nexport const TabsContext = createContext<TabsContextType | null>(null);\n\nexport interface TabsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n defaultIndex?: number;\n isSelectOnFocus?: boolean;\n onChange?: (index: number) => void;\n children: ReactNode;\n className?: string;\n}\n\nexport const Tabs = ({\n defaultIndex = 0,\n onChange,\n isSelectOnFocus = false,\n children,\n className,\n ...rest\n}: TabsProps) => {\n const [selectedIndex, setSelectedIndex] = useState(defaultIndex);\n const [previousIndex, setPreviousIndex] = useState(defaultIndex);\n const id = useId();\n\n useEffect(() => {\n if (onChange && previousIndex !== selectedIndex) {\n onChange(selectedIndex);\n }\n }, [onChange, selectedIndex]);\n\n const arrayChildren = Children.toArray(children);\n const count = arrayChildren.length - 1;\n\n return (\n <TabsContext.Provider\n value={{\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n }}\n >\n <div className={clsx(\"sds-tabs\", className)} {...rest}>\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child) && index > 0) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabPanelProps & { index: number }>,\n {\n index: index - 1,\n }\n )}\n </>\n );\n } else {\n return child;\n }\n })}\n </div>\n </TabsContext.Provider>\n );\n};\n","import React, {\n AnchorHTMLAttributes,\n cloneElement,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tab-link.pcss\";\n\nexport interface TabLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n isSelected?: boolean;\n}\n\nexport const TabLink = forwardRef<HTMLAnchorElement, TabLinkProps>(\n (\n {\n children,\n className,\n icon,\n badge,\n href,\n isSelected,\n ...rest\n }: TabLinkProps,\n ref\n ) => {\n return (\n <a\n className={clsx(\n \"sds-tabs__tab\",\n \"sds-tab-link\",\n isSelected && \"sds-tab-link--selected\",\n className\n )}\n href={href}\n ref={ref}\n {...rest}\n >\n {icon && <div className=\"sds-tabs__tab-icon\">{icon}</div>}\n {children}\n {badge && (\n <div className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </div>\n )}\n </a>\n );\n }\n);\n\nTabLink.displayName = \"TabLink\";\n","import React, {\n cloneElement,\n isValidElement,\n HTMLAttributes,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n useContext,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n}\n\nexport const Tab = ({\n children,\n className,\n icon,\n badge,\n ...rest\n}: TabProps) => {\n const { index } = rest as { index: number };\n const {\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n const handleSelect = (index: number) => {\n if (isSelectOnFocus) {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }\n };\n const handleKeyPress = (event: KeyboardEvent<HTMLButtonElement>) => {\n const firstIndex = 0;\n const lastIndex = count - 1;\n const currentTarget = event.currentTarget;\n const firstChild = currentTarget.parentElement?.firstChild as HTMLElement;\n const lastChild = currentTarget.parentElement?.lastChild as HTMLElement;\n\n if (event.key === \"ArrowLeft\") {\n const previousSibling = currentTarget.previousSibling as HTMLElement;\n if (index > firstIndex) {\n previousSibling.focus();\n } else {\n lastChild.focus();\n }\n\n handleSelect(selectedIndex > firstIndex ? selectedIndex - 1 : lastIndex);\n } else if (event.key === \"ArrowRight\") {\n const nextSibling = currentTarget.nextSibling as HTMLElement;\n if (index < lastIndex) {\n nextSibling.focus();\n } else {\n firstChild.focus();\n }\n\n handleSelect(selectedIndex < lastIndex ? selectedIndex + 1 : firstIndex);\n } else if (event.key === \"Home\") {\n firstChild.focus();\n handleSelect(firstIndex);\n } else if (event.key === \"End\") {\n lastChild.focus();\n handleSelect(lastIndex);\n } else if (event.key === \"Enter\" || event.code === \"Space\") {\n setSelectedIndex(index);\n }\n };\n\n return (\n <button\n className={clsx(\"sds-tabs__tab\", className)}\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={`panel-${id}-${index}`}\n id={`tab-${id}-${index}`}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }}\n onKeyDown={handleKeyPress}\n {...rest}\n >\n {icon && <div className=\"sds-tabs__tab-icon\">{icon}</div>}\n {children}\n {badge && (\n <div className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </div>\n )}\n </button>\n );\n};\n","import React, {\n Children,\n ReactNode,\n ReactElement,\n cloneElement,\n isValidElement,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabProps } from \"./Tab\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n \"aria-label\": string;\n className?: string;\n}\n\nexport const TabList = ({\n children,\n \"aria-label\": ariaLabel,\n className,\n ...rest\n}: TabListProps) => {\n const arrayChildren = Children.toArray(children);\n\n return (\n <div\n className={clsx(\"sds-tabs__tab-list\", className)}\n role=\"tablist\"\n aria-label={ariaLabel}\n {...rest}\n >\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child)) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabProps & { index: number }>,\n {\n index,\n }\n )}\n </>\n );\n }\n })}\n </div>\n );\n};\n","import React, { ReactNode, useContext } from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabPanelProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const TabPanel = ({ children, className, ...rest }: TabPanelProps) => {\n const { index } = rest as { index: number };\n const { id, selectedIndex } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n return (\n <div\n className={clsx(\"sds-tabs__tab-panel\", className)}\n id={`panel-${id}-${index}`}\n role=\"tabpanel\"\n tabIndex={isSelected ? 0 : -1}\n aria-labelledby={`tab-${id}-${index}`}\n hidden={!isSelected}\n {...rest}\n >\n {children}\n </div>\n );\n};\n"],"names":["TabsContext","createContext","TabLink","forwardRef","children","className","icon","badge","href","isSelected","rest","ref","_jsxs","clsx","_jsx","isValidElement","cloneElement","visibility","displayName","index","id","count","isSelectOnFocus","selectedIndex","setSelectedIndex","setPreviousIndex","useContext","handleSelect","role","tabIndex","onClick","onKeyDown","event","lastIndex","currentTarget","firstChild","_a","parentElement","lastChild","_b","key","previousSibling","focus","nextSibling","code","jsx","ariaLabel","arrayChildren","Children","toArray","map","child","_Fragment","Fragment","hidden","defaultIndex","onChange","useState","previousIndex","useId","useEffect","length","Provider","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../Tabs.tsx","../../TabLink.tsx","../../Tab.tsx","../../TabList.tsx","../../TabPanel.tsx"],"sourcesContent":["import React, {\n Children,\n ReactNode,\n cloneElement,\n useId,\n useState,\n isValidElement,\n createContext,\n ReactElement,\n useEffect,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tabs.pcss\";\nimport { TabPanelProps } from \"./TabPanel\";\n\nexport type TabsContextType = {\n id: string;\n count: number;\n isSelectOnFocus: boolean;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n setPreviousIndex: (index: number) => void;\n};\n\nexport const TabsContext = createContext<TabsContextType | null>(null);\n\nexport interface TabsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n defaultIndex?: number;\n isSelectOnFocus?: boolean;\n onChange?: (index: number) => void;\n children: ReactNode;\n className?: string;\n}\n\nexport const Tabs = ({\n defaultIndex = 0,\n onChange,\n isSelectOnFocus = false,\n children,\n className,\n ...rest\n}: TabsProps) => {\n const [selectedIndex, setSelectedIndex] = useState(defaultIndex);\n const [previousIndex, setPreviousIndex] = useState(defaultIndex);\n const id = useId();\n\n useEffect(() => {\n if (onChange && previousIndex !== selectedIndex) {\n onChange(selectedIndex);\n }\n }, [onChange, selectedIndex]);\n\n const arrayChildren = Children.toArray(children);\n const count = arrayChildren.length - 1;\n\n return (\n <TabsContext.Provider\n value={{\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n }}\n >\n <div className={clsx(\"sds-tabs\", className)} {...rest}>\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child) && index > 0) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabPanelProps & { index: number }>,\n {\n index: index - 1,\n }\n )}\n </>\n );\n } else {\n return child;\n }\n })}\n </div>\n </TabsContext.Provider>\n );\n};\n","import React, {\n AnchorHTMLAttributes,\n cloneElement,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tab-link.pcss\";\n\nexport interface TabLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n isSelected?: boolean;\n}\n\nexport const TabLink = forwardRef<HTMLAnchorElement, TabLinkProps>(\n (\n {\n children,\n className,\n icon,\n badge,\n href,\n isSelected,\n ...rest\n }: TabLinkProps,\n ref\n ) => {\n return (\n <a\n className={clsx(\n \"sds-tabs__tab\",\n \"sds-tab-link\",\n isSelected && \"sds-tab-link--selected\",\n className\n )}\n href={href}\n ref={ref}\n {...rest}\n >\n {icon && <div className=\"sds-tabs__tab-icon\">{icon}</div>}\n {children}\n {badge && (\n <div className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </div>\n )}\n </a>\n );\n }\n);\n\nTabLink.displayName = \"TabLink\";\n","import React, {\n cloneElement,\n isValidElement,\n HTMLAttributes,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n useContext,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n}\n\nexport const Tab = ({\n children,\n className,\n icon,\n badge,\n ...rest\n}: TabProps) => {\n const { index } = rest as { index: number };\n const {\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n const handleSelect = (index: number) => {\n if (isSelectOnFocus) {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }\n };\n const handleKeyPress = (event: KeyboardEvent<HTMLButtonElement>) => {\n const firstIndex = 0;\n const lastIndex = count - 1;\n const currentTarget = event.currentTarget;\n const firstChild = currentTarget.parentElement?.firstChild as HTMLElement;\n const lastChild = currentTarget.parentElement?.lastChild as HTMLElement;\n\n if (event.key === \"ArrowLeft\") {\n const previousSibling = currentTarget.previousSibling as HTMLElement;\n if (index > firstIndex) {\n previousSibling.focus();\n } else {\n lastChild.focus();\n }\n\n handleSelect(selectedIndex > firstIndex ? selectedIndex - 1 : lastIndex);\n } else if (event.key === \"ArrowRight\") {\n const nextSibling = currentTarget.nextSibling as HTMLElement;\n if (index < lastIndex) {\n nextSibling.focus();\n } else {\n firstChild.focus();\n }\n\n handleSelect(selectedIndex < lastIndex ? selectedIndex + 1 : firstIndex);\n } else if (event.key === \"Home\") {\n firstChild.focus();\n handleSelect(firstIndex);\n } else if (event.key === \"End\") {\n lastChild.focus();\n handleSelect(lastIndex);\n } else if (event.key === \"Enter\" || event.code === \"Space\") {\n setSelectedIndex(index);\n }\n };\n\n return (\n <button\n className={clsx(\"sds-tabs__tab\", className)}\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={`panel-${id}-${index}`}\n id={`tab-${id}-${index}`}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }}\n onKeyDown={handleKeyPress}\n {...rest}\n >\n {icon && <span className=\"sds-tabs__tab-icon\">{icon}</span>}\n {children}\n {badge && (\n <span className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </span>\n )}\n </button>\n );\n};\n","import React, {\n Children,\n ReactNode,\n ReactElement,\n cloneElement,\n isValidElement,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabProps } from \"./Tab\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n \"aria-label\": string;\n className?: string;\n}\n\nexport const TabList = ({\n children,\n \"aria-label\": ariaLabel,\n className,\n ...rest\n}: TabListProps) => {\n const arrayChildren = Children.toArray(children);\n\n return (\n <div\n className={clsx(\"sds-tabs__tab-list\", className)}\n role=\"tablist\"\n aria-label={ariaLabel}\n {...rest}\n >\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child)) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabProps & { index: number }>,\n {\n index,\n }\n )}\n </>\n );\n }\n })}\n </div>\n );\n};\n","import React, { ReactNode, useContext } from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabPanelProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const TabPanel = ({ children, className, ...rest }: TabPanelProps) => {\n const { index } = rest as { index: number };\n const { id, selectedIndex } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n return (\n <div\n className={clsx(\"sds-tabs__tab-panel\", className)}\n id={`panel-${id}-${index}`}\n role=\"tabpanel\"\n tabIndex={isSelected ? 0 : -1}\n aria-labelledby={`tab-${id}-${index}`}\n hidden={!isSelected}\n {...rest}\n >\n {children}\n </div>\n );\n};\n"],"names":["TabsContext","createContext","TabLink","forwardRef","children","className","icon","badge","href","isSelected","rest","ref","_jsxs","clsx","_jsx","isValidElement","cloneElement","visibility","displayName","index","id","count","isSelectOnFocus","selectedIndex","setSelectedIndex","setPreviousIndex","useContext","handleSelect","role","tabIndex","onClick","onKeyDown","event","lastIndex","currentTarget","firstChild","parentElement","lastChild","key","previousSibling","focus","nextSibling","code","jsx","ariaLabel","arrayChildren","Children","toArray","map","child","_Fragment","Fragment","hidden","defaultIndex","onChange","useState","previousIndex","useId","useEffect","length","Provider","value"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,25 +8,25 @@ interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
|
8
8
|
children: ReactNode;
|
|
9
9
|
className?: string;
|
|
10
10
|
}
|
|
11
|
-
declare const Tabs: ({ defaultIndex, onChange, isSelectOnFocus, children, className, ...rest }: TabsProps) => JSX.Element;
|
|
11
|
+
declare const Tabs: ({ defaultIndex, onChange, isSelectOnFocus, children, className, ...rest }: TabsProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
interface TabListProps extends HTMLAttributes<HTMLDivElement> {
|
|
13
13
|
children: ReactNode;
|
|
14
14
|
"aria-label": string;
|
|
15
15
|
className?: string;
|
|
16
16
|
}
|
|
17
|
-
declare const TabList: ({ children, "aria-label": ariaLabel, className, ...rest }: TabListProps) => JSX.Element;
|
|
17
|
+
declare const TabList: ({ children, "aria-label": ariaLabel, className, ...rest }: TabListProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
18
|
interface TabProps extends HTMLAttributes<HTMLButtonElement> {
|
|
19
19
|
children: ReactNode;
|
|
20
20
|
className?: string;
|
|
21
21
|
icon?: ReactNode;
|
|
22
22
|
badge?: ReactNode;
|
|
23
23
|
}
|
|
24
|
-
declare const Tab: ({ children, className, icon, badge, ...rest }: TabProps) => JSX.Element;
|
|
24
|
+
declare const Tab: ({ children, className, icon, badge, ...rest }: TabProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
25
|
interface TabPanelProps {
|
|
26
26
|
children: ReactNode;
|
|
27
27
|
className?: string;
|
|
28
28
|
}
|
|
29
|
-
declare const TabPanel: ({ children, className, ...rest }: TabPanelProps) => JSX.Element;
|
|
29
|
+
declare const TabPanel: ({ children, className, ...rest }: TabPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
30
|
interface TabLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
31
31
|
children: ReactNode;
|
|
32
32
|
className?: string;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,Fragment as s,jsxs as a}from"react/jsx-runtime";import{createContext as
|
|
1
|
+
import{jsx as e,Fragment as s,jsxs as a}from"react/jsx-runtime";import{createContext as t,useState as n,useId as i,useEffect as l,Children as c,isValidElement as d,cloneElement as r,useContext as o,forwardRef as b}from"react";import h from"clsx";const m=t(null),u=({defaultIndex:a=0,onChange:t,isSelectOnFocus:o=!1,children:b,className:u,...f})=>{const[x,p]=n(a),[_,N]=n(a),g=i();l((()=>{t&&_!==x&&t(x)}),[t,x]);const v=c.toArray(b),y=v.length-1;return e(m.Provider,{value:{id:g,count:y,isSelectOnFocus:o,selectedIndex:x,setSelectedIndex:p,setPreviousIndex:N},children:e("div",{className:h("sds-tabs",u),...f,children:c.map(v,((a,t)=>d(a)&&t>0?e(s,{children:r(a,{index:t-1})}):a))})})},f=({children:a,"aria-label":t,className:n,...i})=>{const l=c.toArray(a);return e("div",{className:h("sds-tabs__tab-list",n),role:"tablist","aria-label":t,...i,children:c.map(l,((a,t)=>{if(d(a))return e(s,{children:r(a,{index:t})})}))})},x=({children:s,className:t,icon:n,badge:i,...l})=>{const{index:c}=l,{id:b,count:u,isSelectOnFocus:f,selectedIndex:x,setSelectedIndex:p,setPreviousIndex:_}=o(m),N=c===x,g=e=>{f&&(_(x),p(e))};return a("button",{className:h("sds-tabs__tab",t),role:"tab","aria-selected":N,"aria-controls":`panel-${b}-${c}`,id:`tab-${b}-${c}`,tabIndex:N?0:-1,onClick:()=>{_(x),p(c)},onKeyDown:e=>{const s=u-1,a=e.currentTarget,t=a.parentElement?.firstChild,n=a.parentElement?.lastChild;if("ArrowLeft"===e.key){const e=a.previousSibling;c>0?e.focus():n.focus(),g(x>0?x-1:s)}else if("ArrowRight"===e.key){const e=a.nextSibling;c<s?e.focus():t.focus(),g(x<s?x+1:0)}else"Home"===e.key?(t.focus(),g(0)):"End"===e.key?(n.focus(),g(s)):"Enter"!==e.key&&"Space"!==e.code||p(c)},...l,children:[n&&e("span",{className:"sds-tabs__tab-icon",children:n}),s,i&&e("span",{className:"sds-tabs__tab-badge",children:N?d(i)&&r(i,{visibility:"high"}):i})]})},p=({children:s,className:a,...t})=>{const{index:n}=t,{id:i,selectedIndex:l}=o(m),c=n===l;return e("div",{className:h("sds-tabs__tab-panel",a),id:`panel-${i}-${n}`,role:"tabpanel",tabIndex:c?0:-1,"aria-labelledby":`tab-${i}-${n}`,hidden:!c,...t,children:s})},_=b((({children:s,className:t,icon:n,badge:i,href:l,isSelected:c,...o},b)=>a("a",{className:h("sds-tabs__tab","sds-tab-link",c&&"sds-tab-link--selected",t),href:l,ref:b,...o,children:[n&&e("div",{className:"sds-tabs__tab-icon",children:n}),s,i&&e("div",{className:"sds-tabs__tab-badge",children:c?d(i)&&r(i,{visibility:"high"}):i})]})));_.displayName="TabLink";export{x as Tab,_ as TabLink,f as TabList,p as TabPanel,u as Tabs};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../Tabs.tsx","../TabList.tsx","../Tab.tsx","../TabPanel.tsx","../TabLink.tsx"],"sourcesContent":["import React, {\n Children,\n ReactNode,\n cloneElement,\n useId,\n useState,\n isValidElement,\n createContext,\n ReactElement,\n useEffect,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tabs.pcss\";\nimport { TabPanelProps } from \"./TabPanel\";\n\nexport type TabsContextType = {\n id: string;\n count: number;\n isSelectOnFocus: boolean;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n setPreviousIndex: (index: number) => void;\n};\n\nexport const TabsContext = createContext<TabsContextType | null>(null);\n\nexport interface TabsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n defaultIndex?: number;\n isSelectOnFocus?: boolean;\n onChange?: (index: number) => void;\n children: ReactNode;\n className?: string;\n}\n\nexport const Tabs = ({\n defaultIndex = 0,\n onChange,\n isSelectOnFocus = false,\n children,\n className,\n ...rest\n}: TabsProps) => {\n const [selectedIndex, setSelectedIndex] = useState(defaultIndex);\n const [previousIndex, setPreviousIndex] = useState(defaultIndex);\n const id = useId();\n\n useEffect(() => {\n if (onChange && previousIndex !== selectedIndex) {\n onChange(selectedIndex);\n }\n }, [onChange, selectedIndex]);\n\n const arrayChildren = Children.toArray(children);\n const count = arrayChildren.length - 1;\n\n return (\n <TabsContext.Provider\n value={{\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n }}\n >\n <div className={clsx(\"sds-tabs\", className)} {...rest}>\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child) && index > 0) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabPanelProps & { index: number }>,\n {\n index: index - 1,\n }\n )}\n </>\n );\n } else {\n return child;\n }\n })}\n </div>\n </TabsContext.Provider>\n );\n};\n","import React, {\n Children,\n ReactNode,\n ReactElement,\n cloneElement,\n isValidElement,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabProps } from \"./Tab\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n \"aria-label\": string;\n className?: string;\n}\n\nexport const TabList = ({\n children,\n \"aria-label\": ariaLabel,\n className,\n ...rest\n}: TabListProps) => {\n const arrayChildren = Children.toArray(children);\n\n return (\n <div\n className={clsx(\"sds-tabs__tab-list\", className)}\n role=\"tablist\"\n aria-label={ariaLabel}\n {...rest}\n >\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child)) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabProps & { index: number }>,\n {\n index,\n }\n )}\n </>\n );\n }\n })}\n </div>\n );\n};\n","import React, {\n cloneElement,\n isValidElement,\n HTMLAttributes,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n useContext,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n}\n\nexport const Tab = ({\n children,\n className,\n icon,\n badge,\n ...rest\n}: TabProps) => {\n const { index } = rest as { index: number };\n const {\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n const handleSelect = (index: number) => {\n if (isSelectOnFocus) {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }\n };\n const handleKeyPress = (event: KeyboardEvent<HTMLButtonElement>) => {\n const firstIndex = 0;\n const lastIndex = count - 1;\n const currentTarget = event.currentTarget;\n const firstChild = currentTarget.parentElement?.firstChild as HTMLElement;\n const lastChild = currentTarget.parentElement?.lastChild as HTMLElement;\n\n if (event.key === \"ArrowLeft\") {\n const previousSibling = currentTarget.previousSibling as HTMLElement;\n if (index > firstIndex) {\n previousSibling.focus();\n } else {\n lastChild.focus();\n }\n\n handleSelect(selectedIndex > firstIndex ? selectedIndex - 1 : lastIndex);\n } else if (event.key === \"ArrowRight\") {\n const nextSibling = currentTarget.nextSibling as HTMLElement;\n if (index < lastIndex) {\n nextSibling.focus();\n } else {\n firstChild.focus();\n }\n\n handleSelect(selectedIndex < lastIndex ? selectedIndex + 1 : firstIndex);\n } else if (event.key === \"Home\") {\n firstChild.focus();\n handleSelect(firstIndex);\n } else if (event.key === \"End\") {\n lastChild.focus();\n handleSelect(lastIndex);\n } else if (event.key === \"Enter\" || event.code === \"Space\") {\n setSelectedIndex(index);\n }\n };\n\n return (\n <button\n className={clsx(\"sds-tabs__tab\", className)}\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={`panel-${id}-${index}`}\n id={`tab-${id}-${index}`}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }}\n onKeyDown={handleKeyPress}\n {...rest}\n >\n {icon && <div className=\"sds-tabs__tab-icon\">{icon}</div>}\n {children}\n {badge && (\n <div className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </div>\n )}\n </button>\n );\n};\n","import React, { ReactNode, useContext } from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabPanelProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const TabPanel = ({ children, className, ...rest }: TabPanelProps) => {\n const { index } = rest as { index: number };\n const { id, selectedIndex } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n return (\n <div\n className={clsx(\"sds-tabs__tab-panel\", className)}\n id={`panel-${id}-${index}`}\n role=\"tabpanel\"\n tabIndex={isSelected ? 0 : -1}\n aria-labelledby={`tab-${id}-${index}`}\n hidden={!isSelected}\n {...rest}\n >\n {children}\n </div>\n );\n};\n","import React, {\n AnchorHTMLAttributes,\n cloneElement,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tab-link.pcss\";\n\nexport interface TabLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n isSelected?: boolean;\n}\n\nexport const TabLink = forwardRef<HTMLAnchorElement, TabLinkProps>(\n (\n {\n children,\n className,\n icon,\n badge,\n href,\n isSelected,\n ...rest\n }: TabLinkProps,\n ref\n ) => {\n return (\n <a\n className={clsx(\n \"sds-tabs__tab\",\n \"sds-tab-link\",\n isSelected && \"sds-tab-link--selected\",\n className\n )}\n href={href}\n ref={ref}\n {...rest}\n >\n {icon && <div className=\"sds-tabs__tab-icon\">{icon}</div>}\n {children}\n {badge && (\n <div className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </div>\n )}\n </a>\n );\n }\n);\n\nTabLink.displayName = \"TabLink\";\n"],"names":["TabsContext","createContext","Tabs","defaultIndex","onChange","isSelectOnFocus","children","className","rest","selectedIndex","setSelectedIndex","useState","previousIndex","setPreviousIndex","id","useId","useEffect","arrayChildren","Children","toArray","count","length","_jsx","Provider","value","clsx","map","child","index","isValidElement","_Fragment","cloneElement","TabList","ariaLabel","role","Tab","icon","badge","useContext","isSelected","handleSelect","_jsxs","tabIndex","onClick","onKeyDown","event","lastIndex","currentTarget","firstChild","_a","parentElement","lastChild","_b","key","previousSibling","focus","nextSibling","code","visibility","TabPanel","hidden","TabLink","forwardRef","href","ref","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../Tabs.tsx","../TabList.tsx","../Tab.tsx","../TabPanel.tsx","../TabLink.tsx"],"sourcesContent":["import React, {\n Children,\n ReactNode,\n cloneElement,\n useId,\n useState,\n isValidElement,\n createContext,\n ReactElement,\n useEffect,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tabs.pcss\";\nimport { TabPanelProps } from \"./TabPanel\";\n\nexport type TabsContextType = {\n id: string;\n count: number;\n isSelectOnFocus: boolean;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n setPreviousIndex: (index: number) => void;\n};\n\nexport const TabsContext = createContext<TabsContextType | null>(null);\n\nexport interface TabsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n defaultIndex?: number;\n isSelectOnFocus?: boolean;\n onChange?: (index: number) => void;\n children: ReactNode;\n className?: string;\n}\n\nexport const Tabs = ({\n defaultIndex = 0,\n onChange,\n isSelectOnFocus = false,\n children,\n className,\n ...rest\n}: TabsProps) => {\n const [selectedIndex, setSelectedIndex] = useState(defaultIndex);\n const [previousIndex, setPreviousIndex] = useState(defaultIndex);\n const id = useId();\n\n useEffect(() => {\n if (onChange && previousIndex !== selectedIndex) {\n onChange(selectedIndex);\n }\n }, [onChange, selectedIndex]);\n\n const arrayChildren = Children.toArray(children);\n const count = arrayChildren.length - 1;\n\n return (\n <TabsContext.Provider\n value={{\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n }}\n >\n <div className={clsx(\"sds-tabs\", className)} {...rest}>\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child) && index > 0) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabPanelProps & { index: number }>,\n {\n index: index - 1,\n }\n )}\n </>\n );\n } else {\n return child;\n }\n })}\n </div>\n </TabsContext.Provider>\n );\n};\n","import React, {\n Children,\n ReactNode,\n ReactElement,\n cloneElement,\n isValidElement,\n HTMLAttributes,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabProps } from \"./Tab\";\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n \"aria-label\": string;\n className?: string;\n}\n\nexport const TabList = ({\n children,\n \"aria-label\": ariaLabel,\n className,\n ...rest\n}: TabListProps) => {\n const arrayChildren = Children.toArray(children);\n\n return (\n <div\n className={clsx(\"sds-tabs__tab-list\", className)}\n role=\"tablist\"\n aria-label={ariaLabel}\n {...rest}\n >\n {Children.map(arrayChildren, (child, index) => {\n if (isValidElement(child)) {\n return (\n <>\n {cloneElement(\n child as ReactElement<TabProps & { index: number }>,\n {\n index,\n }\n )}\n </>\n );\n }\n })}\n </div>\n );\n};\n","import React, {\n cloneElement,\n isValidElement,\n HTMLAttributes,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n useContext,\n} from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n}\n\nexport const Tab = ({\n children,\n className,\n icon,\n badge,\n ...rest\n}: TabProps) => {\n const { index } = rest as { index: number };\n const {\n id,\n count,\n isSelectOnFocus,\n selectedIndex,\n setSelectedIndex,\n setPreviousIndex,\n } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n const handleSelect = (index: number) => {\n if (isSelectOnFocus) {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }\n };\n const handleKeyPress = (event: KeyboardEvent<HTMLButtonElement>) => {\n const firstIndex = 0;\n const lastIndex = count - 1;\n const currentTarget = event.currentTarget;\n const firstChild = currentTarget.parentElement?.firstChild as HTMLElement;\n const lastChild = currentTarget.parentElement?.lastChild as HTMLElement;\n\n if (event.key === \"ArrowLeft\") {\n const previousSibling = currentTarget.previousSibling as HTMLElement;\n if (index > firstIndex) {\n previousSibling.focus();\n } else {\n lastChild.focus();\n }\n\n handleSelect(selectedIndex > firstIndex ? selectedIndex - 1 : lastIndex);\n } else if (event.key === \"ArrowRight\") {\n const nextSibling = currentTarget.nextSibling as HTMLElement;\n if (index < lastIndex) {\n nextSibling.focus();\n } else {\n firstChild.focus();\n }\n\n handleSelect(selectedIndex < lastIndex ? selectedIndex + 1 : firstIndex);\n } else if (event.key === \"Home\") {\n firstChild.focus();\n handleSelect(firstIndex);\n } else if (event.key === \"End\") {\n lastChild.focus();\n handleSelect(lastIndex);\n } else if (event.key === \"Enter\" || event.code === \"Space\") {\n setSelectedIndex(index);\n }\n };\n\n return (\n <button\n className={clsx(\"sds-tabs__tab\", className)}\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={`panel-${id}-${index}`}\n id={`tab-${id}-${index}`}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n setPreviousIndex(selectedIndex);\n setSelectedIndex(index);\n }}\n onKeyDown={handleKeyPress}\n {...rest}\n >\n {icon && <span className=\"sds-tabs__tab-icon\">{icon}</span>}\n {children}\n {badge && (\n <span className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </span>\n )}\n </button>\n );\n};\n","import React, { ReactNode, useContext } from \"react\";\nimport clsx from \"clsx\";\nimport { TabsContext, TabsContextType } from \"./Tabs\";\n\nexport interface TabPanelProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const TabPanel = ({ children, className, ...rest }: TabPanelProps) => {\n const { index } = rest as { index: number };\n const { id, selectedIndex } = useContext(TabsContext) as TabsContextType;\n const isSelected = index === selectedIndex;\n return (\n <div\n className={clsx(\"sds-tabs__tab-panel\", className)}\n id={`panel-${id}-${index}`}\n role=\"tabpanel\"\n tabIndex={isSelected ? 0 : -1}\n aria-labelledby={`tab-${id}-${index}`}\n hidden={!isSelected}\n {...rest}\n >\n {children}\n </div>\n );\n};\n","import React, {\n AnchorHTMLAttributes,\n cloneElement,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport clsx from \"clsx\";\nimport \"./tab-link.pcss\";\n\nexport interface TabLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n children: ReactNode;\n className?: string;\n icon?: ReactNode;\n badge?: ReactNode;\n isSelected?: boolean;\n}\n\nexport const TabLink = forwardRef<HTMLAnchorElement, TabLinkProps>(\n (\n {\n children,\n className,\n icon,\n badge,\n href,\n isSelected,\n ...rest\n }: TabLinkProps,\n ref\n ) => {\n return (\n <a\n className={clsx(\n \"sds-tabs__tab\",\n \"sds-tab-link\",\n isSelected && \"sds-tab-link--selected\",\n className\n )}\n href={href}\n ref={ref}\n {...rest}\n >\n {icon && <div className=\"sds-tabs__tab-icon\">{icon}</div>}\n {children}\n {badge && (\n <div className=\"sds-tabs__tab-badge\">\n {isSelected\n ? isValidElement(badge) &&\n cloneElement(badge as ReactElement, { visibility: \"high\" })\n : badge}\n </div>\n )}\n </a>\n );\n }\n);\n\nTabLink.displayName = \"TabLink\";\n"],"names":["TabsContext","createContext","Tabs","defaultIndex","onChange","isSelectOnFocus","children","className","rest","selectedIndex","setSelectedIndex","useState","previousIndex","setPreviousIndex","id","useId","useEffect","arrayChildren","Children","toArray","count","length","_jsx","Provider","value","clsx","map","child","index","isValidElement","_Fragment","cloneElement","TabList","ariaLabel","role","Tab","icon","badge","useContext","isSelected","handleSelect","_jsxs","tabIndex","onClick","onKeyDown","event","lastIndex","currentTarget","firstChild","parentElement","lastChild","key","previousSibling","focus","nextSibling","code","visibility","TabPanel","hidden","TabLink","forwardRef","href","ref","displayName"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sikt/sds-tabs",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"peerDependencies": {
|
|
19
19
|
"@types/react": "^18.0.0",
|
|
20
20
|
"@types/react-dom": "^18.0.0",
|
|
21
|
-
"clsx": "^1.2.
|
|
21
|
+
"clsx": "^1.0.0 || ^2.0.0",
|
|
22
22
|
"react": "^18.0.0",
|
|
23
23
|
"react-dom": "^18.0.0"
|
|
24
24
|
}
|