@blerp/design 1.3.17 → 1.4.2

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 (128) hide show
  1. package/dist/cjs/Blerp/BlerpImageRow.js +176 -57
  2. package/dist/cjs/Blerp/BlerpSavePopup.js +44 -40
  3. package/dist/cjs/Blerp/BlerpTitleRow.js +36 -19
  4. package/dist/cjs/Blerp/BlerpTopRow.js +110 -44
  5. package/dist/cjs/Blerp.js +9 -16
  6. package/dist/cjs/BlerpAudioContextProvider.js +2 -2
  7. package/dist/cjs/BlerpListView.js +318 -168
  8. package/dist/cjs/BlerpListViewPremium.js +155 -130
  9. package/dist/cjs/BlerpListViewSkeleton.js +60 -13
  10. package/dist/cjs/BlerpSkeleton.js +32 -9
  11. package/dist/cjs/CollectionCard.js +139 -60
  12. package/dist/cjs/CollectionListViewPremium.js +368 -297
  13. package/dist/cjs/CollectionSkeleton.js +74 -13
  14. package/dist/cjs/Dropdown.js +272 -172
  15. package/dist/cjs/EllipsisLoader.js +66 -21
  16. package/dist/cjs/GroupCard.js +64 -57
  17. package/dist/cjs/Icons/Icons.js +288 -426
  18. package/dist/cjs/ImageEditor.js +247 -0
  19. package/dist/cjs/ImageUpload.js +226 -0
  20. package/dist/cjs/NewBlerp.js +354 -160
  21. package/dist/cjs/NewBlerpTest.js +10 -792
  22. package/dist/cjs/NewCollectionModal.js +294 -310
  23. package/dist/cjs/PremiumCollectionCard.js +191 -454
  24. package/dist/cjs/PurchaseModals/CheckoutModal.js +1 -1
  25. package/dist/cjs/PurchaseModals/PremiumBlerpCheckoutModal.js +1 -1
  26. package/dist/cjs/PurchaseModals/PremiumCollectionCheckoutModal.js +1 -1
  27. package/dist/cjs/PurchaseModals/PremiumSubscriptionCheckoutModal.js +1 -1
  28. package/dist/cjs/ReactionButtons.js +26 -13
  29. package/dist/cjs/SnackbarContextProvider.js +200 -116
  30. package/dist/cjs/Theme.js +217 -90
  31. package/dist/cjs/Toggle.js +86 -32
  32. package/dist/cjs/UserCard.js +13 -32
  33. package/dist/cjs/UserPage/LibraryControls.js +180 -93
  34. package/dist/cjs/UserPage/UserLibraryHeader.js +23 -14
  35. package/dist/cjs/UserPage/UserProfileHeader.js +120 -105
  36. package/dist/cjs/UsernameWithPopout.js +12 -8
  37. package/dist/cjs/colors.js +15 -8
  38. package/dist/cjs/helpers.js +131 -0
  39. package/dist/cjs/index.js +92 -58
  40. package/dist/cjs/neo-components/Autocomplete.js +285 -0
  41. package/dist/cjs/neo-components/BottomNavigation.js +120 -0
  42. package/dist/cjs/neo-components/Box.js +48 -0
  43. package/dist/cjs/neo-components/Button.js +206 -0
  44. package/dist/cjs/neo-components/CircularProgress.js +92 -0
  45. package/dist/cjs/neo-components/Container.js +75 -0
  46. package/dist/cjs/neo-components/Dialog.js +441 -0
  47. package/dist/cjs/neo-components/Fab.js +237 -0
  48. package/dist/cjs/neo-components/FormControls.js +1057 -0
  49. package/dist/cjs/neo-components/Grid.js +256 -0
  50. package/dist/cjs/neo-components/IconButton.js +111 -0
  51. package/dist/cjs/neo-components/Input.js +495 -0
  52. package/dist/cjs/neo-components/Layout.js +1214 -0
  53. package/dist/cjs/neo-components/Misc.js +868 -0
  54. package/dist/cjs/neo-components/Navigation.js +1616 -0
  55. package/dist/cjs/neo-components/Paper.js +256 -0
  56. package/dist/cjs/neo-components/Stack.js +194 -0
  57. package/dist/cjs/neo-components/Stepper.js +291 -0
  58. package/dist/cjs/neo-components/Text.js +290 -0
  59. package/dist/cjs/neo-components/ThemeProvider.js +731 -0
  60. package/dist/cjs/neo-components/ToggleButton.js +223 -0
  61. package/dist/cjs/neo-components/createTheme.js +306 -0
  62. package/dist/cjs/neo-components/withSx.js +171 -0
  63. package/dist/cjs/neo-utils/sxToStyle.js +508 -0
  64. package/dist/esm/Blerp/BlerpImageRow.js +166 -46
  65. package/dist/esm/Blerp/BlerpSavePopup.js +35 -27
  66. package/dist/esm/Blerp/BlerpTitleRow.js +32 -13
  67. package/dist/esm/Blerp/BlerpTopRow.js +85 -16
  68. package/dist/esm/Blerp.js +4 -12
  69. package/dist/esm/BlerpAudioContextProvider.js +1 -2
  70. package/dist/esm/BlerpListView.js +313 -160
  71. package/dist/esm/BlerpListViewPremium.js +135 -109
  72. package/dist/esm/BlerpListViewSkeleton.js +60 -11
  73. package/dist/esm/BlerpSkeleton.js +32 -7
  74. package/dist/esm/CollectionCard.js +118 -38
  75. package/dist/esm/CollectionListViewPremium.js +367 -294
  76. package/dist/esm/CollectionSkeleton.js +73 -11
  77. package/dist/esm/Dropdown.js +260 -161
  78. package/dist/esm/EllipsisLoader.js +63 -18
  79. package/dist/esm/GroupCard.js +54 -46
  80. package/dist/esm/Icons/Icons.js +226 -367
  81. package/dist/esm/ImageEditor.js +240 -0
  82. package/dist/esm/ImageUpload.js +217 -0
  83. package/dist/esm/NewBlerp.js +282 -79
  84. package/dist/esm/NewBlerpTest.js +11 -781
  85. package/dist/esm/NewCollectionModal.js +289 -304
  86. package/dist/esm/PremiumCollectionCard.js +192 -451
  87. package/dist/esm/PurchaseModals/CheckoutModal.js +1 -1
  88. package/dist/esm/PurchaseModals/PremiumBlerpCheckoutModal.js +1 -1
  89. package/dist/esm/PurchaseModals/PremiumCollectionCheckoutModal.js +1 -1
  90. package/dist/esm/PurchaseModals/PremiumSubscriptionCheckoutModal.js +1 -1
  91. package/dist/esm/ReactionButtons.js +23 -8
  92. package/dist/esm/SnackbarContextProvider.js +196 -110
  93. package/dist/esm/Theme.js +187 -66
  94. package/dist/esm/Toggle.js +84 -29
  95. package/dist/esm/UserCard.js +1 -20
  96. package/dist/esm/UserPage/LibraryControls.js +159 -65
  97. package/dist/esm/UserPage/UserLibraryHeader.js +18 -10
  98. package/dist/esm/UserPage/UserProfileHeader.js +100 -79
  99. package/dist/esm/UsernameWithPopout.js +7 -4
  100. package/dist/esm/colors.js +11 -9
  101. package/dist/esm/helpers.js +122 -0
  102. package/dist/esm/icons.js +1 -1
  103. package/dist/esm/index.js +32 -2
  104. package/dist/esm/neo-components/Autocomplete.js +274 -0
  105. package/dist/esm/neo-components/BottomNavigation.js +109 -0
  106. package/dist/esm/neo-components/Box.js +36 -0
  107. package/dist/esm/neo-components/Button.js +194 -0
  108. package/dist/esm/neo-components/CircularProgress.js +81 -0
  109. package/dist/esm/neo-components/Container.js +63 -0
  110. package/dist/esm/neo-components/Dialog.js +423 -0
  111. package/dist/esm/neo-components/Fab.js +225 -0
  112. package/dist/esm/neo-components/FormControls.js +1041 -0
  113. package/dist/esm/neo-components/Grid.js +244 -0
  114. package/dist/esm/neo-components/IconButton.js +99 -0
  115. package/dist/esm/neo-components/Input.js +480 -0
  116. package/dist/esm/neo-components/Layout.js +1180 -0
  117. package/dist/esm/neo-components/Misc.js +850 -0
  118. package/dist/esm/neo-components/Navigation.js +1594 -0
  119. package/dist/esm/neo-components/Paper.js +243 -0
  120. package/dist/esm/neo-components/Stack.js +182 -0
  121. package/dist/esm/neo-components/Stepper.js +278 -0
  122. package/dist/esm/neo-components/Text.js +277 -0
  123. package/dist/esm/neo-components/ThemeProvider.js +718 -0
  124. package/dist/esm/neo-components/ToggleButton.js +214 -0
  125. package/dist/esm/neo-components/createTheme.js +297 -0
  126. package/dist/esm/neo-components/withSx.js +160 -0
  127. package/dist/esm/neo-utils/sxToStyle.js +502 -0
  128. package/package.json +19 -15
