@luxfi/ui 6.1.2 → 7.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 (240) hide show
  1. package/dist/accordion.cjs +213 -0
  2. package/dist/accordion.d.cts +74 -0
  3. package/dist/accordion.d.ts +74 -0
  4. package/dist/accordion.js +186 -0
  5. package/dist/alert.cjs +553 -0
  6. package/dist/alert.d.cts +30 -0
  7. package/dist/alert.d.ts +30 -0
  8. package/dist/alert.js +531 -0
  9. package/dist/avatar.cjs +149 -0
  10. package/dist/avatar.d.cts +25 -0
  11. package/dist/avatar.d.ts +25 -0
  12. package/dist/avatar.js +125 -0
  13. package/dist/badge.cjs +611 -0
  14. package/dist/badge.d.cts +23 -0
  15. package/dist/badge.d.ts +23 -0
  16. package/dist/badge.js +589 -0
  17. package/dist/bank.cjs +272 -0
  18. package/dist/bank.d.cts +76 -0
  19. package/dist/bank.d.ts +76 -0
  20. package/dist/bank.js +258 -0
  21. package/dist/button.cjs +689 -0
  22. package/dist/button.d.cts +52 -0
  23. package/dist/button.d.ts +52 -0
  24. package/dist/button.js +664 -0
  25. package/dist/checkbox.cjs +265 -0
  26. package/dist/checkbox.d.cts +31 -0
  27. package/dist/checkbox.d.ts +31 -0
  28. package/dist/checkbox.js +241 -0
  29. package/dist/close-button.cjs +73 -0
  30. package/dist/close-button.d.cts +9 -0
  31. package/dist/close-button.d.ts +9 -0
  32. package/dist/close-button.js +51 -0
  33. package/dist/collapsible.cjs +702 -0
  34. package/dist/collapsible.d.cts +23 -0
  35. package/dist/collapsible.d.ts +23 -0
  36. package/dist/collapsible.js +679 -0
  37. package/dist/color-mode.cjs +96 -0
  38. package/dist/color-mode.d.cts +25 -0
  39. package/dist/color-mode.d.ts +25 -0
  40. package/dist/color-mode.js +72 -0
  41. package/dist/dialog.cjs +279 -0
  42. package/dist/dialog.d.cts +66 -0
  43. package/dist/dialog.d.ts +66 -0
  44. package/dist/dialog.js +246 -0
  45. package/dist/drawer.cjs +207 -0
  46. package/dist/drawer.d.cts +36 -0
  47. package/dist/drawer.d.ts +36 -0
  48. package/dist/drawer.js +175 -0
  49. package/dist/empty-state.cjs +93 -0
  50. package/dist/empty-state.d.cts +13 -0
  51. package/dist/empty-state.d.ts +13 -0
  52. package/dist/empty-state.js +71 -0
  53. package/dist/expiration-selector.cjs +138 -0
  54. package/dist/expiration-selector.d.cts +16 -0
  55. package/dist/expiration-selector.d.ts +16 -0
  56. package/dist/expiration-selector.js +116 -0
  57. package/dist/field.cjs +183 -0
  58. package/dist/field.d.cts +24 -0
  59. package/dist/field.d.ts +24 -0
  60. package/dist/field.js +160 -0
  61. package/dist/greeks-display.cjs +114 -0
  62. package/dist/greeks-display.d.cts +14 -0
  63. package/dist/greeks-display.d.ts +14 -0
  64. package/dist/greeks-display.js +92 -0
  65. package/dist/heading.cjs +46 -0
  66. package/dist/heading.d.cts +10 -0
  67. package/dist/heading.d.ts +10 -0
  68. package/dist/heading.js +40 -0
  69. package/dist/icon-button.cjs +491 -0
  70. package/dist/icon-button.d.cts +33 -0
  71. package/dist/icon-button.d.ts +33 -0
  72. package/dist/icon-button.js +470 -0
  73. package/dist/image.cjs +572 -0
  74. package/dist/image.d.cts +57 -0
  75. package/dist/image.d.ts +57 -0
  76. package/dist/image.js +551 -0
  77. package/dist/index.cjs +7316 -0
  78. package/dist/index.d.cts +58 -0
  79. package/dist/index.d.ts +58 -0
  80. package/dist/index.js +7137 -0
  81. package/dist/input-group.cjs +155 -0
  82. package/dist/input-group.d.cts +17 -0
  83. package/dist/input-group.d.ts +17 -0
  84. package/dist/input-group.js +133 -0
  85. package/dist/input.cjs +65 -0
  86. package/dist/input.d.cts +11 -0
  87. package/dist/input.d.ts +11 -0
  88. package/dist/input.js +59 -0
  89. package/dist/link.cjs +630 -0
  90. package/dist/link.d.cts +37 -0
  91. package/dist/link.d.ts +37 -0
  92. package/dist/link.js +606 -0
  93. package/dist/menu.cjs +305 -0
  94. package/dist/menu.d.cts +84 -0
  95. package/dist/menu.d.ts +84 -0
  96. package/dist/menu.js +269 -0
  97. package/dist/option-chain.cjs +221 -0
  98. package/dist/option-chain.d.cts +37 -0
  99. package/dist/option-chain.d.ts +37 -0
  100. package/dist/option-chain.js +199 -0
  101. package/dist/option-position.cjs +164 -0
  102. package/dist/option-position.d.cts +29 -0
  103. package/dist/option-position.d.ts +29 -0
  104. package/dist/option-position.js +142 -0
  105. package/dist/pin-input.cjs +182 -0
  106. package/dist/pin-input.d.cts +25 -0
  107. package/dist/pin-input.d.ts +25 -0
  108. package/dist/pin-input.js +160 -0
  109. package/dist/pnl-diagram.cjs +453 -0
  110. package/dist/pnl-diagram.d.cts +11 -0
  111. package/dist/pnl-diagram.d.ts +11 -0
  112. package/dist/pnl-diagram.js +431 -0
  113. package/dist/popover.cjs +327 -0
  114. package/dist/popover.d.cts +73 -0
  115. package/dist/popover.d.ts +73 -0
  116. package/dist/popover.js +294 -0
  117. package/dist/progress-circle.cjs +152 -0
  118. package/dist/progress-circle.d.cts +47 -0
  119. package/dist/progress-circle.d.ts +47 -0
  120. package/dist/progress-circle.js +128 -0
  121. package/dist/progress.cjs +117 -0
  122. package/dist/progress.d.cts +28 -0
  123. package/dist/progress.d.ts +28 -0
  124. package/dist/progress.js +94 -0
  125. package/dist/provider.cjs +62 -0
  126. package/dist/provider.d.cts +7 -0
  127. package/dist/provider.d.ts +7 -0
  128. package/dist/provider.js +40 -0
  129. package/dist/radio.cjs +177 -0
  130. package/dist/radio.d.cts +53 -0
  131. package/dist/radio.d.ts +53 -0
  132. package/dist/radio.js +153 -0
  133. package/dist/rating.cjs +80 -0
  134. package/dist/rating.d.cts +14 -0
  135. package/dist/rating.d.ts +14 -0
  136. package/dist/rating.js +58 -0
  137. package/dist/select.cjs +791 -0
  138. package/dist/select.d.cts +130 -0
  139. package/dist/select.d.ts +130 -0
  140. package/dist/select.js +757 -0
  141. package/dist/separator.cjs +57 -0
  142. package/dist/separator.d.cts +13 -0
  143. package/dist/separator.d.ts +13 -0
  144. package/dist/separator.js +51 -0
  145. package/dist/skeleton.cjs +370 -0
  146. package/dist/skeleton.d.cts +60 -0
  147. package/dist/skeleton.d.ts +60 -0
  148. package/dist/skeleton.js +346 -0
  149. package/dist/slider.cjs +138 -0
  150. package/dist/slider.d.cts +24 -0
  151. package/dist/slider.d.ts +24 -0
  152. package/dist/slider.js +115 -0
  153. package/dist/strategy-builder.cjs +373 -0
  154. package/dist/strategy-builder.d.cts +26 -0
  155. package/dist/strategy-builder.d.ts +26 -0
  156. package/dist/strategy-builder.js +351 -0
  157. package/dist/switch.cjs +163 -0
  158. package/dist/switch.d.cts +27 -0
  159. package/dist/switch.d.ts +27 -0
  160. package/dist/switch.js +140 -0
  161. package/dist/table.cjs +1044 -0
  162. package/dist/table.d.cts +107 -0
  163. package/dist/table.d.ts +107 -0
  164. package/dist/table.js +1013 -0
  165. package/dist/tabs.cjs +240 -0
  166. package/dist/tabs.d.cts +78 -0
  167. package/dist/tabs.d.ts +78 -0
  168. package/dist/tabs.js +213 -0
  169. package/dist/tag.cjs +651 -0
  170. package/dist/tag.d.cts +21 -0
  171. package/dist/tag.d.ts +21 -0
  172. package/dist/tag.js +628 -0
  173. package/dist/textarea.cjs +65 -0
  174. package/dist/textarea.d.cts +11 -0
  175. package/dist/textarea.d.ts +11 -0
  176. package/dist/textarea.js +59 -0
  177. package/dist/toaster.cjs +99 -0
  178. package/dist/toaster.d.cts +29 -0
  179. package/dist/toaster.d.ts +29 -0
  180. package/dist/toaster.js +96 -0
  181. package/dist/tooltip.cjs +171 -0
  182. package/dist/tooltip.d.cts +39 -0
  183. package/dist/tooltip.d.ts +39 -0
  184. package/dist/tooltip.js +148 -0
  185. package/dist/utils.cjs +11 -0
  186. package/dist/utils.d.cts +5 -0
  187. package/dist/utils.d.ts +5 -0
  188. package/dist/utils.js +9 -0
  189. package/package.json +284 -85
  190. package/src/accordion.tsx +285 -0
  191. package/src/alert.tsx +221 -0
  192. package/src/avatar.tsx +174 -0
  193. package/src/badge.tsx +158 -0
  194. package/src/bank.tsx +325 -0
  195. package/src/button.tsx +411 -0
  196. package/src/checkbox.tsx +307 -0
  197. package/src/close-button.tsx +51 -0
  198. package/src/collapsible.tsx +126 -0
  199. package/src/color-mode.tsx +125 -0
  200. package/src/dialog.tsx +356 -0
  201. package/src/drawer.tsx +186 -0
  202. package/src/empty-state.tsx +97 -0
  203. package/src/expiration-selector.tsx +163 -0
  204. package/src/field.tsx +202 -0
  205. package/src/greeks-display.tsx +138 -0
  206. package/src/heading.tsx +55 -0
  207. package/src/icon-button.tsx +192 -0
  208. package/src/image.tsx +280 -0
  209. package/src/index.ts +268 -0
  210. package/src/input-group.tsx +159 -0
  211. package/src/input.tsx +60 -0
  212. package/src/link.tsx +326 -0
  213. package/src/menu.tsx +471 -0
  214. package/src/option-chain.tsx +261 -0
  215. package/src/option-position.tsx +200 -0
  216. package/src/pin-input.tsx +187 -0
  217. package/src/pnl-diagram.tsx +458 -0
  218. package/src/popover.tsx +400 -0
  219. package/src/progress-circle.tsx +180 -0
  220. package/src/progress.tsx +109 -0
  221. package/src/provider.tsx +12 -0
  222. package/src/radio.tsx +175 -0
  223. package/src/rating.tsx +79 -0
  224. package/src/select.tsx +696 -0
  225. package/src/separator.tsx +59 -0
  226. package/src/skeleton.tsx +302 -0
  227. package/src/slider.tsx +152 -0
  228. package/src/strategy-builder.tsx +466 -0
  229. package/src/switch.tsx +158 -0
  230. package/src/table.tsx +621 -0
  231. package/src/tabs.tsx +354 -0
  232. package/src/tag.tsx +159 -0
  233. package/src/textarea.tsx +60 -0
  234. package/src/toaster.tsx +117 -0
  235. package/src/tokens.css +438 -0
  236. package/src/tooltip.tsx +184 -0
  237. package/src/utils/cn.ts +7 -0
  238. package/src/utils.ts +6 -0
  239. package/tokens.css +438 -0
  240. package/README.md +0 -109
