@idealyst/components 1.0.0

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 (112) hide show
  1. package/README.md +568 -0
  2. package/package.json +107 -0
  3. package/plugin/web.js +186 -0
  4. package/src/Avatar/Avatar.native.tsx +44 -0
  5. package/src/Avatar/Avatar.styles.tsx +67 -0
  6. package/src/Avatar/Avatar.web.tsx +51 -0
  7. package/src/Avatar/index.native.ts +2 -0
  8. package/src/Avatar/index.ts +2 -0
  9. package/src/Avatar/index.web.ts +2 -0
  10. package/src/Avatar/types.ts +43 -0
  11. package/src/Badge/Badge.native.tsx +43 -0
  12. package/src/Badge/Badge.styles.tsx +154 -0
  13. package/src/Badge/Badge.web.tsx +45 -0
  14. package/src/Badge/index.native.ts +2 -0
  15. package/src/Badge/index.ts +2 -0
  16. package/src/Badge/index.web.ts +2 -0
  17. package/src/Badge/types.ts +34 -0
  18. package/src/Button/Button.native.tsx +39 -0
  19. package/src/Button/Button.styles.tsx +215 -0
  20. package/src/Button/Button.types.ts +12 -0
  21. package/src/Button/Button.web.tsx +56 -0
  22. package/src/Button/index.native.ts +3 -0
  23. package/src/Button/index.ts +5 -0
  24. package/src/Button/index.web.ts +3 -0
  25. package/src/Button/types.ts +49 -0
  26. package/src/Card/Card.native.tsx +52 -0
  27. package/src/Card/Card.styles.tsx +240 -0
  28. package/src/Card/Card.web.tsx +62 -0
  29. package/src/Card/index.native.ts +3 -0
  30. package/src/Card/index.ts +5 -0
  31. package/src/Card/index.web.ts +3 -0
  32. package/src/Card/types.ts +59 -0
  33. package/src/Checkbox/Checkbox.native.tsx +99 -0
  34. package/src/Checkbox/Checkbox.styles.tsx +292 -0
  35. package/src/Checkbox/Checkbox.web.tsx +131 -0
  36. package/src/Checkbox/index.native.ts +3 -0
  37. package/src/Checkbox/index.ts +5 -0
  38. package/src/Checkbox/index.web.ts +3 -0
  39. package/src/Checkbox/types.ts +79 -0
  40. package/src/Divider/Divider.native.tsx +145 -0
  41. package/src/Divider/Divider.styles.tsx +602 -0
  42. package/src/Divider/Divider.web.tsx +73 -0
  43. package/src/Divider/index.native.ts +3 -0
  44. package/src/Divider/index.ts +5 -0
  45. package/src/Divider/index.web.ts +3 -0
  46. package/src/Divider/types.ts +54 -0
  47. package/src/Icon/Icon.native.tsx +39 -0
  48. package/src/Icon/Icon.styles.tsx +50 -0
  49. package/src/Icon/Icon.web.tsx +47 -0
  50. package/src/Icon/icon-types.ts +7452 -0
  51. package/src/Icon/index.native.ts +3 -0
  52. package/src/Icon/index.ts +5 -0
  53. package/src/Icon/index.web.ts +3 -0
  54. package/src/Icon/types.ts +36 -0
  55. package/src/Input/Input.native.tsx +75 -0
  56. package/src/Input/Input.styles.tsx +177 -0
  57. package/src/Input/Input.web.tsx +71 -0
  58. package/src/Input/index.native.ts +3 -0
  59. package/src/Input/index.ts +5 -0
  60. package/src/Input/index.web.ts +3 -0
  61. package/src/Input/types.ts +69 -0
  62. package/src/Screen/Screen.native.tsx +41 -0
  63. package/src/Screen/Screen.styles.tsx +60 -0
  64. package/src/Screen/Screen.web.tsx +33 -0
  65. package/src/Screen/index.native.ts +2 -0
  66. package/src/Screen/index.ts +2 -0
  67. package/src/Screen/index.web.ts +2 -0
  68. package/src/Screen/types.ts +38 -0
  69. package/src/Text/Text.native.tsx +36 -0
  70. package/src/Text/Text.styles.tsx +67 -0
  71. package/src/Text/Text.web.tsx +41 -0
  72. package/src/Text/index.native.ts +3 -0
  73. package/src/Text/index.ts +5 -0
  74. package/src/Text/index.web.ts +3 -0
  75. package/src/Text/types.ts +39 -0
  76. package/src/View/View.native.tsx +56 -0
  77. package/src/View/View.styles.tsx +103 -0
  78. package/src/View/View.web.tsx +60 -0
  79. package/src/View/index.native.ts +3 -0
  80. package/src/View/index.ts +5 -0
  81. package/src/View/index.web.ts +3 -0
  82. package/src/View/types.ts +73 -0
  83. package/src/examples/AllExamples.tsx +72 -0
  84. package/src/examples/AvatarExamples.tsx +97 -0
  85. package/src/examples/BadgeExamples.tsx +200 -0
  86. package/src/examples/ButtonExamples.tsx +150 -0
  87. package/src/examples/CardExamples.tsx +176 -0
  88. package/src/examples/CheckboxExamples.tsx +217 -0
  89. package/src/examples/DividerExamples.tsx +218 -0
  90. package/src/examples/IconExamples.tsx +342 -0
  91. package/src/examples/InputExamples.tsx +134 -0
  92. package/src/examples/README.md +136 -0
  93. package/src/examples/ScreenExamples.tsx +154 -0
  94. package/src/examples/TextExamples.tsx +89 -0
  95. package/src/examples/ThemeExtensionExamples.tsx +91 -0
  96. package/src/examples/ValidationExamples.tsx +95 -0
  97. package/src/examples/ViewExamples.tsx +129 -0
  98. package/src/examples/extendedTheme.ts +331 -0
  99. package/src/examples/index.ts +15 -0
  100. package/src/index.native.ts +52 -0
  101. package/src/index.ts +48 -0
  102. package/src/theme/breakpoints.ts +8 -0
  103. package/src/theme/colorResolver.ts +218 -0
  104. package/src/theme/colors.ts +315 -0
  105. package/src/theme/defaultThemes.ts +326 -0
  106. package/src/theme/index.ts +188 -0
  107. package/src/theme/themeBuilder.ts +602 -0
  108. package/src/theme/unistyles.d.ts +6 -0
  109. package/src/theme/variantHelpers.ts +584 -0
  110. package/src/theme/variants.ts +56 -0
  111. package/src/unistyles.d.ts +108 -0
  112. package/src/unistyles.ts +43 -0
