@blerp/design 1.3.17 → 1.4.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 (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 +280 -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 +493 -0
  52. package/dist/cjs/neo-components/Layout.js +1213 -0
  53. package/dist/cjs/neo-components/Misc.js +858 -0
  54. package/dist/cjs/neo-components/Navigation.js +1578 -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 +164 -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 +269 -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 +478 -0
  116. package/dist/esm/neo-components/Layout.js +1179 -0
  117. package/dist/esm/neo-components/Misc.js +840 -0
  118. package/dist/esm/neo-components/Navigation.js +1556 -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 +153 -0
  127. package/dist/esm/neo-utils/sxToStyle.js +502 -0
  128. package/package.json +19 -15
@@ -0,0 +1,1057 @@
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
+ var ReactDOM = require('react-dom');
12
+
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
16
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
17
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
18
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
19
+
20
+ const _excluded = ["checked", "defaultChecked", "disabled", "onChange", "color", "size", "indeterminate", "icon", "checkedIcon", "name", "value", "inputProps", "style"],
21
+ _excluded2 = ["checked", "defaultChecked", "disabled", "onChange", "color", "size", "name", "value", "inputProps", "style"],
22
+ _excluded3 = ["checked", "defaultChecked", "disabled", "onChange", "color", "size", "name", "value", "inputProps", "style"],
23
+ _excluded4 = ["value", "defaultValue", "onChange", "children", "disabled", "multiple", "native", "variant", "label", "fullWidth", "size", "error", "displayEmpty", "renderValue", "MenuProps", "inputProps", "style", "IconComponent", "disableBorder", "color"],
24
+ _excluded5 = ["value", "defaultValue", "onChange", "onChangeCommitted", "min", "max", "step", "marks", "disabled", "orientation", "color", "size", "valueLabelDisplay", "valueLabelFormat", "getAriaValueText", "track", "style"],
25
+ _excluded6 = ["value", "defaultValue", "onChange", "max", "precision", "disabled", "readOnly", "size", "emptyIcon", "icon", "name", "style"];
26
+
27
+ 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; }
28
+
29
+ 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; }
30
+ /**
31
+ * Checkbox - Checkbox input (replaces MUI Checkbox)
32
+ */
33
+
34
+ const BaseCheckbox = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) => {
35
+ let {
36
+ checked,
37
+ defaultChecked,
38
+ disabled = false,
39
+ onChange,
40
+ color = "whiteOverride",
41
+ size = "medium",
42
+ indeterminate = false,
43
+ icon,
44
+ checkedIcon,
45
+ name,
46
+ value,
47
+ inputProps,
48
+ style
49
+ } = _ref,
50
+ props = _objectWithoutProperties__default["default"](_ref, _excluded);
51
+
52
+ const {
53
+ colors
54
+ } = ThemeProvider.useTheme();
55
+ const [internalChecked, setInternalChecked] = React.useState(defaultChecked || false);
56
+ const isChecked = checked !== undefined ? checked : internalChecked;
57
+ const colorValue = colors[color] || colors.whiteOverride;
58
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue;
59
+ const sizeMap = {
60
+ small: "18px",
61
+ medium: "24px",
62
+ large: "28px"
63
+ };
64
+ const checkSize = sizeMap[size] || sizeMap.medium;
65
+
66
+ const handleChange = e => {
67
+ if (checked === undefined) {
68
+ setInternalChecked(e.target.checked);
69
+ }
70
+
71
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
72
+ };
73
+
74
+ const containerStyle = _objectSpread({
75
+ display: "inline-flex",
76
+ alignItems: "center",
77
+ justifyContent: "center",
78
+ position: "relative",
79
+ padding: "9px",
80
+ cursor: disabled ? "default" : "pointer",
81
+ borderRadius: "4px"
82
+ }, style);
83
+
84
+ const inputStyle = {
85
+ position: "absolute",
86
+ opacity: 0,
87
+ width: "100%",
88
+ height: "100%",
89
+ margin: 0,
90
+ padding: 0,
91
+ cursor: "inherit"
92
+ };
93
+
94
+ const checkboxStyle = _objectSpread({
95
+ width: checkSize,
96
+ height: checkSize,
97
+ display: "flex",
98
+ alignItems: "center",
99
+ justifyContent: "center",
100
+ borderRadius: "4px",
101
+ border: "2px solid ".concat(isChecked ? mainColor : "var(--border-color, rgba(255, 255, 255, 0.54))"),
102
+ backgroundColor: isChecked ? mainColor : "transparent",
103
+ transition: "background-color 150ms, border-color 150ms"
104
+ }, disabled && {
105
+ opacity: 0.5
106
+ });
107
+
108
+ const checkmarkStyle = {
109
+ width: "70%",
110
+ height: "70%",
111
+ display: isChecked ? "block" : "none",
112
+ color: "black"
113
+ };
114
+ return /*#__PURE__*/React__default["default"].createElement("span", _extends__default["default"]({
115
+ ref: ref,
116
+ style: containerStyle
117
+ }, props), /*#__PURE__*/React__default["default"].createElement("input", _extends__default["default"]({
118
+ type: "checkbox",
119
+ checked: isChecked,
120
+ disabled: disabled,
121
+ onChange: handleChange,
122
+ name: name,
123
+ value: value,
124
+ style: inputStyle
125
+ }, inputProps)), /*#__PURE__*/React__default["default"].createElement("span", {
126
+ style: checkboxStyle
127
+ }, isChecked && /*#__PURE__*/React__default["default"].createElement("svg", {
128
+ style: checkmarkStyle,
129
+ viewBox: "0 0 24 24",
130
+ fill: "currentColor"
131
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
132
+ d: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"
133
+ })), indeterminate && !isChecked && /*#__PURE__*/React__default["default"].createElement("svg", {
134
+ style: checkmarkStyle,
135
+ viewBox: "0 0 24 24",
136
+ fill: "currentColor"
137
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
138
+ d: "M19 13H5v-2h14v2z"
139
+ }))));
140
+ });
141
+ BaseCheckbox.displayName = "BaseCheckbox";
142
+ const Checkbox = withSx.withSx(BaseCheckbox);
143
+ /**
144
+ * Radio - Radio button (replaces MUI Radio)
145
+ */
146
+
147
+ const BaseRadio = /*#__PURE__*/React__default["default"].forwardRef((_ref2, ref) => {
148
+ let {
149
+ checked,
150
+ defaultChecked,
151
+ disabled = false,
152
+ onChange,
153
+ color = "whiteOverride",
154
+ size = "medium",
155
+ name,
156
+ value,
157
+ inputProps,
158
+ style
159
+ } = _ref2,
160
+ props = _objectWithoutProperties__default["default"](_ref2, _excluded2);
161
+
162
+ const {
163
+ colors
164
+ } = ThemeProvider.useTheme();
165
+ const colorValue = colors[color] || colors.whiteOverride;
166
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue;
167
+ const sizeMap = {
168
+ small: "18px",
169
+ medium: "24px",
170
+ large: "28px"
171
+ };
172
+ const radioSize = sizeMap[size] || sizeMap.medium;
173
+
174
+ const containerStyle = _objectSpread({
175
+ display: "inline-flex",
176
+ alignItems: "center",
177
+ justifyContent: "center",
178
+ position: "relative",
179
+ padding: "9px",
180
+ cursor: disabled ? "default" : "pointer",
181
+ borderRadius: "50%"
182
+ }, style);
183
+
184
+ const inputStyle = {
185
+ position: "absolute",
186
+ opacity: 0,
187
+ width: "100%",
188
+ height: "100%",
189
+ margin: 0,
190
+ padding: 0,
191
+ cursor: "inherit"
192
+ };
193
+
194
+ const radioStyle = _objectSpread({
195
+ width: radioSize,
196
+ height: radioSize,
197
+ display: "flex",
198
+ alignItems: "center",
199
+ justifyContent: "center",
200
+ borderRadius: "50%",
201
+ border: "2px solid ".concat(checked ? mainColor : "var(--border-color, rgba(255, 255, 255, 0.54))"),
202
+ backgroundColor: "transparent",
203
+ transition: "border-color 150ms"
204
+ }, disabled && {
205
+ opacity: 0.5
206
+ });
207
+
208
+ const dotStyle = {
209
+ width: "50%",
210
+ height: "50%",
211
+ borderRadius: "50%",
212
+ backgroundColor: mainColor,
213
+ display: checked ? "block" : "none",
214
+ transition: "transform 150ms"
215
+ };
216
+ return /*#__PURE__*/React__default["default"].createElement("span", _extends__default["default"]({
217
+ ref: ref,
218
+ style: containerStyle
219
+ }, props), /*#__PURE__*/React__default["default"].createElement("input", _extends__default["default"]({
220
+ type: "radio",
221
+ checked: checked,
222
+ defaultChecked: defaultChecked,
223
+ disabled: disabled,
224
+ onChange: onChange,
225
+ name: name,
226
+ value: value,
227
+ style: inputStyle
228
+ }, inputProps)), /*#__PURE__*/React__default["default"].createElement("span", {
229
+ style: radioStyle
230
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
231
+ style: dotStyle
232
+ })));
233
+ });
234
+ BaseRadio.displayName = "BaseRadio";
235
+ const Radio = withSx.withSx(BaseRadio);
236
+ /**
237
+ * Switch - Toggle switch (replaces MUI Switch)
238
+ */
239
+
240
+ const BaseSwitch = /*#__PURE__*/React__default["default"].forwardRef((_ref3, ref) => {
241
+ let {
242
+ checked,
243
+ defaultChecked,
244
+ disabled = false,
245
+ onChange,
246
+ color = "primary",
247
+ size = "medium",
248
+ name,
249
+ value,
250
+ inputProps,
251
+ style
252
+ } = _ref3,
253
+ props = _objectWithoutProperties__default["default"](_ref3, _excluded3);
254
+
255
+ const {
256
+ colors
257
+ } = ThemeProvider.useTheme();
258
+ const [internalChecked, setInternalChecked] = React.useState(defaultChecked || false);
259
+ const isChecked = checked !== undefined ? checked : internalChecked;
260
+ const colorValue = colors[color] || colors.primary;
261
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue; // Size configurations
262
+
263
+ const isSmall = size === "small";
264
+ const trackWidth = isSmall ? 34 : 42;
265
+ const trackHeight = isSmall ? 14 : 20;
266
+ const thumbSize = isSmall ? 20 : 26; // Calculate thumb position
267
+
268
+ const thumbOffset = isChecked ? trackWidth - thumbSize + 4 : -4;
269
+
270
+ const toggle = () => {
271
+ if (disabled) return;
272
+ const newChecked = !isChecked; // Always update internal state for uncontrolled usage
273
+
274
+ if (checked === undefined) {
275
+ setInternalChecked(newChecked);
276
+ } // Call onChange with synthetic event
277
+
278
+
279
+ if (onChange) {
280
+ onChange({
281
+ target: {
282
+ checked: newChecked,
283
+ name,
284
+ value,
285
+ type: "checkbox"
286
+ }
287
+ });
288
+ }
289
+ };
290
+
291
+ return /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
292
+ ref: ref,
293
+ role: "switch",
294
+ "aria-checked": isChecked,
295
+ "aria-disabled": disabled,
296
+ tabIndex: disabled ? -1 : 0,
297
+ style: _objectSpread({
298
+ display: "inline-flex",
299
+ alignItems: "center",
300
+ position: "relative",
301
+ padding: "9px",
302
+ cursor: disabled ? "default" : "pointer",
303
+ opacity: disabled ? 0.5 : 1,
304
+ userSelect: "none",
305
+ WebkitTapHighlightColor: "transparent"
306
+ }, style),
307
+ onMouseDown: e => {
308
+ // Prevent text selection on double click
309
+ e.preventDefault();
310
+ },
311
+ onClick: e => {
312
+ e.stopPropagation();
313
+ toggle();
314
+ },
315
+ onKeyDown: e => {
316
+ if (e.key === "Enter" || e.key === " ") {
317
+ e.preventDefault();
318
+ toggle();
319
+ }
320
+ }
321
+ }, props), /*#__PURE__*/React__default["default"].createElement("div", {
322
+ style: {
323
+ width: trackWidth,
324
+ height: trackHeight,
325
+ borderRadius: trackHeight,
326
+ backgroundColor: isChecked ? "".concat(mainColor, "80") : "rgba(0, 0, 0, 0.38)",
327
+ transition: "background-color 150ms",
328
+ position: "relative",
329
+ pointerEvents: "none"
330
+ }
331
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
332
+ style: {
333
+ width: thumbSize,
334
+ height: thumbSize,
335
+ borderRadius: "50%",
336
+ backgroundColor: isChecked ? mainColor : "#fafafa",
337
+ boxShadow: "0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12)",
338
+ position: "absolute",
339
+ top: "50%",
340
+ left: thumbOffset,
341
+ transform: "translateY(-50%)",
342
+ transition: "left 150ms, background-color 150ms",
343
+ pointerEvents: "none"
344
+ }
345
+ })), /*#__PURE__*/React__default["default"].createElement("input", _extends__default["default"]({
346
+ type: "checkbox",
347
+ checked: isChecked,
348
+ name: name,
349
+ value: value,
350
+ disabled: disabled,
351
+ readOnly: true,
352
+ tabIndex: -1,
353
+ style: {
354
+ position: "absolute",
355
+ width: 1,
356
+ height: 1,
357
+ margin: -1,
358
+ padding: 0,
359
+ overflow: "hidden",
360
+ clip: "rect(0, 0, 0, 0)",
361
+ border: 0
362
+ }
363
+ }, inputProps)));
364
+ });
365
+ BaseSwitch.displayName = "BaseSwitch";
366
+ const Switch = withSx.withSx(BaseSwitch);
367
+ /**
368
+ * Enhanced Select - Drop-in replacement that supports MUI-style MenuProps
369
+ */
370
+
371
+ const BaseSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref4, ref) => {
372
+ var _MenuProps$sx, _propsSx$Svg, _PaperProps$style, _PaperProps$style2;
373
+
374
+ let {
375
+ value,
376
+ defaultValue,
377
+ onChange,
378
+ children,
379
+ disabled = false,
380
+ multiple = false,
381
+ native = false,
382
+ variant = "outlined",
383
+ label,
384
+ fullWidth = false,
385
+ size = "medium",
386
+ error = false,
387
+ displayEmpty = false,
388
+ renderValue,
389
+ MenuProps = {},
390
+ inputProps,
391
+ style,
392
+ IconComponent,
393
+ disableBorder = true,
394
+ // Default to no border on select box
395
+ color = "notBlack"
396
+ } = _ref4,
397
+ props = _objectWithoutProperties__default["default"](_ref4, _excluded4);
398
+
399
+ const {
400
+ colors
401
+ } = ThemeProvider.useTheme();
402
+ const [open, setOpen] = React.useState(false);
403
+ const [internalValue, setInternalValue] = React.useState(defaultValue || (multiple ? [] : ""));
404
+ const [menuPosition, setMenuPosition] = React.useState({
405
+ top: 0,
406
+ left: 0,
407
+ width: 0,
408
+ bottom: 0
409
+ });
410
+ const selectRef = React.useRef(null);
411
+ const menuRef = React.useRef(null);
412
+ const currentValue = value !== undefined ? value : internalValue; // Extract color from theme
413
+
414
+ const colorValue = colors[color] || colors.notBlack || colors.primary;
415
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue;
416
+
417
+ const handleChange = newValue => {
418
+ if (value === undefined) {
419
+ setInternalValue(newValue);
420
+ }
421
+
422
+ onChange === null || onChange === void 0 ? void 0 : onChange({
423
+ target: {
424
+ value: newValue,
425
+ name: props.name
426
+ }
427
+ });
428
+
429
+ if (!multiple) {
430
+ setOpen(false);
431
+ }
432
+ }; // Extract MenuProps configuration
433
+
434
+
435
+ const {
436
+ keepMounted = false,
437
+ disablePortal = false,
438
+ anchorOrigin = {
439
+ vertical: "top",
440
+ horizontal: "left"
441
+ },
442
+ transformOrigin = {
443
+ vertical: "bottom",
444
+ horizontal: "left"
445
+ },
446
+ sx: menuSx = {},
447
+ PaperProps = {}
448
+ } = MenuProps; // Extract paper/menu styling from MUI-style sx prop
449
+
450
+ const paperSx = (MenuProps === null || MenuProps === void 0 ? void 0 : (_MenuProps$sx = MenuProps.sx) === null || _MenuProps$sx === void 0 ? void 0 : _MenuProps$sx["& .MuiPaper-root"]) || {}; // Resolve sx color values (e.g., "extensionColor9.main" -> actual color)
451
+
452
+ const resolveColor = colorPath => {
453
+ if (!colorPath || typeof colorPath !== "string") return colorPath;
454
+ const parts = colorPath.split(".");
455
+ let result = colors[parts[0]];
456
+
457
+ for (let i = 1; i < parts.length && result; i++) {
458
+ result = result[parts[i]];
459
+ }
460
+
461
+ return result || colorPath;
462
+ }; // Update menu position when opened
463
+
464
+
465
+ React.useEffect(() => {
466
+ if (open && selectRef.current) {
467
+ const rect = selectRef.current.getBoundingClientRect();
468
+ const viewportHeight = window.innerHeight; // Calculate position based on anchorOrigin/transformOrigin
469
+
470
+ let top, bottom;
471
+
472
+ if (anchorOrigin.vertical === "top" && transformOrigin.vertical === "bottom") {
473
+ // Menu opens above the select
474
+ bottom = viewportHeight - rect.top + 4;
475
+ top = "auto";
476
+ } else {
477
+ // Menu opens below the select (default)
478
+ top = rect.bottom + window.scrollY + 4;
479
+ bottom = "auto";
480
+ }
481
+
482
+ setMenuPosition({
483
+ top,
484
+ bottom,
485
+ left: rect.left + window.scrollX,
486
+ width: rect.width
487
+ });
488
+ }
489
+ }, [open, anchorOrigin.vertical, transformOrigin.vertical]); // Handle click outside
490
+
491
+ React.useEffect(() => {
492
+ const handleClickOutside = e => {
493
+ if (selectRef.current && !selectRef.current.contains(e.target) && menuRef.current && !menuRef.current.contains(e.target)) {
494
+ setOpen(false);
495
+ }
496
+ };
497
+
498
+ if (open) {
499
+ document.addEventListener("mousedown", handleClickOutside);
500
+ return () => document.removeEventListener("mousedown", handleClickOutside);
501
+ }
502
+ }, [open]);
503
+
504
+ const containerStyle = _objectSpread(_objectSpread({
505
+ position: "relative",
506
+ display: "inline-flex"
507
+ }, fullWidth && {
508
+ width: "100%"
509
+ }), style); // Build select box styles - NO BORDER by default
510
+
511
+
512
+ const propsSx = props.sx || {};
513
+ const selectHeight = propsSx.height || (size === "small" ? "40px" : "48px");
514
+ const selectFontSize = propsSx.fontSize || "16px";
515
+
516
+ const selectStyle = _objectSpread({
517
+ display: "flex",
518
+ alignItems: "center",
519
+ justifyContent: "space-between",
520
+ height: selectHeight,
521
+ padding: "4px 12px",
522
+ border: "none",
523
+ // No border on select box
524
+ borderRadius: "4px",
525
+ backgroundColor: "transparent",
526
+ color: resolveColor(propsSx.color) || mainColor || "#fff",
527
+ cursor: disabled ? "default" : "pointer",
528
+ minWidth: "120px",
529
+ width: propsSx.width || "100%",
530
+ fontSize: selectFontSize,
531
+ overflow: "hidden",
532
+ whiteSpace: "nowrap",
533
+ textOverflow: "ellipsis",
534
+ transition: "border-color 200ms"
535
+ }, disabled && {
536
+ opacity: 0.5
537
+ }); // Arrow icon styles
538
+
539
+
540
+ const arrowStyle = {
541
+ marginLeft: "8px",
542
+ transform: "rotate(".concat(open ? "180deg" : "0deg", ")"),
543
+ transition: "transform 200ms",
544
+ pointerEvents: "none",
545
+ color: resolveColor((_propsSx$Svg = propsSx["& svg"]) === null || _propsSx$Svg === void 0 ? void 0 : _propsSx$Svg.color) || "inherit",
546
+ fontSize: "10px",
547
+ flexShrink: 0
548
+ }; // Build menu styles from MenuProps
549
+
550
+ const menuBackgroundColor = resolveColor(paperSx.backgroundColor) || (PaperProps === null || PaperProps === void 0 ? void 0 : (_PaperProps$style = PaperProps.style) === null || _PaperProps$style === void 0 ? void 0 : _PaperProps$style.backgroundColor) || "#2C2E32";
551
+ const menuTextColor = resolveColor(paperSx.color) || (PaperProps === null || PaperProps === void 0 ? void 0 : (_PaperProps$style2 = PaperProps.style) === null || _PaperProps$style2 === void 0 ? void 0 : _PaperProps$style2.color) || "#fff";
552
+ const menuZIndex = paperSx.zIndex || 9999;
553
+
554
+ const menuStyle = _objectSpread(_objectSpread(_objectSpread({
555
+ position: "fixed"
556
+ }, menuPosition.top !== "auto" && {
557
+ top: "".concat(menuPosition.top, "px")
558
+ }), menuPosition.bottom !== "auto" && {
559
+ bottom: "".concat(menuPosition.bottom, "px")
560
+ }), {}, {
561
+ left: "".concat(menuPosition.left, "px"),
562
+ width: "".concat(menuPosition.width, "px"),
563
+ backgroundColor: menuBackgroundColor,
564
+ border: "none",
565
+ borderRadius: "12px",
566
+ boxShadow: "0px 5px 15px rgba(0,0,0,0.3), 0px 10px 30px rgba(0,0,0,0.25)",
567
+ zIndex: menuZIndex,
568
+ maxHeight: "350px",
569
+ overflowY: "auto",
570
+ padding: "8px 0",
571
+ opacity: open ? 1 : 0,
572
+ visibility: open ? "visible" : "hidden",
573
+ transform: open ? "scaleY(1)" : "scaleY(0.95)",
574
+ transformOrigin: transformOrigin.vertical === "bottom" ? "bottom" : "top",
575
+ transition: "opacity 150ms, transform 150ms, visibility 150ms"
576
+ }, PaperProps === null || PaperProps === void 0 ? void 0 : PaperProps.style);
577
+
578
+ const menuItemStyle = isSelected => ({
579
+ padding: "4px 12px",
580
+ cursor: "pointer",
581
+ backgroundColor: isSelected ? "rgba(255, 255, 255, 0.08)" : "transparent",
582
+ color: menuTextColor,
583
+ transition: "background-color 150ms",
584
+ userSelect: "none",
585
+ display: "flex",
586
+ flexDirection: "column",
587
+ justifyContent: "center",
588
+ gap: "2px"
589
+ }); // Get display text - ONLY show the name, not the balance
590
+
591
+
592
+ const getDisplayText = () => {
593
+ if (renderValue) {
594
+ return renderValue(currentValue);
595
+ }
596
+
597
+ if (multiple && Array.isArray(currentValue)) {
598
+ return currentValue.join(", ") || (displayEmpty ? "" : "\u00A0");
599
+ } // Find the selected child and extract just the name (first text content)
600
+
601
+
602
+ let displayText = currentValue;
603
+ React__default["default"].Children.forEach(children, child => {
604
+ var _child$props;
605
+
606
+ if ((child === null || child === void 0 ? void 0 : (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.value) === currentValue) {
607
+ // Try to get just the name from the child
608
+ const childContent = child.props.children; // If children is an array, get the first meaningful text
609
+
610
+ if (Array.isArray(childContent)) {
611
+ const firstChild = childContent[0];
612
+
613
+ if ( /*#__PURE__*/React__default["default"].isValidElement(firstChild)) {
614
+ // Extract text from nested elements
615
+ displayText = extractTextFromElement(firstChild) || child.props.value;
616
+ } else if (typeof firstChild === 'string') {
617
+ displayText = firstChild;
618
+ }
619
+ } else if ( /*#__PURE__*/React__default["default"].isValidElement(childContent)) {
620
+ displayText = extractTextFromElement(childContent) || child.props.value;
621
+ } else if (typeof childContent === 'string') {
622
+ displayText = childContent;
623
+ }
624
+ }
625
+ });
626
+ return displayText || (displayEmpty ? "" : "\u00A0");
627
+ }; // Helper to extract text from React elements
628
+
629
+
630
+ const extractTextFromElement = element => {
631
+ if (! /*#__PURE__*/React__default["default"].isValidElement(element)) return null;
632
+ const children = element.props.children;
633
+
634
+ if (typeof children === 'string') {
635
+ return children;
636
+ }
637
+
638
+ if (Array.isArray(children)) {
639
+ for (const child of children) {
640
+ if (typeof child === 'string') return child;
641
+
642
+ if ( /*#__PURE__*/React__default["default"].isValidElement(child)) {
643
+ const text = extractTextFromElement(child);
644
+ if (text) return text;
645
+ }
646
+ }
647
+ }
648
+
649
+ return null;
650
+ };
651
+
652
+ if (native) {
653
+ return /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
654
+ ref: ref,
655
+ style: containerStyle
656
+ }, props), /*#__PURE__*/React__default["default"].createElement("select", _extends__default["default"]({
657
+ value: currentValue,
658
+ onChange: e => handleChange(e.target.value),
659
+ disabled: disabled,
660
+ multiple: multiple,
661
+ style: _objectSpread(_objectSpread({}, selectStyle), {}, {
662
+ appearance: "none"
663
+ })
664
+ }, inputProps), children), /*#__PURE__*/React__default["default"].createElement("span", {
665
+ style: arrowStyle
666
+ }, "\u25BC"));
667
+ }
668
+
669
+ const menuContent = /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
670
+ ref: menuRef,
671
+ style: menuStyle,
672
+ role: "listbox"
673
+ }, MenuProps), React__default["default"].Children.map(children, child => {
674
+ if (! /*#__PURE__*/React__default["default"].isValidElement(child)) return child;
675
+ const isSelected = multiple ? currentValue.includes(child.props.value) : currentValue === child.props.value;
676
+ return /*#__PURE__*/React__default["default"].createElement("div", {
677
+ key: child.props.value,
678
+ onClick: e => {
679
+ var _child$props$onClick, _child$props2;
680
+
681
+ e.stopPropagation(); // Call the child's onClick if it exists
682
+
683
+ (_child$props$onClick = (_child$props2 = child.props).onClick) === null || _child$props$onClick === void 0 ? void 0 : _child$props$onClick.call(_child$props2);
684
+
685
+ if (multiple) {
686
+ const newValue = isSelected ? currentValue.filter(v => v !== child.props.value) : [...currentValue, child.props.value];
687
+ handleChange(newValue);
688
+ } else {
689
+ handleChange(child.props.value);
690
+ }
691
+ },
692
+ onMouseEnter: e => {
693
+ e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.12)";
694
+ },
695
+ onMouseLeave: e => {
696
+ e.currentTarget.style.backgroundColor = isSelected ? "rgba(255, 255, 255, 0.08)" : "transparent";
697
+ },
698
+ style: menuItemStyle(isSelected),
699
+ role: "option",
700
+ "aria-selected": isSelected
701
+ }, child.props.children);
702
+ }));
703
+ const menu = (open || keepMounted) && (disablePortal ? menuContent : /*#__PURE__*/ReactDOM.createPortal(menuContent, document.body));
704
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
705
+ ref: ref,
706
+ style: containerStyle
707
+ }, props), /*#__PURE__*/React__default["default"].createElement("div", {
708
+ ref: selectRef,
709
+ style: selectStyle,
710
+ onClick: () => !disabled && setOpen(!open),
711
+ role: "button",
712
+ "aria-haspopup": "listbox",
713
+ "aria-expanded": open,
714
+ tabIndex: disabled ? -1 : 0,
715
+ onKeyDown: e => {
716
+ if (e.key === "Enter" || e.key === " ") {
717
+ e.preventDefault();
718
+ !disabled && setOpen(!open);
719
+ }
720
+
721
+ if (e.key === "Escape") {
722
+ setOpen(false);
723
+ }
724
+ }
725
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
726
+ style: {
727
+ flex: 1,
728
+ overflow: "hidden",
729
+ textOverflow: "ellipsis",
730
+ whiteSpace: "nowrap",
731
+ minWidth: 0,
732
+ fontSize: "inherit"
733
+ }
734
+ }, getDisplayText()), IconComponent ? /*#__PURE__*/React__default["default"].createElement(IconComponent, {
735
+ style: {
736
+ marginLeft: "8px",
737
+ color: arrowStyle.color
738
+ }
739
+ }) : /*#__PURE__*/React__default["default"].createElement("span", {
740
+ style: arrowStyle
741
+ }, "\u25B2"))), menu);
742
+ });
743
+ BaseSelect.displayName = "BaseSelect";
744
+ const Select = withSx.withSx(BaseSelect);
745
+ /**
746
+ * Slider - Range slider (replaces MUI Slider)
747
+ */
748
+
749
+ const BaseSlider = /*#__PURE__*/React__default["default"].forwardRef((_ref5, ref) => {
750
+ let {
751
+ value,
752
+ defaultValue = 0,
753
+ onChange,
754
+ onChangeCommitted,
755
+ min = 0,
756
+ max = 100,
757
+ step = 1,
758
+ marks = false,
759
+ disabled = false,
760
+ orientation = "horizontal",
761
+ color = "primary",
762
+ size = "medium",
763
+ valueLabelDisplay = "off",
764
+ valueLabelFormat,
765
+ getAriaValueText,
766
+ track = "normal",
767
+ style
768
+ } = _ref5,
769
+ props = _objectWithoutProperties__default["default"](_ref5, _excluded5);
770
+
771
+ const {
772
+ colors
773
+ } = ThemeProvider.useTheme();
774
+ const [internalValue, setInternalValue] = React.useState(defaultValue);
775
+ const [isDragging, setIsDragging] = React.useState(false);
776
+ const sliderRef = React.useRef(null);
777
+ const currentValue = value !== undefined ? value : internalValue;
778
+ const colorValue = colors[color] || colors.primary;
779
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue;
780
+ const trackThickness = 4;
781
+ const thumbSize = 20;
782
+ const percentage = (currentValue - min) / (max - min) * 100;
783
+
784
+ const handleChange = newValue => {
785
+ const clampedValue = Math.min(max, Math.max(min, newValue));
786
+ const steppedValue = Math.round(clampedValue / step) * step;
787
+
788
+ if (value === undefined) {
789
+ setInternalValue(steppedValue);
790
+ }
791
+
792
+ onChange === null || onChange === void 0 ? void 0 : onChange({
793
+ target: {
794
+ value: steppedValue
795
+ }
796
+ }, steppedValue);
797
+ };
798
+
799
+ const updateValue = e => {
800
+ if (!sliderRef.current) return;
801
+ const rect = sliderRef.current.getBoundingClientRect();
802
+ const percent = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
803
+ const newValue = min + percent * (max - min);
804
+ handleChange(newValue);
805
+ };
806
+
807
+ const handleMouseDown = e => {
808
+ if (disabled) return;
809
+ e.preventDefault();
810
+ setIsDragging(true);
811
+ updateValue(e);
812
+ };
813
+
814
+ React.useEffect(() => {
815
+ if (!isDragging) return;
816
+
817
+ const handleMouseMove = e => {
818
+ updateValue(e);
819
+ };
820
+
821
+ const handleMouseUp = () => {
822
+ setIsDragging(false);
823
+ onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted({
824
+ target: {
825
+ value: currentValue
826
+ }
827
+ }, currentValue);
828
+ };
829
+
830
+ document.addEventListener("mousemove", handleMouseMove);
831
+ document.addEventListener("mouseup", handleMouseUp);
832
+ return () => {
833
+ document.removeEventListener("mousemove", handleMouseMove);
834
+ document.removeEventListener("mouseup", handleMouseUp);
835
+ };
836
+ }, [isDragging, currentValue, min, max, step]);
837
+
838
+ const containerStyle = _objectSpread(_objectSpread({
839
+ position: "relative",
840
+ display: "inline-block",
841
+ width: "100%",
842
+ height: "40px",
843
+ cursor: disabled ? "default" : "pointer",
844
+ touchAction: "none"
845
+ }, disabled && {
846
+ opacity: 0.38
847
+ }), style);
848
+
849
+ const railStyle = {
850
+ position: "absolute",
851
+ width: "100%",
852
+ height: "".concat(trackThickness, "px"),
853
+ top: "50%",
854
+ transform: "translateY(-50%)",
855
+ borderRadius: "".concat(trackThickness / 2, "px"),
856
+ backgroundColor: "rgba(255, 255, 255, 0.3)"
857
+ };
858
+ const trackStyle = {
859
+ position: "absolute",
860
+ width: "".concat(percentage, "%"),
861
+ height: "".concat(trackThickness, "px"),
862
+ top: "50%",
863
+ transform: "translateY(-50%)",
864
+ borderRadius: "".concat(trackThickness / 2, "px"),
865
+ backgroundColor: mainColor,
866
+ transition: isDragging ? "none" : "width 150ms"
867
+ };
868
+
869
+ const thumbStyle = _objectSpread({
870
+ position: "absolute",
871
+ width: "".concat(thumbSize, "px"),
872
+ height: "".concat(thumbSize, "px"),
873
+ borderRadius: "50%",
874
+ backgroundColor: mainColor,
875
+ boxShadow: "0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12)",
876
+ left: "calc(".concat(percentage, "% - ").concat(thumbSize / 2, "px)"),
877
+ top: "50%",
878
+ transform: "translateY(-50%)",
879
+ transition: isDragging ? "none" : "left 150ms",
880
+ cursor: "grab"
881
+ }, isDragging && {
882
+ cursor: "grabbing"
883
+ }); // Render marks if provided
884
+
885
+
886
+ const renderMarks = () => {
887
+ if (!marks) return null;
888
+ const markArray = Array.isArray(marks) ? marks : Array.from({
889
+ length: Math.floor((max - min) / step) + 1
890
+ }, (_, i) => ({
891
+ value: min + i * step
892
+ }));
893
+ return markArray.map(mark => {
894
+ const markPercent = (mark.value - min) / (max - min) * 100;
895
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
896
+ key: mark.value
897
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
898
+ style: {
899
+ position: "absolute",
900
+ width: "2px",
901
+ height: "2px",
902
+ borderRadius: "50%",
903
+ backgroundColor: "rgba(255, 255, 255, 0.7)",
904
+ left: "".concat(markPercent, "%"),
905
+ top: "50%",
906
+ transform: "translate(-50%, -50%)"
907
+ }
908
+ }), mark.label && /*#__PURE__*/React__default["default"].createElement("span", {
909
+ style: {
910
+ position: "absolute",
911
+ left: "".concat(markPercent, "%"),
912
+ top: "calc(50% + 16px)",
913
+ transform: "translateX(-50%)",
914
+ fontSize: "12px",
915
+ color: "rgba(255, 255, 255, 0.7)",
916
+ whiteSpace: "nowrap"
917
+ }
918
+ }, mark.label));
919
+ });
920
+ };
921
+
922
+ const displayValue = valueLabelFormat ? valueLabelFormat(currentValue) : getAriaValueText ? getAriaValueText(currentValue) : currentValue;
923
+ return /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
924
+ ref: node => {
925
+ sliderRef.current = node;
926
+
927
+ if (typeof ref === "function") {
928
+ ref(node);
929
+ } else if (ref) {
930
+ ref.current = node;
931
+ }
932
+ },
933
+ style: containerStyle,
934
+ onMouseDown: handleMouseDown,
935
+ role: "slider",
936
+ "aria-valuemin": min,
937
+ "aria-valuemax": max,
938
+ "aria-valuenow": currentValue,
939
+ "aria-valuetext": getAriaValueText === null || getAriaValueText === void 0 ? void 0 : getAriaValueText(currentValue),
940
+ tabIndex: disabled ? -1 : 0
941
+ }, props), /*#__PURE__*/React__default["default"].createElement("span", {
942
+ style: railStyle
943
+ }), track !== false && /*#__PURE__*/React__default["default"].createElement("span", {
944
+ style: trackStyle
945
+ }), /*#__PURE__*/React__default["default"].createElement("span", {
946
+ style: thumbStyle
947
+ }, valueLabelDisplay === "on" && /*#__PURE__*/React__default["default"].createElement("span", {
948
+ style: {
949
+ position: "absolute",
950
+ bottom: "calc(100% + 8px)",
951
+ left: "50%",
952
+ transform: "translateX(-50%)",
953
+ padding: "4px 8px",
954
+ borderRadius: "4px",
955
+ backgroundColor: "rgba(0, 0, 0, 0.87)",
956
+ color: "#fff",
957
+ fontSize: "12px",
958
+ whiteSpace: "nowrap"
959
+ }
960
+ }, displayValue)), renderMarks());
961
+ });
962
+ BaseSlider.displayName = "BaseSlider";
963
+ const Slider = withSx.withSx(BaseSlider);
964
+ /**
965
+ * Rating - Star rating (replaces MUI Rating)
966
+ */
967
+
968
+ const BaseRating = /*#__PURE__*/React__default["default"].forwardRef((_ref6, ref) => {
969
+ let {
970
+ value,
971
+ defaultValue = 0,
972
+ onChange,
973
+ max = 5,
974
+ precision = 1,
975
+ disabled = false,
976
+ readOnly = false,
977
+ size = "medium",
978
+ emptyIcon,
979
+ icon,
980
+ name,
981
+ style
982
+ } = _ref6,
983
+ props = _objectWithoutProperties__default["default"](_ref6, _excluded6);
984
+
985
+ const [internalValue, setInternalValue] = React.useState(defaultValue);
986
+ const [hoverValue, setHoverValue] = React.useState(-1);
987
+ const currentValue = value !== undefined ? value : internalValue;
988
+ const displayValue = hoverValue !== -1 ? hoverValue : currentValue;
989
+ const sizeMap = {
990
+ small: "18px",
991
+ medium: "24px",
992
+ large: "32px"
993
+ };
994
+ const starSize = sizeMap[size] || sizeMap.medium;
995
+
996
+ const handleClick = newValue => {
997
+ if (disabled || readOnly) return;
998
+
999
+ if (value === undefined) {
1000
+ setInternalValue(newValue);
1001
+ }
1002
+
1003
+ onChange === null || onChange === void 0 ? void 0 : onChange({}, newValue);
1004
+ };
1005
+
1006
+ const containerStyle = _objectSpread(_objectSpread({
1007
+ display: "inline-flex",
1008
+ cursor: disabled || readOnly ? "default" : "pointer"
1009
+ }, disabled && {
1010
+ opacity: 0.5
1011
+ }), style);
1012
+
1013
+ const starStyle = filled => ({
1014
+ width: starSize,
1015
+ height: starSize,
1016
+ color: filled ? "#faaf00" : "rgba(0, 0, 0, 0.26)",
1017
+ transition: "color 150ms"
1018
+ });
1019
+
1020
+ const Star = _ref7 => {
1021
+ let {
1022
+ filled
1023
+ } = _ref7;
1024
+ return /*#__PURE__*/React__default["default"].createElement("svg", {
1025
+ style: starStyle(filled),
1026
+ viewBox: "0 0 24 24",
1027
+ fill: "currentColor"
1028
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
1029
+ d: "M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"
1030
+ }));
1031
+ };
1032
+
1033
+ return /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
1034
+ ref: ref,
1035
+ style: containerStyle,
1036
+ onMouseLeave: () => setHoverValue(-1)
1037
+ }, props), Array.from({
1038
+ length: max
1039
+ }, (_, i) => i + 1).map(star => /*#__PURE__*/React__default["default"].createElement("span", {
1040
+ key: star,
1041
+ onClick: () => handleClick(star),
1042
+ onMouseEnter: () => !disabled && !readOnly && setHoverValue(star)
1043
+ }, icon ? /*#__PURE__*/React__default["default"].cloneElement(icon, {
1044
+ filled: star <= displayValue
1045
+ }) : /*#__PURE__*/React__default["default"].createElement(Star, {
1046
+ filled: star <= displayValue
1047
+ }))));
1048
+ });
1049
+ BaseRating.displayName = "BaseRating";
1050
+ const Rating = withSx.withSx(BaseRating);
1051
+
1052
+ exports.Checkbox = Checkbox;
1053
+ exports.Radio = Radio;
1054
+ exports.Rating = Rating;
1055
+ exports.Select = Select;
1056
+ exports.Slider = Slider;
1057
+ exports.Switch = Switch;