jp-composter 0.1.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 (194) hide show
  1. package/dist/index.d.mts +997 -0
  2. package/dist/index.d.ts +997 -0
  3. package/dist/index.js +36837 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +36778 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +66 -0
  8. package/src/SliceUI/IconMoon.tsx +33 -0
  9. package/src/SliceUI/assets/Anatomy diagram copy.svg +19 -0
  10. package/src/SliceUI/assets/Anatomy diagram.svg +19 -0
  11. package/src/SliceUI/assets/Anatomycheck.svg +15 -0
  12. package/src/SliceUI/assets/Anatomyinput.svg +32 -0
  13. package/src/SliceUI/assets/Checkbox.jpg +0 -0
  14. package/src/SliceUI/assets/Diagram copy.svg +15 -0
  15. package/src/SliceUI/assets/Diagram.jpg +0 -0
  16. package/src/SliceUI/assets/Diagram.svg +15 -0
  17. package/src/SliceUI/assets/Frame 5 copy.png +0 -0
  18. package/src/SliceUI/assets/Frame 5.png +0 -0
  19. package/src/SliceUI/assets/Frame 65.png +0 -0
  20. package/src/SliceUI/assets/Frame_65.png +0 -0
  21. package/src/SliceUI/assets/Icon copy.svg +3 -0
  22. package/src/SliceUI/assets/Icon.svg +3 -0
  23. package/src/SliceUI/assets/Icon_Bridging copy.svg +39 -0
  24. package/src/SliceUI/assets/Icon_Bridging.svg +39 -0
  25. package/src/SliceUI/assets/Icon_Consistent copy.svg +39 -0
  26. package/src/SliceUI/assets/Icon_Consistent.svg +39 -0
  27. package/src/SliceUI/assets/Icon_Plug copy.svg +38 -0
  28. package/src/SliceUI/assets/Icon_Plug.svg +38 -0
  29. package/src/SliceUI/assets/Icon_Reusable copy.svg +39 -0
  30. package/src/SliceUI/assets/Icon_Reusable.svg +39 -0
  31. package/src/SliceUI/assets/Layer_1.png +0 -0
  32. package/src/SliceUI/assets/accessibility.png +0 -0
  33. package/src/SliceUI/assets/accessibility.svg +1 -0
  34. package/src/SliceUI/assets/addon-library.png +0 -0
  35. package/src/SliceUI/assets/assets.png +0 -0
  36. package/src/SliceUI/assets/avif-test-image.avif +0 -0
  37. package/src/SliceUI/assets/bridging.svg +13 -0
  38. package/src/SliceUI/assets/consistent.svg +11 -0
  39. package/src/SliceUI/assets/context.png +0 -0
  40. package/src/SliceUI/assets/discord.svg +1 -0
  41. package/src/SliceUI/assets/docs.png +0 -0
  42. package/src/SliceUI/assets/figma-plugin.png +0 -0
  43. package/src/SliceUI/assets/github.svg +1 -0
  44. package/src/SliceUI/assets/resources/Anatomy diagram.svg +19 -0
  45. package/src/SliceUI/assets/resources/Anatomycheck.svg +15 -0
  46. package/src/SliceUI/assets/resources/Anatomyinput.svg +32 -0
  47. package/src/SliceUI/assets/resources/Diagram.svg +15 -0
  48. package/src/SliceUI/assets/resources/Frame 5.png +0 -0
  49. package/src/SliceUI/assets/resources/Frame 65.png +0 -0
  50. package/src/SliceUI/assets/resources/Icon.svg +3 -0
  51. package/src/SliceUI/assets/resources/Icon_Bridging.svg +39 -0
  52. package/src/SliceUI/assets/resources/Icon_Consistent.svg +39 -0
  53. package/src/SliceUI/assets/resources/Icon_Plug.svg +38 -0
  54. package/src/SliceUI/assets/resources/Icon_Reusable.svg +39 -0
  55. package/src/SliceUI/assets/resources/fonts/FontIcon.json +150 -0
  56. package/src/SliceUI/assets/resources/fonts/Lato-Black.ttf +0 -0
  57. package/src/SliceUI/assets/resources/fonts/Lato-Bold.ttf +0 -0
  58. package/src/SliceUI/assets/resources/fonts/Lato-Heavy.ttf +0 -0
  59. package/src/SliceUI/assets/resources/fonts/Lato-Medium.ttf +0 -0
  60. package/src/SliceUI/assets/resources/fonts/Lato-Regular.ttf +0 -0
  61. package/src/SliceUI/assets/resources/fonts/Lato.woff2 +0 -0
  62. package/src/SliceUI/assets/resources/fonts/icomoon.eot +0 -0
  63. package/src/SliceUI/assets/resources/fonts/icomoon.svg +601 -0
  64. package/src/SliceUI/assets/resources/fonts/icomoon.ttf +0 -0
  65. package/src/SliceUI/assets/resources/fonts/icomoon.woff +0 -0
  66. package/src/SliceUI/assets/resources/fonts/selection.json +1 -0
  67. package/src/SliceUI/assets/share.png +0 -0
  68. package/src/SliceUI/assets/styling.png +0 -0
  69. package/src/SliceUI/assets/testing.png +0 -0
  70. package/src/SliceUI/assets/theming.png +0 -0
  71. package/src/SliceUI/assets/tutorials.svg +1 -0
  72. package/src/SliceUI/assets/youtube.svg +1 -0
  73. package/src/SliceUI/automation/helper.ts +29 -0
  74. package/src/SliceUI/avatar/Avatar.tsx +237 -0
  75. package/src/SliceUI/avatar/Token.ts +116 -0
  76. package/src/SliceUI/avatar/Type.ts +36 -0
  77. package/src/SliceUI/avatar/helper.ts +53 -0
  78. package/src/SliceUI/badge/Badge.tsx +308 -0
  79. package/src/SliceUI/badge/Token.ts +202 -0
  80. package/src/SliceUI/badge/Type.ts +46 -0
  81. package/src/SliceUI/badge/helper.ts +39 -0
  82. package/src/SliceUI/button/Button.tsx +243 -0
  83. package/src/SliceUI/button/Token.ts +138 -0
  84. package/src/SliceUI/button/Type.ts +34 -0
  85. package/src/SliceUI/button/helper.ts +125 -0
  86. package/src/SliceUI/checkbox/Checkbox.tsx +176 -0
  87. package/src/SliceUI/checkbox/Token.ts +128 -0
  88. package/src/SliceUI/checkbox/Type.ts +35 -0
  89. package/src/SliceUI/chip/Chip.tsx +290 -0
  90. package/src/SliceUI/chip/Token.ts +151 -0
  91. package/src/SliceUI/chip/Type.ts +43 -0
  92. package/src/SliceUI/chip/helper.ts +40 -0
  93. package/src/SliceUI/colors/Pallete.ts +151 -0
  94. package/src/SliceUI/colors/Token.ts +110 -0
  95. package/src/SliceUI/colors/Type.ts +56 -0
  96. package/src/SliceUI/contextProvider/context.tsx +108 -0
  97. package/src/SliceUI/divider/Divider.tsx +109 -0
  98. package/src/SliceUI/divider/Token.ts +18 -0
  99. package/src/SliceUI/divider/Type.ts +26 -0
  100. package/src/SliceUI/icon/CustomIcon.ts +4 -0
  101. package/src/SliceUI/icon/IcoMoonIcon.tsx +11 -0
  102. package/src/SliceUI/icon/Icon.tsx +38 -0
  103. package/src/SliceUI/icon/Token.ts +14 -0
  104. package/src/SliceUI/icon/Type.ts +13 -0
  105. package/src/SliceUI/icon/selection.json +1 -0
  106. package/src/SliceUI/input/Input.tsx +573 -0
  107. package/src/SliceUI/input/ToDo.md +99 -0
  108. package/src/SliceUI/input/Token.ts +372 -0
  109. package/src/SliceUI/input/Type.ts +109 -0
  110. package/src/SliceUI/input/components/InputPortal.tsx +211 -0
  111. package/src/SliceUI/input/components/NativeBottomSheet.tsx +296 -0
  112. package/src/SliceUI/input/components/SelectChip.tsx +185 -0
  113. package/src/SliceUI/input/components/SelectList.tsx +173 -0
  114. package/src/SliceUI/input/components/SelectListItem.tsx +377 -0
  115. package/src/SliceUI/input/components/SelectScrollbarStyle.ts +44 -0
  116. package/src/SliceUI/input/hooks/useCustomScrollbar.ts +17 -0
  117. package/src/SliceUI/input/hooks/useInputState.ts +41 -0
  118. package/src/SliceUI/input/hooks/useLabelAnimation.ts +132 -0
  119. package/src/SliceUI/input/hooks/useOutsideClick.ts +38 -0
  120. package/src/SliceUI/input/hooks/useSelectLogic.ts +338 -0
  121. package/src/SliceUI/input/utils/inputUtils.ts +120 -0
  122. package/src/SliceUI/input/utils/selectUtils.ts +85 -0
  123. package/src/SliceUI/input/utils/styleUtils.ts +50 -0
  124. package/src/SliceUI/input/variants/CurrencyInput/CurrencyInput.tsx +16 -0
  125. package/src/SliceUI/input/variants/CurrencyInput/NativeCurrencyInput.tsx +181 -0
  126. package/src/SliceUI/input/variants/CurrencyInput/WebCurrencyInput.tsx +163 -0
  127. package/src/SliceUI/input/variants/CurrencyInput/types.ts +17 -0
  128. package/src/SliceUI/input/variants/PhoneInput/NativePhoneInput.tsx +189 -0
  129. package/src/SliceUI/input/variants/PhoneInput/PhoneInput.tsx +16 -0
  130. package/src/SliceUI/input/variants/PhoneInput/WebPhoneInput.tsx +291 -0
  131. package/src/SliceUI/input/variants/PhoneInput/types.ts +22 -0
  132. package/src/SliceUI/input/variants/SelectInput/SelectInput.tsx +407 -0
  133. package/src/SliceUI/input/variants/SelectInput/types.ts +34 -0
  134. package/src/SliceUI/input/variants/TextInput.tsx +68 -0
  135. package/src/SliceUI/layout/Box.tsx +38 -0
  136. package/src/SliceUI/layout/Center.tsx +38 -0
  137. package/src/SliceUI/layout/Divider.tsx +37 -0
  138. package/src/SliceUI/layout/Grid.tsx +75 -0
  139. package/src/SliceUI/layout/PageContainer.tsx +60 -0
  140. package/src/SliceUI/layout/ScrollContainer.tsx +72 -0
  141. package/src/SliceUI/layout/Spacer.tsx +54 -0
  142. package/src/SliceUI/layout/Stack.tsx +97 -0
  143. package/src/SliceUI/layout/StickyHeader.tsx +71 -0
  144. package/src/SliceUI/radio/RadioButton.tsx +130 -0
  145. package/src/SliceUI/radio/Token.ts +197 -0
  146. package/src/SliceUI/radio/Type.ts +35 -0
  147. package/src/SliceUI/react-native.config.js +3 -0
  148. package/src/SliceUI/responsive/Type.ts +7 -0
  149. package/src/SliceUI/responsive/helper.ts +53 -0
  150. package/src/SliceUI/switch/Switch.tsx +119 -0
  151. package/src/SliceUI/switch/Token.ts +205 -0
  152. package/src/SliceUI/switch/Type.ts +26 -0
  153. package/src/SliceUI/tab/TabItem.tsx +204 -0
  154. package/src/SliceUI/tab/Tabs.tsx +110 -0
  155. package/src/SliceUI/tab/Token.ts +282 -0
  156. package/src/SliceUI/tab/Type.ts +66 -0
  157. package/src/SliceUI/tab/helper.ts +53 -0
  158. package/src/SliceUI/table/Table.tsx +388 -0
  159. package/src/SliceUI/table/TableCell.tsx +158 -0
  160. package/src/SliceUI/table/TableFooter.tsx +353 -0
  161. package/src/SliceUI/table/TableHeader.tsx +247 -0
  162. package/src/SliceUI/table/TableRow.tsx +218 -0
  163. package/src/SliceUI/table/Token.ts +252 -0
  164. package/src/SliceUI/table/Type.ts +213 -0
  165. package/src/SliceUI/table/helper.ts +376 -0
  166. package/src/SliceUI/table/index.ts +53 -0
  167. package/src/SliceUI/theme/dummyColors.tsx +7 -0
  168. package/src/SliceUI/theme/theme.ts +107 -0
  169. package/src/SliceUI/typography/BaseTypographyToken.ts +62 -0
  170. package/src/SliceUI/typography/FoundationToken.ts +48 -0
  171. package/src/SliceUI/typography/Token.ts +228 -0
  172. package/src/SliceUI/typography/Type.ts +20 -0
  173. package/src/SliceUI/typography/Typography.tsx +99 -0
  174. package/src/SliceUI/values/BorderRadius.ts +17 -0
  175. package/src/SliceUI/values/BorderWidth.ts +7 -0
  176. package/src/SliceUI/values/Dimension.ts +35 -0
  177. package/src/SliceUI/values/IconSizes.ts +13 -0
  178. package/src/SliceUI/values/Spacing.ts +22 -0
  179. package/src/declarations.d.ts +8 -0
  180. package/src/index.tsx +119 -0
  181. package/src/stories/Colors.mdx +1418 -0
  182. package/src/stories/Dimensions.mdx +60 -0
  183. package/src/stories/GetStarted.mdx +90 -0
  184. package/src/stories/Introduction.mdx +136 -0
  185. package/src/stories/Shape.mdx +126 -0
  186. package/src/stories/Spacing.mdx +104 -0
  187. package/src/stories/Typography.mdx +454 -0
  188. package/src/stories/Utils.mdx +277 -0
  189. package/src/stories/story-components/AddIcon.js +13 -0
  190. package/src/stories/story-components/RectangleWithBox.jsx +51 -0
  191. package/src/stories/story-components/RoundedRectangle.jsx +18 -0
  192. package/src/stories/story-components/RoundedWithWhiteInside.jsx +33 -0
  193. package/src/stories/story-components/WhiteRoundedRectangle.jsx +107 -0
  194. package/src/stories/story-components/svgPaths.js +126 -0