@@ -0,0 +1,79 @@
1
+ import { ReactNode } from 'react';
2
+ import type { IntentVariant } from '../theme/variants';
3
+
4
+ export interface CheckboxProps {
5
+ /**
6
+ * Whether the checkbox is checked
7
+ */
8
+ checked?: boolean;
9
+
10
+ /**
11
+ * Whether the checkbox is in an indeterminate state
12
+ */
13
+ indeterminate?: boolean;
14
+
15
+ /**
16
+ * Whether the checkbox is disabled
17
+ */
18
+ disabled?: boolean;
19
+
20
+ /**
21
+ * Called when the checkbox state changes
22
+ */
23
+ onCheckedChange?: (checked: boolean) => void;
24
+
25
+ /**
26
+ * The size of the checkbox
27
+ */
28
+ size?: 'small' | 'medium' | 'large';
29
+
30
+ /**
31
+ * The intent/color scheme of the checkbox
32
+ */
33
+ intent?: IntentVariant;
34
+
35
+ /**
36
+ * The visual style variant of the checkbox
37
+ */
38
+ variant?: 'default' | 'outlined';
39
+
40
+ /**
41
+ * Label text to display next to the checkbox
42
+ */
43
+ label?: string;
44
+
45
+ /**
46
+ * Custom label content (ReactNode)
47
+ */
48
+ children?: ReactNode;
49
+
50
+ /**
51
+ * Additional styles (platform-specific)
52
+ */
53
+ style?: any;
54
+
55
+ /**
56
+ * Test ID for testing
57
+ */
58
+ testID?: string;
59
+
60
+ /**
61
+ * Accessibility label
62
+ */
63
+ accessibilityLabel?: string;
64
+
65
+ /**
66
+ * Whether the checkbox is required
67
+ */
68
+ required?: boolean;
69
+
70
+ /**
71
+ * Error message to display
72
+ */
73
+ error?: string;
74
+
75
+ /**
76
+ * Helper text to display
77
+ */
78
+ helperText?: string;
79
+ }
@@ -0,0 +1,145 @@
1
+ import React from 'react';
2
+ import { View, Text } from 'react-native';
3
+ import { DividerProps } from './types';
4
+ import { dividerStyles } from './Divider.styles';
5
+
6
+ const Divider: React.FC<DividerProps> = ({
7
+ orientation = 'horizontal',
8
+ variant = 'solid',
9
+ thickness = 'thin',
10
+ intent = 'neutral',
11
+ length = 'full',
12
+ spacing = 'medium',
13
+ children,
14
+ style,
15
+ testID,
16
+ accessibilityLabel,
17
+ }) => {
18
+ // Apply variants for main divider
19
+ dividerStyles.useVariants({
20
+ orientation,
21
+ thickness,
22
+ variant: variant as any,
23
+ intent,
24
+ length: typeof length === 'number' ? 'auto' : length,
25
+ spacing,
26
+ });
27
+
28
+ // Get the current styles for color and dimensions
29
+ const dividerStyle = dividerStyles.divider;
30
+
31
+ // Get thickness value
32
+ const getThickness = () => {
33
+ switch (thickness) {
34
+ case 'thin': return 1;
35
+ case 'medium': return 2;
36
+ case 'thick': return 4;
37
+ default: return 1;
38
+ }
39
+ };
40
+
41
+ // For dashed/dotted variants, use border instead of background
42
+ const getDashedStyle = () => {
43
+ if (variant === 'dashed' || variant === 'dotted') {
44
+ const actualThickness = getThickness();
45
+
46
+ return {
47
+ backgroundColor: 'transparent',
48
+ borderStyle: variant,
49
+ borderColor: dividerStyle.backgroundColor,
50
+ ...(orientation === 'horizontal' ? {
51
+ borderTopWidth: actualThickness,
52
+ borderBottomWidth: 0,
53
+ borderLeftWidth: 0,
54
+ borderRightWidth: 0,
55
+ width: '100%',
56
+ height: actualThickness,
57
+ } : {
58
+ borderLeftWidth: actualThickness,
59
+ borderTopWidth: 0,
60
+ borderBottomWidth: 0,
61
+ borderRightWidth: 0,
62
+ height: '100%',
63
+ width: actualThickness,
64
+ }),
65
+ };
66
+ }
67
+ return {};
68
+ };
69
+
70
+ // If no children, render simple divider
71
+ if (!children) {
72
+ if (variant === 'dashed' || variant === 'dotted') {
73
+ return (
74
+ <View
75
+ style={[
76
+ dividerStyle,
77
+ getDashedStyle(),
78
+ style,
79
+ ]}
80
+ testID={testID}
81
+ accessibilityLabel={accessibilityLabel || "divider"}
82
+ />
83
+ );
84
+ }
85
+
86
+ return (
87
+ <View
88
+ style={[dividerStyles.divider, style]}
89
+ testID={testID}
90
+ accessibilityLabel={accessibilityLabel || "divider"}
91
+ />
92
+ );
93
+ }
94
+
95
+ // For lines with content, create a simple dashed line
96
+ const renderLineSegment = () => {
97
+ if (variant === 'dashed' || variant === 'dotted') {
98
+ const actualThickness = getThickness();
99
+
100
+ return (
101
+ <View
102
+ style={[
103
+ dividerStyles.line,
104
+ {
105
+ backgroundColor: 'transparent',
106
+ borderStyle: variant,
107
+ borderColor: dividerStyles.line.backgroundColor,
108
+ ...(orientation === 'horizontal' ? {
109
+ borderTopWidth: actualThickness,
110
+ borderBottomWidth: 0,
111
+ borderLeftWidth: 0,
112
+ borderRightWidth: 0,
113
+ height: actualThickness,
114
+ } : {
115
+ borderLeftWidth: actualThickness,
116
+ borderTopWidth: 0,
117
+ borderBottomWidth: 0,
118
+ borderRightWidth: 0,
119
+ width: actualThickness,
120
+ }),
121
+ },
122
+ ]}
123
+ />
124
+ );
125
+ }
126
+
127
+ return <View style={dividerStyles.line} />;
128
+ };
129
+
130
+ return (
131
+ <View
132
+ style={dividerStyles.container}
133
+ testID={testID}
134
+ accessibilityLabel={accessibilityLabel || "divider with content"}
135
+ >
136
+ {renderLineSegment()}
137
+ <Text style={dividerStyles.content}>
138
+ {children}
139
+ </Text>
140
+ {renderLineSegment()}
141
+ </View>
142
+ );
143
+ };
144
+
145
+ export default Divider;