@skybin-tech/nebula-ui 0.0.1

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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/cjs/components/Button/Button.cjs +37 -0
  4. package/dist/cjs/components/Button/Button.cjs.map +1 -0
  5. package/dist/cjs/components/Form/Checkbox.cjs +145 -0
  6. package/dist/cjs/components/Form/Checkbox.cjs.map +1 -0
  7. package/dist/cjs/components/Form/Form.cjs +93 -0
  8. package/dist/cjs/components/Form/Form.cjs.map +1 -0
  9. package/dist/cjs/components/Form/Radio.cjs +178 -0
  10. package/dist/cjs/components/Form/Radio.cjs.map +1 -0
  11. package/dist/cjs/components/Form/Select.cjs +168 -0
  12. package/dist/cjs/components/Form/Select.cjs.map +1 -0
  13. package/dist/cjs/components/Form/Switch.cjs +125 -0
  14. package/dist/cjs/components/Form/Switch.cjs.map +1 -0
  15. package/dist/cjs/components/Form/TextArea.cjs +168 -0
  16. package/dist/cjs/components/Form/TextArea.cjs.map +1 -0
  17. package/dist/cjs/components/Form/TextBox.cjs +211 -0
  18. package/dist/cjs/components/Form/TextBox.cjs.map +1 -0
  19. package/dist/cjs/components/Form/context.cjs +131 -0
  20. package/dist/cjs/components/Form/context.cjs.map +1 -0
  21. package/dist/cjs/components/Form/hooks.cjs +36 -0
  22. package/dist/cjs/components/Form/hooks.cjs.map +1 -0
  23. package/dist/cjs/components/Input/Input.cjs +44 -0
  24. package/dist/cjs/components/Input/Input.cjs.map +1 -0
  25. package/dist/cjs/components/ui/checkbox.cjs +45 -0
  26. package/dist/cjs/components/ui/checkbox.cjs.map +1 -0
  27. package/dist/cjs/components/ui/input.cjs +41 -0
  28. package/dist/cjs/components/ui/input.cjs.map +1 -0
  29. package/dist/cjs/components/ui/label.cjs +38 -0
  30. package/dist/cjs/components/ui/label.cjs.map +1 -0
  31. package/dist/cjs/components/ui/radio-group.cjs +53 -0
  32. package/dist/cjs/components/ui/radio-group.cjs.map +1 -0
  33. package/dist/cjs/components/ui/select.cjs +144 -0
  34. package/dist/cjs/components/ui/select.cjs.map +1 -0
  35. package/dist/cjs/components/ui/switch.cjs +45 -0
  36. package/dist/cjs/components/ui/switch.cjs.map +1 -0
  37. package/dist/cjs/components/ui/textarea.cjs +38 -0
  38. package/dist/cjs/components/ui/textarea.cjs.map +1 -0
  39. package/dist/cjs/hooks/useDebounce.cjs +17 -0
  40. package/dist/cjs/hooks/useDebounce.cjs.map +1 -0
  41. package/dist/cjs/hooks/useToggle.cjs +12 -0
  42. package/dist/cjs/hooks/useToggle.cjs.map +1 -0
  43. package/dist/cjs/index.cjs +65 -0
  44. package/dist/cjs/index.cjs.map +1 -0
  45. package/dist/cjs/nebula-ui.css +212 -0
  46. package/dist/cjs/utils/cn.cjs +9 -0
  47. package/dist/cjs/utils/cn.cjs.map +1 -0
  48. package/dist/components/Button/Button.d.ts +18 -0
  49. package/dist/components/Button/Button.d.ts.map +1 -0
  50. package/dist/components/Button/Button.js +37 -0
  51. package/dist/components/Button/Button.js.map +1 -0
  52. package/dist/components/Button/index.d.ts +3 -0
  53. package/dist/components/Button/index.d.ts.map +1 -0
  54. package/dist/components/Form/Checkbox.d.ts +32 -0
  55. package/dist/components/Form/Checkbox.d.ts.map +1 -0
  56. package/dist/components/Form/Checkbox.js +145 -0
  57. package/dist/components/Form/Checkbox.js.map +1 -0
  58. package/dist/components/Form/Form.d.ts +62 -0
  59. package/dist/components/Form/Form.d.ts.map +1 -0
  60. package/dist/components/Form/Form.js +93 -0
  61. package/dist/components/Form/Form.js.map +1 -0
  62. package/dist/components/Form/Radio.d.ts +80 -0
  63. package/dist/components/Form/Radio.d.ts.map +1 -0
  64. package/dist/components/Form/Radio.js +178 -0
  65. package/dist/components/Form/Radio.js.map +1 -0
  66. package/dist/components/Form/Select.d.ts +75 -0
  67. package/dist/components/Form/Select.d.ts.map +1 -0
  68. package/dist/components/Form/Select.js +168 -0
  69. package/dist/components/Form/Select.js.map +1 -0
  70. package/dist/components/Form/Switch.d.ts +34 -0
  71. package/dist/components/Form/Switch.d.ts.map +1 -0
  72. package/dist/components/Form/Switch.js +125 -0
  73. package/dist/components/Form/Switch.js.map +1 -0
  74. package/dist/components/Form/TextArea.d.ts +47 -0
  75. package/dist/components/Form/TextArea.d.ts.map +1 -0
  76. package/dist/components/Form/TextArea.js +168 -0
  77. package/dist/components/Form/TextArea.js.map +1 -0
  78. package/dist/components/Form/TextBox.d.ts +61 -0
  79. package/dist/components/Form/TextBox.d.ts.map +1 -0
  80. package/dist/components/Form/TextBox.js +211 -0
  81. package/dist/components/Form/TextBox.js.map +1 -0
  82. package/dist/components/Form/context.d.ts +107 -0
  83. package/dist/components/Form/context.d.ts.map +1 -0
  84. package/dist/components/Form/context.js +131 -0
  85. package/dist/components/Form/context.js.map +1 -0
  86. package/dist/components/Form/hooks.d.ts +21 -0
  87. package/dist/components/Form/hooks.d.ts.map +1 -0
  88. package/dist/components/Form/hooks.js +36 -0
  89. package/dist/components/Form/hooks.js.map +1 -0
  90. package/dist/components/Form/index.d.ts +18 -0
  91. package/dist/components/Form/index.d.ts.map +1 -0
  92. package/dist/components/Input/Input.d.ts +18 -0
  93. package/dist/components/Input/Input.d.ts.map +1 -0
  94. package/dist/components/Input/Input.js +44 -0
  95. package/dist/components/Input/Input.js.map +1 -0
  96. package/dist/components/Input/index.d.ts +3 -0
  97. package/dist/components/Input/index.d.ts.map +1 -0
  98. package/dist/components/ui/checkbox.d.ts +5 -0
  99. package/dist/components/ui/checkbox.d.ts.map +1 -0
  100. package/dist/components/ui/checkbox.js +28 -0
  101. package/dist/components/ui/checkbox.js.map +1 -0
  102. package/dist/components/ui/index.d.ts +16 -0
  103. package/dist/components/ui/index.d.ts.map +1 -0
  104. package/dist/components/ui/input.d.ts +11 -0
  105. package/dist/components/ui/input.d.ts.map +1 -0
  106. package/dist/components/ui/input.js +24 -0
  107. package/dist/components/ui/input.js.map +1 -0
  108. package/dist/components/ui/label.d.ts +6 -0
  109. package/dist/components/ui/label.d.ts.map +1 -0
  110. package/dist/components/ui/label.js +21 -0
  111. package/dist/components/ui/label.js.map +1 -0
  112. package/dist/components/ui/radio-group.d.ts +6 -0
  113. package/dist/components/ui/radio-group.d.ts.map +1 -0
  114. package/dist/components/ui/radio-group.js +36 -0
  115. package/dist/components/ui/radio-group.js.map +1 -0
  116. package/dist/components/ui/select.d.ts +14 -0
  117. package/dist/components/ui/select.d.ts.map +1 -0
  118. package/dist/components/ui/select.js +127 -0
  119. package/dist/components/ui/select.js.map +1 -0
  120. package/dist/components/ui/switch.d.ts +5 -0
  121. package/dist/components/ui/switch.d.ts.map +1 -0
  122. package/dist/components/ui/switch.js +28 -0
  123. package/dist/components/ui/switch.js.map +1 -0
  124. package/dist/components/ui/textarea.d.ts +11 -0
  125. package/dist/components/ui/textarea.d.ts.map +1 -0
  126. package/dist/components/ui/textarea.js +21 -0
  127. package/dist/components/ui/textarea.js.map +1 -0
  128. package/dist/hooks/useDebounce.d.ts +8 -0
  129. package/dist/hooks/useDebounce.d.ts.map +1 -0
  130. package/dist/hooks/useDebounce.js +17 -0
  131. package/dist/hooks/useDebounce.js.map +1 -0
  132. package/dist/hooks/useToggle.d.ts +7 -0
  133. package/dist/hooks/useToggle.d.ts.map +1 -0
  134. package/dist/hooks/useToggle.js +12 -0
  135. package/dist/hooks/useToggle.js.map +1 -0
  136. package/dist/index.d.ts +13 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +62 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/nebula-ui.css +212 -0
  141. package/dist/utils/cn.d.ts +7 -0
  142. package/dist/utils/cn.d.ts.map +1 -0
  143. package/dist/utils/cn.js +9 -0
  144. package/dist/utils/cn.js.map +1 -0
  145. package/package.json +201 -0