@@ -0,0 +1,151 @@
1
+ export const colors = {
2
+ Primary: {
3
+ 100: '#FFD8D0',
4
+ 200: '#FBB2A3',
5
+ 300: '#F38A77',
6
+ 400: '#E7604E',
7
+ 500: '#D82927',
8
+ 600: '#B12722',
9
+ 700: '#8C241D',
10
+ 800: '#681F18',
11
+ 900: '#471913',
12
+ 1000: '#27110B',
13
+ a100: 'rgba(216, 41, 39, 0.20)',
14
+ a200: 'rgba(216, 41, 39, 0.40)',
15
+ a300: 'rgba(216, 41, 39, 0.80)',
16
+ a400: 'rgba(216, 41, 39, 0.80)',
17
+ },
18
+ red: {
19
+ 100: '#FFD9CE',
20
+ 200: '#FFB3A0',
21
+ 300: '#FF8B73',
22
+ 400: '#F76048',
23
+ 500: '#EB211E',
24
+ 600: '#C1231B',
25
+ 700: '#982218',
26
+ 800: '#711E14',
27
+ 900: '#4C1910',
28
+ 1000: '#2A1209',
29
+ a100: 'rgba(235, 33, 30, 0.20)',
30
+ a200: 'rgba(235, 33, 30, 0.40)',
31
+ a300: 'rgba(235, 33, 30, 0.80)',
32
+ a400: 'rgba(235, 33, 30, 0.80)',
33
+ },
34
+ yellow: {
35
+ 100: '#FFF5D6',
36
+ 200: '#FFECAC',
37
+ 300: '#FFE282',
38
+ 400: '#FFD954',
39
+ 500: '#FAD000',
40
+ 600: '#CCAA12',
41
+ 700: '#A08517',
42
+ 800: '#766218',
43
+ 900: '#4E4215',
44
+ 1000: '#2A230F',
45
+ a100: 'rgba(250, 208, 0, 0.10)',
46
+ a200: 'rgba(250, 208, 0, 0.20)',
47
+ a300: 'rgba(250, 208, 0, 0.40)',
48
+ a400: 'rgba(250, 208, 0, 0.80)',
49
+ },
50
+ orange: {
51
+ 100: '#FFE5D3',
52
+ 200: '#FFCCA8',
53
+ 300: '#FFB27D',
54
+ 400: '#FC9853',
55
+ 500: '#F57E24',
56
+ 600: '#C86821',
57
+ 700: '#9D531E',
58
+ 800: '#743F19',
59
+ 900: '#4E2C14',
60
+ 1000: '#2A1A0D',
61
+ a100: 'rgba(245, 126, 36, 0.10)',
62
+ a200: 'rgba(245, 126, 36, 0.20)',
63
+ a300: 'rgba(245, 126, 36, 0.40)',
64
+ a400: 'rgba(245, 126, 36, 0.80)',
65
+ },
66
+ green: {
67
+ 100: '#D8EFDD',
68
+ 200: '#B1DFBC',
69
+ 300: '#88CF9B',
70
+ 400: '#5BBE7B',
71
+ 500: '#14AD5C',
72
+ 600: '#1B8E4D',
73
+ 700: '#1D703E',
74
+ 800: '#1C5430',
75
+ 900: '#173922',
76
+ 1000: '#111F15',
77
+ a100: 'rgba(20, 173, 92, 0.10)',
78
+ a200: 'rgba(20, 173, 92, 0.20)',
79
+ a300: 'rgba(20, 173, 92, 0.40)',
80
+ a400: 'rgba(20, 173, 92, 0.80)',
81
+ },
82
+ blue: {
83
+ 100: '#DADDFA',
84
+ 200: '#B5BDF4',
85
+ 300: '#8D9DEE',
86
+ 400: '#5F7FE7',
87
+ 500: '#0263E0',
88
+ 600: '#1752B7',
89
+ 700: '#1D428F',
90
+ 800: '#1D326A',
91
+ 900: '#192346',
92
+ 1000: '#121526',
93
+ a100: 'rgba(2, 99, 224, 0.10)',
94
+ a200: 'rgba(2, 99, 224, 0.20)',
95
+ a300: 'rgba(2, 99, 224, 0.40)',
96
+ a400: 'rgba(2, 99, 224, 0.80)',
97
+ },
98
+ neutral: {
99
+ 100: '#F5F5F5',
100
+ 200: '#E6E6E6',
101
+ 300: '#D9D9D9',
102
+ 400: '#B3B3B3',
103
+ 500: '#757575',
104
+ 600: '#444444',
105
+ 700: '#383838',
106
+ 800: '#2C2C2C',
107
+ 900: '#1E1E1E',
108
+ 1000: '#111111',
109
+ a50: 'rgba(17, 17, 17, 0.5)',
110
+ a100: 'rgba(17, 17, 17, 0.10)',
111
+ a200: 'rgba(17, 17, 17, 0.20)',
112
+ a300: 'rgba(17, 17, 17, 0.40)',
113
+ a400: 'rgba(17, 17, 17, 0.80)',
114
+ },
115
+ slate: {
116
+ 100: '#FAFCFE',
117
+ 200: '#F7FAFD',
118
+ 300: '#EAEDF0',
119
+ 400: '#D2D4D6',
120
+ 500: '#949494',
121
+ 600: '#767676',
122
+ 700: '#5A5A5A',
123
+ 800: '#434343',
124
+ 900: '#303030',
125
+ 1000: '#242424',
126
+ },
127
+ white: {
128
+ 1000: '#FFFFFF',
129
+ a100: 'rgba(255, 255, 255, 0.05)',
130
+ a200: 'rgba(255, 255, 255, 0.10)',
131
+ a300: 'rgba(255, 255, 255, 0.20)',
132
+ a400: 'rgba(255, 255, 255, 0.40)',
133
+ a500: 'rgba(255, 255, 255, 0.70)',
134
+ a600: 'rgba(255, 255, 255, 0.80)',
135
+ a700: 'rgba(255, 255, 255, 0.85)',
136
+ a800: 'rgba(255, 255, 255, 0.90)',
137
+ a900: 'rgba(255, 255, 255, 0.95)',
138
+ },
139
+ black: {
140
+ 1000: '#000000',
141
+ a100: 'rgba(0, 0, 0, 0.05)',
142
+ a200: 'rgba(0, 0, 0, 0.10)',
143
+ a300: 'rgba(0, 0, 0, 0.20)',
144
+ a400: 'rgba(0, 0, 0, 0.40)',
145
+ a500: 'rgba(0, 0, 0, 0.70)',
146
+ a600: 'rgba(0, 0, 0, 0.80)',
147
+ a700: 'rgba(0, 0, 0, 0.85)',
148
+ a800: 'rgba(0, 0, 0, 0.90)',
149
+ a900: 'rgba(0, 0, 0, 0.95)',
150
+ },
151
+ };
@@ -0,0 +1,110 @@
1
+ import {colors as pallete} from './Pallete';
2
+ import type {ColorTokens} from './Type';
3
+
4
+ export const LightColorTokens = (
5
+ colors: typeof pallete = pallete,
6
+ accentColor: string = colors.Primary[500],
7
+ positiveColor: string = colors.green[500],
8
+ negativeColor: string = colors.red[500],
9
+ linkColor: string = colors.blue[500],
10
+ contrastWhite: string = colors.white[1000],
11
+ ): ColorTokens => {
12
+ return {
13
+ colorBackgroundAccent: accentColor,
14
+ colorBackgroundAccentAlpha: colors.Primary.a100,
15
+ colorBackgroundPositive: positiveColor,
16
+ colorBackgroundNegative: negativeColor,
17
+ colorBackgroundLink: linkColor,
18
+ colorBackgroundPrimary: colors.white[1000],
19
+ colorBackgroundSecondary: colors.slate[400],
20
+ colorBackgroundTertiary: colors.slate[300],
21
+ colorBackgroundLight: colors.slate[200],
22
+ colorBackgroundLighter: colors.slate[100],
23
+ colorBackgroundElevated: colors.white[1000],
24
+ colorBackgroundModal: colors.white[1000],
25
+ colorBorderAccent: accentColor,
26
+ colorBorderPositive: positiveColor,
27
+ colorBorderNegative: negativeColor,
28
+ colorBorderLink: linkColor,
29
+ colorBorderStrong: colors.neutral[1000],
30
+ colorBorderMedium: colors.neutral[400],
31
+ colorBorderSubtle: colors.neutral[300],
32
+ colorBorderLight: colors.neutral[200],
33
+ colorBorderLighter: colors.neutral[100],
34
+ colorBorderAlpha: colors.neutral.a100,
35
+ colorForegroundAccent: accentColor,
36
+ colorForegroundPositive: positiveColor,
37
+ colorForegroundNegative: negativeColor,
38
+ colorForegroundLink: linkColor,
39
+ colorForegroundPrimary: colors.neutral[1000],
40
+ colorForegroundSecondary: colors.neutral[800],
41
+ colorForegroundTertiary: colors.neutral[600],
42
+ colorForegroundLight: colors.neutral[500],
43
+ colorForegroundLighter: colors.neutral[400],
44
+ colorForegroundInvariable: contrastWhite,
45
+ colorStatePrimaryDisabled: colors.neutral.a200,
46
+ colorStatePrimaryDisabled2: colors.neutral.a50,
47
+ colorStatePrimaryHover: colors.neutral.a100,
48
+ colorStatePrimaryPressed: colors.neutral.a300,
49
+ colorStateAccentDisabled: colors.Primary.a300,
50
+ colorStateAccentHover1: colors.Primary.a400,
51
+ colorStateAccentHover2: colors.Primary.a100,
52
+ colorStateAccentPressed1: colors.Primary[600],
53
+ colorStateAccentPressed2: colors.Primary.a100,
54
+ colorStateContrastWhiteDisabled: colors.white.a500,
55
+ };
56
+ };
57
+
58
+ export const DarkColorTokens = (
59
+ colors: typeof pallete = pallete,
60
+ accentColor: string = colors.Primary[500],
61
+ positiveColor: string = colors.green[500],
62
+ negativeColor: string = colors.red[500],
63
+ linkColor: string = colors.blue[500],
64
+ contrastWhite: string = colors.white[1000],
65
+ ): ColorTokens => {
66
+ return {
67
+ colorBackgroundAccent: accentColor,
68
+ colorBackgroundAccentAlpha: colors.Primary.a100,
69
+ colorBackgroundPositive: positiveColor,
70
+ colorBackgroundNegative: negativeColor,
71
+ colorBackgroundLink: linkColor,
72
+ colorBackgroundPrimary: colors.neutral[1000],
73
+ colorBackgroundSecondary: colors.slate[800],
74
+ colorBackgroundTertiary: colors.slate[700],
75
+ colorBackgroundLight: colors.slate[600],
76
+ colorBackgroundLighter: colors.slate[500],
77
+ colorBackgroundElevated: colors.neutral[900],
78
+ colorBackgroundModal: colors.neutral[800],
79
+ colorBorderAccent: accentColor,
80
+ colorBorderPositive: positiveColor,
81
+ colorBorderNegative: negativeColor,
82
+ colorBorderLink: linkColor,
83
+ colorBorderStrong: colors.white[1000],
84
+ colorBorderMedium: colors.neutral[500],
85
+ colorBorderSubtle: colors.neutral[600],
86
+ colorBorderLight: colors.neutral[700],
87
+ colorBorderLighter: colors.neutral[800],
88
+ colorBorderAlpha: colors.white.a100,
89
+ colorForegroundAccent: accentColor,
90
+ colorForegroundPositive: positiveColor,
91
+ colorForegroundNegative: negativeColor,
92
+ colorForegroundLink: linkColor,
93
+ colorForegroundPrimary: colors.white[1000],
94
+ colorForegroundSecondary: colors.neutral[100],
95
+ colorForegroundTertiary: colors.neutral[200],
96
+ colorForegroundLight: colors.neutral[300],
97
+ colorForegroundLighter: colors.neutral[400],
98
+ colorForegroundInvariable: contrastWhite,
99
+ colorStatePrimaryDisabled: colors.white.a300,
100
+ colorStatePrimaryDisabled2: colors.white.a100,
101
+ colorStatePrimaryHover: colors.white.a200,
102
+ colorStatePrimaryPressed: colors.white.a400,
103
+ colorStateAccentDisabled: colors.Primary.a300,
104
+ colorStateAccentHover1: colors.Primary.a400,
105
+ colorStateAccentHover2: colors.Primary.a100,
106
+ colorStateAccentPressed1: colors.Primary[600],
107
+ colorStateAccentPressed2: colors.Primary.a100,
108
+ colorStateContrastWhiteDisabled: colors.white.a500,
109
+ };
110
+ };
@@ -0,0 +1,56 @@
1
+ export interface ColorTokens {
2
+ colorBackgroundAccent: string;
3
+ colorBackgroundAccentAlpha: string;
4
+ colorBackgroundPositive: string;
5
+ colorBackgroundNegative: string;
6
+ colorBackgroundLink: string;
7
+ colorBackgroundPrimary: string;
8
+ colorBackgroundSecondary: string;
9
+ colorBackgroundTertiary: string;
10
+ colorBackgroundLight: string;
11
+ colorBackgroundLighter: string;
12
+ colorBackgroundElevated: string;
13
+ colorBackgroundModal: string;
14
+
15
+ colorBorderAccent: string;
16
+ colorBorderPositive: string;
17
+ colorBorderNegative: string;
18
+ colorBorderLink: string;
19
+ colorBorderStrong: string;
20
+ colorBorderMedium: string;
21
+ colorBorderSubtle: string;
22
+ colorBorderLight: string;
23
+ colorBorderLighter: string;
24
+ colorBorderAlpha: string;
25
+
26
+ colorForegroundAccent: string;
27
+ colorForegroundPositive: string;
28
+ colorForegroundNegative: string;
29
+ colorForegroundLink: string;
30
+ colorForegroundPrimary: string;
31
+ colorForegroundSecondary: string;
32
+ colorForegroundTertiary: string;
33
+ colorForegroundLight: string;
34
+ colorForegroundLighter: string;
35
+ colorForegroundInvariable: string;
36
+
37
+ colorStatePrimaryDisabled: string;
38
+ colorStatePrimaryHover: string;
39
+ colorStatePrimaryPressed: string;
40
+
41
+ colorStateAccentDisabled: string;
42
+ colorStatePrimaryDisabled2: string;
43
+ colorStateAccentHover1: string;
44
+ colorStateAccentHover2: string;
45
+ colorStateAccentPressed1: string;
46
+ colorStateAccentPressed2: string;
47
+ colorStateContrastWhiteDisabled: string;
48
+ }
49
+
50
+ /**
51
+ * Theme type used by helper functions.
52
+ * Only requires colors to be compatible with both SliceTheme and react-navigation themes.
53
+ */
54
+ export interface ExtendedTheme {
55
+ colors: ColorTokens;
56
+ }
@@ -0,0 +1,108 @@
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ useEffect,
5
+ useState,
6
+ type ReactNode,
7
+ } from 'react';
8
+ import {Dimensions} from 'react-native';
9
+ import {getDeviceBreakpoint, type Breakpoints} from '../responsive/helper';
10
+ import type {InputThemeSize} from '../input/Type';
11
+ import type {ColorTokens} from '../colors/Type';
12
+ import {dimensions} from '../values/Dimension';
13
+ import type {TypographyVariants} from '../typography/Type';
14
+ import type {
15
+ ButtonSizeType,
16
+ ButtonTextSizeType,
17
+ ButtonIconSizeType,
18
+ } from '../button/Type';
19
+ import type {
20
+ ChipSizeType,
21
+ ChipTextSizeType,
22
+ ChipIconSizeType,
23
+ } from '../chip/Type';
24
+ import type {
25
+ BadgeSizeType,
26
+ BadgeTextSizeType,
27
+ BadgeIconSizeType,
28
+ } from '../badge/Type';
29
+ import type {IconSize} from '../icon/Type';
30
+ import {spacing} from '../values/Spacing';
31
+
32
+ // Extend context type to include breakpoint
33
+ interface ThemeContextType {
34
+ theme: SliceTheme;
35
+ deviceBreakpoint: keyof typeof Breakpoints;
36
+ }
37
+
38
+ // Create context
39
+ const ThemeContext = createContext<ThemeContextType | undefined>(undefined);
40
+
41
+ // Props for provider
42
+ interface SliceThemeProviderProps {
43
+ children: ReactNode;
44
+ theme: SliceTheme;
45
+ }
46
+
47
+ // Provider with breakpoint logic inside
48
+ export const SliceThemeProvider: React.FC<SliceThemeProviderProps> = ({
49
+ children,
50
+ theme,
51
+ }) => {
52
+ const [deviceBreakpoint, setDeviceBreakpoint] = useState<
53
+ keyof typeof Breakpoints
54
+ >(getDeviceBreakpoint());
55
+
56
+ useEffect(() => {
57
+ const handleResize = () => {
58
+ setDeviceBreakpoint(getDeviceBreakpoint());
59
+ };
60
+
61
+ const subscription = Dimensions.addEventListener('change', handleResize);
62
+
63
+ return () => {
64
+ if (subscription?.remove) subscription.remove();
65
+ };
66
+ }, []);
67
+
68
+ return (
69
+ <ThemeContext.Provider value={{theme, deviceBreakpoint}}>
70
+ {children}
71
+ </ThemeContext.Provider>
72
+ );
73
+ };
74
+
75
+ // Hook to access theme and breakpoint
76
+ export const useSliceTheme = (): ThemeContextType => {
77
+ const context = useContext(ThemeContext);
78
+ if (!context) {
79
+ throw new Error('useSliceTheme must be used within a SliceThemeProvider');
80
+ }
81
+ return context;
82
+ };
83
+
84
+ export interface SliceTheme {
85
+ isDebugBuildType?: boolean;
86
+ automationBaseid?: string;
87
+ typographyStyles?: TypographyVariants;
88
+ colors: ColorTokens;
89
+ dimensions: typeof dimensions;
90
+ inputStyles: InputThemeSize;
91
+ buttonStyles: ButtonSizeType;
92
+ buttonTextStyles: ButtonTextSizeType;
93
+ buttonIconStyles: ButtonIconSizeType;
94
+ chipStyles: ChipSizeType;
95
+ chipTextStyles: ChipTextSizeType;
96
+ chipIconStyles: ChipIconSizeType;
97
+ badgeStyles: BadgeSizeType;
98
+ badgeTextStyles: BadgeTextSizeType;
99
+ badgeIconStyles: BadgeIconSizeType;
100
+ avatarStyles: any;
101
+ avatarTextStyles: any;
102
+ avatarImageStyles: any;
103
+ avatarButtonRadius: any;
104
+ tabItemStyles: any;
105
+ tabItemTextStyles: any;
106
+ iconSizes: IconSize;
107
+ spacing: typeof spacing;
108
+ }
@@ -0,0 +1,109 @@
1
+ import React, {useMemo} from 'react';
2
+ import {View, StyleSheet, type ViewStyle} from 'react-native';
3
+ import {useSliceTheme} from '../contextProvider/context';
4
+ import {setTestId} from '../automation/helper';
5
+ import type {DividerProps, DividerThicknessVariant} from './Type';
6
+ import {DIVIDER_DEFAULT_TOKENS, DIVIDER_THICKNESS_VALUES} from './Token';
7
+ import type {ColorTokens} from '../colors/Type';
8
+
9
+ export const Divider = React.memo(
10
+ ({
11
+ screenName = 'default',
12
+ id = 'default',
13
+ orientation = DIVIDER_DEFAULT_TOKENS.orientation,
14
+ thickness = DIVIDER_DEFAULT_TOKENS.thickness,
15
+ color = DIVIDER_DEFAULT_TOKENS.color,
16
+ variant = DIVIDER_DEFAULT_TOKENS.variant,
17
+ marginVertical = 0,
18
+ marginHorizontal = 0,
19
+ borderRadius = 0,
20
+ showDivider = true,
21
+ style,
22
+ testID,
23
+ }: DividerProps) => {
24
+ const {theme} = useSliceTheme();
25
+ const {isDebugBuildType, automationBaseid} = theme;
26
+
27
+ const dividerStyle = useMemo(() => {
28
+ if (!showDivider) {
29
+ return {width: 0, height: 0, opacity: 0};
30
+ }
31
+
32
+ const isHorizontal = orientation === 'horizontal';
33
+ const colorKey = color as keyof ColorTokens;
34
+ const resolvedColor =
35
+ (theme?.colors && theme.colors[colorKey]) ||
36
+ (typeof color === 'string' ? color : undefined) ||
37
+ theme?.colors?.colorBorderSubtle ||
38
+ '#E0E0E0';
39
+
40
+ const thicknessVariant = thickness as DividerThicknessVariant;
41
+ const resolvedThickness =
42
+ typeof thickness === 'number'
43
+ ? thickness
44
+ : DIVIDER_THICKNESS_VALUES[thicknessVariant] ||
45
+ DIVIDER_THICKNESS_VALUES[DIVIDER_DEFAULT_TOKENS.thickness];
46
+
47
+ const baseStyle: ViewStyle = {
48
+ marginVertical,
49
+ marginHorizontal,
50
+ borderRadius,
51
+ };
52
+
53
+ if (variant === 'spacer') {
54
+ baseStyle.backgroundColor = 'transparent';
55
+ if (isHorizontal) {
56
+ baseStyle.height = resolvedThickness;
57
+ } else {
58
+ baseStyle.width = resolvedThickness;
59
+ }
60
+ } else if (variant === 'solid') {
61
+ baseStyle.backgroundColor = resolvedColor;
62
+ if (isHorizontal) {
63
+ baseStyle.height = resolvedThickness;
64
+ baseStyle.width = '100%';
65
+ } else {
66
+ baseStyle.width = resolvedThickness;
67
+ baseStyle.height = '100%';
68
+ }
69
+ } else if (variant === 'dashed' || variant === 'dotted') {
70
+ baseStyle.borderColor = resolvedColor;
71
+ baseStyle.borderStyle = variant;
72
+ if (isHorizontal) {
73
+ baseStyle.height = 0;
74
+ baseStyle.width = '100%';
75
+ baseStyle.borderBottomWidth = resolvedThickness;
76
+ } else {
77
+ baseStyle.width = 0;
78
+ baseStyle.height = '100%';
79
+ baseStyle.borderRightWidth = resolvedThickness;
80
+ }
81
+ }
82
+
83
+ return StyleSheet.flatten([baseStyle, style]);
84
+ }, [
85
+ showDivider,
86
+ orientation,
87
+ thickness,
88
+ color,
89
+ variant,
90
+ marginVertical,
91
+ marginHorizontal,
92
+ borderRadius,
93
+ theme,
94
+ style,
95
+ ]);
96
+
97
+ return (
98
+ <View
99
+ style={dividerStyle}
100
+ {...(testID ? {testID} : {})}
101
+ {...(isDebugBuildType && automationBaseid
102
+ ? setTestId(automationBaseid, screenName, id)
103
+ : {})}
104
+ />
105
+ );
106
+ },
107
+ );
108
+
109
+ Divider.displayName = 'Divider';
@@ -0,0 +1,18 @@
1
+ import type { ColorTokens } from '../colors/Type';
2
+ import type { DividerThicknessVariant } from './Type';
3
+
4
+ export const DIVIDER_THICKNESS_VALUES: Record<DividerThicknessVariant, number> =
5
+ {
6
+ xs: 1,
7
+ sm: 2,
8
+ md: 4,
9
+ lg: 8,
10
+ xl: 12,
11
+ };
12
+
13
+ export const DIVIDER_DEFAULT_TOKENS = {
14
+ thickness: 'md' as DividerThicknessVariant,
15
+ color: 'colorBorderSubtle' as keyof ColorTokens,
16
+ orientation: 'horizontal' as const,
17
+ variant: 'solid' as const,
18
+ };
@@ -0,0 +1,26 @@
1
+ import type { ViewStyle } from 'react-native';
2
+ import type { ColorTokens } from '../colors/Type';
3
+
4
+ export type DividerThicknessVariant =
5
+ | 'xs'
6
+ | 'sm'
7
+ | 'md'
8
+ | 'lg'
9
+ | 'xl';
10
+ export type DividerOrientation = 'horizontal' | 'vertical';
11
+ export type DividerVariant = 'solid' | 'dashed' | 'dotted' | 'spacer';
12
+
13
+ export interface DividerProps {
14
+ screenName?: string;
15
+ id?: string | number;
16
+ orientation?: DividerOrientation;
17
+ thickness?: DividerThicknessVariant | number;
18
+ color?: keyof ColorTokens | string;
19
+ variant?: DividerVariant;
20
+ marginVertical?: number;
21
+ marginHorizontal?: number;
22
+ borderRadius?: number;
23
+ showDivider?: boolean;
24
+ style?: ViewStyle;
25
+ testID?: string;
26
+ }
@@ -0,0 +1,4 @@
1
+ import { createIconSetFromIcoMoon } from 'react-native-vector-icons';
2
+ import icoMoonConfig from './selection.json';
3
+
4
+ export default createIconSetFromIcoMoon(icoMoonConfig);
@@ -0,0 +1,11 @@
1
+ // @ts-ignore
2
+ import {createIconSetFromIcoMoon} from 'react-native-vector-icons';
3
+ import icoMoonConfig from '../assets/resources/fonts/selection.json';
4
+
5
+ const IcoMoonIcon = createIconSetFromIcoMoon(
6
+ icoMoonConfig,
7
+ 'icomoon',
8
+ 'icomoon.ttf',
9
+ );
10
+
11
+ export default IcoMoonIcon;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+
3
+ import { resolveVariant, scaleFont } from '../responsive/helper';
4
+ import { ICON_SIZES } from './Token';
5
+ import type { VariantBreakPoints } from '../responsive/Type';
6
+ import { useSliceTheme } from '../contextProvider/context';
7
+
8
+ interface IconProps {
9
+ component: React.ReactNode; // Flexible - accepts elements, strings, numbers, etc.
10
+ variant: keyof typeof ICON_SIZES | VariantBreakPoints;
11
+ color?: string;
12
+ }
13
+
14
+ const Icon: React.FC<IconProps> = ({ component, variant, color }) => {
15
+ const { theme, deviceBreakpoint } = useSliceTheme();
16
+ const { iconSizes } = theme;
17
+ const breakPointVariant = resolveVariant(
18
+ variant,
19
+ deviceBreakpoint
20
+ ) as keyof typeof iconSizes;
21
+
22
+ // If it's a valid React element, apply styles
23
+ if (React.isValidElement(component)) {
24
+ const applyIconStyle = (icon: React.ReactElement): React.ReactElement =>
25
+ React.cloneElement(icon, {
26
+ ...iconSizes[breakPointVariant],
27
+ size: scaleFont(iconSizes[breakPointVariant].size),
28
+ color: color,
29
+ });
30
+
31
+ return applyIconStyle(component);
32
+ }
33
+
34
+ // Otherwise, just render it as-is
35
+ return <>{component}</>;
36
+ };
37
+
38
+ export default React.memo(Icon);
@@ -0,0 +1,14 @@
1
+ import { iconSize } from '../values/IconSizes';
2
+ import type { IconSize } from './Type';
3
+
4
+ export const ICON_SIZES: IconSize = {
5
+ xxxSmall: { size: iconSize.iconSize01 },
6
+ xxSmall: { size: iconSize.iconSize02 },
7
+ xSmall: { size: iconSize.iconSize03 },
8
+ small: { size: iconSize.iconSize03 },
9
+ medium: { size: iconSize.iconSize03 },
10
+ large: { size: iconSize.iconSize04 },
11
+ xLarge: { size: iconSize.iconSize05 },
12
+ xxLarge: { size: iconSize.iconSize06 },
13
+ xxxLarge: { size: iconSize.iconSize09 },
14
+ };
@@ -0,0 +1,13 @@
1
+ // Removed redundant empty lines
2
+ export type IconSizeKey =
3
+ | 'xxxSmall'
4
+ | 'xxSmall'
5
+ | 'xSmall'
6
+ | 'small'
7
+ | 'medium'
8
+ | 'large'
9
+ | 'xLarge'
10
+ | 'xxLarge'
11
+ | 'xxxLarge';
12
+
13
+ export type IconSize = Record<IconSizeKey, any>;