@luxfi/ui 5.6.0 → 6.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 (125) hide show
  1. package/README.md +109 -0
  2. package/package.json +81 -278
  3. package/dist/accordion.cjs +0 -213
  4. package/dist/accordion.js +0 -186
  5. package/dist/alert.cjs +0 -553
  6. package/dist/alert.js +0 -531
  7. package/dist/avatar.cjs +0 -149
  8. package/dist/avatar.js +0 -125
  9. package/dist/badge.cjs +0 -611
  10. package/dist/badge.js +0 -589
  11. package/dist/button.cjs +0 -689
  12. package/dist/button.js +0 -664
  13. package/dist/checkbox.cjs +0 -265
  14. package/dist/checkbox.js +0 -241
  15. package/dist/close-button.cjs +0 -73
  16. package/dist/close-button.js +0 -51
  17. package/dist/collapsible.cjs +0 -702
  18. package/dist/collapsible.js +0 -679
  19. package/dist/color-mode.cjs +0 -96
  20. package/dist/color-mode.js +0 -72
  21. package/dist/dialog.cjs +0 -279
  22. package/dist/dialog.js +0 -246
  23. package/dist/drawer.cjs +0 -207
  24. package/dist/drawer.js +0 -175
  25. package/dist/empty-state.cjs +0 -93
  26. package/dist/empty-state.js +0 -71
  27. package/dist/field.cjs +0 -183
  28. package/dist/field.js +0 -160
  29. package/dist/heading.cjs +0 -46
  30. package/dist/heading.js +0 -40
  31. package/dist/icon-button.cjs +0 -491
  32. package/dist/icon-button.js +0 -470
  33. package/dist/image.cjs +0 -572
  34. package/dist/image.js +0 -551
  35. package/dist/index.cjs +0 -5779
  36. package/dist/index.js +0 -5619
  37. package/dist/input-group.cjs +0 -155
  38. package/dist/input-group.js +0 -133
  39. package/dist/input.cjs +0 -65
  40. package/dist/input.js +0 -59
  41. package/dist/link.cjs +0 -630
  42. package/dist/link.js +0 -606
  43. package/dist/menu.cjs +0 -305
  44. package/dist/menu.js +0 -269
  45. package/dist/pin-input.cjs +0 -182
  46. package/dist/pin-input.js +0 -160
  47. package/dist/popover.cjs +0 -327
  48. package/dist/popover.js +0 -294
  49. package/dist/progress-circle.cjs +0 -152
  50. package/dist/progress-circle.js +0 -128
  51. package/dist/progress.cjs +0 -117
  52. package/dist/progress.js +0 -94
  53. package/dist/provider.cjs +0 -62
  54. package/dist/provider.js +0 -40
  55. package/dist/radio.cjs +0 -177
  56. package/dist/radio.js +0 -153
  57. package/dist/rating.cjs +0 -80
  58. package/dist/rating.js +0 -58
  59. package/dist/select.cjs +0 -791
  60. package/dist/select.js +0 -757
  61. package/dist/separator.cjs +0 -57
  62. package/dist/separator.js +0 -51
  63. package/dist/skeleton.cjs +0 -370
  64. package/dist/skeleton.js +0 -346
  65. package/dist/slider.cjs +0 -138
  66. package/dist/slider.js +0 -115
  67. package/dist/switch.cjs +0 -163
  68. package/dist/switch.js +0 -140
  69. package/dist/table.cjs +0 -1044
  70. package/dist/table.js +0 -1013
  71. package/dist/tabs.cjs +0 -240
  72. package/dist/tabs.js +0 -213
  73. package/dist/tag.cjs +0 -651
  74. package/dist/tag.js +0 -628
  75. package/dist/textarea.cjs +0 -65
  76. package/dist/textarea.js +0 -59
  77. package/dist/toaster.cjs +0 -99
  78. package/dist/toaster.js +0 -96
  79. package/dist/tooltip.cjs +0 -171
  80. package/dist/tooltip.js +0 -148
  81. package/dist/utils.cjs +0 -11
  82. package/dist/utils.js +0 -9
  83. package/src/accordion.tsx +0 -285
  84. package/src/alert.tsx +0 -221
  85. package/src/avatar.tsx +0 -174
  86. package/src/badge.tsx +0 -158
  87. package/src/button.tsx +0 -411
  88. package/src/checkbox.tsx +0 -307
  89. package/src/close-button.tsx +0 -51
  90. package/src/collapsible.tsx +0 -126
  91. package/src/color-mode.tsx +0 -125
  92. package/src/dialog.tsx +0 -356
  93. package/src/drawer.tsx +0 -186
  94. package/src/empty-state.tsx +0 -97
  95. package/src/field.tsx +0 -202
  96. package/src/heading.tsx +0 -55
  97. package/src/icon-button.tsx +0 -192
  98. package/src/image.tsx +0 -280
  99. package/src/index.ts +0 -192
  100. package/src/input-group.tsx +0 -159
  101. package/src/input.tsx +0 -60
  102. package/src/link.tsx +0 -326
  103. package/src/menu.tsx +0 -471
  104. package/src/pin-input.tsx +0 -187
  105. package/src/popover.tsx +0 -400
  106. package/src/progress-circle.tsx +0 -180
  107. package/src/progress.tsx +0 -109
  108. package/src/provider.tsx +0 -12
  109. package/src/radio.tsx +0 -175
  110. package/src/rating.tsx +0 -79
  111. package/src/select.tsx +0 -696
  112. package/src/separator.tsx +0 -59
  113. package/src/skeleton.tsx +0 -302
  114. package/src/slider.tsx +0 -152
  115. package/src/switch.tsx +0 -158
  116. package/src/table.tsx +0 -621
  117. package/src/tabs.tsx +0 -354
  118. package/src/tag.tsx +0 -159
  119. package/src/textarea.tsx +0 -60
  120. package/src/toaster.tsx +0 -117
  121. package/src/tokens.css +0 -438
  122. package/src/tooltip.tsx +0 -184
  123. package/src/utils/cn.ts +0 -7
  124. package/src/utils.ts +0 -6
  125. package/tokens.css +0 -438
