@idealyst/components 1.1.7 → 1.1.9

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 (129) hide show
  1. package/package.json +3 -3
  2. package/plugin/web.js +280 -532
  3. package/src/Accordion/Accordion.native.tsx +8 -6
  4. package/src/Accordion/Accordion.styles.old.tsx +298 -0
  5. package/src/Accordion/Accordion.styles.tsx +102 -236
  6. package/src/Accordion/Accordion.web.tsx +1 -3
  7. package/src/ActivityIndicator/ActivityIndicator.styles.old.tsx +94 -0
  8. package/src/ActivityIndicator/ActivityIndicator.styles.tsx +44 -74
  9. package/src/Alert/Alert.native.tsx +16 -6
  10. package/src/Alert/Alert.styles.old.tsx +209 -0
  11. package/src/Alert/Alert.styles.tsx +67 -149
  12. package/src/Alert/Alert.web.tsx +3 -4
  13. package/src/Avatar/Avatar.styles.old.tsx +99 -0
  14. package/src/Avatar/Avatar.styles.tsx +35 -80
  15. package/src/Badge/Badge.styles.old.tsx +157 -0
  16. package/src/Badge/Badge.styles.tsx +61 -121
  17. package/src/Badge/Badge.web.tsx +8 -15
  18. package/src/Breadcrumb/Breadcrumb.styles.old.tsx +231 -0
  19. package/src/Breadcrumb/Breadcrumb.styles.tsx +83 -200
  20. package/src/Breadcrumb/Breadcrumb.web.tsx +31 -30
  21. package/src/Button/Button.native.tsx +14 -21
  22. package/src/Button/Button.styles.tsx +103 -140
  23. package/src/Button/Button.web.tsx +9 -19
  24. package/src/Card/Card.native.tsx +7 -11
  25. package/src/Card/Card.styles.old.tsx +160 -0
  26. package/src/Card/Card.styles.tsx +105 -142
  27. package/src/Card/Card.web.tsx +5 -4
  28. package/src/Checkbox/Checkbox.native.tsx +9 -5
  29. package/src/Checkbox/Checkbox.styles.old.tsx +271 -0
  30. package/src/Checkbox/Checkbox.styles.tsx +104 -216
  31. package/src/Checkbox/Checkbox.web.tsx +7 -8
  32. package/src/Chip/Chip.styles.old.tsx +184 -0
  33. package/src/Chip/Chip.styles.tsx +34 -72
  34. package/src/Chip/Chip.web.tsx +3 -5
  35. package/src/Dialog/Dialog.native.tsx +7 -4
  36. package/src/Dialog/Dialog.styles.old.tsx +202 -0
  37. package/src/Dialog/Dialog.styles.tsx +69 -133
  38. package/src/Dialog/Dialog.web.tsx +3 -3
  39. package/src/Dialog/types.ts +1 -1
  40. package/src/Divider/Divider.styles.old.tsx +172 -0
  41. package/src/Divider/Divider.styles.tsx +62 -84
  42. package/src/Icon/Icon.native.tsx +8 -8
  43. package/src/Icon/Icon.styles.old.tsx +81 -0
  44. package/src/Icon/Icon.styles.tsx +52 -66
  45. package/src/Icon/Icon.web.tsx +62 -21
  46. package/src/Icon/IconRegistry.native.ts +41 -0
  47. package/src/Icon/IconRegistry.ts +107 -0
  48. package/src/Icon/IconSvg/IconSvg.web.tsx +28 -5
  49. package/src/Icon/icon-resolver.ts +12 -43
  50. package/src/Icon/index.native.ts +2 -1
  51. package/src/Icon/index.ts +1 -0
  52. package/src/Icon/index.web.ts +1 -0
  53. package/src/Image/Image.styles.old.tsx +69 -0
  54. package/src/Image/Image.styles.tsx +46 -60
  55. package/src/Input/Input.native.tsx +138 -53
  56. package/src/Input/Input.styles.old.tsx +289 -0
  57. package/src/Input/Input.styles.tsx +134 -232
  58. package/src/Input/Input.web.tsx +5 -8
  59. package/src/List/List.native.tsx +5 -2
  60. package/src/List/List.styles.old.tsx +242 -0
  61. package/src/List/List.styles.tsx +179 -215
  62. package/src/List/ListItem.native.tsx +16 -11
  63. package/src/List/ListItem.web.tsx +26 -16
  64. package/src/Menu/Menu.styles.old.tsx +197 -0
  65. package/src/Menu/Menu.styles.tsx +68 -150
  66. package/src/Menu/MenuItem.native.tsx +5 -3
  67. package/src/Menu/MenuItem.styles.old.tsx +114 -0
  68. package/src/Menu/MenuItem.styles.tsx +57 -89
  69. package/src/Menu/MenuItem.web.tsx +10 -7
  70. package/src/Popover/Popover.native.tsx +10 -4
  71. package/src/Popover/Popover.styles.old.tsx +135 -0
  72. package/src/Popover/Popover.styles.tsx +51 -112
  73. package/src/Pressable/Pressable.styles.old.tsx +27 -0
  74. package/src/Pressable/Pressable.styles.tsx +35 -27
  75. package/src/Progress/Progress.styles.old.tsx +200 -0
  76. package/src/Progress/Progress.styles.tsx +75 -164
  77. package/src/RadioButton/RadioButton.native.tsx +4 -3
  78. package/src/RadioButton/RadioButton.styles.old.tsx +175 -0
  79. package/src/RadioButton/RadioButton.styles.tsx +83 -154
  80. package/src/RadioButton/RadioButton.web.tsx +2 -2
  81. package/src/SVGImage/SVGImage.styles.old.tsx +86 -0
  82. package/src/SVGImage/SVGImage.styles.tsx +35 -78
  83. package/src/Screen/Screen.native.tsx +19 -26
  84. package/src/Screen/Screen.styles.old.tsx +87 -0
  85. package/src/Screen/Screen.styles.tsx +103 -68
  86. package/src/Screen/Screen.web.tsx +2 -2
  87. package/src/Select/Select.native.tsx +42 -33
  88. package/src/Select/Select.styles.old.tsx +353 -0
  89. package/src/Select/Select.styles.tsx +214 -300
  90. package/src/Select/Select.web.tsx +45 -33
  91. package/src/Skeleton/Skeleton.styles.old.tsx +67 -0
  92. package/src/Skeleton/Skeleton.styles.tsx +29 -53
  93. package/src/Slider/Slider.styles.old.tsx +259 -0
  94. package/src/Slider/Slider.styles.tsx +153 -234
  95. package/src/Slider/Slider.web.tsx +2 -4
  96. package/src/Switch/Switch.native.tsx +9 -7
  97. package/src/Switch/Switch.styles.old.tsx +203 -0
  98. package/src/Switch/Switch.styles.tsx +101 -174
  99. package/src/Switch/Switch.web.tsx +7 -8
  100. package/src/TabBar/TabBar.native.tsx +3 -2
  101. package/src/TabBar/TabBar.styles.old.tsx +343 -0
  102. package/src/TabBar/TabBar.styles.tsx +145 -279
  103. package/src/Table/Table.native.tsx +180 -68
  104. package/src/Table/Table.styles.old.tsx +311 -0
  105. package/src/Table/Table.styles.tsx +140 -281
  106. package/src/Table/Table.web.tsx +169 -70
  107. package/src/Text/Text.native.tsx +1 -3
  108. package/src/Text/Text.style.demo.tsx +16 -0
  109. package/src/Text/Text.styles.old.tsx +219 -0
  110. package/src/Text/Text.styles.tsx +94 -84
  111. package/src/Text/Text.web.tsx +3 -2
  112. package/src/Text/index.ts +1 -0
  113. package/src/TextArea/TextArea.native.tsx +21 -8
  114. package/src/TextArea/TextArea.styles.old.tsx +213 -0
  115. package/src/TextArea/TextArea.styles.tsx +87 -187
  116. package/src/TextArea/TextArea.web.tsx +17 -6
  117. package/src/Tooltip/Tooltip.styles.old.tsx +82 -0
  118. package/src/Tooltip/Tooltip.styles.tsx +32 -56
  119. package/src/Video/Video.styles.old.tsx +51 -0
  120. package/src/Video/Video.styles.tsx +32 -44
  121. package/src/View/View.native.tsx +41 -13
  122. package/src/View/View.styles.old.tsx +125 -0
  123. package/src/View/View.styles.tsx +76 -106
  124. package/src/View/View.web.tsx +5 -21
  125. package/src/View/types.ts +31 -3
  126. package/src/examples/ButtonExamples.tsx +20 -0
  127. package/src/examples/CardExamples.tsx +0 -6
  128. package/src/extensions/extendComponent.ts +61 -0
  129. package/src/index.ts +1 -1
