@cdx-ui/components 0.0.1-alpha.20 → 0.0.1-alpha.22

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 (50) hide show
  1. package/lib/commonjs/components/BottomSheet/index.js +248 -0
  2. package/lib/commonjs/components/BottomSheet/index.js.map +1 -0
  3. package/lib/commonjs/components/BottomSheet/styles.js +61 -0
  4. package/lib/commonjs/components/BottomSheet/styles.js.map +1 -0
  5. package/lib/commonjs/components/Link/index.js +58 -2
  6. package/lib/commonjs/components/Link/index.js.map +1 -1
  7. package/lib/commonjs/components/Link/styles.js +4 -2
  8. package/lib/commonjs/components/Link/styles.js.map +1 -1
  9. package/lib/commonjs/components/ProgressSegmented/index.js +62 -0
  10. package/lib/commonjs/components/ProgressSegmented/index.js.map +1 -0
  11. package/lib/commonjs/components/ProgressSegmented/styles.js +21 -0
  12. package/lib/commonjs/components/ProgressSegmented/styles.js.map +1 -0
  13. package/lib/commonjs/components/index.js +24 -0
  14. package/lib/commonjs/components/index.js.map +1 -1
  15. package/lib/module/components/BottomSheet/index.js +242 -0
  16. package/lib/module/components/BottomSheet/index.js.map +1 -0
  17. package/lib/module/components/BottomSheet/styles.js +58 -0
  18. package/lib/module/components/BottomSheet/styles.js.map +1 -0
  19. package/lib/module/components/Link/index.js +60 -4
  20. package/lib/module/components/Link/index.js.map +1 -1
  21. package/lib/module/components/Link/styles.js +4 -2
  22. package/lib/module/components/Link/styles.js.map +1 -1
  23. package/lib/module/components/ProgressSegmented/index.js +58 -0
  24. package/lib/module/components/ProgressSegmented/index.js.map +1 -0
  25. package/lib/module/components/ProgressSegmented/styles.js +17 -0
  26. package/lib/module/components/ProgressSegmented/styles.js.map +1 -0
  27. package/lib/module/components/index.js +2 -0
  28. package/lib/module/components/index.js.map +1 -1
  29. package/lib/typescript/components/BottomSheet/index.d.ts +61 -0
  30. package/lib/typescript/components/BottomSheet/index.d.ts.map +1 -0
  31. package/lib/typescript/components/BottomSheet/styles.d.ts +16 -0
  32. package/lib/typescript/components/BottomSheet/styles.d.ts.map +1 -0
  33. package/lib/typescript/components/Link/index.d.ts +20 -2
  34. package/lib/typescript/components/Link/index.d.ts.map +1 -1
  35. package/lib/typescript/components/Link/styles.d.ts +2 -0
  36. package/lib/typescript/components/Link/styles.d.ts.map +1 -1
  37. package/lib/typescript/components/ProgressSegmented/index.d.ts +15 -0
  38. package/lib/typescript/components/ProgressSegmented/index.d.ts.map +1 -0
  39. package/lib/typescript/components/ProgressSegmented/styles.d.ts +8 -0
  40. package/lib/typescript/components/ProgressSegmented/styles.d.ts.map +1 -0
  41. package/lib/typescript/components/index.d.ts +2 -0
  42. package/lib/typescript/components/index.d.ts.map +1 -1
  43. package/package.json +5 -4
  44. package/src/components/BottomSheet/index.tsx +316 -0
  45. package/src/components/BottomSheet/styles.ts +79 -0
  46. package/src/components/Link/index.tsx +61 -5
  47. package/src/components/Link/styles.ts +7 -3
  48. package/src/components/ProgressSegmented/index.tsx +81 -0
  49. package/src/components/ProgressSegmented/styles.ts +19 -0
  50. package/src/components/index.ts +2 -0
