@cdx-ui/components 0.0.1-beta.121 → 0.0.1-beta.123

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 (43) hide show
  1. package/lib/commonjs/components/ScrollShadow/index.js +82 -0
  2. package/lib/commonjs/components/ScrollShadow/index.js.map +1 -0
  3. package/lib/commonjs/components/ScrollShadow/styles.js +54 -0
  4. package/lib/commonjs/components/ScrollShadow/styles.js.map +1 -0
  5. package/lib/commonjs/components/ScrollShadow/useScrollShadow.js +83 -0
  6. package/lib/commonjs/components/ScrollShadow/useScrollShadow.js.map +1 -0
  7. package/lib/commonjs/components/Tabs/index.js +525 -0
  8. package/lib/commonjs/components/Tabs/index.js.map +1 -0
  9. package/lib/commonjs/components/Tabs/styles.js +333 -0
  10. package/lib/commonjs/components/Tabs/styles.js.map +1 -0
  11. package/lib/commonjs/components/index.js +24 -0
  12. package/lib/commonjs/components/index.js.map +1 -1
  13. package/lib/module/components/ScrollShadow/index.js +78 -0
  14. package/lib/module/components/ScrollShadow/index.js.map +1 -0
  15. package/lib/module/components/ScrollShadow/styles.js +50 -0
  16. package/lib/module/components/ScrollShadow/styles.js.map +1 -0
  17. package/lib/module/components/ScrollShadow/useScrollShadow.js +79 -0
  18. package/lib/module/components/ScrollShadow/useScrollShadow.js.map +1 -0
  19. package/lib/module/components/Tabs/index.js +520 -0
  20. package/lib/module/components/Tabs/index.js.map +1 -0
  21. package/lib/module/components/Tabs/styles.js +330 -0
  22. package/lib/module/components/Tabs/styles.js.map +1 -0
  23. package/lib/module/components/index.js +2 -0
  24. package/lib/module/components/index.js.map +1 -1
  25. package/lib/typescript/components/ScrollShadow/index.d.ts +29 -0
  26. package/lib/typescript/components/ScrollShadow/index.d.ts.map +1 -0
  27. package/lib/typescript/components/ScrollShadow/styles.d.ts +12 -0
  28. package/lib/typescript/components/ScrollShadow/styles.d.ts.map +1 -0
  29. package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts +17 -0
  30. package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts.map +1 -0
  31. package/lib/typescript/components/Tabs/index.d.ts +48 -0
  32. package/lib/typescript/components/Tabs/index.d.ts.map +1 -0
  33. package/lib/typescript/components/Tabs/styles.d.ts +107 -0
  34. package/lib/typescript/components/Tabs/styles.d.ts.map +1 -0
  35. package/lib/typescript/components/index.d.ts +2 -0
  36. package/lib/typescript/components/index.d.ts.map +1 -1
  37. package/package.json +5 -5
  38. package/src/components/ScrollShadow/index.tsx +119 -0
  39. package/src/components/ScrollShadow/styles.ts +57 -0
  40. package/src/components/ScrollShadow/useScrollShadow.ts +110 -0
  41. package/src/components/Tabs/index.tsx +694 -0
  42. package/src/components/Tabs/styles.ts +340 -0
  43. package/src/components/index.ts +2 -0
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useEffect, useRef, useState } from 'react';
4
+ const INITIAL_METRICS = {
5
+ scrollOffset: 0,
6
+ viewportSize: 0,
7
+ contentSize: 0
8
+ };
9
+ function getScrollCapability(metrics, offset) {
10
+ const {
11
+ scrollOffset,
12
+ viewportSize,
13
+ contentSize
14
+ } = metrics;
15
+ if (viewportSize <= 0 || contentSize <= viewportSize) {
16
+ return {
17
+ canScrollBefore: false,
18
+ canScrollAfter: false
19
+ };
20
+ }
21
+ return {
22
+ canScrollBefore: scrollOffset > offset,
23
+ canScrollAfter: scrollOffset + viewportSize + offset < contentSize
24
+ };
25
+ }
26
+ export function useScrollShadow({
27
+ orientation = 'horizontal',
28
+ offset = 0,
29
+ onCapabilityChange
30
+ } = {}) {
31
+ const metricsRef = useRef(INITIAL_METRICS);
32
+ const [capability, setCapability] = useState({
33
+ canScrollBefore: false,
34
+ canScrollAfter: false
35
+ });
36
+ const updateCapability = useCallback(() => {
37
+ const nextCapability = getScrollCapability(metricsRef.current, offset);
38
+ setCapability(prev => {
39
+ if (prev.canScrollBefore === nextCapability.canScrollBefore && prev.canScrollAfter === nextCapability.canScrollAfter) {
40
+ return prev;
41
+ }
42
+ onCapabilityChange?.(nextCapability);
43
+ return nextCapability;
44
+ });
45
+ }, [offset, onCapabilityChange]);
46
+ useEffect(() => {
47
+ updateCapability();
48
+ }, [updateCapability]);
49
+ const handleLayout = useCallback(event => {
50
+ const {
51
+ width,
52
+ height
53
+ } = event.nativeEvent.layout;
54
+ metricsRef.current.viewportSize = orientation === 'vertical' ? height : width;
55
+ updateCapability();
56
+ }, [orientation, updateCapability]);
57
+ const handleContentSizeChange = useCallback((width, height) => {
58
+ metricsRef.current.contentSize = orientation === 'vertical' ? height : width;
59
+ updateCapability();
60
+ }, [orientation, updateCapability]);
61
+ const handleScroll = useCallback(event => {
62
+ const {
63
+ contentOffset,
64
+ layoutMeasurement,
65
+ contentSize
66
+ } = event.nativeEvent;
67
+ metricsRef.current.scrollOffset = orientation === 'vertical' ? contentOffset.y : contentOffset.x;
68
+ metricsRef.current.viewportSize = orientation === 'vertical' ? layoutMeasurement.height : layoutMeasurement.width;
69
+ metricsRef.current.contentSize = orientation === 'vertical' ? contentSize.height : contentSize.width;
70
+ updateCapability();
71
+ }, [orientation, updateCapability]);
72
+ return {
73
+ capability,
74
+ handleLayout,
75
+ handleContentSizeChange,
76
+ handleScroll
77
+ };
78
+ }
79
+ //# sourceMappingURL=useScrollShadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","INITIAL_METRICS","scrollOffset","viewportSize","contentSize","getScrollCapability","metrics","offset","canScrollBefore","canScrollAfter","useScrollShadow","orientation","onCapabilityChange","metricsRef","capability","setCapability","updateCapability","nextCapability","current","prev","handleLayout","event","width","height","nativeEvent","layout","handleContentSizeChange","handleScroll","contentOffset","layoutMeasurement","y","x"],"sourceRoot":"../../../../src","sources":["components/ScrollShadow/useScrollShadow.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,520 @@
1
+ "use strict";
2
+
3
+ import { forwardRef, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
4
+ import { Platform, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';
5
+ import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
6
+ import { ChevronLeft, ChevronRight } from '@cdx-ui/icons';
7
+ import { Tab as TabPrimitive, TabPanel as TabPanelPrimitive, TabsList as TabsListPrimitive, TabsRoot as TabsRootPrimitive, Slot, dataAttributes, mergeDataAttributes, useTabContext, useTabsContext } from '@cdx-ui/primitives';
8
+ import { cn, createContext } from '@cdx-ui/utils';
9
+ import { Icon } from '../Icon';
10
+ import { ScrollShadow } from '../ScrollShadow';
11
+ import { tabsIndicatorVariants, tabsListSolidShellBgVariants, tabsListSolidShellVariants, tabsListSolidScrollButtonSlotVariants, tabsListSolidScrollButtonVariants, tabsListScrollButtonVariants, tabsListScrollContainerVariants, tabsListScrollViewVariants, tabsListTrackVariants, tabsListVariants, tabsOutlineTrackVariants, tabsPanelVariants, tabsRootVariants, tabsStyles, tabsTabLabelVariants, tabsTabVariants, TABS_INDICATOR_TRANSITION_MS, TABS_SOLID_SCROLL_FADE_SIZE, TABS_SCROLL_FADE_SIZE, OUTLINE_INDICATOR_THICKNESS } from './styles';
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ /** Minimum horizontal scroll offset so `layout` is fully inside the viewport. */
14
+ function scrollXToRevealTab(layout, viewportWidth, currentScrollX) {
15
+ const tabStart = layout.x;
16
+ const tabEnd = layout.x + layout.width;
17
+ const viewEnd = currentScrollX + viewportWidth;
18
+ if (tabStart < currentScrollX) {
19
+ return tabStart;
20
+ }
21
+ if (tabEnd > viewEnd) {
22
+ return tabEnd - viewportWidth;
23
+ }
24
+ return currentScrollX;
25
+ }
26
+ function clampScrollX(scrollX, viewportWidth, contentWidth) {
27
+ const maxScrollX = Math.max(0, contentWidth - viewportWidth);
28
+ return Math.min(Math.max(0, scrollX), maxScrollX);
29
+ }
30
+ const [TabsIndicatorProvider, useTabsIndicatorContext] = createContext('TabsIndicatorContext');
31
+ const [TabsVariantProvider, useTabsVariantContext] = createContext('TabsVariantContext');
32
+
33
+ // =============================================================================
34
+ // STYLED ROOT
35
+ // =============================================================================
36
+
37
+ const TabsRoot = /*#__PURE__*/forwardRef(({
38
+ className,
39
+ style,
40
+ children,
41
+ variant = 'solid',
42
+ orientation = 'horizontal',
43
+ ...props
44
+ }, ref) => /*#__PURE__*/_jsx(TabsVariantProvider, {
45
+ value: {
46
+ variant
47
+ },
48
+ children: /*#__PURE__*/_jsx(TabsRootPrimitive, {
49
+ ref: ref,
50
+ orientation: orientation,
51
+ className: cn(tabsRootVariants({
52
+ orientation
53
+ }), className),
54
+ style: style,
55
+ ...props,
56
+ ...mergeDataAttributes(props, dataAttributes({
57
+ slot: 'tabs'
58
+ })),
59
+ children: children
60
+ })
61
+ }));
62
+ TabsRoot.displayName = 'Tabs';
63
+
64
+ // =============================================================================
65
+ // STYLED LIST — hosts the animated selection indicator
66
+ // =============================================================================
67
+
68
+ const TabsList = /*#__PURE__*/forwardRef(({
69
+ asChild,
70
+ className,
71
+ style,
72
+ children,
73
+ scrollable = true,
74
+ showsHorizontalScrollIndicator = false,
75
+ ...props
76
+ }, ref) => {
77
+ const {
78
+ value,
79
+ orientation,
80
+ getTabs
81
+ } = useTabsContext();
82
+ const {
83
+ variant
84
+ } = useTabsVariantContext();
85
+ const isHorizontalScroll = orientation === 'horizontal' && scrollable;
86
+ const isWebHorizontalScroll = isHorizontalScroll && Platform.OS === 'web';
87
+ const shouldAutoScrollActiveTab = isHorizontalScroll && Platform.OS !== 'web';
88
+ const layoutsRef = useRef(new Map());
89
+ const hasMeasuredRef = useRef(false);
90
+ const scrollRef = useRef(null);
91
+ const scrollViewWidthRef = useRef(0);
92
+ const scrollContentWidthRef = useRef(0);
93
+ const scrollXRef = useRef(0);
94
+ const [scrollCapability, setScrollCapability] = useState({
95
+ canScrollBefore: false,
96
+ canScrollAfter: false
97
+ });
98
+ const translateX = useSharedValue(0);
99
+ const translateY = useSharedValue(0);
100
+ // Both variants animate measured width/height. Measured size + translate is reliable
101
+ // and keeps `rounded-full` looking like a capsule for the solid variant.
102
+ const width = useSharedValue(0);
103
+ const height = useSharedValue(0);
104
+ const scrollActiveTabIntoView = useCallback((layout, activeTabValue = value) => {
105
+ if (!shouldAutoScrollActiveTab || !layout || !scrollRef.current || activeTabValue === undefined) {
106
+ return;
107
+ }
108
+ const viewportWidth = scrollViewWidthRef.current;
109
+ if (viewportWidth <= 0) {
110
+ return;
111
+ }
112
+ let nextScrollX = scrollXToRevealTab(layout, viewportWidth, scrollXRef.current);
113
+ const tabOrder = getTabs().map(([tabValue]) => tabValue);
114
+ const activeIndex = tabOrder.indexOf(activeTabValue);
115
+
116
+ // Active tab fully visible at the right edge — peek the next sibling in.
117
+ if (activeIndex >= 0 && activeIndex < tabOrder.length - 1) {
118
+ const nextLayout = layoutsRef.current.get(tabOrder[activeIndex + 1]);
119
+ if (nextLayout) {
120
+ const viewEnd = nextScrollX + viewportWidth;
121
+ const nextTabEnd = nextLayout.x + nextLayout.width;
122
+ if (nextTabEnd > viewEnd) {
123
+ nextScrollX = Math.max(nextScrollX, nextTabEnd - viewportWidth);
124
+ }
125
+ }
126
+ }
127
+
128
+ // Active tab fully visible at the left edge — peek the previous sibling in.
129
+ if (activeIndex > 0) {
130
+ const prevLayout = layoutsRef.current.get(tabOrder[activeIndex - 1]);
131
+ if (prevLayout && prevLayout.x < nextScrollX) {
132
+ nextScrollX = Math.min(nextScrollX, prevLayout.x);
133
+ }
134
+ }
135
+ nextScrollX = clampScrollX(nextScrollX, viewportWidth, scrollContentWidthRef.current);
136
+ scrollXRef.current = nextScrollX;
137
+ scrollRef.current.scrollTo({
138
+ x: nextScrollX,
139
+ animated: true
140
+ });
141
+ }, [getTabs, shouldAutoScrollActiveTab, value]);
142
+ const retryScrollActiveTabIntoView = useCallback(() => {
143
+ if (value === undefined) {
144
+ return;
145
+ }
146
+ if (scrollViewWidthRef.current <= 0 || scrollContentWidthRef.current <= 0) {
147
+ return;
148
+ }
149
+ scrollActiveTabIntoView(layoutsRef.current.get(value), value);
150
+ }, [value, scrollActiveTabIntoView]);
151
+ const scrollTabsByPage = useCallback(direction => {
152
+ if (!scrollRef.current) {
153
+ return;
154
+ }
155
+ const viewportWidth = scrollViewWidthRef.current;
156
+ if (viewportWidth <= 0) {
157
+ return;
158
+ }
159
+ const nextScrollX = clampScrollX(scrollXRef.current + direction * viewportWidth * 0.8, viewportWidth, scrollContentWidthRef.current);
160
+ scrollXRef.current = nextScrollX;
161
+ scrollRef.current.scrollTo({
162
+ x: nextScrollX,
163
+ animated: true
164
+ });
165
+ }, []);
166
+ const applyLayout = useCallback(layout => {
167
+ if (!layout) {
168
+ return;
169
+ }
170
+ let nextX = layout.x;
171
+ let nextY = layout.y;
172
+ let nextW = layout.width;
173
+ let nextH = layout.height;
174
+ if (variant === 'outline') {
175
+ if (orientation === 'vertical') {
176
+ // X offset comes from `style.left = TRACK` (indicator to the right of the rail).
177
+ nextX = 0;
178
+ nextW = OUTLINE_INDICATOR_THICKNESS;
179
+ } else {
180
+ // Y offset comes from `style.bottom = TRACK` (indicator above the rail).
181
+ nextY = 0;
182
+ nextH = OUTLINE_INDICATOR_THICKNESS;
183
+ }
184
+ }
185
+ if (hasMeasuredRef.current) {
186
+ // Explicit duration — kept in sync with `TABS_INDICATOR_TRANSITION_MS`, the web focus
187
+ // ring's `transition` duration, so the ring doesn't visually outrun the sliding indicator.
188
+ const config = {
189
+ duration: TABS_INDICATOR_TRANSITION_MS
190
+ };
191
+ translateX.set(withTiming(nextX, config));
192
+ translateY.set(withTiming(nextY, config));
193
+ width.set(withTiming(nextW, config));
194
+ height.set(withTiming(nextH, config));
195
+ } else {
196
+ translateX.set(nextX);
197
+ translateY.set(nextY);
198
+ width.set(nextW);
199
+ height.set(nextH);
200
+ hasMeasuredRef.current = true;
201
+ }
202
+ }, [translateX, translateY, width, height, variant, orientation]);
203
+ const reportLayout = useCallback((tabValue, layout) => {
204
+ layoutsRef.current.set(tabValue, layout);
205
+ if (tabValue === value) {
206
+ applyLayout(layout);
207
+ scrollActiveTabIntoView(layout, tabValue);
208
+ }
209
+ }, [value, applyLayout, scrollActiveTabIntoView]);
210
+ const clearLayout = useCallback(tabValue => {
211
+ layoutsRef.current.delete(tabValue);
212
+ }, []);
213
+
214
+ // `useLayoutEffect` (not `useEffect`) — the web focus ring's CSS transition starts
215
+ // synchronously as part of the same commit that flips `data-focus-visible` on the newly
216
+ // selected tab. A deferred `useEffect` would schedule the indicator's `withTiming` glide a
217
+ // frame later than that, so the ring's own transition would finish first even though both
218
+ // share `TABS_INDICATOR_TRANSITION_MS` — running this synchronously keeps both starting in
219
+ // the same frame.
220
+ useLayoutEffect(() => {
221
+ if (value !== undefined) {
222
+ const layout = layoutsRef.current.get(value);
223
+ applyLayout(layout);
224
+ scrollActiveTabIntoView(layout, value);
225
+ }
226
+ }, [value, applyLayout, scrollActiveTabIntoView]);
227
+ const indicatorAnimatedStyle = useAnimatedStyle(() => ({
228
+ width: width.get(),
229
+ height: height.get(),
230
+ transform: [{
231
+ translateX: translateX.get()
232
+ }, {
233
+ translateY: translateY.get()
234
+ }]
235
+ }));
236
+ const isSolidHorizontalScroll = isHorizontalScroll && variant === 'solid';
237
+ const trackClassName = cn(tabsListTrackVariants({
238
+ orientation,
239
+ variant,
240
+ scrollable: isHorizontalScroll
241
+ }));
242
+ const trackStyle = variant === 'solid' && !isSolidHorizontalScroll ? orientation === 'vertical' ? tabsStyles.solidTrackVertical : tabsStyles.solidTrack : null;
243
+ const handleScrollViewLayout = useCallback(event => {
244
+ scrollViewWidthRef.current = event.nativeEvent.layout.width;
245
+ retryScrollActiveTabIntoView();
246
+ }, [retryScrollActiveTabIntoView]);
247
+ const handleScrollViewContentSizeChange = useCallback(contentWidth => {
248
+ scrollContentWidthRef.current = contentWidth;
249
+ retryScrollActiveTabIntoView();
250
+ }, [retryScrollActiveTabIntoView]);
251
+ const handleScrollViewScroll = useCallback(event => {
252
+ scrollXRef.current = event.nativeEvent.contentOffset.x;
253
+ }, []);
254
+ const listTrack = /*#__PURE__*/_jsxs(View, {
255
+ className: trackClassName,
256
+ style: trackStyle,
257
+ children: [variant === 'outline' ? /*#__PURE__*/_jsx(View, {
258
+ pointerEvents: "none",
259
+ className: cn(tabsOutlineTrackVariants({
260
+ orientation
261
+ }))
262
+ }) : null, /*#__PURE__*/_jsx(Animated.View, {
263
+ pointerEvents: "none",
264
+ className: cn(tabsIndicatorVariants({
265
+ orientation,
266
+ variant
267
+ })),
268
+ style: [variant === 'outline' ? [tabsStyles.outlineIndicator, orientation === 'vertical' ? tabsStyles.outlineIndicatorVertical : tabsStyles.outlineIndicatorHorizontal] : tabsStyles.solidIndicator, indicatorAnimatedStyle]
269
+ }), children]
270
+ });
271
+ const horizontalScrollView = /*#__PURE__*/_jsx(ScrollView, {
272
+ ref: scrollRef,
273
+ horizontal: true,
274
+ showsHorizontalScrollIndicator: showsHorizontalScrollIndicator,
275
+ keyboardShouldPersistTaps: "handled",
276
+ className: cn(tabsListScrollViewVariants()),
277
+ style: isHorizontalScroll ? tabsStyles.horizontalScrollViewBleed : null,
278
+ contentContainerStyle: isHorizontalScroll ? tabsStyles.horizontalScrollContent : undefined,
279
+ onLayout: handleScrollViewLayout,
280
+ onContentSizeChange: handleScrollViewContentSizeChange,
281
+ onScroll: handleScrollViewScroll,
282
+ scrollEventThrottle: 16,
283
+ children: listTrack
284
+ });
285
+ const wrapSolidScrollShell = scrollArea => isSolidHorizontalScroll ? /*#__PURE__*/_jsxs(View, {
286
+ className: cn(tabsListSolidShellVariants()),
287
+ style: tabsStyles.solidShell,
288
+ children: [/*#__PURE__*/_jsx(View, {
289
+ pointerEvents: "none",
290
+ className: cn(tabsListSolidShellBgVariants()),
291
+ style: tabsStyles.solidTrack
292
+ }), /*#__PURE__*/_jsx(View, {
293
+ className: "relative z-10 min-w-0",
294
+ children: scrollArea
295
+ })]
296
+ }) : scrollArea;
297
+ const renderSolidScrollChevron = (position, direction) => {
298
+ const canScroll = position === 'start' ? scrollCapability.canScrollBefore : scrollCapability.canScrollAfter;
299
+ if (!canScroll) {
300
+ return null;
301
+ }
302
+ const IconComponent = position === 'start' ? ChevronLeft : ChevronRight;
303
+ const label = position === 'start' ? 'Scroll tabs left' : 'Scroll tabs right';
304
+ return /*#__PURE__*/_jsx(View, {
305
+ pointerEvents: "box-none",
306
+ className: cn(tabsListSolidScrollButtonSlotVariants({
307
+ position
308
+ })),
309
+ children: /*#__PURE__*/_jsx(Pressable, {
310
+ accessibilityLabel: label,
311
+ accessibilityRole: "button",
312
+ className: cn(tabsListSolidScrollButtonVariants()),
313
+ tabIndex: -1,
314
+ onPress: () => scrollTabsByPage(direction),
315
+ children: /*#__PURE__*/_jsx(Icon, {
316
+ as: IconComponent,
317
+ className: "size-5 text-content-secondary"
318
+ })
319
+ })
320
+ });
321
+ };
322
+ const solidWebHorizontalScroll = /*#__PURE__*/_jsxs(View, {
323
+ className: "relative min-w-0 w-full",
324
+ children: [/*#__PURE__*/_jsx(ScrollShadow, {
325
+ hideScrollBar: true,
326
+ orientation: "horizontal",
327
+ size: TABS_SOLID_SCROLL_FADE_SIZE,
328
+ fadeFromClassName: "from-surface-secondary",
329
+ onCapabilityChange: setScrollCapability,
330
+ children: horizontalScrollView
331
+ }), renderSolidScrollChevron('start', -1), renderSolidScrollChevron('end', 1)]
332
+ });
333
+ const outlineWebHorizontalScroll = /*#__PURE__*/_jsxs(View, {
334
+ className: "w-full min-w-0 flex-row items-stretch",
335
+ children: [scrollCapability.canScrollBefore ? /*#__PURE__*/_jsx(Pressable, {
336
+ accessibilityLabel: "Scroll tabs left",
337
+ accessibilityRole: "button",
338
+ className: cn(tabsListScrollButtonVariants()),
339
+ tabIndex: -1,
340
+ onPress: () => scrollTabsByPage(-1),
341
+ children: /*#__PURE__*/_jsx(Icon, {
342
+ as: ChevronLeft,
343
+ className: "size-4 text-content-secondary"
344
+ })
345
+ }) : null, /*#__PURE__*/_jsx(View, {
346
+ className: "min-w-0 flex-1",
347
+ children: /*#__PURE__*/_jsx(ScrollShadow, {
348
+ hideScrollBar: true,
349
+ orientation: "horizontal",
350
+ size: TABS_SCROLL_FADE_SIZE,
351
+ fadeFromClassName: "from-background/85",
352
+ onCapabilityChange: setScrollCapability,
353
+ children: horizontalScrollView
354
+ })
355
+ }), scrollCapability.canScrollAfter ? /*#__PURE__*/_jsx(Pressable, {
356
+ accessibilityLabel: "Scroll tabs right",
357
+ accessibilityRole: "button",
358
+ className: cn(tabsListScrollButtonVariants()),
359
+ tabIndex: -1,
360
+ onPress: () => scrollTabsByPage(1),
361
+ children: /*#__PURE__*/_jsx(Icon, {
362
+ as: ChevronRight,
363
+ className: "size-4 text-content-secondary"
364
+ })
365
+ }) : null]
366
+ });
367
+ return /*#__PURE__*/_jsx(TabsIndicatorProvider, {
368
+ value: {
369
+ reportLayout,
370
+ clearLayout,
371
+ variant
372
+ },
373
+ children: /*#__PURE__*/_jsx(TabsListPrimitive, {
374
+ ref: ref,
375
+ asChild: asChild,
376
+ className: cn(tabsListVariants(), className),
377
+ style: style,
378
+ ...props,
379
+ ...mergeDataAttributes(props, dataAttributes({
380
+ slot: 'tabs-list'
381
+ })),
382
+ children: isWebHorizontalScroll ? /*#__PURE__*/_jsx(View, {
383
+ className: cn(tabsListScrollContainerVariants()),
384
+ children: wrapSolidScrollShell(isSolidHorizontalScroll ? solidWebHorizontalScroll : outlineWebHorizontalScroll)
385
+ }) : isHorizontalScroll ? wrapSolidScrollShell(horizontalScrollView) : listTrack
386
+ })
387
+ });
388
+ });
389
+ TabsList.displayName = 'Tabs.List';
390
+
391
+ // =============================================================================
392
+ // STYLED TAB
393
+ // =============================================================================
394
+
395
+ const TabsTab = /*#__PURE__*/forwardRef(({
396
+ asChild,
397
+ className,
398
+ style,
399
+ children,
400
+ value: tabValue,
401
+ onLayout,
402
+ ...props
403
+ }, ref) => {
404
+ const {
405
+ reportLayout,
406
+ clearLayout,
407
+ variant
408
+ } = useTabsIndicatorContext();
409
+ const {
410
+ orientation
411
+ } = useTabsContext();
412
+ useEffect(() => {
413
+ return () => clearLayout(tabValue);
414
+ }, [tabValue, clearLayout]);
415
+ const handleLayout = useCallback(e => {
416
+ onLayout?.(e);
417
+ const {
418
+ x,
419
+ y,
420
+ width,
421
+ height
422
+ } = e.nativeEvent.layout;
423
+ reportLayout(tabValue, {
424
+ x,
425
+ y,
426
+ width,
427
+ height
428
+ });
429
+ }, [onLayout, reportLayout, tabValue]);
430
+ return /*#__PURE__*/_jsx(TabPrimitive, {
431
+ ref: ref,
432
+ asChild: asChild,
433
+ value: tabValue,
434
+ className: cn(tabsTabVariants({
435
+ orientation,
436
+ variant
437
+ }), className),
438
+ style: variant === 'solid' ? state => StyleSheet.flatten([tabsStyles.solidTabPressable, typeof style === 'function' ? style(state) : style]) : style,
439
+ onLayout: handleLayout,
440
+ ...props,
441
+ ...mergeDataAttributes(props, dataAttributes({
442
+ slot: 'tabs-tab'
443
+ })),
444
+ children: children
445
+ });
446
+ });
447
+ TabsTab.displayName = 'Tabs.Tab';
448
+
449
+ // =============================================================================
450
+ // STYLED TAB LABEL (styled-only, reads tab context for selected state)
451
+ // =============================================================================
452
+
453
+ const TabsTabLabel = /*#__PURE__*/forwardRef(({
454
+ asChild,
455
+ className,
456
+ style,
457
+ children,
458
+ ...props
459
+ }, ref) => {
460
+ const {
461
+ selected
462
+ } = useTabContext();
463
+ const Comp = asChild ? Slot : Text;
464
+ return /*#__PURE__*/_jsx(Comp, {
465
+ ref: ref,
466
+ className: cn(tabsTabLabelVariants({
467
+ state: selected ? 'active' : 'inactive'
468
+ }), className),
469
+ style: style,
470
+ ...props,
471
+ ...mergeDataAttributes(props, dataAttributes({
472
+ slot: 'tabs-tab-label',
473
+ state: selected ? 'active' : 'inactive'
474
+ })),
475
+ children: children
476
+ });
477
+ });
478
+ TabsTabLabel.displayName = 'Tabs.TabLabel';
479
+
480
+ // =============================================================================
481
+ // STYLED PANEL
482
+ // =============================================================================
483
+
484
+ const TabsPanel = /*#__PURE__*/forwardRef(({
485
+ asChild,
486
+ className,
487
+ style,
488
+ children,
489
+ ...props
490
+ }, ref) => {
491
+ const {
492
+ orientation
493
+ } = useTabsContext();
494
+ return /*#__PURE__*/_jsx(TabPanelPrimitive, {
495
+ ref: ref,
496
+ asChild: asChild,
497
+ className: cn(tabsPanelVariants({
498
+ orientation
499
+ }), className),
500
+ style: style,
501
+ ...props,
502
+ ...mergeDataAttributes(props, dataAttributes({
503
+ slot: 'tabs-panel'
504
+ })),
505
+ children: children
506
+ });
507
+ });
508
+ TabsPanel.displayName = 'Tabs.Panel';
509
+
510
+ // =============================================================================
511
+ // COMPOUND COMPONENT
512
+ // =============================================================================
513
+
514
+ export const Tabs = Object.assign(TabsRoot, {
515
+ List: TabsList,
516
+ Tab: TabsTab,
517
+ TabLabel: TabsTabLabel,
518
+ Panel: TabsPanel
519
+ });
520
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","useCallback","useEffect","useLayoutEffect","useRef","useState","Platform","Pressable","ScrollView","StyleSheet","Text","View","Animated","useAnimatedStyle","useSharedValue","withTiming","ChevronLeft","ChevronRight","Tab","TabPrimitive","TabPanel","TabPanelPrimitive","TabsList","TabsListPrimitive","TabsRoot","TabsRootPrimitive","Slot","dataAttributes","mergeDataAttributes","useTabContext","useTabsContext","cn","createContext","Icon","ScrollShadow","tabsIndicatorVariants","tabsListSolidShellBgVariants","tabsListSolidShellVariants","tabsListSolidScrollButtonSlotVariants","tabsListSolidScrollButtonVariants","tabsListScrollButtonVariants","tabsListScrollContainerVariants","tabsListScrollViewVariants","tabsListTrackVariants","tabsListVariants","tabsOutlineTrackVariants","tabsPanelVariants","tabsRootVariants","tabsStyles","tabsTabLabelVariants","tabsTabVariants","TABS_INDICATOR_TRANSITION_MS","TABS_SOLID_SCROLL_FADE_SIZE","TABS_SCROLL_FADE_SIZE","OUTLINE_INDICATOR_THICKNESS","jsx","_jsx","jsxs","_jsxs","scrollXToRevealTab","layout","viewportWidth","currentScrollX","tabStart","x","tabEnd","width","viewEnd","clampScrollX","scrollX","contentWidth","maxScrollX","Math","max","min","TabsIndicatorProvider","useTabsIndicatorContext","TabsVariantProvider","useTabsVariantContext","className","style","children","variant","orientation","props","ref","value","slot","displayName","asChild","scrollable","showsHorizontalScrollIndicator","getTabs","isHorizontalScroll","isWebHorizontalScroll","OS","shouldAutoScrollActiveTab","layoutsRef","Map","hasMeasuredRef","scrollRef","scrollViewWidthRef","scrollContentWidthRef","scrollXRef","scrollCapability","setScrollCapability","canScrollBefore","canScrollAfter","translateX","translateY","height","scrollActiveTabIntoView","activeTabValue","current","undefined","nextScrollX","tabOrder","map","tabValue","activeIndex","indexOf","length","nextLayout","get","nextTabEnd","prevLayout","scrollTo","animated","retryScrollActiveTabIntoView","scrollTabsByPage","direction","applyLayout","nextX","nextY","y","nextW","nextH","config","duration","set","reportLayout","clearLayout","delete","indicatorAnimatedStyle","transform","isSolidHorizontalScroll","trackClassName","trackStyle","solidTrackVertical","solidTrack","handleScrollViewLayout","event","nativeEvent","handleScrollViewContentSizeChange","handleScrollViewScroll","contentOffset","listTrack","pointerEvents","outlineIndicator","outlineIndicatorVertical","outlineIndicatorHorizontal","solidIndicator","horizontalScrollView","horizontal","keyboardShouldPersistTaps","horizontalScrollViewBleed","contentContainerStyle","horizontalScrollContent","onLayout","onContentSizeChange","onScroll","scrollEventThrottle","wrapSolidScrollShell","scrollArea","solidShell","renderSolidScrollChevron","position","canScroll","IconComponent","label","accessibilityLabel","accessibilityRole","tabIndex","onPress","as","solidWebHorizontalScroll","hideScrollBar","size","fadeFromClassName","onCapabilityChange","outlineWebHorizontalScroll","TabsTab","handleLayout","e","state","flatten","solidTabPressable","TabsTabLabel","selected","Comp","TabsPanel","Tabs","Object","assign","List","TabLabel","Panel"],"sourceRoot":"../../../../src","sources":["components/Tabs/index.tsx"],"mappings":"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","ignoreList":[]}