@@ -0,0 +1,212 @@
1
+ .skybin-button {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ gap: 0.5rem;
6
+ font-family: inherit;
7
+ font-weight: 500;
8
+ border-radius: 0.375rem;
9
+ cursor: pointer;
10
+ transition: all 0.15s ease-in-out;
11
+ border: 1px solid transparent;
12
+ position: relative;
13
+ }
14
+
15
+ .skybin-button:focus-visible {
16
+ outline: 2px solid #3b82f6;
17
+ outline-offset: 2px;
18
+ }
19
+
20
+ .skybin-button:disabled {
21
+ opacity: 0.6;
22
+ cursor: not-allowed;
23
+ }
24
+
25
+ /* Variants */
26
+ .skybin-button--primary {
27
+ background-color: #3b82f6;
28
+ color: white;
29
+ border-color: #3b82f6;
30
+ }
31
+
32
+ .skybin-button--primary:hover:not(:disabled) {
33
+ background-color: #2563eb;
34
+ border-color: #2563eb;
35
+ }
36
+
37
+ .skybin-button--secondary {
38
+ background-color: #6b7280;
39
+ color: white;
40
+ border-color: #6b7280;
41
+ }
42
+
43
+ .skybin-button--secondary:hover:not(:disabled) {
44
+ background-color: #4b5563;
45
+ border-color: #4b5563;
46
+ }
47
+
48
+ .skybin-button--outline {
49
+ background-color: transparent;
50
+ color: #3b82f6;
51
+ border-color: #3b82f6;
52
+ }
53
+
54
+ .skybin-button--outline:hover:not(:disabled) {
55
+ background-color: #3b82f6;
56
+ color: white;
57
+ }
58
+
59
+ .skybin-button--ghost {
60
+ background-color: transparent;
61
+ color: #374151;
62
+ border-color: transparent;
63
+ }
64
+
65
+ .skybin-button--ghost:hover:not(:disabled) {
66
+ background-color: #f3f4f6;
67
+ }
68
+
69
+ .skybin-button--danger {
70
+ background-color: #ef4444;
71
+ color: white;
72
+ border-color: #ef4444;
73
+ }
74
+
75
+ .skybin-button--danger:hover:not(:disabled) {
76
+ background-color: #dc2626;
77
+ border-color: #dc2626;
78
+ }
79
+
80
+ /* Sizes */
81
+ .skybin-button--sm {
82
+ padding: 0.375rem 0.75rem;
83
+ font-size: 0.875rem;
84
+ line-height: 1.25rem;
85
+ }
86
+
87
+ .skybin-button--md {
88
+ padding: 0.5rem 1rem;
89
+ font-size: 0.875rem;
90
+ line-height: 1.5rem;
91
+ }
92
+
93
+ .skybin-button--lg {
94
+ padding: 0.75rem 1.5rem;
95
+ font-size: 1rem;
96
+ line-height: 1.75rem;
97
+ }
98
+
99
+ /* Full width */
100
+ .skybin-button--full-width {
101
+ display: flex;
102
+ width: 100%;
103
+ }
104
+
105
+ /* Loading state */
106
+ .skybin-button--loading {
107
+ position: relative;
108
+ }
109
+
110
+ .skybin-button__spinner {
111
+ width: 1em;
112
+ height: 1em;
113
+ border: 2px solid currentColor;
114
+ border-right-color: transparent;
115
+ border-radius: 50%;
116
+ animation: skybin-button-spin 0.6s linear infinite;
117
+ position: absolute;
118
+ }
119
+
120
+ .skybin-button__content--hidden {
121
+ visibility: hidden;
122
+ }
123
+
124
+ @keyframes skybin-button-spin {
125
+ to {
126
+ transform: rotate(360deg);
127
+ }
128
+ }
129
+ .skybin-input-wrapper {
130
+ display: flex;
131
+ flex-direction: column;
132
+ gap: 0.375rem;
133
+ }
134
+
135
+ .skybin-input-wrapper--full-width {
136
+ width: 100%;
137
+ }
138
+
139
+ .skybin-input__label {
140
+ font-size: 0.875rem;
141
+ font-weight: 500;
142
+ color: var(--form-text, rgba(0, 0, 0, 0.85));
143
+ }
144
+
145
+ .skybin-input {
146
+ width: 100%;
147
+ border-radius: var(--form-border-radius, 6px);
148
+ border: 1px solid var(--form-border, #d9d9d9);
149
+ background-color: var(--form-bg, #ffffff);
150
+ padding: 0.5rem 0.75rem;
151
+ font-size: 0.875rem;
152
+ transition: var(--form-transition, all 0.2s ease-in-out);
153
+ outline: none;
154
+ }
155
+
156
+ .skybin-input:focus {
157
+ border-color: var(--form-primary, #1890ff);
158
+ box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
159
+ }
160
+
161
+ .skybin-input:hover:not(:focus):not(:disabled) {
162
+ border-color: var(--form-primary-hover, #40a9ff);
163
+ }
164
+
165
+ .skybin-input:disabled {
166
+ background-color: var(--form-bg-disabled, #f5f5f5);
167
+ cursor: not-allowed;
168
+ opacity: 0.5;
169
+ }
170
+
171
+ .skybin-input::placeholder {
172
+ color: var(--form-text-secondary, rgba(0, 0, 0, 0.45));
173
+ }
174
+
175
+ /* Sizes */
176
+ .skybin-input--sm {
177
+ height: 2rem;
178
+ padding: 0.25rem 0.5rem;
179
+ font-size: 0.75rem;
180
+ }
181
+
182
+ .skybin-input--md {
183
+ height: 2.5rem;
184
+ padding: 0.5rem 0.75rem;
185
+ font-size: 0.875rem;
186
+ }
187
+
188
+ .skybin-input--lg {
189
+ height: 3rem;
190
+ padding: 0.625rem 1rem;
191
+ font-size: 1rem;
192
+ }
193
+
194
+ /* Error state */
195
+ .skybin-input--error {
196
+ border-color: var(--form-error, #ff4d4f);
197
+ }
198
+
199
+ .skybin-input--error:focus {
200
+ border-color: var(--form-error, #ff4d4f);
201
+ box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);
202
+ }
203
+
204
+ .skybin-input__error {
205
+ font-size: 0.75rem;
206
+ color: var(--form-error, #ff4d4f);
207
+ }
208
+
209
+ .skybin-input__helper {
210
+ font-size: 0.75rem;
211
+ color: var(--form-text-secondary, rgba(0, 0, 0, 0.45));
212
+ }
@@ -0,0 +1,7 @@
1
+ import { ClassValue } from 'clsx';
2
+ /**
3
+ * Utility function to merge class names conditionally
4
+ * Combines clsx for conditional classes and tailwind-merge for deduplication
5
+ */
6
+ export declare function cn(...inputs: ClassValue[]): string;
7
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
@@ -0,0 +1,9 @@
1
+ import { clsx } from "../node_modules/clsx/dist/clsx.js";
2
+ import { twMerge } from "../node_modules/tailwind-merge/dist/bundle-mjs.js";
3
+ function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ export {
7
+ cn
8
+ };
9
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","sources":["../../src/utils/cn.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\n/**\r\n * Utility function to merge class names conditionally\r\n * Combines clsx for conditional classes and tailwind-merge for deduplication\r\n */\r\nexport function cn(...inputs: ClassValue[]): string {\r\n return twMerge(clsx(inputs));\r\n}\r\n"],"names":[],"mappings":";;AAOO,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;"}
package/package.json ADDED
@@ -0,0 +1,201 @@
1
+ {
2
+ "name": "@skybin-tech/nebula-ui",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "Reusable React component library with form validation using shadcn/ui patterns, react-hook-form, and Zod",
6
+ "main": "./dist/cjs/src/index.cjs",
7
+ "module": "./dist/src/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/src/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.ts",
17
+ "default": "./dist/cjs/src/index.cjs"
18
+ }
19
+ },
20
+ "./components/Button": {
21
+ "import": {
22
+ "types": "./dist/components/Button/index.d.ts",
23
+ "default": "./dist/src/components/Button/Button2.js"
24
+ },
25
+ "require": {
26
+ "types": "./dist/components/Button/index.d.ts",
27
+ "default": "./dist/cjs/src/components/Button/Button2.cjs"
28
+ }
29
+ },
30
+ "./components/Form": {
31
+ "import": {
32
+ "types": "./dist/components/Form/index.d.ts",
33
+ "default": "./dist/src/components/Form/Form.js"
34
+ },
35
+ "require": {
36
+ "types": "./dist/components/Form/index.d.ts",
37
+ "default": "./dist/cjs/src/components/Form/Form.cjs"
38
+ }
39
+ },
40
+ "./components/Input": {
41
+ "import": {
42
+ "types": "./dist/components/Input/index.d.ts",
43
+ "default": "./dist/src/components/Input/Input2.js"
44
+ },
45
+ "require": {
46
+ "types": "./dist/components/Input/index.d.ts",
47
+ "default": "./dist/cjs/src/components/Input/Input2.cjs"
48
+ }
49
+ },
50
+ "./hooks/useDebounce": {
51
+ "import": {
52
+ "types": "./dist/hooks/useDebounce.d.ts",
53
+ "default": "./dist/src/hooks/useDebounce.js"
54
+ },
55
+ "require": {
56
+ "types": "./dist/hooks/useDebounce.d.ts",
57
+ "default": "./dist/cjs/src/hooks/useDebounce.cjs"
58
+ }
59
+ },
60
+ "./hooks/useToggle": {
61
+ "import": {
62
+ "types": "./dist/hooks/useToggle.d.ts",
63
+ "default": "./dist/src/hooks/useToggle.js"
64
+ },
65
+ "require": {
66
+ "types": "./dist/hooks/useToggle.d.ts",
67
+ "default": "./dist/cjs/src/hooks/useToggle.cjs"
68
+ }
69
+ },
70
+ "./utils/cn": {
71
+ "import": {
72
+ "types": "./dist/utils/cn.d.ts",
73
+ "default": "./dist/src/utils/cn.js"
74
+ },
75
+ "require": {
76
+ "types": "./dist/utils/cn.d.ts",
77
+ "default": "./dist/cjs/src/utils/cn.cjs"
78
+ }
79
+ },
80
+ "./styles.css": "./dist/skybin-ui.css",
81
+ "./package.json": "./package.json"
82
+ },
83
+ "typesVersions": {
84
+ "*": {
85
+ "components/Button": [
86
+ "./dist/components/Button/index.d.ts"
87
+ ],
88
+ "components/Form": [
89
+ "./dist/components/Form/index.d.ts"
90
+ ],
91
+ "components/Input": [
92
+ "./dist/components/Input/index.d.ts"
93
+ ],
94
+ "hooks/useDebounce": [
95
+ "./dist/hooks/useDebounce.d.ts"
96
+ ],
97
+ "hooks/useToggle": [
98
+ "./dist/hooks/useToggle.d.ts"
99
+ ],
100
+ "utils/cn": [
101
+ "./dist/utils/cn.d.ts"
102
+ ]
103
+ }
104
+ },
105
+ "files": [
106
+ "dist"
107
+ ],
108
+ "sideEffects": [
109
+ "**/*.css"
110
+ ],
111
+ "scripts": {
112
+ "dev": "vite",
113
+ "build": "tsc -b && vite build",
114
+ "build:lib": "vite build",
115
+ "lint": "eslint .",
116
+ "preview": "vite preview",
117
+ "prepublishOnly": "npm run build:lib",
118
+ "storybook": "storybook dev -p 6006",
119
+ "build-storybook": "storybook build",
120
+ "publish": "yarn version --patch && yarn publish --access public"
121
+ },
122
+ "peerDependencies": {
123
+ "react": "^18.0.0 || ^19.0.0",
124
+ "react-dom": "^18.0.0 || ^19.0.0",
125
+ "react-hook-form": "^7.0.0",
126
+ "zod": "^3.0.0 || ^4.0.0"
127
+ },
128
+ "peerDependenciesMeta": {
129
+ "zod": {
130
+ "optional": false
131
+ },
132
+ "react-hook-form": {
133
+ "optional": false
134
+ }
135
+ },
136
+ "devDependencies": {
137
+ "@chromatic-com/storybook": "^5.0.1",
138
+ "@eslint/js": "^9.39.3",
139
+ "@storybook/addon-a11y": "^10.2.10",
140
+ "@storybook/addon-docs": "^10.2.10",
141
+ "@storybook/addon-onboarding": "^10.2.10",
142
+ "@storybook/addon-vitest": "^10.2.10",
143
+ "@storybook/react-vite": "^10.2.10",
144
+ "@types/glob": "^9.0.0",
145
+ "@types/node": "^25.3.0",
146
+ "@types/react": "^19.2.14",
147
+ "@types/react-dom": "^19.2.3",
148
+ "@vitejs/plugin-react": "^5.1.4",
149
+ "@vitest/browser-playwright": "^4.0.18",
150
+ "@vitest/coverage-v8": "^4.0.18",
151
+ "esbuild": "^0.27.3",
152
+ "eslint": "^9.39.3",
153
+ "eslint-plugin-react-hooks": "^7.0.1",
154
+ "eslint-plugin-react-refresh": "^0.5.0",
155
+ "eslint-plugin-storybook": "^10.2.10",
156
+ "glob": "^13.0.6",
157
+ "globals": "^16.5.0",
158
+ "playwright": "^1.58.2",
159
+ "react": "^19.2.4",
160
+ "react-dom": "^19.2.4",
161
+ "storybook": "^10.2.10",
162
+ "typescript": "~5.9.3",
163
+ "typescript-eslint": "^8.56.0",
164
+ "vite": "^7.3.1",
165
+ "vite-plugin-dts": "^4.5.4",
166
+ "vitest": "^4.0.18"
167
+ },
168
+ "repository": {
169
+ "type": "git",
170
+ "url": "git+https://github.com/your-org/skybin-ui.git"
171
+ },
172
+ "keywords": [
173
+ "react",
174
+ "components",
175
+ "ui",
176
+ "library",
177
+ "form",
178
+ "validation",
179
+ "zod",
180
+ "react-hook-form",
181
+ "typescript",
182
+ "tailwindcss"
183
+ ],
184
+ "license": "MIT",
185
+ "dependencies": {
186
+ "@hookform/resolvers": "^5.2.2",
187
+ "@radix-ui/react-checkbox": "^1.3.3",
188
+ "@radix-ui/react-label": "^2.1.8",
189
+ "@radix-ui/react-radio-group": "^1.3.8",
190
+ "@radix-ui/react-select": "^2.2.6",
191
+ "@radix-ui/react-slot": "^1.2.4",
192
+ "@radix-ui/react-switch": "^1.2.6",
193
+ "class-variance-authority": "^0.7.1",
194
+ "clsx": "^2.1.1",
195
+ "lucide-react": "^0.575.0",
196
+ "react-hook-form": "^7.71.2",
197
+ "tailwind-merge": "^3.5.0",
198
+ "tailwindcss": "^4.2.0",
199
+ "zod": "^4.3.6"
200
+ }
201
+ }