@cerberus-design/react 0.6.1-next-79cd0cd → 0.6.1-next-fb37218

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.
Files changed (47) hide show
  1. package/build/legacy/_tsup-dts-rollup.d.ts +5 -1
  2. package/build/legacy/aria-helpers/tabs.aria.js +2 -2
  3. package/build/legacy/{chunk-YJCWUN33.js → chunk-67S42J4B.js} +5 -16
  4. package/build/legacy/chunk-67S42J4B.js.map +1 -0
  5. package/build/{modern/chunk-DQOYTLGB.js → legacy/chunk-7KJIZIAU.js} +9 -5
  6. package/build/legacy/chunk-7KJIZIAU.js.map +1 -0
  7. package/build/legacy/chunk-JI4YTPEJ.js +47 -0
  8. package/build/legacy/chunk-JI4YTPEJ.js.map +1 -0
  9. package/build/legacy/{chunk-S7HBD2A7.js → chunk-KFUXGX33.js} +2 -2
  10. package/build/legacy/{chunk-5GSXIYD3.js → chunk-X2JMXTBH.js} +6 -8
  11. package/build/{modern/chunk-5GSXIYD3.js.map → legacy/chunk-X2JMXTBH.js.map} +1 -1
  12. package/build/legacy/components/Tab.js +3 -3
  13. package/build/legacy/components/TabList.js +2 -2
  14. package/build/legacy/components/TabPanel.js +2 -2
  15. package/build/legacy/context/tabs.js +1 -1
  16. package/build/legacy/index.js +5 -5
  17. package/build/modern/_tsup-dts-rollup.d.ts +5 -1
  18. package/build/modern/aria-helpers/tabs.aria.js +2 -2
  19. package/build/modern/{chunk-YJCWUN33.js → chunk-67S42J4B.js} +5 -16
  20. package/build/modern/chunk-67S42J4B.js.map +1 -0
  21. package/build/{legacy/chunk-DQOYTLGB.js → modern/chunk-7KJIZIAU.js} +9 -5
  22. package/build/modern/chunk-7KJIZIAU.js.map +1 -0
  23. package/build/modern/chunk-HBEEHHON.js +46 -0
  24. package/build/modern/chunk-HBEEHHON.js.map +1 -0
  25. package/build/modern/{chunk-S7HBD2A7.js → chunk-KFUXGX33.js} +2 -2
  26. package/build/modern/{chunk-5GSXIYD3.js → chunk-X2JMXTBH.js} +6 -8
  27. package/build/{legacy/chunk-5GSXIYD3.js.map → modern/chunk-X2JMXTBH.js.map} +1 -1
  28. package/build/modern/components/Tab.js +3 -3
  29. package/build/modern/components/TabList.js +2 -2
  30. package/build/modern/components/TabPanel.js +2 -2
  31. package/build/modern/context/tabs.js +1 -1
  32. package/build/modern/index.js +5 -5
  33. package/package.json +2 -2
  34. package/src/components/Tab.tsx +3 -84
  35. package/src/components/TabList.tsx +2 -4
  36. package/src/components/TabPanel.tsx +3 -14
  37. package/src/context/tabs.tsx +15 -5
  38. package/build/legacy/chunk-DQOYTLGB.js.map +0 -1
  39. package/build/legacy/chunk-YA2UV2AB.js +0 -126
  40. package/build/legacy/chunk-YA2UV2AB.js.map +0 -1
  41. package/build/legacy/chunk-YJCWUN33.js.map +0 -1
  42. package/build/modern/chunk-DQOYTLGB.js.map +0 -1
  43. package/build/modern/chunk-SUP7U42W.js +0 -125
  44. package/build/modern/chunk-SUP7U42W.js.map +0 -1
  45. package/build/modern/chunk-YJCWUN33.js.map +0 -1
  46. /package/build/legacy/{chunk-S7HBD2A7.js.map → chunk-KFUXGX33.js.map} +0 -0
  47. /package/build/modern/{chunk-S7HBD2A7.js.map → chunk-KFUXGX33.js.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import {
3
3
  TabList
4
- } from "../chunk-5GSXIYD3.js";
5
- import "../chunk-DQOYTLGB.js";
4
+ } from "../chunk-X2JMXTBH.js";
5
+ import "../chunk-7KJIZIAU.js";
6
6
  export {
7
7
  TabList
8
8
  };
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import {
3
3
  TabPanel
4
- } from "../chunk-YJCWUN33.js";
4
+ } from "../chunk-67S42J4B.js";
5
5
  import "../chunk-4O4QFF4S.js";
6
- import "../chunk-DQOYTLGB.js";
6
+ import "../chunk-7KJIZIAU.js";
7
7
  export {
8
8
  TabPanel
9
9
  };
@@ -3,7 +3,7 @@ import {
3
3
  Tabs,
4
4
  TabsContext,
5
5
  useTabsContext
6
- } from "../chunk-DQOYTLGB.js";
6
+ } from "../chunk-7KJIZIAU.js";
7
7
  export {
8
8
  Tabs,
9
9
  TabsContext,
@@ -3,13 +3,13 @@ import {
3
3
  } from "./chunk-WE3JNSNO.js";
4
4
  import {
5
5
  Tab
6
- } from "./chunk-SUP7U42W.js";
6
+ } from "./chunk-HBEEHHON.js";
7
7
  import {
8
8
  TabList
9
- } from "./chunk-5GSXIYD3.js";
9
+ } from "./chunk-X2JMXTBH.js";
10
10
  import {
11
11
  TabPanel
12
- } from "./chunk-YJCWUN33.js";
12
+ } from "./chunk-67S42J4B.js";
13
13
  import {
14
14
  Tag
15
15
  } from "./chunk-SLIOCQBZ.js";
@@ -61,12 +61,12 @@ import {
61
61
  } from "./chunk-JF76VIL3.js";
