@dxos/react-ui-tabs 0.8.4-main.fffef41 → 0.8.4-staging.60fe92afc8

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.
@@ -1,221 +1,173 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
3
  // src/Tabs.tsx
4
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
5
4
  import { useArrowNavigationGroup, useFocusFinders, useFocusableGroup } from "@fluentui/react-tabster";
6
5
  import { createContext } from "@radix-ui/react-context";
7
6
  import * as TabsPrimitive from "@radix-ui/react-tabs";
8
7
  import { useControllableState } from "@radix-ui/react-use-controllable-state";
9
- import React, { Activity, useCallback, useLayoutEffect, useRef } from "react";
10
- import { Button, IconButton } from "@dxos/react-ui";
8
+ import React, { forwardRef, useCallback, useLayoutEffect } from "react";
9
+ import { Button, IconButton, useForwardedRef } from "@dxos/react-ui";
11
10
  import { useAttention } from "@dxos/react-ui-attention";
12
- import { ghostSelectedContainerMd, mx } from "@dxos/react-ui-theme";
11
+ import { mx } from "@dxos/ui-theme";
13
12
  var TABS_NAME = "Tabs";
14
13
  var [TabsContextProvider, useTabsContext] = createContext(TABS_NAME, {
14
+ orientation: "vertical",
15
15
  activePart: "list",
16
16
  setActivePart: () => {
17
- },
18
- orientation: "vertical"
19
- });
20
- var TabsRoot = ({ children, classNames, activePart: propsActivePart, onActivePartChange, defaultActivePart, value: propsValue, onValueChange, defaultValue, orientation = "vertical", activationMode = "manual", verticalVariant = "stateful", attendableId, ...props }) => {
21
- var _effect = _useSignals();
22
- try {
23
- const _1 = useArrowNavigationGroup();
24
- const _2 = useFocusableGroup();
25
- const [activePart = "list", setActivePart] = useControllableState({
26
- prop: propsActivePart,
27
- onChange: onActivePartChange,
28
- defaultProp: defaultActivePart
29
- });
30
- const [value, setValue] = useControllableState({
31
- prop: propsValue,
32
- onChange: onValueChange,
33
- defaultProp: defaultValue
34
- });
35
- const handleValueChange = useCallback((nextValue) => {
36
- setActivePart("panel");
37
- setValue(nextValue);
38
- }, [
39
- value
40
- ]);
41
- const { findFirstFocusable } = useFocusFinders();
42
- const tabsRoot = useRef(null);
43
- useLayoutEffect(() => {
44
- if (tabsRoot.current) {
45
- findFirstFocusable(tabsRoot.current)?.focus();
46
- }
47
- }, [
48
- activePart
49
- ]);
50
- return /* @__PURE__ */ React.createElement(TabsContextProvider, {
51
- orientation,
52
- activePart,
53
- setActivePart,
54
- value,
55
- attendableId,
56
- verticalVariant
57
- }, /* @__PURE__ */ React.createElement(TabsPrimitive.Root, {
58
- activationMode,
59
- "data-active": activePart,
60
- orientation,
61
- ...props,
62
- value,
63
- onValueChange: handleValueChange,
64
- className: mx("overflow-hidden", orientation === "vertical" && verticalVariant === "stateful" && "[&[data-active=list]_[role=tabpanel]]:invisible @md:[&[data-active=list]_[role=tabpanel]]:visible", classNames),
65
- ref: tabsRoot
66
- }, children));
67
- } finally {
68
- _effect.f();
69
17
  }
70
- };
18
+ });
19
+ var TabsRoot = /* @__PURE__ */ forwardRef(({ children, classNames, activePart: propsActivePart, onActivePartChange, defaultActivePart, value: propsValue, onValueChange, defaultValue, orientation = "vertical", activationMode = "manual", attendableId, ...props }, forwardedRef) => {
20
+ const tabsRoot = useForwardedRef(forwardedRef);
21
+ const _1 = useArrowNavigationGroup();
22
+ const _2 = useFocusableGroup();
23
+ const [activePart = "list", setActivePart] = useControllableState({
24
+ prop: propsActivePart,
25
+ onChange: onActivePartChange,
26
+ defaultProp: defaultActivePart
27
+ });
28
+ const [value, setValue] = useControllableState({
29
+ prop: propsValue,
30
+ onChange: onValueChange,
31
+ defaultProp: defaultValue
32
+ });
33
+ const handleValueChange = useCallback((nextValue) => {
34
+ setActivePart("panel");
35
+ setValue(nextValue);
36
+ }, [
37
+ value
38
+ ]);
39
+ const { findFirstFocusable } = useFocusFinders();
40
+ useLayoutEffect(() => {
41
+ if (tabsRoot.current) {
42
+ findFirstFocusable(tabsRoot.current)?.focus();
43
+ }
44
+ }, [
45
+ activePart
46
+ ]);
47
+ return /* @__PURE__ */ React.createElement(TabsContextProvider, {
48
+ orientation,
49
+ activePart,
50
+ setActivePart,
51
+ value,
52
+ attendableId
53
+ }, /* @__PURE__ */ React.createElement(TabsPrimitive.Root, {
54
+ ...props,
55
+ className: mx("overflow-hidden", classNames),
56
+ orientation,
57
+ activationMode,
58
+ "data-active": activePart,
59
+ value,
60
+ onValueChange: handleValueChange,
61
+ ref: tabsRoot
62
+ }, children));
63
+ });
64
+ TabsRoot.displayName = "Tabs.Root";
71
65
  var TabsViewport = ({ classNames, children, ...props }) => {
72
- var _effect = _useSignals();
73
- try {
74
- const { orientation, activePart, verticalVariant } = useTabsContext("TabsViewport");
75
- return /* @__PURE__ */ React.createElement("div", {
76
- role: "none",
77
- ...props,
78
- "data-active": activePart,
79
- className: mx(orientation === "vertical" && verticalVariant === "stateful" && [
80
- "grid is-[200%] grid-cols-2 data-[active=panel]:mis-[-100%]",
81
- "@md:is-auto @md:data-[active=panel]:mis-0 @md:grid-cols-[minmax(min-content,1fr)_3fr] @md:gap-1"
82
- ], classNames)
83
- }, children);
84
- } finally {
85
- _effect.f();
86
- }
66
+ const { activePart } = useTabsContext("TabsViewport");
67
+ return /* @__PURE__ */ React.createElement("div", {
68
+ ...props,
69
+ "data-active": activePart,
70
+ className: mx(classNames)
71
+ }, children);
87
72
  };