@@ -1,317 +1,176 @@
1
+ /**
2
+ * Table styles using defineStyle with dynamic props.
3
+ */
1
4
  import { StyleSheet } from 'react-native-unistyles';
2
- import { Theme, StylesheetStyles, CompoundVariants, Size } from '@idealyst/theme';
3
- import { buildSizeVariants } from '../utils/buildSizeVariants';
4
- import {
5
- buildGapVariants,
6
- buildPaddingVariants,
7
- buildPaddingVerticalVariants,
8
- buildPaddingHorizontalVariants,
9
- buildMarginVariants,
10
- buildMarginVerticalVariants,
11
- buildMarginHorizontalVariants,
12
- } from '../utils/buildViewStyleVariants';
13
- import { applyExtensions } from '../extensions/applyExtension';
14
-
15
- type TableType = 'default' | 'bordered' | 'striped';
5
+ import { defineStyle, ThemeStyleWrapper } from '@idealyst/theme';
6
+ import type { Theme as BaseTheme, Size } from '@idealyst/theme';
7
+ import { ViewStyleSize } from '../utils/viewStyleProps';
8
+
9
+ // Required: Unistyles must see StyleSheet usage in original source to process this file
10
+ void StyleSheet;
11
+
12
+ // Wrap theme for $iterator support
13
+ type Theme = ThemeStyleWrapper<BaseTheme>;
14
+
15
+ type TableType = 'standard' | 'bordered' | 'striped';
16
+ type CellAlign = 'left' | 'center' | 'right';
17
+
18
+ export type TableDynamicProps = {
19
+ size?: Size;
20
+ type?: TableType;
21
+ clickable?: boolean;
22
+ sticky?: boolean;
23
+ align?: CellAlign;
24
+ gap?: ViewStyleSize;
25
+ padding?: ViewStyleSize;
26
+ paddingVertical?: ViewStyleSize;
27
+ paddingHorizontal?: ViewStyleSize;
28
+ margin?: ViewStyleSize;
29
+ marginVertical?: ViewStyleSize;
30
+ marginHorizontal?: ViewStyleSize;
31
+ };
16
32
 