@@ -0,0 +1,81 @@
1
+ import { forwardRef, useMemo } from 'react';
2
+ import { View, type ViewProps } from 'react-native';
3
+ import { cn } from '@cdx-ui/utils';
4
+ import {
5
+ progressSegmentedVariants,
6
+ segmentVariants,
7
+ type ProgressSegmentedVariants,
8
+ } from './styles';
9
+
10
+ export interface ProgressSegmentedProps extends ViewProps, ProgressSegmentedVariants {
11
+ /** Current step (1-based index into the segment count) */
12
+ readonly step: number;
13
+ /** Total number of segments */
14
+ readonly total?: number;
15
+ /** When true, the current step segment is marked as complete rather than in-progress */
16
+ readonly isStepComplete?: boolean;
17
+ /** Returns the accessibility value text announced by screen readers. Receives the clamped step, total, and whether the step is complete. */
18
+ readonly getAccessibilityText?: (step: number, total: number, isStepComplete: boolean) => string;
19
+ readonly className?: string;
20
+ }
21
+
22
+ export const ProgressSegmented = forwardRef<View, ProgressSegmentedProps>(
23
+ (
24
+ {
25
+ step,
26
+ total = 5,
27
+ isStepComplete = false,
28
+ getAccessibilityText,
29
+ className,
30
+ accessibilityLabel = 'Progress',
31
+ ...props
32
+ },
33
+ ref,
34
+ ) => {
35
+ const clampedStep = Math.max(0, Math.min(step, total));
36
+
37
+ const segments = useMemo(() => {
38
+ return Array.from({ length: total }, (_, index) => {
39
+ const segmentIndex = index + 1;
40
+ let state: 'complete' | 'incomplete' | 'inprogress' = 'incomplete';
41
+
42
+ if (segmentIndex < clampedStep || (isStepComplete && segmentIndex === clampedStep)) {
43
+ state = 'complete';
44
+ } else if (segmentIndex === clampedStep) {
45
+ state = 'inprogress';
46
+ }
47
+
48
+ return state;
49
+ });
50
+ }, [total, clampedStep, isStepComplete]);
51
+
52
+ let accessibilityText = `Step ${String(clampedStep)} of ${String(total)}`;
53
+ if (getAccessibilityText) {
54
+ accessibilityText = getAccessibilityText(clampedStep, total, isStepComplete);
55
+ } else if (isStepComplete) {
56
+ accessibilityText = `Step ${String(clampedStep)} of ${String(total)}, completed`;
57
+ }
58
+
59
+ return (
60
+ <View
61
+ ref={ref}
62
+ accessibilityRole="progressbar"
63
+ accessibilityLabel={accessibilityLabel}
64
+ accessibilityValue={{
65
+ min: 0,
66
+ max: total,
67
+ now: clampedStep,
68
+ text: accessibilityText,
69
+ }}
70
+ className={cn(progressSegmentedVariants(), className)}
71
+ {...props}
72
+ >
73
+ {segments.map((state, index) => (
74
+ <View key={index} className={cn(segmentVariants({ state }))} />
75
+ ))}
76
+ </View>
77
+ );
78
+ },
79
+ );
80
+
81
+ ProgressSegmented.displayName = 'ProgressSegmented';
@@ -0,0 +1,19 @@
1
+ import { cva, type VariantProps } from 'class-variance-authority';
2
+
3
+ export const progressSegmentedVariants = cva(['flex-row gap-1 w-full']);
4
+
5
+ export const segmentVariants = cva(['flex-1 h-2 rounded'], {
6
+ variants: {
7
+ state: {
8
+ complete: 'bg-slate-900',
9
+ incomplete: 'bg-slate-300',
10
+ inprogress: 'bg-gradient-to-r from-slate-900 from-50% to-slate-300 to-50%',
11
+ },
12
+ },
13
+ defaultVariants: {
14
+ state: 'incomplete',
15
+ },
16
+ });
17
+
18
+ export type ProgressSegmentedVariants = VariantProps<typeof progressSegmentedVariants>;
19
+ export type SegmentVariants = VariantProps<typeof segmentVariants>;
@@ -1,4 +1,5 @@
1
1
  export * from './Avatar';
2
+ export * from './BottomSheet';
2
3
  export * from './Box';
3
4
  export * from './Button';
4
5
  export * from './Chip';
@@ -6,6 +7,7 @@ export * from './Card';
6
7
  export * from './Checkbox';
7
8
  export * from './Input';
8
9
  export * from './Link';
10
+ export * from './ProgressSegmented';
9
11
  export * from './Select';
10
12
  export * from './VirtualizedList';
11
13
  export * from './Switch';