package/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # `ui` Package
2
+
3
+ This package holds a component library and themes that can be used across all apps.
4
+
5
+ ## UI Package Philosophy
6
+
7
+ The `ui` package contains all low level components that are shared between apps. It should *not* contain components that are specific to any one app or Uniswap business logic. Each component should be guided by the following principles:
8
+
9
+ - All components should be compatible with all platforms.
10
+ - Wrap as many implementation details as possible, including any direct exports from Tamagui.
11
+ - Export only what’s needed from `ui/src` or another allowlisted path.
12
+ - Only include components that will be used beyond a single feature.
13
+
14
+ Components that are shared between all applications but encode Uniswap business logic should most likely be placed in the `uniswap` package!
15
+
16
+ ## Icons and Logos
17
+
18
+ Icons and logos are placed in `ui/src/components/{icons|logos}`. These files are generated from placing the file in `packages/ui/src/assets/icons` or `packages/ui/src/assets/logos/svg` and running the generate command(s):
19
+
20
+ ```bash
21
+ # Generate all icons
22
+ bun ui build:icons
23
+ # Generate any icons that do not yet have an existing TS file
24
+ bun ui build:icons:missing
25
+ ```
26
+
27
+ When adding an SVG, please ensure you replace color references as needed with `currentColor` to ensure the asset respects the color property when used.
28
+
29
+ Custom icons that take props can be added to the same icons import by adding the file in `packages/ui/src/components/icons/index.ts`.
30
+
31
+ ## Core Components
32
+
33
+ Many base components are available in the UI library. While some are customized `tamagui` elements or even fully custom elements, many are simple or direct exposure of `tamagui` elements. If you would like to use any `tamagui` elements, please add them through this library to ensure a layer of abstraction between tamagui and our usage when possible.
34
+
35
+ Below are summaries of the most commonly used elements.
36
+
37
+ ### Flex
38
+
39
+ The `Flex` component is the core organizational element of the UI library, acting as a base of a flexbox styling approach. Shortcuts are available for `row`, `grow`, `shrink`, `fill`, and `centered`. All other styling props can be added directly as needed.
40
+
41
+ ### Text
42
+
43
+ The `Text` element is the core element for displaying text through the app. The `variant` prop takes in the text variant from our design system (e.g `heading1`, `body2`, etc.) that is desired. All other text styling props can be added directly as needed.
44
+
45
+ ## Theme and Platform
46
+
47
+ ### Theming
48
+
49
+ Theming is applied through two primary methods:
50
+
51
+ 1. Any components that take in design systems values (e.g `heading1`, `body2`, etc.) will automatically respect the theme.
52
+ 2. In all other cases, `useSporeColors` will return the current theme colors to be used in any component.
53
+
54
+ To force a specific theme usage, the `Theme` wrapper will ensure other theme elements pick up the specific theme.
55
+
56
+ ```javascript
57
+ <Theme name="dark">
58
+ ...
59
+ </Theme>
60
+ ```
61
+
62
+ ### Screen Size Differences
63
+
64
+ All breakpoints for both vertical and horizontal sizing have been defined in `packages/ui/src/theme/breakpoints.ts`.
65
+
66
+ To account for screen size references, components take in props to adapt custom style per breakpoint, like so:
67
+
68
+ ```javascript
69
+ <Flex
70
+ margin="20"
71
+ $short={{ margin: 10 }}
72
+ >
73
+ ...
74
+ </Flex>
75
+ ```
76
+
77
+ When components cannot take in these props or a value needs to be resued multiple times, the `useMedia` hook allows these same breakpoint values to be defined programmatically.
78
+
79
+ ### Colors
80
+
81
+ We've made a hook `useSporeColors()` which gives you access to the current theme, and you can access the values off it as follows:
82
+
83
+ ```tsx
84
+ import { useSporeColors } from 'ui/src'
85
+
86
+ function MyComponent() {
87
+ const colors = useSporeColors()
88
+
89
+ colors.accent1.val // returns something like #fff
90
+ colors.accent1.get() // returns a "dynamic" color value
91
+ }
92
+ ```
93
+
94
+ #### When to use `.get()` vs `.val`
95
+
96
+ After some discussion we've come to prefer `.val` by default. This will always return the raw string color (in our case hex color) on all platforms, whereas `.get()` returns either an Object (iOS) or a string, which can cause issues when used with things like animations, or external components.
97
+
98
+ Using .val has some performance downside vs .get in that all usages of .val will re-render when themes change, whereas .get will avoid re-renders on iOS and Web by optimizing to platform-specific constructs. On iOS, it optimizes to [DynamicColorIOS](https://reactnative.dev/docs/dynamiccolorios), on web a CSS variable like `var(--accent1)`.
99
+
100
+ So if/when we notice slowness in our light/dark mode change, we'll want to check if our usages of .val are causing expensive re-renders and see if we can convert them to .get.
101
+
102
+ In summary:
103
+
104
+ - Prefer `.val` which always returns the original color string, like `#fff`.
105
+ - Using `.get()` returns a dynamic value depending on the platform and avoids re-rendering when themes change between light and dark. This is nice for fast light/dark mode switching (and in the future if we use sub-themes, it would also avoid re-renders there).
106
+ - On Android it returns the same as .val, `#fff`
107
+ - On iOS, it returns an object like `{ dynamic: { light: '#fff', dark: '#000' } }`
108
+ - On the web, it returns a CSS variable string, `var(--colorName)`
109
+ - You can call `.get('web')` to only optimize for web, or `.get('ios')` to only optimize for ios.
package/package.json CHANGED
@@ -1,286 +1,89 @@
1
1
  {
2
2
  "name": "@luxfi/ui",
3
- "version": "5.6.0",
4
- "description": "Radix + Tailwind UI primitives for Lux apps. Drop-in replacements for Chakra compound components.",
5
- "type": "module",
6
- "license": "MIT",
7
- "author": {
8
- "name": "Lux Partners",
9
- "url": "https://lux.network"
10
- },
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/luxfi/ui.git",
14
- "directory": "packages/ui"
15
- },
16
- "publishConfig": {
17
- "registry": "https://registry.npmjs.org/",
18
- "access": "public"
3
+ "version": "6.0.0",
4
+ "dependencies": {
5
+ "@gorhom/bottom-sheet": "4.6.4",
6
+ "@react-native-masked-view/masked-view": "0.3.2",
7
+ "@shopify/flash-list": "1.7.6",
8
+ "@shopify/react-native-skia": "2.2.20",
9
+ "@storybook/react": "8.5.2",
10
+ "@hanzogui/adapt": "2.0.1",
11
+ "@hanzogui/animations-css": "2.0.1",
12
+ "@hanzogui/animations-react-native": "2.0.1",
13
+ "@hanzogui/font-geist-sans": "2.0.1",
14
+ "@hanzogui/helpers-icon": "2.0.1",
15
+ "@hanzogui/portal": "2.0.1",
16
+ "@hanzogui/react-native-media-driver": "2.0.1",
17
+ "@hanzogui/remove-scroll": "2.0.1",
18
+ "@hanzogui/theme-base": "2.0.1",
19
+ "@tanstack/react-query": "5.90.20",
20
+ "@testing-library/react": "16.3.0",
21
+ "ethers": "5.7.2",
22
+ "expo-blur": "14.1.5",
23
+ "expo-linear-gradient": "14.1.5",
24
+ "i18next": "23.10.0",
25
+ "qrcode": "1.5.1",
26
+ "react": "19.0.3",
27
+ "react-i18next": "14.1.0",
28
+ "react-native": "0.79.5",
29
+ "react-native-fast-image": "8.6.3",
30
+ "react-native-gesture-handler": "2.24.0",
31
+ "react-native-image-colors": "1.5.2",
32
+ "react-native-keyboard-controller": "1.17.5",
33
+ "react-native-reanimated": "3.19.3",
34
+ "react-native-safe-area-context": "5.4.0",
35
+ "react-native-svg": "15.13.0",
36
+ "react-native-webview": "13.13.5",
37
+ "@hanzo/gui": "2.0.1",
38
+ "@luxfi/utilities": "^1.0.0",
39
+ "uuid": "9.0.0",
40
+ "wcag-contrast": "3.0.0"
19
41
  },
20
- "sideEffects": [
21
- "*.css"
22
- ],
23
- "main": "./dist/index.cjs",
24
- "module": "./dist/index.js",
25
- "types": "./dist/index.d.ts",
26
- "files": [
27
- "dist",
28
- "src",
29
- "tokens.css"
30
- ],
31
- "exports": {
32
- "./package.json": "./package.json",
33
- ".": {
34
- "types": "./dist/index.d.ts",
35
- "import": "./dist/index.js",
36
- "require": "./dist/index.cjs"
37
- },
38
- "./tokens.css": "./tokens.css",
39
- "./accordion": {
40
- "types": "./dist/accordion.d.ts",
41
- "import": "./dist/accordion.js",
42
- "require": "./dist/accordion.cjs"
43
- },
44
- "./alert": {
45
- "types": "./dist/alert.d.ts",
46
- "import": "./dist/alert.js",
47
- "require": "./dist/alert.cjs"
48
- },
49
- "./avatar": {
50
- "types": "./dist/avatar.d.ts",
51
- "import": "./dist/avatar.js",
52
- "require": "./dist/avatar.cjs"
53
- },
54
- "./badge": {
55
- "types": "./dist/badge.d.ts",
56
- "import": "./dist/badge.js",
57
- "require": "./dist/badge.cjs"
58
- },
59
- "./button": {
60
- "types": "./dist/button.d.ts",
61
- "import": "./dist/button.js",
62
- "require": "./dist/button.cjs"
63
- },
64
- "./checkbox": {
65
- "types": "./dist/checkbox.d.ts",
66
- "import": "./dist/checkbox.js",
67
- "require": "./dist/checkbox.cjs"
68
- },
69
- "./close-button": {
70
- "types": "./dist/close-button.d.ts",
71
- "import": "./dist/close-button.js",
72
- "require": "./dist/close-button.cjs"
73
- },
74
- "./collapsible": {
75
- "types": "./dist/collapsible.d.ts",
76
- "import": "./dist/collapsible.js",
77
- "require": "./dist/collapsible.cjs"
78
- },
79
- "./color-mode": {
80
- "types": "./dist/color-mode.d.ts",
81
- "import": "./dist/color-mode.js",
82
- "require": "./dist/color-mode.cjs"
83
- },
84
- "./dialog": {
85
- "types": "./dist/dialog.d.ts",
86
- "import": "./dist/dialog.js",
87
- "require": "./dist/dialog.cjs"
88
- },
89
- "./drawer": {
90
- "types": "./dist/drawer.d.ts",
91
- "import": "./dist/drawer.js",
92
- "require": "./dist/drawer.cjs"
93
- },
94
- "./empty-state": {
95
- "types": "./dist/empty-state.d.ts",
96
- "import": "./dist/empty-state.js",
97
- "require": "./dist/empty-state.cjs"
98
- },
99
- "./field": {
100
- "types": "./dist/field.d.ts",
101
- "import": "./dist/field.js",
102
- "require": "./dist/field.cjs"
103
- },
104
- "./heading": {
105
- "types": "./dist/heading.d.ts",
106
- "import": "./dist/heading.js",
107
- "require": "./dist/heading.cjs"
108
- },
109
- "./icon-button": {
110
- "types": "./dist/icon-button.d.ts",
111
- "import": "./dist/icon-button.js",
112
- "require": "./dist/icon-button.cjs"
113
- },
114
- "./image": {
115
- "types": "./dist/image.d.ts",
116
- "import": "./dist/image.js",
117
- "require": "./dist/image.cjs"
118
- },
119
- "./input": {
120
- "types": "./dist/input.d.ts",
121
- "import": "./dist/input.js",
122
- "require": "./dist/input.cjs"
123
- },
124
- "./input-group": {
125
- "types": "./dist/input-group.d.ts",
126
- "import": "./dist/input-group.js",
127
- "require": "./dist/input-group.cjs"
128
- },
129
- "./link": {
130
- "types": "./dist/link.d.ts",
131
- "import": "./dist/link.js",
132
- "require": "./dist/link.cjs"
133
- },
134
- "./menu": {
135
- "types": "./dist/menu.d.ts",
136
- "import": "./dist/menu.js",
137
- "require": "./dist/menu.cjs"
138
- },
139
- "./pin-input": {
140
- "types": "./dist/pin-input.d.ts",
141
- "import": "./dist/pin-input.js",
142
- "require": "./dist/pin-input.cjs"
143
- },
144
- "./popover": {
145
- "types": "./dist/popover.d.ts",
146
- "import": "./dist/popover.js",
147
- "require": "./dist/popover.cjs"
148
- },
149
- "./progress": {
150
- "types": "./dist/progress.d.ts",
151
- "import": "./dist/progress.js",
152
- "require": "./dist/progress.cjs"
153
- },
154
- "./progress-circle": {
155
- "types": "./dist/progress-circle.d.ts",
156
- "import": "./dist/progress-circle.js",
157
- "require": "./dist/progress-circle.cjs"
158
- },
159
- "./radio": {
160
- "types": "./dist/radio.d.ts",
161
- "import": "./dist/radio.js",
162
- "require": "./dist/radio.cjs"
163
- },
164
- "./rating": {
165
- "types": "./dist/rating.d.ts",
166
- "import": "./dist/rating.js",
167
- "require": "./dist/rating.cjs"
168
- },
169
- "./select": {
170
- "types": "./dist/select.d.ts",
171
- "import": "./dist/select.js",
172
- "require": "./dist/select.cjs"
173
- },
174
- "./separator": {
175
- "types": "./dist/separator.d.ts",
176
- "import": "./dist/separator.js",
177
- "require": "./dist/separator.cjs"
178
- },
179
- "./skeleton": {
180
- "types": "./dist/skeleton.d.ts",
181
- "import": "./dist/skeleton.js",
182
- "require": "./dist/skeleton.cjs"
183
- },
184
- "./slider": {
185
- "types": "./dist/slider.d.ts",
186
- "import": "./dist/slider.js",
187
- "require": "./dist/slider.cjs"
188
- },
189
- "./switch": {
190
- "types": "./dist/switch.d.ts",
191
- "import": "./dist/switch.js",
192
- "require": "./dist/switch.cjs"
193
- },
194
- "./table": {
195
- "types": "./dist/table.d.ts",
196
- "import": "./dist/table.js",
197
- "require": "./dist/table.cjs"
198
- },
199
- "./tabs": {
200
- "types": "./dist/tabs.d.ts",
201
- "import": "./dist/tabs.js",
202
- "require": "./dist/tabs.cjs"
203
- },
204
- "./tag": {
205
- "types": "./dist/tag.d.ts",
206
- "import": "./dist/tag.js",
207
- "require": "./dist/tag.cjs"
208
- },
209
- "./textarea": {
210
- "types": "./dist/textarea.d.ts",
211
- "import": "./dist/textarea.js",
212
- "require": "./dist/textarea.cjs"
213
- },
214
- "./toaster": {
215
- "types": "./dist/toaster.d.ts",
216
- "import": "./dist/toaster.js",
217
- "require": "./dist/toaster.cjs"
218
- },
219
- "./tooltip": {
220
- "types": "./dist/tooltip.d.ts",
221
- "import": "./dist/tooltip.js",
222
- "require": "./dist/tooltip.cjs"
223
- },
224
- "./provider": {
225
- "types": "./dist/provider.d.ts",
226
- "import": "./dist/provider.js",
227
- "require": "./dist/provider.cjs"
228
- },
229
- "./utils": {
230
- "types": "./dist/utils.d.ts",
231
- "import": "./dist/utils.js",
232
- "require": "./dist/utils.cjs"
233
- },
234
- "./explore": {
235
- "import": "./dist/index.js",
236
- "require": "./dist/index.cjs",
237
- "types": "./dist/index.d.ts"
238
- },
239
- "./explore/*": {
240
- "import": "./dist/*.js",
241
- "require": "./dist/*.cjs",
242
- "types": "./dist/*.d.ts"
243
- }
42
+ "devDependencies": {
43
+ "@storybook/test": "8.5.2",
44
+ "@hanzogui/animations-moti": "2.0.1",
45
+ "@hanzogui/core": "2.0.1",
46
+ "@types/chrome": "0.0.304",
47
+ "@types/fs-extra": "11.0.2",
48
+ "@types/node": "22.13.1",
49
+ "@types/qrcode": "1.5.5",
50
+ "@typescript/native-preview": "7.0.0-dev.20260108.1",
51
+ "@luxfi/eslint-config": "^1.0.0",
52
+ "@vitejs/plugin-react": "4.7.0",
53
+ "camelcase": "6.3.0",
54
+ "cheerio": "1.0.0-rc.12",
55
+ "esbuild-register": "3.6.0",
56
+ "eslint": "8.57.1",
57
+ "fs-extra": "11.2.0",
58
+ "jsdom": "20.0.3",
59
+ "typescript": "5.8.3",
60
+ "uppercamelcase": "3.0.0",
61
+ "vitest": "3.2.1",
62
+ "vitest-presets": "*"
244
63
  },
64
+ "files": ["types", "dist"],
65
+ "main": "./src/index.ts",
66
+ "module:jsx": "src",
67
+ "private": false,
245
68
  "scripts": {
246
- "build": "tsup",
247
- "build:check": "tsc --noEmit",
248
- "clean": "rm -rf dist",
249
- "dev": "tsup --watch"
69
+ "build:icons": "nx build:icons ui",
70
+ "build:icons:missing": "nx build:icons:missing ui",
71
+ "check:deps:usage": "nx check:deps:usage ui",
72
+ "lint": "nx lint ui",
73
+ "lint:fix": "nx lint:fix ui",
74
+ "lint:biome": "nx lint:biome ui",
75
+ "lint:biome:fix": "nx lint:biome:fix ui",
76
+ "lint:eslint": "nx lint:eslint ui",
77
+ "lint:eslint:fix": "nx lint:eslint:fix ui",
78
+ "test": "nx test ui",
79
+ "test:coverage": "nx test:coverage ui",
80
+ "typecheck": "nx typecheck ui",
81
+ "typecheck:tsgo": "nx typecheck:tsgo ui",
82
+ "watch": "nx watch ui"
250
83
  },
251
- "dependencies": {
252
- "@radix-ui/react-accordion": "^1.2.12",
253
- "@radix-ui/react-avatar": "^1.1.10",
254
- "@radix-ui/react-checkbox": "^1.3.3",
255
- "@radix-ui/react-collapsible": "^1.1.12",
256
- "@radix-ui/react-dialog": "^1.1.15",
257
- "@radix-ui/react-dropdown-menu": "^2.1.16",
258
- "@radix-ui/react-label": "^2.1.7",
259
- "@radix-ui/react-popover": "^1.1.15",
260
- "@radix-ui/react-progress": "^1.1.7",
261
- "@radix-ui/react-radio-group": "^1.3.8",
262
- "@radix-ui/react-select": "^2.2.6",
263
- "@radix-ui/react-slider": "^1.3.6",
264
- "@radix-ui/react-slot": "^1.2.3",
265
- "@radix-ui/react-switch": "^1.2.6",
266
- "@radix-ui/react-tabs": "^1.1.13",
267
- "@radix-ui/react-tooltip": "^1.2.8",
268
- "@uidotdev/usehooks": "^2.4.1",
269
- "class-variance-authority": "^0.7.1",
270
- "clsx": "^2.1.1",
271
- "es-toolkit": "^1.31.0",
272
- "react-icons": "^5.4.0",
273
- "sonner": "^2.0.0",
274
- "tailwind-merge": "^3.0.0"
275
- },
276
- "peerDependencies": {
277
- "react": "^18.0.0 || ^19.0.0",
278
- "react-dom": "^18.0.0 || ^19.0.0"
84
+ "nx": {
85
+ "includedScripts": []
279
86
  },
280
- "devDependencies": {
281
- "@types/react": "^19.0.0",
282
- "@types/react-dom": "^19.0.0",
283
- "tsup": "^8.5.0",
284
- "typescript": "^5.9.3"
285
- }
87
+ "sideEffects": ["*.css"],
88
+ "types": "./types/index"
286
89
  }