73
+ TabsViewport.displayName = "Tabs.Viewport";
88
74
  var TabsTablist = ({ children, classNames, ...props }) => {
89
- var _effect = _useSignals();
90
- try {
91
- const { orientation, verticalVariant } = useTabsContext("TabsTablist");
92
- return /* @__PURE__ */ React.createElement(TabsPrimitive.List, {
93
- ...props,
94
- "data-arrow-keys": orientation === "vertical" ? "up down" : "left right",
95
- className: mx(
96
- "max-bs-full is-full",
97
- // NOTE: Padding should be common to Toolbar.
98
- orientation === "vertical" ? "overflow-y-auto" : "flex items-stretch justify-start overflow-x-auto p-1 gap-1",
99
- orientation === "vertical" && verticalVariant === "stateful" && "place-self-start p-1",
100
- classNames
101
- )
102
- }, children);
103
- } finally {
104
- _effect.f();
105
- }
75
+ const { orientation } = useTabsContext("TabsTablist");
76
+ return /* @__PURE__ */ React.createElement(TabsPrimitive.List, {
77
+ ...props,
78
+ "data-arrow-keys": orientation === "vertical" ? "up down" : "left right",
79
+ className: mx(
80
+ "max-h-full w-full",
81
+ // TODO(burdon): Should be embeddable inside Toolbar (if horizontal).
82
+ orientation === "vertical" ? "overflow-y-auto" : "flex p-1 gap-1 items-stretch justify-start overflow-x-auto",
83
+ classNames
84
+ )
85
+ }, children);
106
86
  };
87
+ TabsTablist.displayName = "Tabs.Tablist";
107
88
  var TabsBackButton = ({ onClick, classNames, ...props }) => {
108
- var _effect = _useSignals();
109
- try {
110
- const { setActivePart } = useTabsContext("TabsBackButton");
111
- const handleClick = useCallback((event) => {
112
- setActivePart("list");
113
- return onClick?.(event);
114
- }, [
115
- onClick,
116
- setActivePart
117
- ]);
118
- return /* @__PURE__ */ React.createElement(Button, {
119
- ...props,
120
- classNames: [
121
- "is-full text-start @md:hidden mbe-2",
122
- classNames
123
- ],
124
- onClick: handleClick
125
- });
126
- } finally {
127
- _effect.f();
128
- }
129
- };
130
- var TabsTabGroupHeading = ({ children, classNames, ...props }) => {
131
- var _effect = _useSignals();
132
- try {
133
- return /* @__PURE__ */ React.createElement("h2", {
134
- ...props,
135
- className: mx("mlb-1 pli-2 text-sm text-unAccent", classNames)
136
- }, children);
137
- } finally {
138
- _effect.f();
139
- }
89
+ const { setActivePart } = useTabsContext("TabsBackButton");
90
+ const handleClick = useCallback((event) => {
91
+ setActivePart("list");
92
+ return onClick?.(event);
93
+ }, [
94
+ setActivePart,
95
+ onClick
96
+ ]);
97
+ return /* @__PURE__ */ React.createElement(Button, {
98
+ ...props,
99
+ classNames: [
100
+ "@md:hidden text-start",
101
+ classNames
102
+ ],
103
+ onClick: handleClick
104
+ });
140
105
  };
106
+ TabsBackButton.displayName = "Tabs.BackButton";
107
+ var TabsTabGroupHeading = ({ children, classNames, ...props }) => /* @__PURE__ */ React.createElement("h2", {
108
+ ...props,
109
+ className: mx("my-1 px-2 text-sm text-un-accent", classNames)
110
+ }, children);
111
+ TabsTabGroupHeading.displayName = "Tabs.TabGroupHeading";
141
112
  var TabsTab = ({ value, classNames, children, onClick, ...props }) => {
142
- var _effect = _useSignals();
143
- try {
144
- const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext("TabsTab");
145
- const { hasAttention } = useAttention(attendableId);
146
- const handleClick = useCallback(
147
- // NOTE: This handler is only called if the tab is *already active*.
148
- (event) => {
149
- setActivePart("panel");
150
- onClick?.(event);
151
- },
152
- [
153
- setActivePart,
154
- onClick
155
- ]
156
- );
157
- return /* @__PURE__ */ React.createElement(TabsPrimitive.Trigger, {
158
- value,
159
- asChild: true
160
- }, /* @__PURE__ */ React.createElement(Button, {
161
- density: "fine",
162
- variant: orientation === "horizontal" && contextValue === value ? hasAttention ? "primary" : "default" : "ghost",
163
- ...props,
164
- onClick: handleClick,
165
- classNames: [
166
- orientation === "vertical" && "block justify-start text-start is-full",
167
- orientation === "vertical" && ghostSelectedContainerMd,
168
- classNames
169
- ]
170
- }, children));
171
- } finally {
172
- _effect.f();
173
- }
174
- };
175
- var TabsIconTab = ({ value, classNames, onClick, ...props }) => {
176
- var _effect = _useSignals();
177
- try {
178
- const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext("TabsTab");
179
- const { hasAttention } = useAttention(attendableId);
180
- const handleClick = useCallback((event) => {
113
+ const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext("TabsTab");
114
+ const { hasAttention } = useAttention(attendableId);
115
+ const handleClick = useCallback(
116
+ // NOTE: This handler is only called if the tab is *already active*.
117
+ (event) => {
181
118
  setActivePart("panel");
182
119
  onClick?.(event);
183
- }, [
120
+ },
121
+ [
184
122
  setActivePart,
185
123
  onClick
186
- ]);
187
- return /* @__PURE__ */ React.createElement(TabsPrimitive.Trigger, {
188
- value,
189
- asChild: true
190
- }, /* @__PURE__ */ React.createElement(IconButton, {
191
- density: "fine",
192
- variant: orientation === "horizontal" && contextValue === value ? hasAttention ? "primary" : "default" : "ghost",
193
- ...props,
194
- onClick: handleClick,
195
- classNames: [
196
- orientation === "vertical" && "justify-start text-start is-full",
197
- orientation === "vertical" && ghostSelectedContainerMd,
198
- classNames
199
- ]
200
- }));
201
- } finally {
202
- _effect.f();
203
- }
124
+ ]
125
+ );
126
+ return /* @__PURE__ */ React.createElement(TabsPrimitive.Trigger, {
127
+ value,
128
+ asChild: true
129
+ }, /* @__PURE__ */ React.createElement(Button, {
130
+ ...props,
131
+ variant: orientation === "horizontal" && contextValue === value ? hasAttention ? "primary" : "default" : "ghost",
132
+ classNames: [
133
+ orientation === "vertical" && "block justify-start text-start w-full",
134
+ orientation === "vertical" && "dx-selected",
135
+ classNames
136
+ ],
137
+ onClick: handleClick
138
+ }, children));
204
139
  };