17
- type TableRowVariants = {
18
- type: TableType;
19
- clickable: boolean;
20
- }
21
33
  /**
22
- * Create type variants for container
34
+ * Table styles with type/size handling.
23
35
  */
24
- function createContainerTypeVariants(theme: Theme) {
25
- return {
26
- standard: {
27
- borderWidth: 1,
28
- borderStyle: 'solid',
29
- borderColor: theme.colors.border.primary,
30
- borderRadius: 8,
31
- overflow: 'hidden',
32
- _web: {
33
- border: `1px solid ${theme.colors.border.primary}`,
36
+ export const tableStyles = defineStyle('Table', (theme: Theme) => ({
37
+ container: ({ type = 'standard' }: TableDynamicProps) => ({
38
+ width: '100%',
39
+ borderWidth: 1,
40
+ borderStyle: 'solid' as const,
41
+ borderColor: theme.colors.border.primary,
42
+ borderRadius: 8,
43
+ overflow: 'hidden' as const,
44
+ variants: {
45
+ gap: {
46
+ gap: theme.sizes.$view.padding,
34
47
  },
35
- },
36
- bordered: {
37
- borderWidth: 1,
38
- borderStyle: 'solid',
39
- borderColor: theme.colors.border.primary,
40
- borderRadius: 8,
41
- overflow: 'hidden',
42
- _web: {
43
- border: `1px solid ${theme.colors.border.primary}`,
48
+ padding: {
49
+ padding: theme.sizes.$view.padding,
44
50
  },
45
- },
46
- striped: {
47
- borderWidth: 1,
48
- borderStyle: 'solid',
49
- borderColor: theme.colors.border.primary,
50
- borderRadius: 8,
51
- overflow: 'hidden',
52
- _web: {
53
- border: `1px solid ${theme.colors.border.primary}`,
51
+ paddingVertical: {
52
+ paddingVertical: theme.sizes.$view.padding,
54
53
  },
55
- },
56
- } as const;
57
- }
58
-
59
- /**
60
- * Create type variants for row
61
- */
62
- function createRowTypeVariants(theme: Theme) {
63
- return {
64
- standard: {},
65
- bordered: {
66
- borderBottomWidth: 1,
67
- borderBottomStyle: 'solid',
68
- borderBottomColor: theme.colors.border.primary,
69
- _web: {
70
- borderBottom: `1px solid ${theme.colors.border.primary}`,
54
+ paddingHorizontal: {
55
+ paddingHorizontal: theme.sizes.$view.padding,
71
56
  },
72
- },
73
- striped: {
74
- borderBottomWidth: 1,
75
- borderBottomStyle: 'solid',
76
- borderBottomColor: theme.colors.border.primary,
77
- _web: {
78
- borderBottom: `1px solid ${theme.colors.border.primary}`,
79
- ':nth-child(even)': {
80
- backgroundColor: theme.colors.surface.secondary,
81
- },
57
+ margin: {
58
+ margin: theme.sizes.$view.padding,
82
59
  },
83
- },
84
- } as const;
85
- }
86
-
87
- /**
88
- * Create compound variants for row
89
- */
90
- function createRowCompoundVariants(theme: Theme): CompoundVariants<keyof TableRowVariants> {
91
- return [
92
- {
93
- type: 'striped',
94
- clickable: true,
95
- styles: {
96
- _web: {
97
- _hover: {
98
- backgroundColor: theme.colors.surface.tertiary,
99
- },
100
- },
60
+ marginVertical: {
61
+ marginVertical: theme.sizes.$view.padding,
101
62
  },
102
- },
103
- ] as const;
104
- }
105
-
106
- /**
107
- * Create size variants for header cell
108
- */
109
- function createHeaderCellSizeVariants(theme: Theme) {
110
- return buildSizeVariants(theme, 'table', (size) => ({
111
- padding: size.padding,
112
- fontSize: size.fontSize,
113
- lineHeight: size.lineHeight,
114
- }));
115
- }
116
-
117
- /**
118
- * Create type variants for header cell
119
- */
120
- function createHeaderCellTypeVariants(theme: Theme) {
121
- return {
122
- standard: {},
123
- bordered: {
124
- borderRightWidth: 1,
125
- borderRightStyle: 'solid',
126
- borderRightColor: theme.colors.border.primary,
127
- _web: {
128
- borderRight: `1px solid ${theme.colors.border.primary}`,
129
- ':last-child': {
130
- borderRight: 'none',
131
- },
63
+ marginHorizontal: {
64
+ marginHorizontal: theme.sizes.$view.padding,
132
65
  },
133
66
  },
134
- striped: {},
135
- } as const;
136
- }
137
-
138
- /**
139
- * Create size variants for cell
140
- */
141
- function createCellSizeVariants(theme: Theme) {
142
- return buildSizeVariants(theme, 'table', (size) => ({
143
- padding: size.padding,
144
- fontSize: size.fontSize,
145
- lineHeight: size.lineHeight,
146
- }));
147
- }
148
-
149
- /**
150
- * Create type variants for cell
151
- */
152
- function createCellTypeVariants(theme: Theme) {
153
- return {
154
- standard: {},
155
- bordered: {
156
- borderRightWidth: 1,
157
- borderRightStyle: 'solid',
158
- borderRightColor: theme.colors.border.primary,
159
- _web: {
160
- borderRight: `1px solid ${theme.colors.border.primary}`,
161
- ':last-child': {
162
- borderRight: 'none',
163
- },
164
- },
165
- },
166
- striped: {},
167
- } as const;
168
- }
169
-
170
- function createContainerStyles(theme: Theme) {
171
- return () => ({
172
- width: '100%',
173
67
  _web: {
174
68
  overflow: 'auto',
69
+ border: `1px solid ${theme.colors.border.primary}`,
175
70
  },
176
- variants: {
177
- type: createContainerTypeVariants(theme),
178
- // Spacing variants from ContainerStyleProps
179
- gap: buildGapVariants(theme),
180
- padding: buildPaddingVariants(theme),
181
- paddingVertical: buildPaddingVerticalVariants(theme),
182
- paddingHorizontal: buildPaddingHorizontalVariants(theme),
183
- margin: buildMarginVariants(theme),
184
- marginVertical: buildMarginVerticalVariants(theme),
185
- marginHorizontal: buildMarginHorizontalVariants(theme),
186
- },
187
- });
188
- }
71
+ }),
189
72
 
190
- const createTableStyles = (theme: Theme) => {
191
- return {
73
+ table: (_props: TableDynamicProps) => ({
192
74
  width: '100%',
193
75
  _web: {
194
76
  borderCollapse: 'collapse',
195
77
  },
196
- } as const;
197
- }
78
+ }),
198
79
 
199
- const createTheadStyles = (theme: Theme) => {
200
- return {
80
+ thead: ({ sticky = false }: TableDynamicProps) => ({
201
81
  backgroundColor: theme.colors.surface.secondary,
202
- variants: {
203
- sticky: {
204
- true: {
205
- _web: {
206
- position: 'sticky',
207
- top: 0,
208
- zIndex: 10,
209
- }
210
- },
211
- false: {},
212
- },
213
- },
214
- } as const;
215
- }
82
+ _web: sticky ? {
83
+ position: 'sticky' as const,
84
+ top: 0,
85
+ zIndex: 10,
86
+ } : {},
87
+ }),
216
88
 
217
- const createRowStyles = (theme: Theme) => {
218
- return {
219
- variants: {
220
- type: createRowTypeVariants(theme),
221
- clickable: {
222
- true: {
223
- _web: {
224
- cursor: 'pointer',
225
- _hover: {
226
- backgroundColor: theme.colors.surface.secondary,
227
- },
89
+ tbody: (_props: TableDynamicProps) => ({}),
90
+
91
+ row: ({ type = 'standard', clickable = false }: TableDynamicProps) => {
92
+ const typeStyles = type === 'bordered' || type === 'striped' ? {
93
+ borderBottomWidth: 1,
94
+ borderBottomColor: theme.colors.border.primary,
95
+ } : {};
96
+
97
+ return {
98
+ ...typeStyles,
99
+ _web: {
100
+ transition: 'background-color 0.2s ease',
101
+ borderBottom: (type === 'bordered' || type === 'striped')
102
+ ? `1px solid ${theme.colors.border.primary}`
103
+ : undefined,
104
+ cursor: clickable ? 'pointer' : undefined,
105
+ _hover: clickable ? { backgroundColor: theme.colors.surface.secondary } : {},
106
+ // Striped rows handled via CSS pseudo-selector
107
+ ...(type === 'striped' ? {
108
+ ':nth-child(even)': {
109
+ backgroundColor: theme.colors.surface.secondary,
228
110
  },
229
- },
230
- false: {},
111
+ } : {}),
231
112
  },
232
- },
233
- compoundVariants: createRowCompoundVariants(theme),
234
- _web: {
235
- transition: 'background-color 0.2s ease',
236
- },
237
- } as const;
238
- }
113
+ } as const;
114
+ },
239
115
 
240
- const createHeaderCellStyles = (theme: Theme) => {
241
- return {
242
- flexDirection: 'row',
243
- alignItems: 'center',
244
- textAlign: 'left',
245
- fontWeight: '600',
116
+ headerCell: ({ type = 'standard', align = 'left' }: TableDynamicProps) => ({
117
+ flexDirection: 'row' as const,
118
+ alignItems: 'center' as const,
119
+ fontWeight: '600' as const,
246
120
  color: theme.colors.text.primary,
247
121
  borderBottomWidth: 2,
248
- borderBottomStyle: 'solid',
249
122
  borderBottomColor: theme.colors.border.primary,
250
- _web: {
251
- borderBottom: `2px solid ${theme.colors.border.primary}`,
252
- },
253
123
  variants: {
254
- size: createHeaderCellSizeVariants(theme),
255
- align: {
256
- left: {
257
- textAlign: 'left',
258
- justifyContent: 'flex-start',
259
- },
260
- center: {
261
- textAlign: 'center',
262
- justifyContent: 'center',
263
- },
264
- right: {
265
- textAlign: 'right',
266
- justifyContent: 'flex-end',
267
- },
124
+ type: {
125
+ bordered: { borderRightWidth: 1, borderRightColor: theme.colors.border.primary },
268
126
  },
269
- type: createHeaderCellTypeVariants(theme),
270
- },
271
- } as const;
272
- }
273
-
274
- const createCellStyles = (theme: Theme) => {
275
- return {
276
- flexDirection: 'row',
277
- alignItems: 'center',
278
- textAlign: 'left',
279
- color: theme.colors.text.primary,
280
- variants: {
281
- size: createCellSizeVariants(theme),
282
127
  align: {
283
- left: {
284
- textAlign: 'left',
285
- justifyContent: 'flex-start',
286
- },
287
- center: {
288
- textAlign: 'center',
289
- justifyContent: 'center',
290
- },
291
- right: {
292
- textAlign: 'right',
293
- justifyContent: 'flex-end',
294
- },
128
+ left: { textAlign: 'left' as const, justifyContent: 'flex-start' as const },
129
+ center: { textAlign: 'center' as const, justifyContent: 'center' as const },
130
+ right: { textAlign: 'right' as const, justifyContent: 'flex-end' as const },
131
+ },
132
+ size: {
133
+ padding: theme.sizes.$table.padding,
134
+ fontSize: theme.sizes.$table.fontSize,
135
+ lineHeight: theme.sizes.$table.lineHeight,
295
136
  },
296
- type: createCellTypeVariants(theme),
297
137
  },
298
- } as const;
299
- }
138
+ _web: {
139
+ borderBottom: `2px solid ${theme.colors.border.primary}`,
140
+ borderRight: type === 'bordered' ? `1px solid ${theme.colors.border.primary}` : undefined,
141
+ ':last-child': type === 'bordered' ? { borderRight: 'none' } : {},
142
+ },
143
+ }),
300
144
 
301
- export const tableStyles = StyleSheet.create((theme: Theme) => {
302
- // Apply extensions to main visual elements
303
- const extended = applyExtensions('Table', theme, {
304
- container: createContainerStyles(theme),
305
- });
145
+ cell: ({ type = 'standard', align = 'left' }: TableDynamicProps) => {
146
+ const alignStyles = {
147
+ left: { textAlign: 'left' as const, justifyContent: 'flex-start' as const },
148
+ center: { textAlign: 'center' as const, justifyContent: 'center' as const },
149
+ right: { textAlign: 'right' as const, justifyContent: 'flex-end' as const },
150
+ }[align];
306
151
 
307
- return {
308
- ...extended,
309
- // Minor utility styles (not extended)
310
- table: createTableStyles(theme),
311
- thead: createTheadStyles(theme),
312
- tbody: {},
313
- row: createRowStyles(theme),
314
- headerCell: createHeaderCellStyles(theme),
315
- cell: createCellStyles(theme),
316
- } as const;
317
- });
152
+ const borderStyles = type === 'bordered' ? {
153
+ borderRightWidth: 1,
154
+ borderRightColor: theme.colors.border.primary,
155
+ } : {};
156
+
157
+ return {
158
+ flexDirection: 'row' as const,
159
+ alignItems: 'center' as const,
160
+ color: theme.colors.text.primary,
161
+ ...alignStyles,
162
+ ...borderStyles,
163
+ variants: {
164
+ size: {
165
+ padding: theme.sizes.$table.padding,
166
+ fontSize: theme.sizes.$table.fontSize,
167
+ lineHeight: theme.sizes.$table.lineHeight,
168
+ },
169
+ },
170
+ _web: {
171
+ borderRight: type === 'bordered' ? `1px solid ${theme.colors.border.primary}` : undefined,
172
+ ':last-child': type === 'bordered' ? { borderRight: 'none' } : {},
173
+ },
174
+ } as const;
175
+ },
176
+ }));