62
62
  import {
63
63
  useTabsKeyboardNavigation
64
- } from "./chunk-S7HBD2A7.js";
64
+ } from "./chunk-KFUXGX33.js";
65
65
  import {
66
66
  Tabs,
67
67
  TabsContext,
68
68
  useTabsContext
69
- } from "./chunk-DQOYTLGB.js";
69
+ } from "./chunk-7KJIZIAU.js";
70
70
  import {
71
71
  $cerberusIcons,
72
72
  defineIcons
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cerberus-design/react",
3
- "version": "0.6.1-next-79cd0cd",
3
+ "version": "0.6.1-next-fb37218",
4
4
  "description": "The Cerberus Design React component library.",
5
5
  "browserslist": "> 0.25%, not dead",
6
6
  "sideEffects": false,
@@ -22,7 +22,7 @@
22
22
  "react-dom": "^18",
23
23
  "tsup": "^8.1.0",
24
24
  "@cerberus-design/configs": "0.0.0",
25
- "@cerberus-design/styled-system": "0.6.1-next-79cd0cd"
25
+ "@cerberus-design/styled-system": "0.6.1-next-fb37218"
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"
@@ -7,14 +7,13 @@ import {
7
7
  type MouseEvent,
8
8
  } from 'react'
9
9
  import { useTabsContext } from '../context/tabs'
10
- import { css, cx } from '@cerberus/styled-system/css'
10
+ import { cx } from '@cerberus/styled-system/css'
11
11
  import { useTabsKeyboardNavigation } from '../aria-helpers/tabs.aria'
12
12
 
13
13
  /**
14
14
  * This module provides a Tab component.
15
15
  * @module
16
16
  */
17
-
18
17
  export interface TabProps extends ButtonHTMLAttributes<HTMLButtonElement> {
19
18
  value: string
20
19
  }
@@ -33,7 +32,7 @@ export interface TabProps extends ButtonHTMLAttributes<HTMLButtonElement> {
33
32
  */
34
33
  export function Tab(props: TabProps) {
35
34
  const { value, ...nativeProps } = props
36
- const { active, onTabUpdate } = useTabsContext()
35
+ const { active, onTabUpdate, styles } = useTabsContext()
37
36
  const [isPending, startTransition] = useTransition()
38
37
  const { ref } = useTabsKeyboardNavigation()
39
38
  const isActive = useMemo(() => active === value, [active, value])
@@ -51,7 +50,7 @@ export function Tab(props: TabProps) {
51
50
  aria-busy={isPending}
52
51
  aria-selected={isActive}
53
52
  id={value}
54
- className={cx(nativeProps.className, btnStyles)}
53
+ className={cx(nativeProps.className, styles.tab)}
55
54
  onClick={handleClick}
56
55
  role="tab"
57
56
  ref={ref}
@@ -59,83 +58,3 @@ export function Tab(props: TabProps) {
59
58
  />
60
59
  )
61
60
  }
62
-
63
- const btnStyles = css({
64
- alignItems: 'center',
65
- display: 'inline-flex',
66
- borderTopLeftRadius: 'md',
67
- borderTopRightRadius: 'md',
68
- fontSize: 'sm',
69
- fontWeight: '600',
70
- gap: '2',
71
- h: '2.75rem',
72
- justifyContent: 'center',
73
- position: 'relative',
74
- pxi: '4',
75
- zIndex: 'base',
76
- _motionSafe: {
77
- transition: 'all 200ms ease-in-out',
78
- _before: {
79
- transitionProperty: 'height',
80
- transitionDuration: '200ms',
81
- transitionTimingFunction: 'ease-in-out',
82
- },
83
- _after: {
84
- transitionProperty: 'height',
85
- transitionDuration: '200ms',
86
- transitionTimingFunction: 'ease-in-out',
87
- },
88
- },
89
- _before: {
90
- bgColor: 'action.border.initial',
91
- bottom: '0',
92
- content: '""',
93
- h: '0',
94
- position: 'absolute',
95
- left: '0',
96
- right: '0',
97
- w: 'full',
98
- willChange: 'height',
99
- zIndex: 'decorator',
100
- },
101
- _after: {
102
- borderTopLeftRadius: 'md',
103
- borderTopRightRadius: 'md',
104
- bottom: '0',
105
- bgColor: 'neutral.surface.100',
106
- content: '""',
107
- left: '0',
108
- position: 'absolute',
109
- right: '0',
110
- h: '0',
111
- w: 'full',
112
- willChange: 'height',
113
- zIndex: '-1',
114
- },
115
- _hover: {
116
- _after: {
117
- h: 'full',
118
- },
119
- },
120
- _focusVisible: {
121
- boxShadow: 'none',
122
- outline: '3px solid',
123
- outlineColor: 'action.border.focus',
124
- outlineOffset: '2px',
125
- },
126
- _disabled: {
127
- cursor: 'not-allowed',
128
- opacity: '0.5',
129
- },
130
- _selected: {
131
- color: 'action.text.200',
132
- _before: {
133
- h: '3px',
134
- },
135
- _hover: {
136
- _after: {
137
- h: '0',
138
- },
139
- },
140
- },
141
- })
@@ -27,7 +27,7 @@ export interface TabListProps extends HTMLAttributes<HTMLDivElement> {
27
27
  */
28
28
  export function TabList(props: PropsWithChildren<TabListProps>) {
29
29
  const { description, ...nativeProps } = props
30
- const { id } = useTabsContext()
30
+ const { id, styles } = useTabsContext()
31
31
 
32
32
  return (
33
33
  <div
@@ -36,11 +36,9 @@ export function TabList(props: PropsWithChildren<TabListProps>) {
36
36
  className={cx(
37
37
  nativeProps.className,
38
38
  hstack({
39
- borderBottom: '1px solid',
40
- borderBottomColor: 'action.border.100',
41
39
  gap: '0',
42
- w: 'full',
43
40
  }),
41
+ styles.tabList,
44
42
  )}
45
43
  id={id ?? nativeProps.id}
46
44
  />
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
 
3
- import { css, cx } from '@cerberus/styled-system/css'
3
+ import { cx } from '@cerberus/styled-system/css'
4
4
  import { useMemo, type HTMLAttributes } from 'react'
5
5
  import { useTabsContext } from '../context/tabs'
6
6
  import { Show } from './Show'
@@ -26,7 +26,7 @@ export interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {
26
26
  */
27
27
  export function TabPanel(props: TabPanelProps) {
28
28
  const { tab, ...nativeProps } = props
29
- const { active } = useTabsContext()
29
+ const { active, styles } = useTabsContext()
30
30
  const isActive = useMemo(() => active === tab, [active, tab])
31
31
 
32
32
  return (
@@ -35,18 +35,7 @@ export function TabPanel(props: TabPanelProps) {
35
35
  {...nativeProps}
36
36
  {...(isActive && { tabIndex: 0 })}
37
37
  aria-labelledby={tab}
38
- className={cx(
39
- nativeProps.className,
40
- css({
41
- rounded: 'md',
42
- _focusVisible: {
43
- boxShadow: 'none',
44
- outline: '3px solid',
45
- outlineColor: 'action.border.focus',
46
- outlineOffset: '2px',
47
- },
48
- }),
49
- )}
38
+ className={cx(nativeProps.className, styles.tabPanel)}
50
39
  id={`panel:${tab}`}
51
40
  role="tabpanel"
52
41
  />
@@ -1,5 +1,10 @@
1
1
  'use client'
2
2
 
3
+ import {
4
+ tabs,
5
+ type TabsVariantProps,
6
+ } from '@cerberus-design/styled-system/recipes'
7
+ import type { Pretty } from '@cerberus-design/styled-system/types'
3
8
  import {
4
9
  createContext,
5
10
  useContext,
@@ -20,6 +25,7 @@ export interface TabsContextValue {
20
25
  tabs: MutableRefObject<HTMLButtonElement[]>
21
26
  id: string
22
27
  active: string
28
+ styles: Pretty<Record<'tabList' | 'tab' | 'tabPanel', string>>
23
29
  onTabUpdate: (active: string) => void
24
30
  }
25
31
 
@@ -33,6 +39,7 @@ export interface TabsProps {
33
39
 
34
40
  /**
35
41
  * The Tabs component provides a context to manage tab state.
42
+ * @param id - the id of the tabs component,
36
43
  * @param active - the default active tab id,
37
44
  * @param cache - whether to cache the active tab state in local storage
38
45
  * @example
@@ -49,22 +56,25 @@ export interface TabsProps {
49
56
  * </Tabs>
50
57
  * ```
51
58
  */
52
- export function Tabs(props: PropsWithChildren<TabsProps>): JSX.Element {
53
- const { cache, active, id } = props
59
+ export function Tabs(
60
+ props: PropsWithChildren<TabsProps & TabsVariantProps>,
61
+ ): JSX.Element {
62
+ const { cache, active, id, palette } = props
54
63
  const [activeTab, setActiveTab] = useState(() => (cache ? '' : active ?? ''))
55
- const tabs = useRef<HTMLButtonElement[]>([])
64
+ const tabsList = useRef<HTMLButtonElement[]>([])
56
65
  const uuid = useMemo(() => {
57
66
  return id ? `cerberus-tabs-${id}` : 'cerberus-tabs'
58
67
  }, [id])
59
68
 
60
69
  const value = useMemo(
61
70
  () => ({
62
- tabs,
71
+ tabs: tabsList,
63
72
  id: uuid,
64
73
  active: activeTab,
74
+ styles: tabs({ palette }),
65
75
  onTabUpdate: setActiveTab,
66
76
  }),
67
- [activeTab, setActiveTab, uuid, tabs],
77
+ [activeTab, setActiveTab, palette, uuid, tabsList],
68
78
  )
69
79
 
70
80
  // Get the active tab from local storage
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/context/tabs.tsx"],"sourcesContent":["'use client'\n\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type MutableRefObject,\n type PropsWithChildren,\n} from 'react'\n\n/**\n * This module provides a Tabs component and a hook to access its context.\n * @module\n */\n\nexport interface TabsContextValue {\n tabs: MutableRefObject<HTMLButtonElement[]>\n id: string\n active: string\n onTabUpdate: (active: string) => void\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport interface TabsProps {\n id?: string\n active?: string\n cache?: boolean\n}\n\n/**\n * The Tabs component provides a context to manage tab state.\n * @param active - the default active tab id,\n * @param cache - whether to cache the active tab state in local storage\n * @example\n * ```tsx\n * <Tabs cache>\n * <TabList description=\"Button details\">\n * <Tab id=\"overview\">Overview</Tab>\n * <Tab id=\"guidelines\">Guidelines</Tab>\n * </TabList>\n * <TabPanels>\n * <TabPanel id=\"overview\">Overview content</TabPanel>\n * <TabPanel id=\"guidelines\">Guidelines content</TabPanel>\n * </TabPanels>\n * </Tabs>\n * ```\n */\nexport function Tabs(props: PropsWithChildren<TabsProps>): JSX.Element {\n const { cache, active, id } = props\n const [activeTab, setActiveTab] = useState(() => (cache ? '' : active ?? ''))\n const tabs = useRef<HTMLButtonElement[]>([])\n const uuid = useMemo(() => {\n return id ? `cerberus-tabs-${id}` : 'cerberus-tabs'\n }, [id])\n\n const value = useMemo(\n () => ({\n tabs,\n id: uuid,\n active: activeTab,\n onTabUpdate: setActiveTab,\n }),\n [activeTab, setActiveTab, uuid, tabs],\n )\n\n // Get the active tab from local storage\n useEffect(() => {\n if (cache) {\n const cachedTab = window.localStorage.getItem(uuid)\n setActiveTab(\n cache ? cachedTab || (props.active ?? '') : props.active ?? '',\n )\n }\n }, [cache, active, uuid])\n\n // Update the active tab in local storage\n useEffect(() => {\n if (cache && activeTab) {\n window.localStorage.setItem(uuid, activeTab)\n }\n }, [activeTab, cache])\n\n return (\n <TabsContext.Provider value={value}>{props.children}</TabsContext.Provider>\n )\n}\n\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('useTabsContext must be used within a Tabs Provider.')\n }\n return context\n}\n"],"mappings":";AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AA4EH;AA9DG,IAAM,cAAc,cAAuC,IAAI;AA0B/D,SAAS,KAAK,OAAkD;AACrE,QAAM,EAAE,OAAO,QAAQ,GAAG,IAAI;AAC9B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,MAAO,QAAQ,KAAK,UAAU,EAAG;AAC5E,QAAM,OAAO,OAA4B,CAAC,CAAC;AAC3C,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO,KAAK,iBAAiB,EAAE,KAAK;AAAA,EACtC,GAAG,CAAC,EAAE,CAAC;AAEP,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa;AAAA,IACf;AAAA,IACA,CAAC,WAAW,cAAc,MAAM,IAAI;AAAA,EACtC;AAGA,YAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,YAAY,OAAO,aAAa,QAAQ,IAAI;AAClD;AAAA,QACE,QAAQ,cAAc,MAAM,UAAU,MAAM,MAAM,UAAU;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,IAAI,CAAC;AAGxB,YAAU,MAAM;AACd,QAAI,SAAS,WAAW;AACtB,aAAO,aAAa,QAAQ,MAAM,SAAS;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,WAAW,KAAK,CAAC;AAErB,SACE,oBAAC,YAAY,UAAZ,EAAqB,OAAe,gBAAM,UAAS;AAExD;AAEO,SAAS,iBAAmC;AACjD,QAAM,UAAU,WAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;","names":[]}
@@ -1,126 +0,0 @@
1
- import {
2
- useTabsKeyboardNavigation
3
- } from "./chunk-S7HBD2A7.js";
4
- import {
5
- useTabsContext
6
- } from "./chunk-DQOYTLGB.js";
7
-
8
- // src/components/Tab.tsx
9
- import {
10
- useMemo,
11
- useTransition
12
- } from "react";
13
- import { css, cx } from "@cerberus/styled-system/css";
14
- import { jsx } from "react/jsx-runtime";
15
- function Tab(props) {
16
- const { value, ...nativeProps } = props;
17
- const { active, onTabUpdate } = useTabsContext();
18
- const [isPending, startTransition] = useTransition();
19
- const { ref } = useTabsKeyboardNavigation();
20
- const isActive = useMemo(() => active === value, [active, value]);
21
- function handleClick(e) {
22
- var _a;
23
- (_a = props.onClick) == null ? void 0 : _a.call(props, e);
24
- startTransition(() => onTabUpdate(e.currentTarget.value));
25
- }
26
- return /* @__PURE__ */ jsx(
27
- "button",
28
- {
29
- ...nativeProps,
30
- ...!isActive && { tabIndex: -1 },
31
- "aria-controls": `panel:${value}`,
32
- "aria-busy": isPending,
33
- "aria-selected": isActive,
34
- id: value,
35
- className: cx(nativeProps.className, btnStyles),
36
- onClick: handleClick,
37
- role: "tab",
38
- ref,
39
- value
40
- }
41
- );
42
- }
43
- var btnStyles = css({
44
- alignItems: "center",
45
- display: "inline-flex",
46
- borderTopLeftRadius: "md",
47
- borderTopRightRadius: "md",
48
- fontSize: "sm",
49
- fontWeight: "600",
50
- gap: "2",
51
- h: "2.75rem",
52
- justifyContent: "center",
53
- position: "relative",
54
- pxi: "4",
55
- zIndex: "base",
56
- _motionSafe: {
57
- transition: "all 200ms ease-in-out",
58
- _before: {
59
- transitionProperty: "height",
60
- transitionDuration: "200ms",
61
- transitionTimingFunction: "ease-in-out"
62
- },
63
- _after: {
64
- transitionProperty: "height",
65
- transitionDuration: "200ms",
66
- transitionTimingFunction: "ease-in-out"
67
- }
68
- },
69
- _before: {
70
- bgColor: "action.border.initial",
71
- bottom: "0",
72
- content: '""',
73
- h: "0",
74
- position: "absolute",
75
- left: "0",
76
- right: "0",
77
- w: "full",
78
- willChange: "height",
79
- zIndex: "decorator"
80
- },
81
- _after: {
82
- borderTopLeftRadius: "md",
83
- borderTopRightRadius: "md",
84
- bottom: "0",
85
- bgColor: "neutral.surface.100",
86
- content: '""',
87
- left: "0",
88
- position: "absolute",
89
- right: "0",
90
- h: "0",
91
- w: "full",
92
- willChange: "height",
93
- zIndex: "-1"
94
- },
95
- _hover: {
96
- _after: {
97
- h: "full"
98
- }
99
- },
100
- _focusVisible: {
101
- boxShadow: "none",
102
- outline: "3px solid",
103
- outlineColor: "action.border.focus",
104
- outlineOffset: "2px"
105
- },
106
- _disabled: {
107
- cursor: "not-allowed",
108
- opacity: "0.5"
109
- },
110
- _selected: {
111
- color: "action.text.200",
112
- _before: {
113
- h: "3px"
114
- },
115
- _hover: {
116
- _after: {
117
- h: "0"
118
- }
119
- }
120
- }
121
- });
122
-
123
- export {
124
- Tab
125
- };
126
- //# sourceMappingURL=chunk-YA2UV2AB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/Tab.tsx"],"sourcesContent":["'use client'\n\nimport {\n useMemo,\n useTransition,\n type ButtonHTMLAttributes,\n type MouseEvent,\n} from 'react'\nimport { useTabsContext } from '../context/tabs'\nimport { css, cx } from '@cerberus/styled-system/css'\nimport { useTabsKeyboardNavigation } from '../aria-helpers/tabs.aria'\n\n/**\n * This module provides a Tab component.\n * @module\n */\n\nexport interface TabProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\n/**\n * The Tab component provides a tab element to be used in a TabList.\n * @definition [ARIA Target Size](https://www.w3.org/WAI/WCAG21/Understanding/target-size.html#:~:text=Understanding%20SC%202.5.,%3ATarget%20Size%20(Level%20AAA)&text=The%20size%20of%20the%20target,Equivalent)\n * @definition [Tab docs](https://cerberus.digitalu.design/react/tabs)\n * @param value - the id of the tab that will be tracked as the active tab and used for aria attributes\n * @example\n * ```tsx\n * <Tab value=\"overview\">\n * Overview\n * </Tab>\n * ```\n */\nexport function Tab(props: TabProps) {\n const { value, ...nativeProps } = props\n const { active, onTabUpdate } = useTabsContext()\n const [isPending, startTransition] = useTransition()\n const { ref } = useTabsKeyboardNavigation()\n const isActive = useMemo(() => active === value, [active, value])\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n props.onClick?.(e)\n startTransition(() => onTabUpdate(e.currentTarget.value))\n }\n\n return (\n <button\n {...nativeProps}\n {...(!isActive && { tabIndex: -1 })}\n aria-controls={`panel:${value}`}\n aria-busy={isPending}\n aria-selected={isActive}\n id={value}\n className={cx(nativeProps.className, btnStyles)}\n onClick={handleClick}\n role=\"tab\"\n ref={ref}\n value={value}\n />\n )\n}\n\nconst btnStyles = css({\n alignItems: 'center',\n display: 'inline-flex',\n borderTopLeftRadius: 'md',\n borderTopRightRadius: 'md',\n fontSize: 'sm',\n fontWeight: '600',\n gap: '2',\n h: '2.75rem',\n justifyContent: 'center',\n position: 'relative',\n pxi: '4',\n zIndex: 'base',\n _motionSafe: {\n transition: 'all 200ms ease-in-out',\n _before: {\n transitionProperty: 'height',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease-in-out',\n },\n _after: {\n transitionProperty: 'height',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease-in-out',\n },\n },\n _before: {\n bgColor: 'action.border.initial',\n bottom: '0',\n content: '\"\"',\n h: '0',\n position: 'absolute',\n left: '0',\n right: '0',\n w: 'full',\n willChange: 'height',\n zIndex: 'decorator',\n },\n _after: {\n borderTopLeftRadius: 'md',\n borderTopRightRadius: 'md',\n bottom: '0',\n bgColor: 'neutral.surface.100',\n content: '\"\"',\n left: '0',\n position: 'absolute',\n right: '0',\n h: '0',\n w: 'full',\n willChange: 'height',\n zIndex: '-1',\n },\n _hover: {\n _after: {\n h: 'full',\n },\n },\n _focusVisible: {\n boxShadow: 'none',\n outline: '3px solid',\n outlineColor: 'action.border.focus',\n outlineOffset: '2px',\n },\n _disabled: {\n cursor: 'not-allowed',\n opacity: '0.5',\n },\n _selected: {\n color: 'action.text.200',\n _before: {\n h: '3px',\n },\n _hover: {\n _after: {\n h: '0',\n },\n },\n },\n})\n"],"mappings":";;;;;;;;AAEA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAEP,SAAS,KAAK,UAAU;AAqCpB;AAbG,SAAS,IAAI,OAAiB;AACnC,QAAM,EAAE,OAAO,GAAG,YAAY,IAAI;AAClC,QAAM,EAAE,QAAQ,YAAY,IAAI,eAAe;AAC/C,QAAM,CAAC,WAAW,eAAe,IAAI,cAAc;AACnD,QAAM,EAAE,IAAI,IAAI,0BAA0B;AAC1C,QAAM,WAAW,QAAQ,MAAM,WAAW,OAAO,CAAC,QAAQ,KAAK,CAAC;AAEhE,WAAS,YAAY,GAAkC;AAxCzD;AAyCI,gBAAM,YAAN,+BAAgB;AAChB,oBAAgB,MAAM,YAAY,EAAE,cAAc,KAAK,CAAC;AAAA,EAC1D;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAI,CAAC,YAAY,EAAE,UAAU,GAAG;AAAA,MACjC,iBAAe,SAAS,KAAK;AAAA,MAC7B,aAAW;AAAA,MACX,iBAAe;AAAA,MACf,IAAI;AAAA,MACJ,WAAW,GAAG,YAAY,WAAW,SAAS;AAAA,MAC9C,SAAS;AAAA,MACT,MAAK;AAAA,MACL;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,YAAY,IAAI;AAAA,EACpB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,MACP,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,0BAA0B;AAAA,IAC5B;AAAA,IACA,QAAQ;AAAA,MACN,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,0BAA0B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,GAAG;AAAA,IACH,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,GAAG;AAAA,IACH,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,GAAG;AAAA,IACH,GAAG;AAAA,IACH,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,MACN,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,IACT,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,MACP,GAAG;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/TabPanel.tsx"],"sourcesContent":["'use client'\n\nimport { css, cx } from '@cerberus/styled-system/css'\nimport { useMemo, type HTMLAttributes } from 'react'\nimport { useTabsContext } from '../context/tabs'\nimport { Show } from './Show'\n\n/**\n * This module provides a TabPanel component.\n * @module\n */\n\nexport interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {\n tab: string\n}\n\n/**\n * The TabPanel component provides a panel element to be used in a Tabs provider.\n * @param tab - the value of the tab that will be tracked as the active tab and used for aria attributes\n * @example\n * ```tsx\n * <TabPanel tab=\"overview\">\n * Overview content\n * </TabPanel>\n * ```\n */\nexport function TabPanel(props: TabPanelProps) {\n const { tab, ...nativeProps } = props\n const { active } = useTabsContext()\n const isActive = useMemo(() => active === tab, [active, tab])\n\n return (\n <Show when={isActive}>\n <div\n {...nativeProps}\n {...(isActive && { tabIndex: 0 })}\n aria-labelledby={tab}\n className={cx(\n nativeProps.className,\n css({\n rounded: 'md',\n _focusVisible: {\n boxShadow: 'none',\n outline: '3px solid',\n outlineColor: 'action.border.focus',\n outlineOffset: '2px',\n },\n }),\n )}\n id={`panel:${tab}`}\n role=\"tabpanel\"\n />\n </Show>\n )\n}\n"],"mappings":";;;;;;;;AAEA,SAAS,KAAK,UAAU;AACxB,SAAS,eAAoC;AA8BvC;AAPC,SAAS,SAAS,OAAsB;AAC7C,QAAM,EAAE,KAAK,GAAG,YAAY,IAAI;AAChC,QAAM,EAAE,OAAO,IAAI,eAAe;AAClC,QAAM,WAAW,QAAQ,MAAM,WAAW,KAAK,CAAC,QAAQ,GAAG,CAAC;AAE5D,SACE,oBAAC,QAAK,MAAM,UACV;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAI,YAAY,EAAE,UAAU,EAAE;AAAA,MAC/B,mBAAiB;AAAA,MACjB,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,IAAI;AAAA,UACF,SAAS;AAAA,UACT,eAAe;AAAA,YACb,WAAW;AAAA,YACX,SAAS;AAAA,YACT,cAAc;AAAA,YACd,eAAe;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,IAAI,SAAS,GAAG;AAAA,MAChB,MAAK;AAAA;AAAA,EACP,GACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/context/tabs.tsx"],"sourcesContent":["'use client'\n\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type MutableRefObject,\n type PropsWithChildren,\n} from 'react'\n\n/**\n * This module provides a Tabs component and a hook to access its context.\n * @module\n */\n\nexport interface TabsContextValue {\n tabs: MutableRefObject<HTMLButtonElement[]>\n id: string\n active: string\n onTabUpdate: (active: string) => void\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport interface TabsProps {\n id?: string\n active?: string\n cache?: boolean\n}\n\n/**\n * The Tabs component provides a context to manage tab state.\n * @param active - the default active tab id,\n * @param cache - whether to cache the active tab state in local storage\n * @example\n * ```tsx\n * <Tabs cache>\n * <TabList description=\"Button details\">\n * <Tab id=\"overview\">Overview</Tab>\n * <Tab id=\"guidelines\">Guidelines</Tab>\n * </TabList>\n * <TabPanels>\n * <TabPanel id=\"overview\">Overview content</TabPanel>\n * <TabPanel id=\"guidelines\">Guidelines content</TabPanel>\n * </TabPanels>\n * </Tabs>\n * ```\n */\nexport function Tabs(props: PropsWithChildren<TabsProps>): JSX.Element {\n const { cache, active, id } = props\n const [activeTab, setActiveTab] = useState(() => (cache ? '' : active ?? ''))\n const tabs = useRef<HTMLButtonElement[]>([])\n const uuid = useMemo(() => {\n return id ? `cerberus-tabs-${id}` : 'cerberus-tabs'\n }, [id])\n\n const value = useMemo(\n () => ({\n tabs,\n id: uuid,\n active: activeTab,\n onTabUpdate: setActiveTab,\n }),\n [activeTab, setActiveTab, uuid, tabs],\n )\n\n // Get the active tab from local storage\n useEffect(() => {\n if (cache) {\n const cachedTab = window.localStorage.getItem(uuid)\n setActiveTab(\n cache ? cachedTab || (props.active ?? '') : props.active ?? '',\n )\n }\n }, [cache, active, uuid])\n\n // Update the active tab in local storage\n useEffect(() => {\n if (cache && activeTab) {\n window.localStorage.setItem(uuid, activeTab)\n }\n }, [activeTab, cache])\n\n return (\n <TabsContext.Provider value={value}>{props.children}</TabsContext.Provider>\n )\n}\n\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('useTabsContext must be used within a Tabs Provider.')\n }\n return context\n}\n"],"mappings":";AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AA4EH;AA9DG,IAAM,cAAc,cAAuC,IAAI;AA0B/D,SAAS,KAAK,OAAkD;AACrE,QAAM,EAAE,OAAO,QAAQ,GAAG,IAAI;AAC9B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,MAAO,QAAQ,KAAK,UAAU,EAAG;AAC5E,QAAM,OAAO,OAA4B,CAAC,CAAC;AAC3C,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO,KAAK,iBAAiB,EAAE,KAAK;AAAA,EACtC,GAAG,CAAC,EAAE,CAAC;AAEP,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa;AAAA,IACf;AAAA,IACA,CAAC,WAAW,cAAc,MAAM,IAAI;AAAA,EACtC;AAGA,YAAU,MAAM;AACd,QAAI,OAAO;AACT,YAAM,YAAY,OAAO,aAAa,QAAQ,IAAI;AAClD;AAAA,QACE,QAAQ,cAAc,MAAM,UAAU,MAAM,MAAM,UAAU;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,IAAI,CAAC;AAGxB,YAAU,MAAM;AACd,QAAI,SAAS,WAAW;AACtB,aAAO,aAAa,QAAQ,MAAM,SAAS;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,WAAW,KAAK,CAAC;AAErB,SACE,oBAAC,YAAY,UAAZ,EAAqB,OAAe,gBAAM,UAAS;AAExD;AAEO,SAAS,iBAAmC;AACjD,QAAM,UAAU,WAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACA,SAAO;AACT;","names":[]}
@@ -1,125 +0,0 @@
1
- import {
2
- useTabsKeyboardNavigation
3
- } from "./chunk-S7HBD2A7.js";
4
- import {
5
- useTabsContext
6
- } from "./chunk-DQOYTLGB.js";
7
-
8
- // src/components/Tab.tsx
9
- import {
10
- useMemo,
11
- useTransition
12
- } from "react";
13
- import { css, cx } from "@cerberus/styled-system/css";
14
- import { jsx } from "react/jsx-runtime";
15
- function Tab(props) {
16
- const { value, ...nativeProps } = props;
17
- const { active, onTabUpdate } = useTabsContext();
18
- const [isPending, startTransition] = useTransition();
19
- const { ref } = useTabsKeyboardNavigation();
20
- const isActive = useMemo(() => active === value, [active, value]);
21
- function handleClick(e) {
22
- props.onClick?.(e);
23
- startTransition(() => onTabUpdate(e.currentTarget.value));
24
- }
25
- return /* @__PURE__ */ jsx(
26
- "button",
27
- {
28
- ...nativeProps,
29
- ...!isActive && { tabIndex: -1 },
30
- "aria-controls": `panel:${value}`,
31
- "aria-busy": isPending,
32
- "aria-selected": isActive,
33
- id: value,
34
- className: cx(nativeProps.className, btnStyles),
35
- onClick: handleClick,
36
- role: "tab",
37
- ref,
38
- value
39
- }
40
- );
41
- }
42
- var btnStyles = css({
43
- alignItems: "center",
44
- display: "inline-flex",
45
- borderTopLeftRadius: "md",
46
- borderTopRightRadius: "md",
47
- fontSize: "sm",
48
- fontWeight: "600",
49
- gap: "2",
50
- h: "2.75rem",
51
- justifyContent: "center",
52
- position: "relative",
53
- pxi: "4",
54
- zIndex: "base",
55
- _motionSafe: {
56
- transition: "all 200ms ease-in-out",
57
- _before: {
58
- transitionProperty: "height",
59
- transitionDuration: "200ms",
60
- transitionTimingFunction: "ease-in-out"
61
- },
62
- _after: {
63
- transitionProperty: "height",
64
- transitionDuration: "200ms",
65
- transitionTimingFunction: "ease-in-out"
66
- }
67
- },
68
- _before: {
69
- bgColor: "action.border.initial",
70
- bottom: "0",
71
- content: '""',
72
- h: "0",
73
- position: "absolute",
74
- left: "0",
75
- right: "0",
76
- w: "full",
77
- willChange: "height",
78
- zIndex: "decorator"
79
- },
80
- _after: {
81
- borderTopLeftRadius: "md",
82
- borderTopRightRadius: "md",
83
- bottom: "0",
84
- bgColor: "neutral.surface.100",
85
- content: '""',
86
- left: "0",
87
- position: "absolute",
88
- right: "0",
89
- h: "0",
90
- w: "full",
91
- willChange: "height",
92
- zIndex: "-1"
93
- },
94
- _hover: {
95
- _after: {
96
- h: "full"
97
- }
98
- },
99
- _focusVisible: {
100
- boxShadow: "none",
101
- outline: "3px solid",
102
- outlineColor: "action.border.focus",
103
- outlineOffset: "2px"
104
- },
105
- _disabled: {
106
- cursor: "not-allowed",
107
- opacity: "0.5"
108
- },
109
- _selected: {
110
- color: "action.text.200",
111
- _before: {
112
- h: "3px"
113
- },
114
- _hover: {
115
- _after: {
116
- h: "0"
117
- }
118
- }
119
- }
120
- });
121
-
122
- export {
123
- Tab
124
- };
125
- //# sourceMappingURL=chunk-SUP7U42W.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/Tab.tsx"],"sourcesContent":["'use client'\n\nimport {\n useMemo,\n useTransition,\n type ButtonHTMLAttributes,\n type MouseEvent,\n} from 'react'\nimport { useTabsContext } from '../context/tabs'\nimport { css, cx } from '@cerberus/styled-system/css'\nimport { useTabsKeyboardNavigation } from '../aria-helpers/tabs.aria'\n\n/**\n * This module provides a Tab component.\n * @module\n */\n\nexport interface TabProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\n/**\n * The Tab component provides a tab element to be used in a TabList.\n * @definition [ARIA Target Size](https://www.w3.org/WAI/WCAG21/Understanding/target-size.html#:~:text=Understanding%20SC%202.5.,%3ATarget%20Size%20(Level%20AAA)&text=The%20size%20of%20the%20target,Equivalent)\n * @definition [Tab docs](https://cerberus.digitalu.design/react/tabs)\n * @param value - the id of the tab that will be tracked as the active tab and used for aria attributes\n * @example\n * ```tsx\n * <Tab value=\"overview\">\n * Overview\n * </Tab>\n * ```\n */\nexport function Tab(props: TabProps) {\n const { value, ...nativeProps } = props\n const { active, onTabUpdate } = useTabsContext()\n const [isPending, startTransition] = useTransition()\n const { ref } = useTabsKeyboardNavigation()\n const isActive = useMemo(() => active === value, [active, value])\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n props.onClick?.(e)\n startTransition(() => onTabUpdate(e.currentTarget.value))\n }\n\n return (\n <button\n {...nativeProps}\n {...(!isActive && { tabIndex: -1 })}\n aria-controls={`panel:${value}`}\n aria-busy={isPending}\n aria-selected={isActive}\n id={value}\n className={cx(nativeProps.className, btnStyles)}\n onClick={handleClick}\n role=\"tab\"\n ref={ref}\n value={value}\n />\n )\n}\n\nconst btnStyles = css({\n alignItems: 'center',\n display: 'inline-flex',\n borderTopLeftRadius: 'md',\n borderTopRightRadius: 'md',\n fontSize: 'sm',\n fontWeight: '600',\n gap: '2',\n h: '2.75rem',\n justifyContent: 'center',\n position: 'relative',\n pxi: '4',\n zIndex: 'base',\n _motionSafe: {\n transition: 'all 200ms ease-in-out',\n _before: {\n transitionProperty: 'height',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease-in-out',\n },\n _after: {\n transitionProperty: 'height',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease-in-out',\n },\n },\n _before: {\n bgColor: 'action.border.initial',\n bottom: '0',\n content: '\"\"',\n h: '0',\n position: 'absolute',\n left: '0',\n right: '0',\n w: 'full',\n willChange: 'height',\n zIndex: 'decorator',\n },\n _after: {\n borderTopLeftRadius: 'md',\n borderTopRightRadius: 'md',\n bottom: '0',\n bgColor: 'neutral.surface.100',\n content: '\"\"',\n left: '0',\n position: 'absolute',\n right: '0',\n h: '0',\n w: 'full',\n willChange: 'height',\n zIndex: '-1',\n },\n _hover: {\n _after: {\n h: 'full',\n },\n },\n _focusVisible: {\n boxShadow: 'none',\n outline: '3px solid',\n outlineColor: 'action.border.focus',\n outlineOffset: '2px',\n },\n _disabled: {\n cursor: 'not-allowed',\n opacity: '0.5',\n },\n _selected: {\n color: 'action.text.200',\n _before: {\n h: '3px',\n },\n _hover: {\n _after: {\n h: '0',\n },\n },\n },\n})\n"],"mappings":";;;;;;;;AAEA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAEP,SAAS,KAAK,UAAU;AAqCpB;AAbG,SAAS,IAAI,OAAiB;AACnC,QAAM,EAAE,OAAO,GAAG,YAAY,IAAI;AAClC,QAAM,EAAE,QAAQ,YAAY,IAAI,eAAe;AAC/C,QAAM,CAAC,WAAW,eAAe,IAAI,cAAc;AACnD,QAAM,EAAE,IAAI,IAAI,0BAA0B;AAC1C,QAAM,WAAW,QAAQ,MAAM,WAAW,OAAO,CAAC,QAAQ,KAAK,CAAC;AAEhE,WAAS,YAAY,GAAkC;AACrD,UAAM,UAAU,CAAC;AACjB,oBAAgB,MAAM,YAAY,EAAE,cAAc,KAAK,CAAC;AAAA,EAC1D;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAI,CAAC,YAAY,EAAE,UAAU,GAAG;AAAA,MACjC,iBAAe,SAAS,KAAK;AAAA,MAC7B,aAAW;AAAA,MACX,iBAAe;AAAA,MACf,IAAI;AAAA,MACJ,WAAW,GAAG,YAAY,WAAW,SAAS;AAAA,MAC9C,SAAS;AAAA,MACT,MAAK;AAAA,MACL;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,YAAY,IAAI;AAAA,EACpB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,MACP,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,0BAA0B;AAAA,IAC5B;AAAA,IACA,QAAQ;AAAA,MACN,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,0BAA0B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,GAAG;AAAA,IACH,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,GAAG;AAAA,IACH,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,GAAG;AAAA,IACH,GAAG;AAAA,IACH,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,MACN,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,IACT,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,MACP,GAAG;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/TabPanel.tsx"],"sourcesContent":["'use client'\n\nimport { css, cx } from '@cerberus/styled-system/css'\nimport { useMemo, type HTMLAttributes } from 'react'\nimport { useTabsContext } from '../context/tabs'\nimport { Show } from './Show'\n\n/**\n * This module provides a TabPanel component.\n * @module\n */\n\nexport interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {\n tab: string\n}\n\n/**\n * The TabPanel component provides a panel element to be used in a Tabs provider.\n * @param tab - the value of the tab that will be tracked as the active tab and used for aria attributes\n * @example\n * ```tsx\n * <TabPanel tab=\"overview\">\n * Overview content\n * </TabPanel>\n * ```\n */\nexport function TabPanel(props: TabPanelProps) {\n const { tab, ...nativeProps } = props\n const { active } = useTabsContext()\n const isActive = useMemo(() => active === tab, [active, tab])\n\n return (\n <Show when={isActive}>\n <div\n {...nativeProps}\n {...(isActive && { tabIndex: 0 })}\n aria-labelledby={tab}\n className={cx(\n nativeProps.className,\n css({\n rounded: 'md',\n _focusVisible: {\n boxShadow: 'none',\n outline: '3px solid',\n outlineColor: 'action.border.focus',\n outlineOffset: '2px',\n },\n }),\n )}\n id={`panel:${tab}`}\n role=\"tabpanel\"\n />\n </Show>\n )\n}\n"],"mappings":";;;;;;;;AAEA,SAAS,KAAK,UAAU;AACxB,SAAS,eAAoC;AA8BvC;AAPC,SAAS,SAAS,OAAsB;AAC7C,QAAM,EAAE,KAAK,GAAG,YAAY,IAAI;AAChC,QAAM,EAAE,OAAO,IAAI,eAAe;AAClC,QAAM,WAAW,QAAQ,MAAM,WAAW,KAAK,CAAC,QAAQ,GAAG,CAAC;AAE5D,SACE,oBAAC,QAAK,MAAM,UACV;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAI,YAAY,EAAE,UAAU,EAAE;AAAA,MAC/B,mBAAiB;AAAA,MACjB,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,IAAI;AAAA,UACF,SAAS;AAAA,UACT,eAAe;AAAA,YACb,WAAW;AAAA,YACX,SAAS;AAAA,YACT,cAAc;AAAA,YACd,eAAe;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,IAAI,SAAS,GAAG;AAAA,MAChB,MAAK;AAAA;AAAA,EACP,GACF;AAEJ;","names":[]}