@@ -0,0 +1,495 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _extends = require('@babel/runtime/helpers/extends');
6
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
8
+ var React = require('react');
9
+ var withSx = require('./withSx.js');
10
+ var ThemeProvider = require('./ThemeProvider.js');
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
15
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
16
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
17
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
18
+
19
+ const _excluded = ["variant", "label", "placeholder", "helperText", "error", "disabled", "required", "fullWidth", "multiline", "rows", "maxRows", "minRows", "type", "value", "defaultValue", "onChange", "onFocus", "onBlur", "onClick", "onKeyDown", "InputProps", "inputProps", "InputLabelProps", "FormHelperTextProps", "size", "color", "darkMode", "autoFocus", "autoComplete", "name", "id", "inputRef", "startAdornment", "endAdornment", "style", "sx"],
20
+ _excluded2 = ["position", "children", "disablePointerEvents", "style"],
21
+ _excluded3 = ["children", "error", "disabled", "style"];
22
+
23
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
24
+
25
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
26
+
27
+ const resolveStyleValue = (value, colors) => {
28
+ if (typeof value === "string" && value.includes(".main")) {
29
+ const colorKey = value.replace(".main", "");
30
+ const color = colors === null || colors === void 0 ? void 0 : colors[colorKey];
31
+ if (color) return typeof color === "object" ? color.main : color;
32
+ }
33
+
34
+ return value;
35
+ };
36
+
37
+ const resolveStyles = (styleObj, colors) => {
38
+ if (!styleObj) return {};
39
+ const resolved = {};
40
+
41
+ for (const [key, value] of Object.entries(styleObj)) {
42
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
43
+ // Skip pseudo-selectors and nested objects for inline styles
44
+ if (key.startsWith("&") || key.startsWith(":")) continue;
45
+ resolved[key] = resolveStyles(value, colors);
46
+ } else {
47
+ resolved[key] = resolveStyleValue(value, colors);
48
+ }
49
+ }
50
+
51
+ return resolved;
52
+ };
53
+
54
+ const canUseDOM = () => typeof window !== "undefined" && typeof document !== "undefined";
55
+ /**
56
+ * Input/TextField - Form input component (replaces MUI TextField)
57
+ * Supports variants: outlined, filled, standard
58
+ *
59
+ * DEFAULTS TO DARK MODE (white text/borders) since most Blerp UI is on dark backgrounds.
60
+ * Pass darkMode={false} to use light mode styling.
61
+ */
62
+
63
+
64
+ const BaseInput = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) => {
65
+ let {
66
+ variant = "outlined",
67
+ label,
68
+ placeholder,
69
+ helperText,
70
+ error = false,
71
+ disabled = false,
72
+ required = false,
73
+ fullWidth = false,
74
+ multiline = false,
75
+ rows,
76
+ maxRows,
77
+ minRows,
78
+ type = "text",
79
+ value,
80
+ defaultValue,
81
+ onChange,
82
+ onFocus,
83
+ onBlur,
84
+ onClick,
85
+ onKeyDown,
86
+ InputProps = {},
87
+ inputProps = {},
88
+ InputLabelProps = {},
89
+ FormHelperTextProps = {},
90
+ size = "medium",
91
+ color = "primary",
92
+ darkMode: forceDarkMode,
93
+ autoFocus,
94
+ autoComplete,
95
+ name,
96
+ id: providedId,
97
+ inputRef,
98
+ startAdornment,
99
+ endAdornment,
100
+ style,
101
+ sx
102
+ } = _ref,
103
+ props = _objectWithoutProperties__default["default"](_ref, _excluded);
104
+
105
+ const {
106
+ colors,
107
+ mode
108
+ } = ThemeProvider.useTheme();
109
+ const generatedId = React.useId();
110
+ const id = providedId || generatedId;
111
+ const [focused, setFocused] = React.useState(false);
112
+ const [internalValue, setInternalValue] = React.useState(defaultValue || ""); // Track actual value for label shrink detection
113
+
114
+ const currentValue = value !== undefined ? value : internalValue; // Helper to resolve theme colors
115
+
116
+ const getColor = (colorKey, fallback) => {
117
+ const c = colors === null || colors === void 0 ? void 0 : colors[colorKey];
118
+ if (!c) return fallback;
119
+ return typeof c === "object" ? c.main : c;
120
+ };
121
+
122
+ const colorValue = (colors === null || colors === void 0 ? void 0 : colors[color]) || (colors === null || colors === void 0 ? void 0 : colors.primary);
123
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue || "#21A5A2";
124
+ const errorColor = getColor("error", "#d32f2f"); // FORCE dark mode styling by default - most Blerp UI is on dark backgrounds
125
+ // Can be overridden with darkMode={false} prop if needed on light backgrounds
126
+
127
+ const isDark = forceDarkMode !== undefined ? forceDarkMode : true; // Colors - defaulting to white/light for dark backgrounds
128
+
129
+ const textColor = isDark ? "#FFFFFF" : "#21000C";
130
+ const labelColor = isDark ? "rgba(255, 255, 255, 0.7)" : "rgba(0, 0, 0, 0.6)";
131
+ const focusedLabelColor = isDark ? "#FFFFFF" : mainColor;
132
+ const borderColor = isDark ? "rgba(255, 255, 255, 0.5)" : "rgba(0, 0, 0, 0.23)";
133
+ const focusedBorderColor = isDark ? "#FFFFFF" : mainColor;
134
+ const bgColor = isDark ? "rgba(255, 255, 255, 0.08)" : "rgba(0, 0, 0, 0.04)";
135
+ const hoverBgColor = isDark ? "rgba(255, 255, 255, 0.12)" : "rgba(0, 0, 0, 0.06)";
136
+ const placeholderColor = isDark ? "rgba(255, 255, 255, 0.35)" : "rgba(0, 0, 0, 0.35)";
137
+ const labelBgColor = isDark ? "#212121" : "#FFFFFF";
138
+ const hasValue = currentValue !== undefined && currentValue !== null && currentValue !== "";
139
+ const hasPlaceholder = Boolean(placeholder); // Label should shrink if: focused, has value, OR has a placeholder (so they don't overlap)
140
+
141
+ const isLabelShrunk = focused || hasValue || hasPlaceholder; // Resolve InputProps.sx styles to actual style values
142
+
143
+ const inputPropsSx = resolveStyles(InputProps.sx || {}, colors); // Container styles
144
+
145
+ const containerStyle = _objectSpread(_objectSpread({
146
+ display: "inline-flex",
147
+ flexDirection: "column",
148
+ position: "relative",
149
+ minWidth: 0,
150
+ padding: 0,
151
+ margin: 0,
152
+ border: 0,
153
+ verticalAlign: "top"
154
+ }, fullWidth && {
155
+ width: "100%"
156
+ }), style); // Determine current border color based on state
157
+
158
+
159
+ const getCurrentBorderColor = () => {
160
+ if (error) return errorColor;
161
+ if (focused) return focusedBorderColor;
162
+ return borderColor;
163
+ }; // Input wrapper styles (the bordered box)
164
+
165
+
166
+ const getWrapperStyles = () => {
167
+ const activeBorderColor = getCurrentBorderColor(); // Check if InputProps.sx overrides border-related styles
168
+
169
+ const hasBorderOverride = inputPropsSx.border !== undefined || inputPropsSx.borderColor !== undefined;
170
+ const hasRadiusOverride = inputPropsSx.borderRadius !== undefined;
171
+ const hasBgOverride = inputPropsSx.backgroundColor !== undefined || inputPropsSx.background !== undefined;
172
+ const hasHeightOverride = inputPropsSx.height !== undefined;
173
+ const hasPaddingOverride = inputPropsSx.padding !== undefined;
174
+ const base = {
175
+ display: "flex",
176
+ alignItems: "center",
177
+ position: "relative",
178
+ borderRadius: hasRadiusOverride ? inputPropsSx.borderRadius : "6px",
179
+ transition: "border-color 200ms ease, background-color 200ms ease, box-shadow 200ms ease",
180
+ cursor: disabled ? "default" : "text",
181
+ backgroundColor: hasBgOverride ? inputPropsSx.backgroundColor || inputPropsSx.background : "transparent",
182
+ minHeight: hasHeightOverride ? undefined : size === "small" ? "32px" : "40px",
183
+ height: hasHeightOverride ? inputPropsSx.height : undefined,
184
+ boxSizing: inputPropsSx.boxSizing || "border-box"
185
+ }; // If there's a complete style override from InputProps.sx, use minimal base styling
186
+
187
+ if (hasBorderOverride || inputPropsSx.border === "none") {
188
+ return _objectSpread(_objectSpread({}, base), {}, {
189
+ border: inputPropsSx.border !== undefined ? inputPropsSx.border : "none",
190
+ borderColor: inputPropsSx.borderColor,
191
+ padding: hasPaddingOverride ? inputPropsSx.padding : undefined
192
+ }, inputPropsSx);
193
+ }
194
+
195
+ switch (variant) {
196
+ case "filled":
197
+ return _objectSpread(_objectSpread({}, base), {}, {
198
+ backgroundColor: hasBgOverride ? inputPropsSx.backgroundColor || inputPropsSx.background : focused ? hoverBgColor : bgColor,
199
+ borderBottom: "2px solid ".concat(activeBorderColor),
200
+ borderRadius: hasRadiusOverride ? inputPropsSx.borderRadius : "8px 8px 0 0",
201
+ paddingTop: label ? "20px" : "0"
202
+ }, inputPropsSx);
203
+
204
+ case "standard":
205
+ return _objectSpread(_objectSpread({}, base), {}, {
206
+ borderBottom: "".concat(focused ? "2px" : "1px", " solid ").concat(activeBorderColor),
207
+ borderRadius: 0,
208
+ paddingTop: label ? "16px" : "0",
209
+ paddingBottom: focused ? "0px" : "1px"
210
+ }, inputPropsSx);
211
+
212
+ case "outlined":
213
+ default:
214
+ return _objectSpread(_objectSpread({}, base), {}, {
215
+ border: "".concat(focused ? "2px" : "1px", " solid ").concat(activeBorderColor),
216
+ padding: focused ? "0px" : "1px",
217
+ boxShadow: focused ? "0 0 0 3px ".concat(isDark ? "rgba(255,255,255,0.1)" : "".concat(mainColor, "20")) : "none"
218
+ }, inputPropsSx);
219
+ }
220
+ }; // Input element styles
221
+
222
+
223
+ const getInputStyles = () => {
224
+ // Check for font/text overrides
225
+ const fontSize = inputPropsSx.fontSize || (size === "small" ? "14px" : "16px");
226
+ const caretColor = inputPropsSx.caretColor;
227
+ return _objectSpread(_objectSpread({
228
+ fontFamily: "inherit",
229
+ fontSize: fontSize,
230
+ fontWeight: 400,
231
+ letterSpacing: "0.01em",
232
+ lineHeight: 1.5,
233
+ color: textColor,
234
+ // Always use theme text color (white for dark mode)
235
+ border: 0,
236
+ boxSizing: "border-box",
237
+ background: "none",
238
+ margin: 0,
239
+ display: "block",
240
+ minWidth: 0,
241
+ width: "100%",
242
+ outline: "none",
243
+ padding: "4px 8px",
244
+ resize: multiline ? "vertical" : "none",
245
+ WebkitTextFillColor: textColor
246
+ }, caretColor && {
247
+ caretColor
248
+ }), disabled && {
249
+ opacity: 0.5,
250
+ cursor: "not-allowed"
251
+ });
252
+ }; // Label styles
253
+
254
+
255
+ const getLabelStyles = () => {
256
+ const leftPos = variant === "outlined" ? "11px" : variant === "filled" ? "11px" : "0";
257
+
258
+ const getTransform = () => {
259
+ if (isLabelShrunk) {
260
+ switch (variant) {
261
+ case "outlined":
262
+ return "translate(0, -50%) scale(0.75)";
263
+
264
+ case "filled":
265
+ return "translate(0, -100%) scale(0.75)";
266
+
267
+ case "standard":
268
+ return "translate(0, -100%) scale(0.75)";
269
+
270
+ default:
271
+ return "translate(0, -50%) scale(0.75)";
272
+ }
273
+ }
274
+
275
+ return "translate(0, -50%) scale(1)";
276
+ };
277
+
278
+ const getTop = () => {
279
+ if (variant === "outlined") {
280
+ return isLabelShrunk ? "0" : "50%";
281
+ }
282
+
283
+ if (variant === "filled") {
284
+ return isLabelShrunk ? "8px" : "50%";
285
+ }
286
+
287
+ return isLabelShrunk ? "0" : "50%";
288
+ };
289
+
290
+ return _objectSpread({
291
+ position: "absolute",
292
+ left: leftPos,
293
+ top: getTop(),
294
+ transform: getTransform(),
295
+ transformOrigin: "top left",
296
+ transition: "transform 200ms cubic-bezier(0.4, 0, 0.2, 1), color 200ms cubic-bezier(0.4, 0, 0.2, 1), top 200ms cubic-bezier(0.4, 0, 0.2, 1)",
297
+ color: error ? errorColor : focused ? focusedLabelColor : labelColor,
298
+ pointerEvents: "none",
299
+ backgroundColor: variant === "outlined" && isLabelShrunk ? labelBgColor : "transparent",
300
+ padding: variant === "outlined" && isLabelShrunk ? "0 6px" : "4px",
301
+ marginLeft: variant === "outlined" && isLabelShrunk ? "-4px" : 0,
302
+ fontSize: "11px",
303
+ fontWeight: 400,
304
+ lineHeight: 1.4,
305
+ whiteSpace: "nowrap",
306
+ overflow: "hidden",
307
+ textOverflow: "ellipsis",
308
+ maxWidth: isLabelShrunk ? "133%" : "calc(100% - 32px)",
309
+ zIndex: 1
310
+ }, InputLabelProps.style);
311
+ }; // Helper text styles
312
+
313
+
314
+ const helperTextStyle = _objectSpread({
315
+ fontSize: "12px",
316
+ fontWeight: 400,
317
+ lineHeight: 1.4,
318
+ marginTop: "6px",
319
+ marginLeft: variant === "standard" ? "0" : "14px",
320
+ marginRight: "14px",
321
+ color: error ? errorColor : labelColor
322
+ }, FormHelperTextProps.style);
323
+
324
+ const handleFocus = e => {
325
+ setFocused(true);
326
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
327
+ };
328
+
329
+ const handleBlur = e => {
330
+ setFocused(false);
331
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
332
+ };
333
+
334
+ const handleChange = e => {
335
+ if (value === undefined) {
336
+ setInternalValue(e.target.value);
337
+ }
338
+
339
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
340
+ };
341
+
342
+ const handleClick = e => {
343
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
344
+
345
+ if (!disabled && canUseDOM()) {
346
+ const input = document.getElementById(id);
347
+ input === null || input === void 0 ? void 0 : input.focus();
348
+ }
349
+ };
350
+
351
+ const InputComponent = multiline ? "textarea" : "input"; // Create a safe CSS ID for the style block
352
+
353
+ const safeId = id.replace(/:/g, "\\:"); // Text color is always based on dark/light mode, not InputProps.sx.color
354
+ // (InputProps.sx.color in MUI is typically for border/accent, not text)
355
+
356
+ const resolvedTextColor = textColor; // Combine refs
357
+
358
+ const setRefs = el => {
359
+ if (typeof ref === "function") ref(el);else if (ref) ref.current = el;
360
+ if (typeof inputRef === "function") inputRef(el);else if (inputRef) inputRef.current = el;
361
+ };
362
+
363
+ return /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
364
+ style: containerStyle
365
+ }, props), /*#__PURE__*/React__default["default"].createElement("style", null, "\n #".concat(safeId, "::placeholder {\n color: ").concat(placeholderColor, " !important;\n opacity: 1 !important;\n font-style: italic !important;\n font-weight: 300 !important;\n }\n #").concat(safeId, "::-webkit-input-placeholder {\n color: ").concat(placeholderColor, " !important;\n font-style: italic !important;\n font-weight: 300 !important;\n }\n #").concat(safeId, "::-moz-placeholder {\n color: ").concat(placeholderColor, " !important;\n font-style: italic !important;\n font-weight: 300 !important;\n }\n #").concat(safeId, " {\n color: ").concat(resolvedTextColor, " !important;\n -webkit-text-fill-color: ").concat(resolvedTextColor, " !important;\n }\n ")), /*#__PURE__*/React__default["default"].createElement("div", {
366
+ style: getWrapperStyles(),
367
+ onClick: handleClick
368
+ }, label && /*#__PURE__*/React__default["default"].createElement("label", _extends__default["default"]({
369
+ htmlFor: id,
370
+ style: getLabelStyles()
371
+ }, InputLabelProps), label, required && /*#__PURE__*/React__default["default"].createElement("span", {
372
+ style: {
373
+ color: errorColor,
374
+ marginLeft: "2px"
375
+ }
376
+ }, "*")), (startAdornment || InputProps.startAdornment) && /*#__PURE__*/React__default["default"].createElement("div", {
377
+ style: {
378
+ display: "flex",
379
+ alignItems: "center",
380
+ paddingLeft: "4px",
381
+ color: labelColor,
382
+ flexShrink: 0
383
+ }
384
+ }, startAdornment || InputProps.startAdornment), /*#__PURE__*/React__default["default"].createElement(InputComponent, _extends__default["default"]({
385
+ ref: setRefs,
386
+ id: id,
387
+ type: type,
388
+ style: getInputStyles(),
389
+ placeholder: placeholder,
390
+ disabled: disabled,
391
+ required: required,
392
+ value: value,
393
+ defaultValue: defaultValue,
394
+ onChange: handleChange,
395
+ onFocus: handleFocus,
396
+ onBlur: handleBlur,
397
+ onKeyDown: onKeyDown,
398
+ autoFocus: autoFocus,
399
+ autoComplete: autoComplete,
400
+ name: name,
401
+ rows: multiline ? rows || minRows || 3 : undefined,
402
+ "aria-invalid": error,
403
+ "aria-describedby": helperText ? "".concat(id, "-helper-text") : undefined
404
+ }, inputProps, InputProps.inputProps)), (endAdornment || InputProps.endAdornment) && /*#__PURE__*/React__default["default"].createElement("div", {
405
+ style: {
406
+ display: "flex",
407
+ alignItems: "center",
408
+ paddingRight: "4px",
409
+ color: labelColor,
410
+ flexShrink: 0
411
+ }
412
+ }, endAdornment || InputProps.endAdornment)), helperText && /*#__PURE__*/React__default["default"].createElement("p", _extends__default["default"]({
413
+ id: "".concat(id, "-helper-text"),
414
+ style: helperTextStyle
415
+ }, FormHelperTextProps), helperText));
416
+ });
417
+ BaseInput.displayName = "BaseInput";
418
+ const Input = withSx.withSx(BaseInput);
419
+ const TextField = Input; // Alias for MUI compatibility
420
+
421
+ /**
422
+ * InputAdornment - For adding icons/text to inputs
423
+ */
424
+
425
+ const InputAdornment = /*#__PURE__*/React__default["default"].forwardRef((_ref2, ref) => {
426
+ let {
427
+ position = "start",
428
+ children,
429
+ disablePointerEvents = false,
430
+ style
431
+ } = _ref2,
432
+ props = _objectWithoutProperties__default["default"](_ref2, _excluded2);
433
+
434
+ const adornmentStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
435
+ display: "flex",
436
+ alignItems: "center",
437
+ justifyContent: "center",
438
+ height: "100%",
439
+ color: "rgba(255, 255, 255, 0.7)",
440
+ whiteSpace: "nowrap"
441
+ }, position === "start" && {
442
+ marginRight: "4px"
443
+ }), position === "end" && {
444
+ marginLeft: "4px"
445
+ }), disablePointerEvents && {
446
+ pointerEvents: "none"
447
+ }), style);
448
+
449
+ return /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
450
+ ref: ref,
451
+ style: adornmentStyle
452
+ }, props), children);
453
+ });
454
+ InputAdornment.displayName = "InputAdornment";
455
+ /**
456
+ * FormHelperText - Standalone helper text component
457
+ */
458
+
459
+ const FormHelperText = /*#__PURE__*/React__default["default"].forwardRef((_ref3, ref) => {
460
+ var _colors$error;
461
+
462
+ let {
463
+ children,
464
+ error = false,
465
+ disabled = false,
466
+ style
467
+ } = _ref3,
468
+ props = _objectWithoutProperties__default["default"](_ref3, _excluded3);
469
+
470
+ const {
471
+ colors
472
+ } = ThemeProvider.useTheme();
473
+ const errorColor = (colors === null || colors === void 0 ? void 0 : (_colors$error = colors.error) === null || _colors$error === void 0 ? void 0 : _colors$error.main) || "#d32f2f";
474
+
475
+ const helperStyle = _objectSpread({
476
+ fontSize: "12px",
477
+ fontWeight: 400,
478
+ lineHeight: 1.4,
479
+ margin: "6px 14px 0",
480
+ color: error ? errorColor : "rgba(255, 255, 255, 0.7)",
481
+ opacity: disabled ? 0.6 : 1
482
+ }, style);
483
+
484
+ return /*#__PURE__*/React__default["default"].createElement("p", _extends__default["default"]({
485
+ ref: ref,
486
+ style: helperStyle
487
+ }, props), children);
488
+ });
489
+ FormHelperText.displayName = "FormHelperText";
490
+
491
+ exports.FormHelperText = FormHelperText;
492
+ exports.Input = Input;
493
+ exports.InputAdornment = InputAdornment;
494
+ exports.TextField = TextField;
495
+ exports["default"] = Input;