205
- var TabsTabpanel = ({ classNames, children, ...props }) => {
206
- var _effect = _useSignals();
207
- try {
208
- const { value: contextValue } = useTabsContext("TabsTab");
209
- return /* @__PURE__ */ React.createElement(Activity, {
210
- mode: contextValue === props.value ? "visible" : "hidden"
211
- }, /* @__PURE__ */ React.createElement(TabsPrimitive.Content, {
212
- ...props,
213
- className: mx("dx-focus-ring-inset-over-all", classNames)
214
- }, children));
215
- } finally {
216
- _effect.f();
217
- }
140
+ TabsTab.displayName = "Tabs.Tab";
141
+ var TabsIconTab = ({ value, classNames, onClick, ...props }) => {
142
+ const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext("TabsTab");
143
+ const { hasAttention } = useAttention(attendableId);
144
+ const handleClick = useCallback((event) => {
145
+ setActivePart("panel");
146
+ onClick?.(event);
147
+ }, [
148
+ setActivePart,
149
+ onClick
150
+ ]);
151
+ return /* @__PURE__ */ React.createElement(TabsPrimitive.Trigger, {
152
+ value,
153
+ asChild: true
154
+ }, /* @__PURE__ */ React.createElement(IconButton, {
155
+ ...props,
156
+ variant: orientation === "horizontal" && contextValue === value ? hasAttention ? "primary" : "default" : "ghost",
157
+ classNames: [
158
+ orientation === "vertical" && "justify-start text-start w-full",
159
+ orientation === "vertical" && "dx-selected",
160
+ classNames
161
+ ],
162
+ onClick: handleClick
163
+ }));
218
164
  };
165
+ TabsIconTab.displayName = "Tabs.IconTab";
166
+ var TabsPanel = ({ classNames, children, ...props }) => /* @__PURE__ */ React.createElement(TabsPrimitive.Content, {
167
+ ...props,
168
+ className: mx("p-0! dx-focus-ring-inset-over-all", classNames)
169
+ }, children);
170
+ TabsPanel.displayName = "Tabs.Panel";
219
171
  var Tabs = {
220
172
  Root: TabsRoot,
221
173
  Tablist: TabsTablist,
@@ -223,9 +175,9 @@ var Tabs = {
223
175
  IconTab: TabsIconTab,
224
176
  TabPrimitive: TabsPrimitive.Trigger,
225
177
  TabGroupHeading: TabsTabGroupHeading,
226
- Tabpanel: TabsTabpanel,
227
- BackButton: TabsBackButton,
228
- Viewport: TabsViewport
178
+ Viewport: TabsViewport,
179
+ Panel: TabsPanel,
180
+ BackButton: TabsBackButton
229
181
  };
230
182
  export {
231
183
  Tabs
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/Tabs.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useArrowNavigationGroup, useFocusFinders, useFocusableGroup } from '@fluentui/react-tabster';\nimport { createContext } from '@radix-ui/react-context';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, {\n Activity,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n useCallback,\n useLayoutEffect,\n useRef,\n} from 'react';\n\nimport { Button, type ButtonProps, IconButton, type IconButtonProps, type ThemedClassName } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { ghostSelectedContainerMd, mx } from '@dxos/react-ui-theme';\n\ntype TabsActivePart = 'list' | 'panel';\n\nconst TABS_NAME = 'Tabs';\n\ntype TabsContextValue = {\n activePart: TabsActivePart;\n setActivePart: (nextActivePart: TabsActivePart) => void;\n attendableId?: string;\n verticalVariant?: 'stateful' | 'stateless';\n} & Pick<TabsPrimitive.TabsProps, 'orientation' | 'value'>;\n\nconst [TabsContextProvider, useTabsContext] = createContext<TabsContextValue>(TABS_NAME, {\n activePart: 'list',\n setActivePart: () => {},\n orientation: 'vertical',\n});\n\ntype TabsRootProps = ThemedClassName<TabsPrimitive.TabsProps> &\n Partial<Pick<TabsContextValue, 'activePart' | 'verticalVariant' | 'attendableId'>> &\n Partial<{\n onActivePartChange: (nextActivePart: TabsActivePart) => void;\n defaultActivePart: TabsActivePart;\n }>;\n\nconst TabsRoot = ({\n children,\n classNames,\n activePart: propsActivePart,\n onActivePartChange,\n defaultActivePart,\n value: propsValue,\n onValueChange,\n defaultValue,\n orientation = 'vertical',\n activationMode = 'manual',\n verticalVariant = 'stateful',\n attendableId,\n ...props\n}: TabsRootProps) => {\n // TODO(thure): Without these, we get Groupper/Mover `API used before initialization`, but why?\n const _1 = useArrowNavigationGroup();\n const _2 = useFocusableGroup();\n const [activePart = 'list', setActivePart] = useControllableState({\n prop: propsActivePart,\n onChange: onActivePartChange,\n defaultProp: defaultActivePart,\n });\n\n const [value, setValue] = useControllableState({\n prop: propsValue,\n onChange: onValueChange,\n defaultProp: defaultValue,\n });\n\n const handleValueChange = useCallback(\n (nextValue: string) => {\n setActivePart('panel');\n setValue(nextValue);\n },\n [value],\n );\n\n const { findFirstFocusable } = useFocusFinders();\n const tabsRoot = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n if (tabsRoot.current) {\n findFirstFocusable(tabsRoot.current)?.focus();\n }\n }, [activePart]);\n\n return (\n <TabsContextProvider\n orientation={orientation}\n activePart={activePart}\n setActivePart={setActivePart}\n value={value}\n attendableId={attendableId}\n verticalVariant={verticalVariant}\n >\n <TabsPrimitive.Root\n activationMode={activationMode}\n data-active={activePart}\n orientation={orientation}\n {...props}\n value={value}\n onValueChange={handleValueChange}\n className={mx(\n 'overflow-hidden',\n orientation === 'vertical' &&\n verticalVariant === 'stateful' &&\n '[&[data-active=list]_[role=tabpanel]]:invisible @md:[&[data-active=list]_[role=tabpanel]]:visible',\n classNames,\n )}\n ref={tabsRoot}\n >\n {children}\n </TabsPrimitive.Root>\n </TabsContextProvider>\n );\n};\n\ntype TabsViewportProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nconst TabsViewport = ({ classNames, children, ...props }: TabsViewportProps) => {\n const { orientation, activePart, verticalVariant } = useTabsContext('TabsViewport');\n return (\n <div\n role='none'\n {...props}\n data-active={activePart}\n className={mx(\n orientation === 'vertical' &&\n verticalVariant === 'stateful' && [\n 'grid is-[200%] grid-cols-2 data-[active=panel]:mis-[-100%]',\n '@md:is-auto @md:data-[active=panel]:mis-0 @md:grid-cols-[minmax(min-content,1fr)_3fr] @md:gap-1',\n ],\n classNames,\n )}\n >\n {children}\n </div>\n );\n};\n\ntype TabsTablistProps = ThemedClassName<TabsPrimitive.TabsListProps>;\n\nconst TabsTablist = ({ children, classNames, ...props }: TabsTablistProps) => {\n const { orientation, verticalVariant } = useTabsContext('TabsTablist');\n return (\n <TabsPrimitive.List\n {...props}\n data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}\n className={mx(\n 'max-bs-full is-full',\n // NOTE: Padding should be common to Toolbar.\n orientation === 'vertical' ? 'overflow-y-auto' : 'flex items-stretch justify-start overflow-x-auto p-1 gap-1',\n orientation === 'vertical' && verticalVariant === 'stateful' && 'place-self-start p-1',\n classNames,\n )}\n >\n {children}\n </TabsPrimitive.List>\n );\n};\n\nconst TabsBackButton = ({ onClick, classNames, ...props }: ButtonProps) => {\n const { setActivePart } = useTabsContext('TabsBackButton');\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n setActivePart('list');\n return onClick?.(event);\n },\n [onClick, setActivePart],\n );\n\n return <Button {...props} classNames={['is-full text-start @md:hidden mbe-2', classNames]} onClick={handleClick} />;\n};\n\ntype TabsTabGroupHeadingProps = ThemedClassName<ComponentPropsWithoutRef<'h2'>>;\n\nconst TabsTabGroupHeading = ({ children, classNames, ...props }: ThemedClassName<TabsTabGroupHeadingProps>) => {\n return (\n <h2 {...props} className={mx('mlb-1 pli-2 text-sm text-unAccent', classNames)}>\n {children}\n </h2>\n );\n};\n\ntype TabsTabProps = ButtonProps & Pick<TabsPrimitive.TabsTriggerProps, 'value'>;\n\nconst TabsTab = ({ value, classNames, children, onClick, ...props }: TabsTabProps) => {\n const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext('TabsTab');\n const { hasAttention } = useAttention(attendableId);\n\n const handleClick = useCallback(\n // NOTE: This handler is only called if the tab is *already active*.\n (event: MouseEvent<HTMLButtonElement>) => {\n setActivePart('panel');\n onClick?.(event);\n },\n [setActivePart, onClick],\n );\n\n return (\n <TabsPrimitive.Trigger value={value} asChild>\n <Button\n density='fine'\n variant={\n orientation === 'horizontal' && contextValue === value ? (hasAttention ? 'primary' : 'default') : 'ghost'\n }\n {...props}\n onClick={handleClick}\n classNames={[\n orientation === 'vertical' && 'block justify-start text-start is-full',\n orientation === 'vertical' && ghostSelectedContainerMd,\n classNames,\n ]}\n >\n {children}\n </Button>\n </TabsPrimitive.Trigger>\n );\n};\n\ntype TabsIconTabProps = IconButtonProps & Pick<TabsPrimitive.TabsTriggerProps, 'value'>;\n\nconst TabsIconTab = ({ value, classNames, onClick, ...props }: TabsIconTabProps) => {\n const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext('TabsTab');\n const { hasAttention } = useAttention(attendableId);\n\n // NOTE: This handler is only called if the tab is *already active*.\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n setActivePart('panel');\n onClick?.(event);\n },\n [setActivePart, onClick],\n );\n\n return (\n <TabsPrimitive.Trigger value={value} asChild>\n <IconButton\n density='fine'\n variant={\n orientation === 'horizontal' && contextValue === value ? (hasAttention ? 'primary' : 'default') : 'ghost'\n }\n {...props}\n onClick={handleClick}\n classNames={[\n orientation === 'vertical' && 'justify-start text-start is-full',\n orientation === 'vertical' && ghostSelectedContainerMd,\n classNames,\n ]}\n />\n </TabsPrimitive.Trigger>\n );\n};\n\ntype TabsTabpanelProps = ThemedClassName<TabsPrimitive.TabsContentProps>;\n\nconst TabsTabpanel = ({ classNames, children, ...props }: TabsTabpanelProps) => {\n const { value: contextValue } = useTabsContext('TabsTab');\n return (\n <Activity mode={contextValue === props.value ? 'visible' : 'hidden'}>\n <TabsPrimitive.Content {...props} className={mx('dx-focus-ring-inset-over-all', classNames)}>\n {children}\n </TabsPrimitive.Content>\n </Activity>\n );\n};\n\ntype TabsTabPrimitiveProps = TabsPrimitive.TabsTriggerProps;\n\nexport const Tabs = {\n Root: TabsRoot,\n Tablist: TabsTablist,\n Tab: TabsTab,\n IconTab: TabsIconTab,\n TabPrimitive: TabsPrimitive.Trigger,\n TabGroupHeading: TabsTabGroupHeading,\n Tabpanel: TabsTabpanel,\n BackButton: TabsBackButton,\n Viewport: TabsViewport,\n};\n\nexport type {\n TabsActivePart,\n TabsRootProps,\n TabsTablistProps,\n TabsTabProps,\n TabsTabPrimitiveProps,\n TabsTabGroupHeadingProps,\n TabsTabpanelProps,\n TabsViewportProps,\n};\n"],
5
- "mappings": "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",
6
- "names": ["useArrowNavigationGroup", "useFocusFinders", "useFocusableGroup", "createContext", "TabsPrimitive", "useControllableState", "React", "Activity", "useCallback", "useLayoutEffect", "useRef", "Button", "IconButton", "useAttention", "ghostSelectedContainerMd", "mx", "TABS_NAME", "TabsContextProvider", "useTabsContext", "createContext", "activePart", "setActivePart", "orientation", "TabsRoot", "children", "classNames", "propsActivePart", "onActivePartChange", "defaultActivePart", "value", "propsValue", "onValueChange", "defaultValue", "activationMode", "verticalVariant", "attendableId", "props", "_1", "useArrowNavigationGroup", "_2", "useFocusableGroup", "useControllableState", "prop", "onChange", "defaultProp", "setValue", "handleValueChange", "useCallback", "nextValue", "findFirstFocusable", "useFocusFinders", "tabsRoot", "useRef", "useLayoutEffect", "current", "focus", "Root", "data-active", "className", "mx", "ref", "TabsViewport", "div", "role", "TabsTablist", "List", "data-arrow-keys", "TabsBackButton", "onClick", "handleClick", "event", "Button", "TabsTabGroupHeading", "h2", "TabsTab", "contextValue", "hasAttention", "useAttention", "Trigger", "asChild", "density", "variant", "ghostSelectedContainerMd", "TabsIconTab", "IconButton", "TabsTabpanel", "Activity", "mode", "Content", "Tabs", "Tablist", "Tab", "IconTab", "TabPrimitive", "TabGroupHeading", "Tabpanel", "BackButton", "Viewport"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useArrowNavigationGroup, useFocusFinders, useFocusableGroup } from '@fluentui/react-tabster';\nimport { createContext } from '@radix-ui/react-context';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type ComponentPropsWithoutRef, type MouseEvent, forwardRef, useCallback, useLayoutEffect } from 'react';\n\nimport {\n Button,\n type ButtonProps,\n IconButton,\n type IconButtonProps,\n type ThemedClassName,\n useForwardedRef,\n} from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/ui-theme';\n\n// TODO(burdon): Move to @dxos/react-ui.\n\ntype TabsActivePart = 'list' | 'panel';\n\nconst TABS_NAME = 'Tabs';\n\n//\n// Context\n//\n\ntype TabsContextValue = {\n activePart: TabsActivePart;\n setActivePart: (nextActivePart: TabsActivePart) => void;\n attendableId?: string;\n} & Pick<TabsPrimitive.TabsProps, 'orientation' | 'value'>;\n\nconst [TabsContextProvider, useTabsContext] = createContext<TabsContextValue>(TABS_NAME, {\n orientation: 'vertical',\n activePart: 'list',\n setActivePart: () => {},\n});\n\n//\n// Root\n//\n\ntype TabsRootProps = ThemedClassName<TabsPrimitive.TabsProps> &\n Partial<\n Pick<TabsContextValue, 'activePart' | 'attendableId'> & {\n onActivePartChange: (nextActivePart: TabsActivePart) => void;\n defaultActivePart: TabsActivePart;\n }\n >;\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsRootProps>(\n (\n {\n children,\n classNames,\n activePart: propsActivePart,\n onActivePartChange,\n defaultActivePart,\n value: propsValue,\n onValueChange,\n defaultValue,\n orientation = 'vertical',\n activationMode = 'manual',\n attendableId,\n ...props\n },\n forwardedRef,\n ) => {\n const tabsRoot = useForwardedRef(forwardedRef);\n\n // TODO(thure): Without these, we get Groupper/Mover `API used before initialization`, but why?\n const _1 = useArrowNavigationGroup();\n const _2 = useFocusableGroup();\n const [activePart = 'list', setActivePart] = useControllableState({\n prop: propsActivePart,\n onChange: onActivePartChange,\n defaultProp: defaultActivePart,\n });\n\n const [value, setValue] = useControllableState({\n prop: propsValue,\n onChange: onValueChange,\n defaultProp: defaultValue,\n });\n\n const handleValueChange = useCallback(\n (nextValue: string) => {\n setActivePart('panel');\n setValue(nextValue);\n },\n [value],\n );\n\n const { findFirstFocusable } = useFocusFinders();\n\n useLayoutEffect(() => {\n if (tabsRoot.current) {\n findFirstFocusable(tabsRoot.current)?.focus();\n }\n }, [activePart]);\n\n return (\n <TabsContextProvider\n orientation={orientation}\n activePart={activePart}\n setActivePart={setActivePart}\n value={value}\n attendableId={attendableId}\n >\n <TabsPrimitive.Root\n {...props}\n className={mx('overflow-hidden', classNames)}\n orientation={orientation}\n activationMode={activationMode}\n data-active={activePart}\n value={value}\n onValueChange={handleValueChange}\n ref={tabsRoot}\n >\n {children}\n </TabsPrimitive.Root>\n </TabsContextProvider>\n );\n },\n);\n\nTabsRoot.displayName = 'Tabs.Root';\n\n//\n// Viewport\n//\n\ntype TabsViewportProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nconst TabsViewport = ({ classNames, children, ...props }: TabsViewportProps) => {\n const { activePart } = useTabsContext('TabsViewport');\n return (\n <div {...props} data-active={activePart} className={mx(classNames)}>\n {children}\n </div>\n );\n};\n\nTabsViewport.displayName = 'Tabs.Viewport';\n\n//\n// Tablist\n//\n\ntype TabsTablistProps = ThemedClassName<TabsPrimitive.TabsListProps>;\n\nconst TabsTablist = ({ children, classNames, ...props }: TabsTablistProps) => {\n const { orientation } = useTabsContext('TabsTablist');\n return (\n <TabsPrimitive.List\n {...props}\n data-arrow-keys={orientation === 'vertical' ? 'up down' : 'left right'}\n className={mx(\n 'max-h-full w-full',\n // TODO(burdon): Should be embeddable inside Toolbar (if horizontal).\n orientation === 'vertical' ? 'overflow-y-auto' : 'flex p-1 gap-1 items-stretch justify-start overflow-x-auto',\n classNames,\n )}\n >\n {children}\n </TabsPrimitive.List>\n );\n};\n\nTabsTablist.displayName = 'Tabs.Tablist';\n\n//\n// BackButton\n//\n\nconst TabsBackButton = ({ onClick, classNames, ...props }: ButtonProps) => {\n const { setActivePart } = useTabsContext('TabsBackButton');\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n setActivePart('list');\n return onClick?.(event);\n },\n [setActivePart, onClick],\n );\n\n return <Button {...props} classNames={['@md:hidden text-start', classNames]} onClick={handleClick} />;\n};\n\nTabsBackButton.displayName = 'Tabs.BackButton';\n\n//\n// TabGroupHeading\n//\n\ntype TabsTabGroupHeadingProps = ThemedClassName<ComponentPropsWithoutRef<'h2'>>;\n\nconst TabsTabGroupHeading = ({ children, classNames, ...props }: TabsTabGroupHeadingProps) => (\n <h2 {...props} className={mx('my-1 px-2 text-sm text-un-accent', classNames)}>\n {children}\n </h2>\n);\n\nTabsTabGroupHeading.displayName = 'Tabs.TabGroupHeading';\n\n//\n// Tab\n//\n\ntype TabsTabProps = ButtonProps & Pick<TabsPrimitive.TabsTriggerProps, 'value'>;\n\nconst TabsTab = ({ value, classNames, children, onClick, ...props }: TabsTabProps) => {\n const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext('TabsTab');\n const { hasAttention } = useAttention(attendableId);\n\n const handleClick = useCallback(\n // NOTE: This handler is only called if the tab is *already active*.\n (event: MouseEvent<HTMLButtonElement>) => {\n setActivePart('panel');\n onClick?.(event);\n },\n [setActivePart, onClick],\n );\n\n return (\n <TabsPrimitive.Trigger value={value} asChild>\n <Button\n {...props}\n variant={\n orientation === 'horizontal' && contextValue === value ? (hasAttention ? 'primary' : 'default') : 'ghost'\n }\n classNames={[\n orientation === 'vertical' && 'block justify-start text-start w-full',\n orientation === 'vertical' && 'dx-selected',\n classNames,\n ]}\n onClick={handleClick}\n >\n {children}\n </Button>\n </TabsPrimitive.Trigger>\n );\n};\n\nTabsTab.displayName = 'Tabs.Tab';\n\n//\n// IconTab\n//\n\ntype TabsIconTabProps = IconButtonProps & Pick<TabsPrimitive.TabsTriggerProps, 'value'>;\n\nconst TabsIconTab = ({ value, classNames, onClick, ...props }: TabsIconTabProps) => {\n const { setActivePart, orientation, value: contextValue, attendableId } = useTabsContext('TabsTab');\n const { hasAttention } = useAttention(attendableId);\n\n // NOTE: This handler is only called if the tab is *already active*.\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n setActivePart('panel');\n onClick?.(event);\n },\n [setActivePart, onClick],\n );\n\n return (\n <TabsPrimitive.Trigger value={value} asChild>\n <IconButton\n {...props}\n variant={\n orientation === 'horizontal' && contextValue === value ? (hasAttention ? 'primary' : 'default') : 'ghost'\n }\n classNames={[\n orientation === 'vertical' && 'justify-start text-start w-full',\n orientation === 'vertical' && 'dx-selected',\n classNames,\n ]}\n onClick={handleClick}\n />\n </TabsPrimitive.Trigger>\n );\n};\n\nTabsIconTab.displayName = 'Tabs.IconTab';\n\n//\n// Panel\n//\n// Do NOT wrap TabsPanel children in React.Activity.\n// Radix TabsPrimitive.Content already unmounts inactive panels (no forceMount) inactive tab\n// content is not in the DOM and effects do not run, which is the desired behaviour.\n// React.Activity (experimental in React 19) is a reconciler-level symbol that deactivates its\n// subtree when mode='hidden'. It was redundant here and prevented initial render of active panels.\n//\n\ntype TabsPanelProps = ThemedClassName<TabsPrimitive.TabsContentProps>;\n\nconst TabsPanel = ({ classNames, children, ...props }: TabsPanelProps) => (\n <TabsPrimitive.Content {...props} className={mx('p-0! dx-focus-ring-inset-over-all', classNames)}>\n {children}\n </TabsPrimitive.Content>\n);\n\nTabsPanel.displayName = 'Tabs.Panel';\n\ntype TabsTabPrimitiveProps = TabsPrimitive.TabsTriggerProps;\n\n//\n// Tabs\n//\n\nexport const Tabs = {\n Root: TabsRoot,\n Tablist: TabsTablist,\n Tab: TabsTab,\n IconTab: TabsIconTab,\n TabPrimitive: TabsPrimitive.Trigger,\n TabGroupHeading: TabsTabGroupHeading,\n Viewport: TabsViewport,\n Panel: TabsPanel,\n BackButton: TabsBackButton,\n};\n\nexport type {\n TabsActivePart,\n TabsRootProps,\n TabsTablistProps,\n TabsTabProps,\n TabsTabPrimitiveProps,\n TabsTabGroupHeadingProps,\n TabsViewportProps,\n TabsPanelProps,\n};\n"],
5
+ "mappings": ";;;AAIA,SAASA,yBAAyBC,iBAAiBC,yBAAyB;AAC5E,SAASC,qBAAqB;AAC9B,YAAYC,mBAAmB;AAC/B,SAASC,4BAA4B;AACrC,OAAOC,SAAyDC,YAAYC,aAAaC,uBAAuB;AAEhH,SACEC,QAEAC,YAGAC,uBACK;AACP,SAASC,oBAAoB;AAC7B,SAASC,UAAU;AAMnB,IAAMC,YAAY;AAYlB,IAAM,CAACC,qBAAqBC,cAAAA,IAAkBd,cAAgCY,WAAW;EACvFG,aAAa;EACbC,YAAY;EACZC,eAAe,MAAA;EAAO;AACxB,CAAA;AAcA,IAAMC,WAAWd,2BACf,CACE,EACEe,UACAC,YACAJ,YAAYK,iBACZC,oBACAC,mBACAC,OAAOC,YACPC,eACAC,cACAZ,cAAc,YACda,iBAAiB,UACjBC,cACA,GAAGC,MAAAA,GAELC,iBAAAA;AAEA,QAAMC,WAAWvB,gBAAgBsB,YAAAA;AAGjC,QAAME,KAAKpC,wBAAAA;AACX,QAAMqC,KAAKnC,kBAAAA;AACX,QAAM,CAACiB,aAAa,QAAQC,aAAAA,IAAiBf,qBAAqB;IAChEiC,MAAMd;IACNe,UAAUd;IACVe,aAAad;EACf,CAAA;AAEA,QAAM,CAACC,OAAOc,QAAAA,IAAYpC,qBAAqB;IAC7CiC,MAAMV;IACNW,UAAUV;IACVW,aAAaV;EACf,CAAA;AAEA,QAAMY,oBAAoBlC,YACxB,CAACmC,cAAAA;AACCvB,kBAAc,OAAA;AACdqB,aAASE,SAAAA;EACX,GACA;IAAChB;GAAM;AAGT,QAAM,EAAEiB,mBAAkB,IAAK3C,gBAAAA;AAE/BQ,kBAAgB,MAAA;AACd,QAAI0B,SAASU,SAAS;AACpBD,yBAAmBT,SAASU,OAAO,GAAGC,MAAAA;IACxC;EACF,GAAG;IAAC3B;GAAW;AAEf,SACE,sBAAA,cAACH,qBAAAA;IACCE;IACAC;IACAC;IACAO;IACAK;KAEA,sBAAA,cAAee,oBAAI;IAChB,GAAGd;IACJe,WAAWlC,GAAG,mBAAmBS,UAAAA;IACjCL;IACAa;IACAkB,eAAa9B;IACbQ;IACAE,eAAea;IACfQ,KAAKf;KAEJb,QAAAA,CAAAA;AAIT,CAAA;AAGFD,SAAS8B,cAAc;AAQvB,IAAMC,eAAe,CAAC,EAAE7B,YAAYD,UAAU,GAAGW,MAAAA,MAA0B;AACzE,QAAM,EAAEd,WAAU,IAAKF,eAAe,cAAA;AACtC,SACE,sBAAA,cAACoC,OAAAA;IAAK,GAAGpB;IAAOgB,eAAa9B;IAAY6B,WAAWlC,GAAGS,UAAAA;KACpDD,QAAAA;AAGP;AAEA8B,aAAaD,cAAc;AAQ3B,IAAMG,cAAc,CAAC,EAAEhC,UAAUC,YAAY,GAAGU,MAAAA,MAAyB;AACvE,QAAM,EAAEf,YAAW,IAAKD,eAAe,aAAA;AACvC,SACE,sBAAA,cAAesC,oBAAI;IAChB,GAAGtB;IACJuB,mBAAiBtC,gBAAgB,aAAa,YAAY;IAC1D8B,WAAWlC;MACT;;MAEAI,gBAAgB,aAAa,oBAAoB;MACjDK;IAAAA;KAGDD,QAAAA;AAGP;AAEAgC,YAAYH,cAAc;AAM1B,IAAMM,iBAAiB,CAAC,EAAEC,SAASnC,YAAY,GAAGU,MAAAA,MAAoB;AACpE,QAAM,EAAEb,cAAa,IAAKH,eAAe,gBAAA;AACzC,QAAM0C,cAAcnD,YAClB,CAACoD,UAAAA;AACCxC,kBAAc,MAAA;AACd,WAAOsC,UAAUE,KAAAA;EACnB,GACA;IAACxC;IAAesC;GAAQ;AAG1B,SAAO,sBAAA,cAAChD,QAAAA;IAAQ,GAAGuB;IAAOV,YAAY;MAAC;MAAyBA;;IAAamC,SAASC;;AACxF;AAEAF,eAAeN,cAAc;AAQ7B,IAAMU,sBAAsB,CAAC,EAAEvC,UAAUC,YAAY,GAAGU,MAAAA,MACtD,sBAAA,cAAC6B,MAAAA;EAAI,GAAG7B;EAAOe,WAAWlC,GAAG,oCAAoCS,UAAAA;GAC9DD,QAAAA;AAILuC,oBAAoBV,cAAc;AAQlC,IAAMY,UAAU,CAAC,EAAEpC,OAAOJ,YAAYD,UAAUoC,SAAS,GAAGzB,MAAAA,MAAqB;AAC/E,QAAM,EAAEb,eAAeF,aAAaS,OAAOqC,cAAchC,aAAY,IAAKf,eAAe,SAAA;AACzF,QAAM,EAAEgD,aAAY,IAAKpD,aAAamB,YAAAA;AAEtC,QAAM2B,cAAcnD;;IAElB,CAACoD,UAAAA;AACCxC,oBAAc,OAAA;AACdsC,gBAAUE,KAAAA;IACZ;IACA;MAACxC;MAAesC;;EAAQ;AAG1B,SACE,sBAAA,cAAeQ,uBAAO;IAACvC;IAAcwC,SAAAA;KACnC,sBAAA,cAACzD,QAAAA;IACE,GAAGuB;IACJmC,SACElD,gBAAgB,gBAAgB8C,iBAAiBrC,QAASsC,eAAe,YAAY,YAAa;IAEpG1C,YAAY;MACVL,gBAAgB,cAAc;MAC9BA,gBAAgB,cAAc;MAC9BK;;IAEFmC,SAASC;KAERrC,QAAAA,CAAAA;AAIT;AAEAyC,QAAQZ,cAAc;AAQtB,IAAMkB,cAAc,CAAC,EAAE1C,OAAOJ,YAAYmC,SAAS,GAAGzB,MAAAA,MAAyB;AAC7E,QAAM,EAAEb,eAAeF,aAAaS,OAAOqC,cAAchC,aAAY,IAAKf,eAAe,SAAA;AACzF,QAAM,EAAEgD,aAAY,IAAKpD,aAAamB,YAAAA;AAGtC,QAAM2B,cAAcnD,YAClB,CAACoD,UAAAA;AACCxC,kBAAc,OAAA;AACdsC,cAAUE,KAAAA;EACZ,GACA;IAACxC;IAAesC;GAAQ;AAG1B,SACE,sBAAA,cAAeQ,uBAAO;IAACvC;IAAcwC,SAAAA;KACnC,sBAAA,cAACxD,YAAAA;IACE,GAAGsB;IACJmC,SACElD,gBAAgB,gBAAgB8C,iBAAiBrC,QAASsC,eAAe,YAAY,YAAa;IAEpG1C,YAAY;MACVL,gBAAgB,cAAc;MAC9BA,gBAAgB,cAAc;MAC9BK;;IAEFmC,SAASC;;AAIjB;AAEAU,YAAYlB,cAAc;AAc1B,IAAMmB,YAAY,CAAC,EAAE/C,YAAYD,UAAU,GAAGW,MAAAA,MAC5C,sBAAA,cAAesC,uBAAO;EAAE,GAAGtC;EAAOe,WAAWlC,GAAG,qCAAqCS,UAAAA;GAClFD,QAAAA;AAILgD,UAAUnB,cAAc;AAQjB,IAAMqB,OAAO;EAClBzB,MAAM1B;EACNoD,SAASnB;EACToB,KAAKX;EACLY,SAASN;EACTO,cAA4BV;EAC5BW,iBAAiBhB;EACjBiB,UAAU1B;EACV2B,OAAOT;EACPU,YAAYvB;AACd;",
6
+ "names": ["useArrowNavigationGroup", "useFocusFinders", "useFocusableGroup", "createContext", "TabsPrimitive", "useControllableState", "React", "forwardRef", "useCallback", "useLayoutEffect", "Button", "IconButton", "useForwardedRef", "useAttention", "mx", "TABS_NAME", "TabsContextProvider", "useTabsContext", "orientation", "activePart", "setActivePart", "TabsRoot", "children", "classNames", "propsActivePart", "onActivePartChange", "defaultActivePart", "value", "propsValue", "onValueChange", "defaultValue", "activationMode", "attendableId", "props", "forwardedRef", "tabsRoot", "_1", "_2", "prop", "onChange", "defaultProp", "setValue", "handleValueChange", "nextValue", "findFirstFocusable", "current", "focus", "Root", "className", "data-active", "ref", "displayName", "TabsViewport", "div", "TabsTablist", "List", "data-arrow-keys", "TabsBackButton", "onClick", "handleClick", "event", "TabsTabGroupHeading", "h2", "TabsTab", "contextValue", "hasAttention", "Trigger", "asChild", "variant", "TabsIconTab", "TabsPanel", "Content", "Tabs", "Tablist", "Tab", "IconTab", "TabPrimitive", "TabGroupHeading", "Viewport", "Panel", "BackButton"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/Tabs.tsx":{"bytes":28267,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-tabs","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":444,"imports":[{"path":"src/Tabs.tsx","kind":"import-statement","original":"./Tabs"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":14598},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-tabs","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["Tabs"],"entryPoint":"src/index.ts","inputs":{"src/Tabs.tsx":{"bytesInOutput":7746},"src/index.ts":{"bytesInOutput":0}},"bytes":7909}}}
1
+ {"inputs":{"src/Tabs.tsx":{"bytes":26241,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-tabs","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":368,"imports":[{"path":"src/Tabs.tsx","kind":"import-statement","original":"./Tabs"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":14205},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-tabs","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"exports":["Tabs"],"entryPoint":"src/index.ts","inputs":{"src/Tabs.tsx":{"bytesInOutput":6267},"src/index.ts":{"bytesInOutput":0}},"bytes":6430}}}
@@ -6,29 +6,82 @@ type TabsContextValue = {
6
6
  activePart: TabsActivePart;
7
7
  setActivePart: (nextActivePart: TabsActivePart) => void;
8
8
  attendableId?: string;
9
- verticalVariant?: 'stateful' | 'stateless';
10
9
  } & Pick<TabsPrimitive.TabsProps, 'orientation' | 'value'>;
11
- type TabsRootProps = ThemedClassName<TabsPrimitive.TabsProps> & Partial<Pick<TabsContextValue, 'activePart' | 'verticalVariant' | 'attendableId'>> & Partial<{
10
+ type TabsRootProps = ThemedClassName<TabsPrimitive.TabsProps> & Partial<Pick<TabsContextValue, 'activePart' | 'attendableId'> & {
12
11
  onActivePartChange: (nextActivePart: TabsActivePart) => void;
13
12
  defaultActivePart: TabsActivePart;
14
13
  }>;
15
14
  type TabsViewportProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;
15
+ declare function TabsViewport({ classNames, children, ...props }: TabsViewportProps): React.JSX.Element;
16
+ declare namespace TabsViewport {
17
+ var displayName: string;
18
+ }
16
19
  type TabsTablistProps = ThemedClassName<TabsPrimitive.TabsListProps>;
20
+ declare function TabsTablist({ children, classNames, ...props }: TabsTablistProps): React.JSX.Element;
21
+ declare namespace TabsTablist {
22
+ var displayName: string;
23
+ }
24
+ declare function TabsBackButton({ onClick, classNames, ...props }: ButtonProps): React.JSX.Element;
25
+ declare namespace TabsBackButton {
26
+ var displayName: string;
27
+ }
17
28
  type TabsTabGroupHeadingProps = ThemedClassName<ComponentPropsWithoutRef<'h2'>>;
29
+ declare function TabsTabGroupHeading({ children, classNames, ...props }: TabsTabGroupHeadingProps): React.JSX.Element;
30
+ declare namespace TabsTabGroupHeading {
31
+ var displayName: string;
32
+ }
18
33
  type TabsTabProps = ButtonProps & Pick<TabsPrimitive.TabsTriggerProps, 'value'>;
34
+ declare function TabsTab({ value, classNames, children, onClick, ...props }: TabsTabProps): React.JSX.Element;
35
+ declare namespace TabsTab {
36
+ var displayName: string;
37
+ }
19
38
  type TabsIconTabProps = IconButtonProps & Pick<TabsPrimitive.TabsTriggerProps, 'value'>;
20
- type TabsTabpanelProps = ThemedClassName<TabsPrimitive.TabsContentProps>;
39
+ declare function TabsIconTab({ value, classNames, onClick, ...props }: TabsIconTabProps): React.JSX.Element;
40
+ declare namespace TabsIconTab {
41
+ var displayName: string;
42
+ }
43
+ type TabsPanelProps = ThemedClassName<TabsPrimitive.TabsContentProps>;
44
+ declare function TabsPanel({ classNames, children, ...props }: TabsPanelProps): React.JSX.Element;
45
+ declare namespace TabsPanel {
46
+ var displayName: string;
47
+ }
21
48
  type TabsTabPrimitiveProps = TabsPrimitive.TabsTriggerProps;
22
49
  export declare const Tabs: {
23
- Root: ({ children, classNames, activePart: propsActivePart, onActivePartChange, defaultActivePart, value: propsValue, onValueChange, defaultValue, orientation, activationMode, verticalVariant, attendableId, ...props }: TabsRootProps) => React.JSX.Element;
24
- Tablist: ({ children, classNames, ...props }: TabsTablistProps) => React.JSX.Element;
25
- Tab: ({ value, classNames, children, onClick, ...props }: TabsTabProps) => React.JSX.Element;
26
- IconTab: ({ value, classNames, onClick, ...props }: TabsIconTabProps) => React.JSX.Element;
50
+ Root: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsProps, "className"> & {
51
+ classNames?: import("@dxos/ui-types").ClassNameValue;
52
+ } & Partial<Pick<TabsContextValue, "activePart" | "attendableId"> & {
53
+ onActivePartChange: (nextActivePart: TabsActivePart) => void;
54
+ defaultActivePart: TabsActivePart;
55
+ }> & React.RefAttributes<HTMLDivElement>>;
56
+ Tablist: {
57
+ ({ children, classNames, ...props }: TabsTablistProps): React.JSX.Element;
58
+ displayName: string;
59
+ };
60
+ Tab: {
61
+ ({ value, classNames, children, onClick, ...props }: TabsTabProps): React.JSX.Element;
62
+ displayName: string;
63
+ };
64
+ IconTab: {
65
+ ({ value, classNames, onClick, ...props }: TabsIconTabProps): React.JSX.Element;
66
+ displayName: string;
67
+ };
27
68
  TabPrimitive: React.ForwardRefExoticComponent<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>>;
28
- TabGroupHeading: ({ children, classNames, ...props }: ThemedClassName<TabsTabGroupHeadingProps>) => React.JSX.Element;
29
- Tabpanel: ({ classNames, children, ...props }: TabsTabpanelProps) => React.JSX.Element;
30
- BackButton: ({ onClick, classNames, ...props }: ButtonProps) => React.JSX.Element;
31
- Viewport: ({ classNames, children, ...props }: TabsViewportProps) => React.JSX.Element;
69
+ TabGroupHeading: {
70
+ ({ children, classNames, ...props }: TabsTabGroupHeadingProps): React.JSX.Element;
71
+ displayName: string;
72
+ };
73
+ Viewport: {
74
+ ({ classNames, children, ...props }: TabsViewportProps): React.JSX.Element;
75
+ displayName: string;
76
+ };
77
+ Panel: {
78
+ ({ classNames, children, ...props }: TabsPanelProps): React.JSX.Element;
79
+ displayName: string;
80
+ };
81
+ BackButton: {
82
+ ({ onClick, classNames, ...props }: ButtonProps): React.JSX.Element;
83
+ displayName: string;
84
+ };
32
85
  };
33
- export type { TabsActivePart, TabsRootProps, TabsTablistProps, TabsTabProps, TabsTabPrimitiveProps, TabsTabGroupHeadingProps, TabsTabpanelProps, TabsViewportProps, };
86
+ export type { TabsActivePart, TabsRootProps, TabsTablistProps, TabsTabProps, TabsTabPrimitiveProps, TabsTabGroupHeadingProps, TabsViewportProps, TabsPanelProps, };
34
87
  //# sourceMappingURL=Tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/Tabs.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,EAEZ,KAAK,wBAAwB,EAK9B,MAAM,OAAO,CAAC;AAEf,OAAO,EAAU,KAAK,WAAW,EAAc,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIlH,KAAK,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAIvC,KAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE,cAAc,CAAC;IAC3B,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,IAAI,CAAC;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CAC5C,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC;AAQ3D,KAAK,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,iBAAiB,GAAG,cAAc,CAAC,CAAC,GAClF,OAAO,CAAC;IACN,kBAAkB,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7D,iBAAiB,EAAE,cAAc,CAAC;CACnC,CAAC,CAAC;AAgFL,KAAK,iBAAiB,GAAG,eAAe,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;AAuB1E,KAAK,gBAAgB,GAAG,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AAkCrE,KAAK,wBAAwB,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAUhF,KAAK,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAoChF,KAAK,gBAAgB,GAAG,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAkCxF,KAAK,iBAAiB,GAAG,eAAe,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAazE,KAAK,qBAAqB,GAAG,aAAa,CAAC,gBAAgB,CAAC;AAE5D,eAAO,MAAM,IAAI;+NAxNd,aAAa;kDAyFyC,gBAAgB;8DA4CJ,YAAY;wDAoClB,gBAAgB;;0DA9Cd,eAAe,CAAC,wBAAwB,CAAC;mDAgFhD,iBAAiB;oDA/FhB,WAAW;mDA1CZ,iBAAiB;CAgK1E,CAAC;AAEF,YAAY,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,CAAC"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/Tabs.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,EAAE,KAAK,wBAAwB,EAA6D,MAAM,OAAO,CAAC;AAExH,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,eAAe,EACpB,KAAK,eAAe,EAErB,MAAM,gBAAgB,CAAC;AAMxB,KAAK,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAQvC,KAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE,cAAc,CAAC;IAC3B,aAAa,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,IAAI,CAAC;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC;AAY3D,KAAK,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,GAC3D,OAAO,CACL,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,cAAc,CAAC,GAAG;IACtD,kBAAkB,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7D,iBAAiB,EAAE,cAAc,CAAC;CACnC,CACF,CAAC;AAoFJ,KAAK,iBAAiB,GAAG,eAAe,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;8BAEpD,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB;;;;AAe3E,KAAK,gBAAgB,GAAG,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;6BAEhD,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB;;;;gCAwBjD,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW;;;;AAmBtE,KAAK,wBAAwB,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;qCAEnD,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB;;;;AAYzF,KAAK,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;yBAE/D,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY;;;;AAuCjF,KAAK,gBAAgB,GAAG,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;6BAEnE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB;;;;AA2C/E,KAAK,cAAc,GAAG,eAAe,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;2BAEnD,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc;;;;AAQrE,KAAK,qBAAqB,GAAG,aAAa,CAAC,gBAAgB,CAAC;AAM5D,eAAO,MAAM,IAAI;IACf,IAAI;;;4BA1QoB,CAAC,cAAc,EAAE,cAAc,KAAK,IAAI;2BACzC,cAAc;;IA0QrC,OAAO;6CAjKgD,gBAAgB;;;IAkKvE,GAAG;6DAvGgE,YAAY;;;IAwG/E,OAAO;mDA/DsD,gBAAgB;;;IAgE7E,YAAY;IACZ,eAAe;6CAxHgD,wBAAwB;;;IAyHvF,QAAQ;6CAvLgD,iBAAiB;;;IAwLzE,KAAK;6CAtBgD,cAAc;;;IAuBnE,UAAU;4CAhJ+C,WAAW;;;CAiJrE,CAAC;AAEF,YAAY,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,GACf,CAAC"}