package/dist/field.cjs ADDED
@@ -0,0 +1,183 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var LabelPrimitive = require('@radix-ui/react-label');
5
+ var React = require('react');
6
+ var clsx = require('clsx');
7
+ var tailwindMerge = require('tailwind-merge');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ // src/field.tsx
32
+ function cn(...inputs) {
33
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
34
+ }
35
+ var space = String.fromCharCode(32);
36
+ function getComponentDisplayName(type) {
37
+ if (typeof type === "string") return void 0;
38
+ if ("displayName" in type) return type.displayName;
39
+ return void 0;
40
+ }
41
+ var Field = React__namespace.forwardRef(
42
+ function Field2(props, ref) {
43
+ const {
44
+ label,
45
+ children,
46
+ helperText,
47
+ errorText,
48
+ optionalText,
49
+ size,
50
+ required,
51
+ disabled,
52
+ readOnly,
53
+ invalid,
54
+ floating,
55
+ id,
56
+ className,
57
+ style
58
+ } = props;
59
+ if (floating && label) {
60
+ const injectedProps2 = {
61
+ className: "peer",
62
+ placeholder: " ",
63
+ size,
64
+ floating,
65
+ disabled,
66
+ readOnly
67
+ };
68
+ const labelElement = /* @__PURE__ */ jsxRuntime.jsxs(
69
+ LabelPrimitive__namespace.Root,
70
+ {
71
+ className: cn(
72
+ "absolute left-3 top-1/2 -translate-y-1/2",
73
+ "text-[var(--color-input-placeholder,theme(colors.gray.400))]",
74
+ "pointer-events-none select-none",
75
+ "origin-top-left transition-all duration-150",
76
+ "peer-focus:top-1 peer-focus:translate-y-0 peer-focus:scale-75",
77
+ "peer-[:not(:placeholder-shown)]:top-1 peer-[:not(:placeholder-shown)]:translate-y-0 peer-[:not(:placeholder-shown)]:scale-75"
78
+ ),
79
+ htmlFor: id,
80
+ children: [
81
+ label,
82
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-[var(--color-fg-error,theme(colors.red.500))]", "aria-hidden": "true", children: "*" }),
83
+ !required && optionalText && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-[var(--color-text-secondary,theme(colors.gray.400))] text-sm", children: optionalText }),
84
+ errorText && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-0.5 text-[var(--color-fg-error,theme(colors.red.500))] text-sm", children: [
85
+ "-",
86
+ space,
87
+ errorText
88
+ ] })
89
+ ]
90
+ }
91
+ );
92
+ const helperTextElement = helperText ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-xs text-[var(--color-text-secondary,theme(colors.gray.400))]", children: helperText }) : null;
93
+ const child2 = React__namespace.Children.only(children);
94
+ const isInputGroup = getComponentDisplayName(child2.type) === "InputGroup";
95
+ if (isInputGroup) {
96
+ const inputElement2 = React__namespace.cloneElement(
97
+ React__namespace.Children.only(child2.props.children),
98
+ injectedProps2
99
+ );
100
+ const groupInputElement = React__namespace.cloneElement(
101
+ child2,
102
+ {},
103
+ inputElement2,
104
+ labelElement
105
+ );
106
+ return /* @__PURE__ */ jsxRuntime.jsxs(
107
+ "div",
108
+ {
109
+ ref,
110
+ id,
111
+ className: cn("relative w-full", className),
112
+ style,
113
+ "data-disabled": disabled || void 0,
114
+ "data-readonly": readOnly || void 0,
115
+ "data-invalid": invalid || void 0,
116
+ children: [
117
+ groupInputElement,
118
+ helperTextElement
119
+ ]
120
+ }
121
+ );
122
+ }
123
+ const inputElement = React__namespace.cloneElement(child2, injectedProps2);
124
+ return /* @__PURE__ */ jsxRuntime.jsxs(
125
+ "div",
126
+ {
127
+ ref,
128
+ id,
129
+ className: cn("relative w-full", className),
130
+ style,
131
+ "data-disabled": disabled || void 0,
132
+ "data-readonly": readOnly || void 0,
133
+ "data-invalid": invalid || void 0,
134
+ children: [
135
+ inputElement,
136
+ labelElement,
137
+ helperTextElement
138
+ ]
139
+ }
140
+ );
141
+ }
142
+ const injectedProps = {
143
+ size
144
+ };
145
+ const child = React__namespace.Children.only(children);
146
+ const clonedChild = React__namespace.cloneElement(child, injectedProps);
147
+ return /* @__PURE__ */ jsxRuntime.jsxs(
148
+ "div",
149
+ {
150
+ ref,
151
+ id,
152
+ className: cn("flex flex-col gap-1", className),
153
+ style,
154
+ "data-disabled": disabled || void 0,
155
+ "data-readonly": readOnly || void 0,
156
+ "data-invalid": invalid || void 0,
157
+ children: [
158
+ label && /* @__PURE__ */ jsxRuntime.jsxs(
159
+ LabelPrimitive__namespace.Root,
160
+ {
161
+ className: cn(
162
+ "text-sm font-medium text-[var(--color-field-label,theme(colors.gray.700))]",
163
+ "dark:text-[var(--color-field-label,theme(colors.gray.300))]",
164
+ disabled && "opacity-40"
165
+ ),
166
+ htmlFor: id,
167
+ children: [
168
+ label,
169
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-[var(--color-fg-error,theme(colors.red.500))]", "aria-hidden": "true", children: "*" }),
170
+ !required && optionalText && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-[var(--color-text-secondary,theme(colors.gray.400))] text-sm font-normal", children: optionalText })
171
+ ]
172
+ }
173
+ ),
174
+ clonedChild,
175
+ helperText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-[var(--color-text-secondary,theme(colors.gray.400))]", children: helperText }),
176
+ errorText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-[var(--color-fg-error,theme(colors.red.500))]", children: errorText })
177
+ ]
178
+ }
179
+ );
180
+ }
181
+ );
182
+
183
+ exports.Field = Field;
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { InputProps } from './input.cjs';
3
+ import { InputGroupProps } from './input-group.cjs';
4
+
5
+ interface FieldProps {
6
+ readonly label?: React.ReactNode;
7
+ readonly helperText?: React.ReactNode;
8
+ readonly errorText?: React.ReactNode;
9
+ readonly optionalText?: React.ReactNode;
10
+ readonly children: React.ReactElement<InputProps> | React.ReactElement<InputGroupProps>;
11
+ readonly size?: 'sm' | 'md' | 'lg' | '2xl';
12
+ readonly required?: boolean;
13
+ readonly disabled?: boolean;
14
+ readonly readOnly?: boolean;
15
+ readonly invalid?: boolean;
16
+ readonly floating?: boolean;
17
+ readonly bgColor?: string | Record<string, string>;
18
+ readonly id?: string;
19
+ readonly className?: string;
20
+ readonly style?: React.CSSProperties;
21
+ }
22
+ declare const Field: React.ForwardRefExoticComponent<FieldProps & React.RefAttributes<HTMLDivElement>>;
23
+
24
+ export { Field, type FieldProps };
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { InputProps } from './input.js';
3
+ import { InputGroupProps } from './input-group.js';
4
+
5
+ interface FieldProps {
6
+ readonly label?: React.ReactNode;
7
+ readonly helperText?: React.ReactNode;
8
+ readonly errorText?: React.ReactNode;
9
+ readonly optionalText?: React.ReactNode;
10
+ readonly children: React.ReactElement<InputProps> | React.ReactElement<InputGroupProps>;
11
+ readonly size?: 'sm' | 'md' | 'lg' | '2xl';
12
+ readonly required?: boolean;
13
+ readonly disabled?: boolean;
14
+ readonly readOnly?: boolean;
15
+ readonly invalid?: boolean;
16
+ readonly floating?: boolean;
17
+ readonly bgColor?: string | Record<string, string>;
18
+ readonly id?: string;
19
+ readonly className?: string;
20
+ readonly style?: React.CSSProperties;
21
+ }
22
+ declare const Field: React.ForwardRefExoticComponent<FieldProps & React.RefAttributes<HTMLDivElement>>;
23
+
24
+ export { Field, type FieldProps };
package/dist/field.js ADDED
@@ -0,0 +1,160 @@
1
+ "use client";
2
+ import * as LabelPrimitive from '@radix-ui/react-label';
3
+ import * as React from 'react';
4
+ import { clsx } from 'clsx';
5
+ import { twMerge } from 'tailwind-merge';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ // src/field.tsx
9
+ function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
12
+ var space = String.fromCharCode(32);
13
+ function getComponentDisplayName(type) {
14
+ if (typeof type === "string") return void 0;
15
+ if ("displayName" in type) return type.displayName;
16
+ return void 0;
17
+ }
18
+ var Field = React.forwardRef(
19
+ function Field2(props, ref) {
20
+ const {
21
+ label,
22
+ children,
23
+ helperText,
24
+ errorText,
25
+ optionalText,
26
+ size,
27
+ required,
28
+ disabled,
29
+ readOnly,
30
+ invalid,
31
+ floating,
32
+ id,
33
+ className,
34
+ style
35
+ } = props;
36
+ if (floating && label) {
37
+ const injectedProps2 = {
38
+ className: "peer",
39
+ placeholder: " ",
40
+ size,
41
+ floating,
42
+ disabled,
43
+ readOnly
44
+ };
45
+ const labelElement = /* @__PURE__ */ jsxs(
46
+ LabelPrimitive.Root,
47
+ {
48
+ className: cn(
49
+ "absolute left-3 top-1/2 -translate-y-1/2",
50
+ "text-[var(--color-input-placeholder,theme(colors.gray.400))]",
51
+ "pointer-events-none select-none",
52
+ "origin-top-left transition-all duration-150",
53
+ "peer-focus:top-1 peer-focus:translate-y-0 peer-focus:scale-75",
54
+ "peer-[:not(:placeholder-shown)]:top-1 peer-[:not(:placeholder-shown)]:translate-y-0 peer-[:not(:placeholder-shown)]:scale-75"
55
+ ),
56
+ htmlFor: id,
57
+ children: [
58
+ label,
59
+ required && /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-[var(--color-fg-error,theme(colors.red.500))]", "aria-hidden": "true", children: "*" }),
60
+ !required && optionalText && /* @__PURE__ */ jsx("span", { className: "ml-1 text-[var(--color-text-secondary,theme(colors.gray.400))] text-sm", children: optionalText }),
61
+ errorText && /* @__PURE__ */ jsxs("span", { className: "ml-0.5 text-[var(--color-fg-error,theme(colors.red.500))] text-sm", children: [
62
+ "-",
63
+ space,
64
+ errorText
65
+ ] })
66
+ ]
67
+ }
68
+ );
69
+ const helperTextElement = helperText ? /* @__PURE__ */ jsx("p", { className: "mt-1.5 text-xs text-[var(--color-text-secondary,theme(colors.gray.400))]", children: helperText }) : null;
70
+ const child2 = React.Children.only(children);
71
+ const isInputGroup = getComponentDisplayName(child2.type) === "InputGroup";
72
+ if (isInputGroup) {
73
+ const inputElement2 = React.cloneElement(
74
+ React.Children.only(child2.props.children),
75
+ injectedProps2
76
+ );
77
+ const groupInputElement = React.cloneElement(
78
+ child2,
79
+ {},
80
+ inputElement2,
81
+ labelElement
82
+ );
83
+ return /* @__PURE__ */ jsxs(
84
+ "div",
85
+ {
86
+ ref,
87
+ id,
88
+ className: cn("relative w-full", className),
89
+ style,
90
+ "data-disabled": disabled || void 0,
91
+ "data-readonly": readOnly || void 0,
92
+ "data-invalid": invalid || void 0,
93
+ children: [
94
+ groupInputElement,
95
+ helperTextElement
96
+ ]
97
+ }
98
+ );
99
+ }
100
+ const inputElement = React.cloneElement(child2, injectedProps2);
101
+ return /* @__PURE__ */ jsxs(
102
+ "div",
103
+ {
104
+ ref,
105
+ id,
106
+ className: cn("relative w-full", className),
107
+ style,
108
+ "data-disabled": disabled || void 0,
109
+ "data-readonly": readOnly || void 0,
110
+ "data-invalid": invalid || void 0,
111
+ children: [
112
+ inputElement,
113
+ labelElement,
114
+ helperTextElement
115
+ ]
116
+ }
117
+ );
118
+ }
119
+ const injectedProps = {
120
+ size
121
+ };
122
+ const child = React.Children.only(children);
123
+ const clonedChild = React.cloneElement(child, injectedProps);
124
+ return /* @__PURE__ */ jsxs(
125
+ "div",
126
+ {
127
+ ref,
128
+ id,
129
+ className: cn("flex flex-col gap-1", className),
130
+ style,
131
+ "data-disabled": disabled || void 0,
132
+ "data-readonly": readOnly || void 0,
133
+ "data-invalid": invalid || void 0,
134
+ children: [
135
+ label && /* @__PURE__ */ jsxs(
136
+ LabelPrimitive.Root,
137
+ {
138
+ className: cn(
139
+ "text-sm font-medium text-[var(--color-field-label,theme(colors.gray.700))]",
140
+ "dark:text-[var(--color-field-label,theme(colors.gray.300))]",
141
+ disabled && "opacity-40"
142
+ ),
143
+ htmlFor: id,
144
+ children: [
145
+ label,
146
+ required && /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-[var(--color-fg-error,theme(colors.red.500))]", "aria-hidden": "true", children: "*" }),
147
+ !required && optionalText && /* @__PURE__ */ jsx("span", { className: "ml-1 text-[var(--color-text-secondary,theme(colors.gray.400))] text-sm font-normal", children: optionalText })
148
+ ]
149
+ }
150
+ ),
151
+ clonedChild,
152
+ helperText && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--color-text-secondary,theme(colors.gray.400))]", children: helperText }),
153
+ errorText && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--color-fg-error,theme(colors.red.500))]", children: errorText })
154
+ ]
155
+ }
156
+ );
157
+ }
158
+ );
159
+
160
+ export { Field };
@@ -0,0 +1,114 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ function cn(...inputs) {
30
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
31
+ }
32
+ var GREEKS = [
33
+ { key: "delta", label: "Delta", symbol: "\u0394", color: "text-blue-400", barColor: "bg-blue-500", decimals: 4, maxMagnitude: 1 },
34
+ { key: "gamma", label: "Gamma", symbol: "\u0393", color: "text-purple-400", barColor: "bg-purple-500", decimals: 4, maxMagnitude: 0.1 },
35
+ { key: "theta", label: "Theta", symbol: "\u0398", color: "text-red-400", barColor: "bg-red-500", decimals: 4, maxMagnitude: 1 },
36
+ { key: "vega", label: "Vega", symbol: "\u03BD", color: "text-emerald-400", barColor: "bg-emerald-500", decimals: 4, maxMagnitude: 1 },
37
+ { key: "rho", label: "Rho", symbol: "\u03C1", color: "text-orange-400", barColor: "bg-orange-500", decimals: 4, maxMagnitude: 1 },
38
+ { key: "iv", label: "IV", symbol: "\u03C3", color: "text-amber-400", barColor: "bg-amber-500", decimals: 1, maxMagnitude: 100 }
39
+ ];
40
+ function GreekItem({ def, value, compact }) {
41
+ const magnitude = Math.min(Math.abs(value) / def.maxMagnitude, 1);
42
+ const displayValue = def.key === "iv" ? `${(value * 100).toFixed(def.decimals)}%` : value.toFixed(def.decimals);
43
+ return /* @__PURE__ */ jsxRuntime.jsxs(
44
+ "div",
45
+ {
46
+ className: cn(
47
+ "flex items-center gap-1.5",
48
+ compact ? "min-w-0" : "min-w-[100px]"
49
+ ),
50
+ children: [
51
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-[10px] font-semibold shrink-0", def.color), children: def.symbol }),
52
+ !compact && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-zinc-500 shrink-0 w-[34px]", children: def.label }),
53
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
54
+ "font-mono tabular-nums text-xs text-zinc-200 shrink-0",
55
+ value < 0 && "text-red-400"
56
+ ), children: displayValue }),
57
+ !compact && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 h-1 rounded-full bg-zinc-800 min-w-[24px] max-w-[48px] overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
58
+ "div",
59
+ {
60
+ className: cn("h-full rounded-full transition-all", def.barColor),
61
+ style: { width: `${magnitude * 100}%`, opacity: 0.7 }
62
+ }
63
+ ) })
64
+ ]
65
+ }
66
+ );
67
+ }
68
+ var GreeksDisplay = React__namespace.forwardRef(
69
+ function GreeksDisplay2(props, ref) {
70
+ const {
71
+ delta,
72
+ gamma,
73
+ theta,
74
+ vega,
75
+ rho,
76
+ iv,
77
+ compact = false,
78
+ className,
79
+ ...rest
80
+ } = props;
81
+ const values = {
82
+ delta,
83
+ gamma,
84
+ theta,
85
+ vega,
86
+ rho,
87
+ iv
88
+ };
89
+ const activeGreeks = GREEKS.filter((g) => values[g.key] !== void 0);
90
+ return /* @__PURE__ */ jsxRuntime.jsx(
91
+ "div",
92
+ {
93
+ ref,
94
+ className: cn(
95
+ "flex flex-wrap items-center",
96
+ compact ? "gap-3" : "gap-4",
97
+ className
98
+ ),
99
+ ...rest,
100
+ children: activeGreeks.map((g) => /* @__PURE__ */ jsxRuntime.jsx(
101
+ GreekItem,
102
+ {
103
+ def: g,
104
+ value: values[g.key],
105
+ compact
106
+ },
107
+ g.key
108
+ ))
109
+ }
110
+ );
111
+ }
112
+ );
113
+
114
+ exports.GreeksDisplay = GreeksDisplay;
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+
3
+ interface GreeksDisplayProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ readonly delta: number;
5
+ readonly gamma: number;
6
+ readonly theta: number;
7
+ readonly vega: number;
8
+ readonly rho?: number;
9
+ readonly iv?: number;
10
+ readonly compact?: boolean;
11
+ }
12
+ declare const GreeksDisplay: React.ForwardRefExoticComponent<GreeksDisplayProps & React.RefAttributes<HTMLDivElement>>;
13
+
14
+ export { GreeksDisplay, type GreeksDisplayProps };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+
3
+ interface GreeksDisplayProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ readonly delta: number;
5
+ readonly gamma: number;
6
+ readonly theta: number;
7
+ readonly vega: number;
8
+ readonly rho?: number;
9
+ readonly iv?: number;
10
+ readonly compact?: boolean;
11
+ }
12
+ declare const GreeksDisplay: React.ForwardRefExoticComponent<GreeksDisplayProps & React.RefAttributes<HTMLDivElement>>;
13
+
14
+ export { GreeksDisplay, type GreeksDisplayProps };
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+ var GREEKS = [
11
+ { key: "delta", label: "Delta", symbol: "\u0394", color: "text-blue-400", barColor: "bg-blue-500", decimals: 4, maxMagnitude: 1 },
12
+ { key: "gamma", label: "Gamma", symbol: "\u0393", color: "text-purple-400", barColor: "bg-purple-500", decimals: 4, maxMagnitude: 0.1 },
13
+ { key: "theta", label: "Theta", symbol: "\u0398", color: "text-red-400", barColor: "bg-red-500", decimals: 4, maxMagnitude: 1 },
14
+ { key: "vega", label: "Vega", symbol: "\u03BD", color: "text-emerald-400", barColor: "bg-emerald-500", decimals: 4, maxMagnitude: 1 },
15
+ { key: "rho", label: "Rho", symbol: "\u03C1", color: "text-orange-400", barColor: "bg-orange-500", decimals: 4, maxMagnitude: 1 },
16
+ { key: "iv", label: "IV", symbol: "\u03C3", color: "text-amber-400", barColor: "bg-amber-500", decimals: 1, maxMagnitude: 100 }
17
+ ];
18
+ function GreekItem({ def, value, compact }) {
19
+ const magnitude = Math.min(Math.abs(value) / def.maxMagnitude, 1);
20
+ const displayValue = def.key === "iv" ? `${(value * 100).toFixed(def.decimals)}%` : value.toFixed(def.decimals);
21
+ return /* @__PURE__ */ jsxs(
22
+ "div",
23
+ {
24
+ className: cn(
25
+ "flex items-center gap-1.5",
26
+ compact ? "min-w-0" : "min-w-[100px]"
27
+ ),
28
+ children: [
29
+ /* @__PURE__ */ jsx("span", { className: cn("text-[10px] font-semibold shrink-0", def.color), children: def.symbol }),
30
+ !compact && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-zinc-500 shrink-0 w-[34px]", children: def.label }),
31
+ /* @__PURE__ */ jsx("span", { className: cn(
32
+ "font-mono tabular-nums text-xs text-zinc-200 shrink-0",
33
+ value < 0 && "text-red-400"
34
+ ), children: displayValue }),
35
+ !compact && /* @__PURE__ */ jsx("div", { className: "flex-1 h-1 rounded-full bg-zinc-800 min-w-[24px] max-w-[48px] overflow-hidden", children: /* @__PURE__ */ jsx(
36
+ "div",
37
+ {
38
+ className: cn("h-full rounded-full transition-all", def.barColor),
39
+ style: { width: `${magnitude * 100}%`, opacity: 0.7 }
40
+ }
41
+ ) })
42
+ ]
43
+ }
44
+ );
45
+ }
46
+ var GreeksDisplay = React.forwardRef(
47
+ function GreeksDisplay2(props, ref) {
48
+ const {
49
+ delta,
50
+ gamma,
51
+ theta,
52
+ vega,
53
+ rho,
54
+ iv,
55
+ compact = false,
56
+ className,
57
+ ...rest
58
+ } = props;
59
+ const values = {
60
+ delta,
61
+ gamma,
62
+ theta,
63
+ vega,
64
+ rho,
65
+ iv
66
+ };
67
+ const activeGreeks = GREEKS.filter((g) => values[g.key] !== void 0);
68
+ return /* @__PURE__ */ jsx(
69
+ "div",
70
+ {
71
+ ref,
72
+ className: cn(
73
+ "flex flex-wrap items-center",
74
+ compact ? "gap-3" : "gap-4",
75
+ className
76
+ ),
77
+ ...rest,
78
+ children: activeGreeks.map((g) => /* @__PURE__ */ jsx(
79
+ GreekItem,
80
+ {
81
+ def: g,
82
+ value: values[g.key],
83
+ compact
84
+ },
85
+ g.key
86
+ ))
87
+ }
88
+ );
89
+ }
90
+ );
91
+
92
+ export { GreeksDisplay };
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var React__default = /*#__PURE__*/_interopDefault(React);
12
+
13
+ // src/heading.tsx
14
+ function cn(...inputs) {
15
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
16
+ }
17
+ var LEVEL_TAG = {
18
+ "1": "h1",
19
+ "2": "h2",
20
+ "3": "h3"
21
+ };
22
+ var LEVEL_CLASSES = {
23
+ "1": "text-[18px] leading-[24px] font-medium lg:text-[32px] lg:leading-[40px] lg:tracking-[-0.5px]",
24
+ "2": "text-[16px] leading-[24px] font-medium lg:text-[24px] lg:leading-[32px]",
25
+ "3": "text-[14px] leading-[20px] font-semibold lg:text-[18px] lg:leading-[24px] lg:font-medium"
26
+ };
27
+ var BASE_CLASSES = "font-heading text-heading";
28
+ var Heading = React__default.default.forwardRef(
29
+ function Heading2({ level, className, mb, size: _size, style: styleProp, ...rest }, ref) {
30
+ const Tag = level ? LEVEL_TAG[level] : "h2";
31
+ const levelClasses = level ? LEVEL_CLASSES[level] : void 0;
32
+ const shimStyle = { ...styleProp };
33
+ if (mb !== void 0) shimStyle.marginBottom = typeof mb === "number" ? `${mb * 4}px` : mb;
34
+ return /* @__PURE__ */ jsxRuntime.jsx(
35
+ Tag,
36
+ {
37
+ ref,
38
+ className: cn(BASE_CLASSES, levelClasses, className),
39
+ style: Object.keys(shimStyle).length > 0 ? shimStyle : void 0,
40
+ ...rest
41
+ }
42
+ );
43
+ }
44
+ );
45
+
46
+ exports.Heading = Heading;
@@ -0,0 +1,10 @@
1
+ import React__default from 'react';
2
+
3
+ interface HeadingProps extends React__default.ComponentPropsWithoutRef<'h1'> {
4
+ level?: '1' | '2' | '3';
5
+ mb?: number | string;
6
+ size?: string;
7
+ }
8
+ declare const Heading: React__default.ForwardRefExoticComponent<HeadingProps & React__default.RefAttributes<HTMLHeadingElement>>;
9
+
10
+ export { Heading, type HeadingProps };