@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,858 @@
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 ReactDOM = require('react-dom');
10
+ var withSx = require('./withSx.js');
11
+ var ThemeProvider = require('./ThemeProvider.js');
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 = ["orientation", "variant", "flexItem", "light", "textAlign", "children", "component", "style"],
21
+ _excluded2 = ["label", "variant", "color", "size", "disabled", "clickable", "deletable", "onDelete", "onClick", "avatar", "icon", "deleteIcon", "selected", "selectedColor", "selectedTextColor", "style"],
22
+ _excluded3 = ["alt", "src", "srcSet", "sizes", "variant", "children", "imgProps", "style"],
23
+ _excluded4 = ["badgeContent", "color", "variant", "overlap", "anchorOrigin", "invisible", "max", "showZero", "children", "style"],
24
+ _excluded5 = ["title", "placement", "arrow", "enterDelay", "leaveDelay", "children", "open", "onOpen", "onClose", "disablePortal", "PopperProps", "componentsProps"],
25
+ _excluded6 = ["variant", "value", "valueBuffer", "color", "style"],
26
+ _excluded7 = ["variant", "animation", "width", "height", "children", "style"],
27
+ _excluded8 = ["color", "underline", "component", "href", "children", "style"];
28
+
29
+ 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; }
30
+
31
+ 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; }
32
+ /**
33
+ * Divider - Visual separator (replaces MUI Divider)
34
+ */
35
+
36
+ const BaseDivider = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) => {
37
+ let {
38
+ orientation = "horizontal",
39
+ variant = "fullWidth",
40
+ flexItem = false,
41
+ light = false,
42
+ textAlign = "center",
43
+ children,
44
+ component,
45
+ style
46
+ } = _ref,
47
+ props = _objectWithoutProperties__default["default"](_ref, _excluded);
48
+
49
+ const hasChildren = Boolean(children);
50
+ const Component = component || (hasChildren ? "div" : "hr");
51
+
52
+ const dividerStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
53
+ margin: 0,
54
+ flexShrink: 0,
55
+ borderWidth: 0,
56
+ borderStyle: "solid",
57
+ borderColor: light ? "rgba(255, 255, 255, 0.12)" : "var(--border-color, rgba(0, 0, 0, 0.12))"
58
+ }, orientation === "horizontal" && !hasChildren && _objectSpread(_objectSpread({
59
+ borderBottomWidth: "thin"
60
+ }, variant === "inset" && {
61
+ marginLeft: "72px"
62
+ }), variant === "middle" && {
63
+ marginLeft: "16px",
64
+ marginRight: "16px"
65
+ })), orientation === "vertical" && _objectSpread({
66
+ height: "auto",
67
+ alignSelf: "stretch",
68
+ borderRightWidth: "thin"
69
+ }, variant === "middle" && {
70
+ marginTop: "8px",
71
+ marginBottom: "8px"
72
+ })), flexItem && {
73
+ alignSelf: "stretch",
74
+ height: "auto"
75
+ }), hasChildren && {
76
+ display: "flex",
77
+ alignItems: "center",
78
+ border: 0
79
+ }), style);
80
+
81
+ if (hasChildren) {
82
+ return /*#__PURE__*/React__default["default"].createElement(Component, _extends__default["default"]({
83
+ ref: ref,
84
+ role: "separator",
85
+ style: dividerStyle
86
+ }, props), /*#__PURE__*/React__default["default"].createElement("span", {
87
+ style: _objectSpread({
88
+ flex: 1,
89
+ borderTop: "thin solid var(--border-color, rgba(0, 0, 0, 0.12))"
90
+ }, textAlign === "left" && {
91
+ flex: 0,
92
+ width: "10%"
93
+ })
94
+ }), /*#__PURE__*/React__default["default"].createElement("span", {
95
+ style: _objectSpread(_objectSpread({
96
+ padding: "0 16px"
97
+ }, textAlign === "left" && {
98
+ paddingLeft: "8px"
99
+ }), textAlign === "right" && {
100
+ paddingRight: "8px"
101
+ })
102
+ }, children), /*#__PURE__*/React__default["default"].createElement("span", {
103
+ style: _objectSpread({
104
+ flex: 1,
105
+ borderTop: "thin solid var(--border-color, rgba(0, 0, 0, 0.12))"
106
+ }, textAlign === "right" && {
107
+ flex: 0,
108
+ width: "10%"
109
+ })
110
+ }));
111
+ }
112
+
113
+ return /*#__PURE__*/React__default["default"].createElement(Component, _extends__default["default"]({
114
+ ref: ref,
115
+ role: "separator",
116
+ style: dividerStyle
117
+ }, props));
118
+ });
119
+ BaseDivider.displayName = "BaseDivider";
120
+ const Divider = withSx.withSx(BaseDivider);
121
+ /**
122
+ * Chip - Compact element for inputs, attributes, or actions (replaces MUI Chip)
123
+ *
124
+ * New props for selection support:
125
+ * - selected: boolean - whether the chip is in selected state
126
+ * - selectedColor: string - theme color to use when selected (default: "primary")
127
+ * - selectedTextColor: string - text color when selected (optional override)
128
+ */
129
+
130
+ const BaseChip = /*#__PURE__*/React__default["default"].forwardRef((_ref2, ref) => {
131
+ var _colors$selectedTextC, _avatar$props, _icon$props;
132
+
133
+ let {
134
+ label,
135
+ variant = "filled",
136
+ color = "default",
137
+ size = "medium",
138
+ disabled = false,
139
+ clickable,
140
+ deletable,
141
+ onDelete,
142
+ onClick,
143
+ avatar,
144
+ icon,
145
+ deleteIcon,
146
+ selected,
147
+ selectedColor = "primary",
148
+ selectedTextColor,
149
+ style
150
+ } = _ref2,
151
+ props = _objectWithoutProperties__default["default"](_ref2, _excluded2);
152
+
153
+ const {
154
+ colors
155
+ } = ThemeProvider.useTheme();
156
+
157
+ const getColor = colorName => {
158
+ if (colorName === "default") return {
159
+ bg: "rgba(0, 0, 0, 0.08)",
160
+ text: "var(--body-text)"
161
+ };
162
+ const colorValue = colors[colorName];
163
+
164
+ if (typeof colorValue === "object") {
165
+ return {
166
+ bg: colorValue.main,
167
+ text: colorValue.contrastText || "#fff"
168
+ };
169
+ }
170
+
171
+ return {
172
+ bg: colorValue || "rgba(0, 0, 0, 0.08)",
173
+ text: "#fff"
174
+ };
175
+ }; // Use selectedColor when selected, otherwise use color
176
+
177
+
178
+ const activeColor = selected ? selectedColor : color;
179
+ const {
180
+ bg,
181
+ text
182
+ } = getColor(activeColor); // Allow override of text color when selected
183
+
184
+ const finalTextColor = selected && selectedTextColor ? ((_colors$selectedTextC = colors[selectedTextColor]) === null || _colors$selectedTextC === void 0 ? void 0 : _colors$selectedTextC.main) || colors[selectedTextColor] || selectedTextColor : text;
185
+
186
+ const chipStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
187
+ display: "inline-flex",
188
+ alignItems: "center",
189
+ justifyContent: "center",
190
+ height: size === "small" ? "24px" : "32px",
191
+ fontSize: size === "small" ? "0.8125rem" : "0.875rem",
192
+ borderRadius: "16px",
193
+ whiteSpace: "nowrap",
194
+ cursor: clickable || onClick ? "pointer" : "default",
195
+ outline: 0,
196
+ textDecoration: "none",
197
+ border: 0,
198
+ padding: 0,
199
+ verticalAlign: "middle",
200
+ boxSizing: "border-box",
201
+ transition: "background-color 300ms, border-color 300ms, color 300ms"
202
+ }, variant === "filled" && {
203
+ backgroundColor: bg,
204
+ color: activeColor === "default" ? "var(--body-text)" : finalTextColor
205
+ }), variant === "outlined" && {
206
+ backgroundColor: selected ? bg : "transparent",
207
+ border: "1px solid ".concat(activeColor === "default" ? "var(--border-color)" : bg),
208
+ color: activeColor === "default" ? "var(--body-text)" : selected ? finalTextColor : bg
209
+ }), disabled && {
210
+ opacity: 0.5,
211
+ pointerEvents: "none"
212
+ }), style);
213
+
214
+ const labelStyle = _objectSpread(_objectSpread({
215
+ overflow: "hidden",
216
+ textOverflow: "ellipsis",
217
+ paddingLeft: "12px",
218
+ paddingRight: "12px",
219
+ whiteSpace: "nowrap"
220
+ }, (avatar || icon) && {
221
+ paddingLeft: "8px"
222
+ }), (deletable || onDelete) && {
223
+ paddingRight: "8px"
224
+ });
225
+
226
+ const iconStyle = {
227
+ marginLeft: "5px",
228
+ marginRight: "-6px",
229
+ width: size === "small" ? "18px" : "24px",
230
+ height: size === "small" ? "18px" : "24px"
231
+ };
232
+ const deleteIconStyle = {
233
+ cursor: "pointer",
234
+ marginLeft: "-6px",
235
+ marginRight: "5px",
236
+ width: size === "small" ? "18px" : "22px",
237
+ height: size === "small" ? "18px" : "22px",
238
+ opacity: 0.7
239
+ };
240
+ const Component = onClick ? "button" : "div";
241
+ return /*#__PURE__*/React__default["default"].createElement(Component, _extends__default["default"]({
242
+ ref: ref,
243
+ style: chipStyle,
244
+ onClick: onClick,
245
+ disabled: disabled
246
+ }, props), avatar && /*#__PURE__*/React__default["default"].cloneElement(avatar, {
247
+ style: _objectSpread(_objectSpread({}, iconStyle), (_avatar$props = avatar.props) === null || _avatar$props === void 0 ? void 0 : _avatar$props.style)
248
+ }), !avatar && icon && /*#__PURE__*/React__default["default"].cloneElement(icon, {
249
+ style: _objectSpread(_objectSpread({}, iconStyle), (_icon$props = icon.props) === null || _icon$props === void 0 ? void 0 : _icon$props.style)
250
+ }), /*#__PURE__*/React__default["default"].createElement("span", {
251
+ style: labelStyle
252
+ }, label), (deletable || onDelete) && /*#__PURE__*/React__default["default"].createElement("span", {
253
+ style: deleteIconStyle,
254
+ onClick: e => {
255
+ e.stopPropagation();
256
+ onDelete === null || onDelete === void 0 ? void 0 : onDelete(e);
257
+ },
258
+ role: "button",
259
+ tabIndex: 0
260
+ }, deleteIcon || "✕"));
261
+ });
262
+ BaseChip.displayName = "BaseChip";
263
+ const Chip = withSx.withSx(BaseChip);
264
+ /**
265
+ * Avatar - Circular image/icon/letter display (replaces MUI Avatar)
266
+ */
267
+
268
+ const BaseAvatar = /*#__PURE__*/React__default["default"].forwardRef((_ref3, ref) => {
269
+ let {
270
+ alt,
271
+ src,
272
+ srcSet,
273
+ sizes,
274
+ variant = "circular",
275
+ children,
276
+ imgProps,
277
+ style
278
+ } = _ref3,
279
+ props = _objectWithoutProperties__default["default"](_ref3, _excluded3);
280
+
281
+ const [hasError, setHasError] = React__default["default"].useState(false);
282
+
283
+ const avatarStyle = _objectSpread({
284
+ position: "relative",
285
+ display: "flex",
286
+ alignItems: "center",
287
+ justifyContent: "center",
288
+ flexShrink: 0,
289
+ width: "40px",
290
+ height: "40px",
291
+ fontSize: "1.25rem",
292
+ lineHeight: 1,
293
+ borderRadius: variant === "circular" ? "50%" : variant === "rounded" ? "4px" : 0,
294
+ overflow: "hidden",
295
+ userSelect: "none",
296
+ color: "#fff",
297
+ backgroundColor: "#bdbdbd"
298
+ }, style);
299
+
300
+ const imgStyle = {
301
+ width: "100%",
302
+ height: "100%",
303
+ textAlign: "center",
304
+ objectFit: "cover",
305
+ color: "transparent",
306
+ textIndent: "10000px"
307
+ };
308
+
309
+ const getInitials = () => {
310
+ var _alt$;
311
+
312
+ if (!alt) return null;
313
+ const names = alt.split(" ");
314
+
315
+ if (names.length >= 2) {
316
+ return "".concat(names[0][0]).concat(names[1][0]).toUpperCase();
317
+ }
318
+
319
+ return (_alt$ = alt[0]) === null || _alt$ === void 0 ? void 0 : _alt$.toUpperCase();
320
+ };
321
+
322
+ return /*#__PURE__*/React__default["default"].createElement("div", _extends__default["default"]({
323
+ ref: ref,
324
+ style: avatarStyle
325
+ }, props), src && !hasError ? /*#__PURE__*/React__default["default"].createElement("img", _extends__default["default"]({
326
+ alt: alt,
327
+ src: src,
328
+ srcSet: srcSet,
329
+ sizes: sizes,
330
+ style: imgStyle,
331
+ onError: () => setHasError(true)
332
+ }, imgProps)) : children || getInitials());
333
+ });
334
+ BaseAvatar.displayName = "BaseAvatar";
335
+ const Avatar = withSx.withSx(BaseAvatar);
336
+ /**
337
+ * Badge - Small count/indicator overlay (replaces MUI Badge)
338
+ */
339
+
340
+ const BaseBadge = /*#__PURE__*/React__default["default"].forwardRef((_ref4, ref) => {
341
+ let {
342
+ badgeContent,
343
+ color = "default",
344
+ variant = "standard",
345
+ overlap = "rectangular",
346
+ anchorOrigin = {
347
+ vertical: "top",
348
+ horizontal: "right"
349
+ },
350
+ invisible = false,
351
+ max = 99,
352
+ showZero = false,
353
+ children,
354
+ style
355
+ } = _ref4,
356
+ props = _objectWithoutProperties__default["default"](_ref4, _excluded4);
357
+
358
+ const {
359
+ colors
360
+ } = ThemeProvider.useTheme();
361
+
362
+ const getColor = () => {
363
+ if (color === "default") return {
364
+ bg: "#bdbdbd",
365
+ text: "#fff"
366
+ };
367
+ const colorValue = colors[color];
368
+
369
+ if (typeof colorValue === "object") {
370
+ return {
371
+ bg: colorValue.main,
372
+ text: colorValue.contrastText || "#fff"
373
+ };
374
+ }
375
+
376
+ return {
377
+ bg: colorValue || "#bdbdbd",
378
+ text: "#fff"
379
+ };
380
+ };
381
+
382
+ const {
383
+ bg,
384
+ text
385
+ } = getColor();
386
+ const shouldHide = invisible || badgeContent === 0 && !showZero;
387
+ const displayValue = typeof badgeContent === "number" && badgeContent > max ? "".concat(max, "+") : badgeContent;
388
+
389
+ const containerStyle = _objectSpread({
390
+ position: "relative",
391
+ display: "inline-flex",
392
+ verticalAlign: "middle",
393
+ flexShrink: 0
394
+ }, style);
395
+
396
+ const badgeStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
397
+ display: shouldHide ? "none" : "flex",
398
+ flexDirection: "row",
399
+ flexWrap: "wrap",
400
+ justifyContent: "center",
401
+ alignContent: "center",
402
+ alignItems: "center",
403
+ position: "absolute",
404
+ boxSizing: "border-box",
405
+ fontFamily: "inherit",
406
+ fontWeight: 500,
407
+ fontSize: "0.75rem",
408
+ lineHeight: 1,
409
+ zIndex: 1,
410
+ transition: "transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms",
411
+ backgroundColor: bg,
412
+ color: text
413
+ }, variant === "standard" && {
414
+ minWidth: "20px",
415
+ height: "20px",
416
+ padding: "0 6px",
417
+ borderRadius: "10px"
418
+ }), variant === "dot" && {
419
+ width: "8px",
420
+ height: "8px",
421
+ borderRadius: "4px",
422
+ padding: 0
423
+ }), anchorOrigin.vertical === "top" && {
424
+ top: 0
425
+ }), anchorOrigin.vertical === "bottom" && {
426
+ bottom: 0
427
+ }), anchorOrigin.horizontal === "right" && {
428
+ right: 0
429
+ }), anchorOrigin.horizontal === "left" && {
430
+ left: 0
431
+ }), {}, {
432
+ transform: "scale(1) translate(".concat(anchorOrigin.horizontal === "right" ? "50%" : "-50%", ", ").concat(anchorOrigin.vertical === "top" ? "-50%" : "50%", ")"),
433
+ transformOrigin: "".concat(anchorOrigin.horizontal === "right" ? "100%" : "0%", " ").concat(anchorOrigin.vertical === "top" ? "0%" : "100%")
434
+ });
435
+
436
+ return /*#__PURE__*/React__default["default"].createElement("span", _extends__default["default"]({
437
+ ref: ref,
438
+ style: containerStyle
439
+ }, props), children, /*#__PURE__*/React__default["default"].createElement("span", {
440
+ style: badgeStyle
441
+ }, variant !== "dot" && displayValue));
442
+ });
443
+ BaseBadge.displayName = "BaseBadge";
444
+ const Badge = withSx.withSx(BaseBadge);
445
+ /**
446
+ * Tooltip - Informative text on hover (replaces MUI Tooltip)
447
+ * Uses portal for proper positioning regardless of parent overflow/transform
448
+ */
449
+
450
+ const BaseTooltip = /*#__PURE__*/React__default["default"].forwardRef((_ref5, ref) => {
451
+ var _componentsProps$tool, _componentsProps$tool2, _PopperProps$sx, _componentsProps$tool3;
452
+
453
+ let {
454
+ title,
455
+ placement = "bottom",
456
+ arrow = false,
457
+ enterDelay = 100,
458
+ leaveDelay = 0,
459
+ children,
460
+ open: controlledOpen,
461
+ onOpen,
462
+ onClose,
463
+ disablePortal = false,
464
+ PopperProps = {},
465
+ componentsProps = {}
466
+ } = _ref5;
467
+ _objectWithoutProperties__default["default"](_ref5, _excluded5);
468
+
469
+ const [isOpen, setIsOpen] = React.useState(false);
470
+ const [position, setPosition] = React.useState({
471
+ top: 0,
472
+ left: 0
473
+ });
474
+ const timeoutRef = React.useRef(null);
475
+ const childRef = React.useRef(null);
476
+ const tooltipRef = React.useRef(null);
477
+ const open = controlledOpen !== undefined ? controlledOpen : isOpen; // Calculate position based on child element and placement
478
+
479
+ const updatePosition = React.useCallback(() => {
480
+ if (!childRef.current) return;
481
+ const childRect = childRef.current.getBoundingClientRect();
482
+ const tooltipEl = tooltipRef.current;
483
+ const tooltipRect = tooltipEl ? tooltipEl.getBoundingClientRect() : {
484
+ width: 0,
485
+ height: 0
486
+ };
487
+ const gap = 8; // Space between element and tooltip
488
+
489
+ let top = 0;
490
+ let left = 0;
491
+
492
+ switch (placement) {
493
+ case 'top':
494
+ top = childRect.top - tooltipRect.height - gap;
495
+ left = childRect.left + (childRect.width - tooltipRect.width) / 2;
496
+ break;
497
+
498
+ case 'top-start':
499
+ top = childRect.top - tooltipRect.height - gap;
500
+ left = childRect.left;
501
+ break;
502
+
503
+ case 'top-end':
504
+ top = childRect.top - tooltipRect.height - gap;
505
+ left = childRect.right - tooltipRect.width;
506
+ break;
507
+
508
+ case 'bottom':
509
+ top = childRect.bottom + gap;
510
+ left = childRect.left + (childRect.width - tooltipRect.width) / 2;
511
+ break;
512
+
513
+ case 'bottom-start':
514
+ top = childRect.bottom + gap;
515
+ left = childRect.left;
516
+ break;
517
+
518
+ case 'bottom-end':
519
+ top = childRect.bottom + gap;
520
+ left = childRect.right - tooltipRect.width;
521
+ break;
522
+
523
+ case 'left':
524
+ top = childRect.top + (childRect.height - tooltipRect.height) / 2;
525
+ left = childRect.left - tooltipRect.width - gap;
526
+ break;
527
+
528
+ case 'left-start':
529
+ top = childRect.top;
530
+ left = childRect.left - tooltipRect.width - gap;
531
+ break;
532
+
533
+ case 'left-end':
534
+ top = childRect.bottom - tooltipRect.height;
535
+ left = childRect.left - tooltipRect.width - gap;
536
+ break;
537
+
538
+ case 'right':
539
+ top = childRect.top + (childRect.height - tooltipRect.height) / 2;
540
+ left = childRect.right + gap;
541
+ break;
542
+
543
+ case 'right-start':
544
+ top = childRect.top;
545
+ left = childRect.right + gap;
546
+ break;
547
+
548
+ case 'right-end':
549
+ top = childRect.bottom - tooltipRect.height;
550
+ left = childRect.right + gap;
551
+ break;
552
+
553
+ default:
554
+ top = childRect.bottom + gap;
555
+ left = childRect.left + (childRect.width - tooltipRect.width) / 2;
556
+ } // Keep within viewport
557
+
558
+
559
+ const padding = 8;
560
+ const viewportWidth = window.innerWidth;
561
+ const viewportHeight = window.innerHeight;
562
+ if (left < padding) left = padding;
563
+
564
+ if (left + tooltipRect.width > viewportWidth - padding) {
565
+ left = viewportWidth - tooltipRect.width - padding;
566
+ }
567
+
568
+ if (top < padding) top = padding;
569
+
570
+ if (top + tooltipRect.height > viewportHeight - padding) {
571
+ top = viewportHeight - tooltipRect.height - padding;
572
+ }
573
+
574
+ setPosition({
575
+ top,
576
+ left
577
+ });
578
+ }, [placement]); // Update position when open changes or on scroll/resize
579
+
580
+ React.useLayoutEffect(() => {
581
+ if (open) {
582
+ updatePosition(); // Update position on scroll and resize
583
+
584
+ window.addEventListener('scroll', updatePosition, true);
585
+ window.addEventListener('resize', updatePosition);
586
+ return () => {
587
+ window.removeEventListener('scroll', updatePosition, true);
588
+ window.removeEventListener('resize', updatePosition);
589
+ };
590
+ }
591
+ }, [open, updatePosition]); // Re-calculate after tooltip renders (to get accurate dimensions)
592
+
593
+ React.useEffect(() => {
594
+ if (open && tooltipRef.current) {
595
+ updatePosition();
596
+ }
597
+ }, [open, updatePosition]);
598
+
599
+ const handleOpen = () => {
600
+ clearTimeout(timeoutRef.current);
601
+ timeoutRef.current = setTimeout(() => {
602
+ setIsOpen(true);
603
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen();
604
+ }, enterDelay);
605
+ };
606
+
607
+ const handleClose = () => {
608
+ clearTimeout(timeoutRef.current);
609
+ timeoutRef.current = setTimeout(() => {
610
+ setIsOpen(false);
611
+ onClose === null || onClose === void 0 ? void 0 : onClose();
612
+ }, leaveDelay);
613
+ };
614
+
615
+ React.useEffect(() => {
616
+ return () => clearTimeout(timeoutRef.current);
617
+ }, []); // Get the child element and clone it to add event handlers and ref
618
+
619
+ const child = React__default["default"].Children.only(children);
620
+ const childWithHandlers = /*#__PURE__*/React__default["default"].cloneElement(child, {
621
+ ref: node => {
622
+ childRef.current = node; // Handle child's ref if it exists
623
+
624
+ const {
625
+ ref: childRefProp
626
+ } = child;
627
+
628
+ if (typeof childRefProp === 'function') {
629
+ childRefProp(node);
630
+ } else if (childRefProp) {
631
+ childRefProp.current = node;
632
+ } // Handle forwarded ref
633
+
634
+
635
+ if (typeof ref === 'function') {
636
+ ref(node);
637
+ } else if (ref) {
638
+ ref.current = node;
639
+ }
640
+ },
641
+ onMouseEnter: e => {
642
+ var _child$props$onMouseE, _child$props;
643
+
644
+ handleOpen();
645
+ (_child$props$onMouseE = (_child$props = child.props).onMouseEnter) === null || _child$props$onMouseE === void 0 ? void 0 : _child$props$onMouseE.call(_child$props, e);
646
+ },
647
+ onMouseLeave: e => {
648
+ var _child$props$onMouseL, _child$props2;
649
+
650
+ handleClose();
651
+ (_child$props$onMouseL = (_child$props2 = child.props).onMouseLeave) === null || _child$props$onMouseL === void 0 ? void 0 : _child$props$onMouseL.call(_child$props2, e);
652
+ },
653
+ onFocus: e => {
654
+ var _child$props$onFocus, _child$props3;
655
+
656
+ handleOpen();
657
+ (_child$props$onFocus = (_child$props3 = child.props).onFocus) === null || _child$props$onFocus === void 0 ? void 0 : _child$props$onFocus.call(_child$props3, e);
658
+ },
659
+ onBlur: e => {
660
+ var _child$props$onBlur, _child$props4;
661
+
662
+ handleClose();
663
+ (_child$props$onBlur = (_child$props4 = child.props).onBlur) === null || _child$props$onBlur === void 0 ? void 0 : _child$props$onBlur.call(_child$props4, e);
664
+ }
665
+ }); // Hardcoded fallback background color
666
+
667
+ const defaultBgColor = "rgba(97, 97, 97, 0.92)"; // Get background from props, with fallback chain
668
+
669
+ const customBg = ((_componentsProps$tool = componentsProps.tooltip) === null || _componentsProps$tool === void 0 ? void 0 : (_componentsProps$tool2 = _componentsProps$tool.sx) === null || _componentsProps$tool2 === void 0 ? void 0 : _componentsProps$tool2.backgroundColor) || ((_PopperProps$sx = PopperProps.sx) === null || _PopperProps$sx === void 0 ? void 0 : _PopperProps$sx.backgroundColor); // Ensure we always have a valid background
670
+
671
+ const backgroundColor = customBg && customBg !== "transparent" && customBg !== "inherit" ? customBg : defaultBgColor;
672
+
673
+ const tooltipStyle = _objectSpread(_objectSpread(_objectSpread({
674
+ position: 'fixed',
675
+ top: position.top,
676
+ left: position.left,
677
+ zIndex: 1500,
678
+ borderRadius: "4px",
679
+ color: "#fff",
680
+ padding: "4px 8px",
681
+ fontSize: "0.6875rem",
682
+ maxWidth: "300px",
683
+ wordWrap: "break-word",
684
+ fontWeight: 500,
685
+ pointerEvents: 'none',
686
+ opacity: open ? 1 : 0,
687
+ transition: 'opacity 200ms'
688
+ }, (_componentsProps$tool3 = componentsProps.tooltip) === null || _componentsProps$tool3 === void 0 ? void 0 : _componentsProps$tool3.sx), PopperProps.sx), {}, {
689
+ // Force background at the end to ensure it's never transparent
690
+ backgroundColor
691
+ });
692
+
693
+ const tooltipContent = open && title ? /*#__PURE__*/React__default["default"].createElement("span", {
694
+ ref: tooltipRef,
695
+ role: "tooltip",
696
+ style: tooltipStyle
697
+ }, title) : null;
698
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, childWithHandlers, tooltipContent && (disablePortal ? tooltipContent : /*#__PURE__*/ReactDOM.createPortal(tooltipContent, document.body)));
699
+ });
700
+ BaseTooltip.displayName = "BaseTooltip";
701
+ const Tooltip = withSx.withSx(BaseTooltip);
702
+ /**
703
+ * LinearProgress - Progress bar (replaces MUI LinearProgress)
704
+ */
705
+
706
+ const BaseLinearProgress = /*#__PURE__*/React__default["default"].forwardRef((_ref6, ref) => {
707
+ let {
708
+ variant = "indeterminate",
709
+ value = 0,
710
+ valueBuffer,
711
+ color = "primary",
712
+ style
713
+ } = _ref6,
714
+ props = _objectWithoutProperties__default["default"](_ref6, _excluded6);
715
+
716
+ const {
717
+ colors
718
+ } = ThemeProvider.useTheme();
719
+ const colorValue = colors[color] || colors.primary;
720
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue;
721
+
722
+ const containerStyle = _objectSpread({
723
+ position: "relative",
724
+ overflow: "hidden",
725
+ display: "block",
726
+ height: "4px",
727
+ zIndex: 0,
728
+ backgroundColor: "".concat(mainColor, "33"),
729
+ borderRadius: "2px"
730
+ }, style);
731
+
732
+ const barStyle = _objectSpread(_objectSpread({
733
+ width: "100%",
734
+ position: "absolute",
735
+ left: 0,
736
+ bottom: 0,
737
+ top: 0,
738
+ transition: "transform 0.4s linear",
739
+ transformOrigin: "left",
740
+ backgroundColor: mainColor
741
+ }, variant === "determinate" && {
742
+ transform: "translateX(".concat(value - 100, "%)")
743
+ }), variant === "indeterminate" && {
744
+ animation: "indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite"
745
+ });
746
+
747
+ return /*#__PURE__*/React__default["default"].createElement("span", _extends__default["default"]({
748
+ ref: ref,
749
+ role: "progressbar",
750
+ "aria-valuenow": variant === "determinate" ? value : undefined,
751
+ style: containerStyle
752
+ }, props), /*#__PURE__*/React__default["default"].createElement("span", {
753
+ style: barStyle
754
+ }), /*#__PURE__*/React__default["default"].createElement("style", null, "\n @keyframes indeterminate1 {\n 0% { left: -35%; right: 100%; }\n 60% { left: 100%; right: -90%; }\n 100% { left: 100%; right: -90%; }\n }\n "));
755
+ });
756
+ BaseLinearProgress.displayName = "BaseLinearProgress";
757
+ const LinearProgress = withSx.withSx(BaseLinearProgress);
758
+ /**
759
+ * Skeleton - Placeholder loading component (replaces MUI Skeleton)
760
+ */
761
+
762
+ const BaseSkeleton = /*#__PURE__*/React__default["default"].forwardRef((_ref7, ref) => {
763
+ let {
764
+ variant = "text",
765
+ animation = "pulse",
766
+ width,
767
+ height,
768
+ children,
769
+ style
770
+ } = _ref7,
771
+ props = _objectWithoutProperties__default["default"](_ref7, _excluded7);
772
+
773
+ const {
774
+ mode
775
+ } = ThemeProvider.useTheme(); // Theme-aware background color like MUI
776
+
777
+ const bgColor = mode === "dark" ? "#3b3d43ff" : "#3b3d43ff";
778
+
779
+ const skeletonStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
780
+ display: "block"
781
+ }, variant === "text" && {
782
+ marginTop: "4px",
783
+ marginBottom: "4px",
784
+ height: height || "1.2em",
785
+ borderRadius: "4px"
786
+ }), variant === "circular" && {
787
+ borderRadius: "50%"
788
+ }), variant === "rectangular" && {
789
+ borderRadius: 0
790
+ }), variant === "rounded" && {
791
+ borderRadius: "4px"
792
+ }), width && {
793
+ width
794
+ }), height && {
795
+ height
796
+ }), animation === "pulse" && {
797
+ animation: "skeleton-pulse 1.5s ease-in-out 0.5s infinite"
798
+ }), animation === "wave" && {
799
+ position: "relative",
800
+ overflow: "hidden"
801
+ }), animation === false && {
802
+ animation: "none"
803
+ }), style), {}, {
804
+ backgroundColor: bgColor
805
+ });
806
+
807
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("span", _extends__default["default"]({
808
+ ref: ref,
809
+ style: skeletonStyle
810
+ }, props), children), /*#__PURE__*/React__default["default"].createElement("style", null, "\n @keyframes skeleton-pulse {\n 0% { opacity: 1; }\n 50% { opacity: 0.4; }\n 100% { opacity: 1; }\n }\n "));
811
+ });
812
+ BaseSkeleton.displayName = "BaseSkeleton";
813
+ const Skeleton = withSx.withSx(BaseSkeleton);
814
+ /**
815
+ * Link - Styled anchor element (replaces MUI Link)
816
+ */
817
+
818
+ const BaseLink = /*#__PURE__*/React__default["default"].forwardRef((_ref8, ref) => {
819
+ let {
820
+ color = "primary",
821
+ underline = "always",
822
+ component,
823
+ href,
824
+ children,
825
+ style
826
+ } = _ref8,
827
+ props = _objectWithoutProperties__default["default"](_ref8, _excluded8);
828
+
829
+ const {
830
+ colors
831
+ } = ThemeProvider.useTheme();
832
+ const colorValue = colors[color] || colors.primary;
833
+ const mainColor = typeof colorValue === "object" ? colorValue.main : colorValue;
834
+
835
+ const linkStyle = _objectSpread({
836
+ color: color === "inherit" ? "inherit" : mainColor,
837
+ textDecoration: underline === "none" ? "none" : underline === "hover" ? "none" : "underline",
838
+ cursor: "pointer"
839
+ }, style);
840
+
841
+ const Component = component || "a";
842
+ return /*#__PURE__*/React__default["default"].createElement(Component, _extends__default["default"]({
843
+ ref: ref,
844
+ href: href,
845
+ style: linkStyle
846
+ }, props), children);
847
+ });
848
+ BaseLink.displayName = "BaseLink";
849
+ const Link = withSx.withSx(BaseLink);
850
+
851
+ exports.Avatar = Avatar;
852
+ exports.Badge = Badge;
853
+ exports.Chip = Chip;
854
+ exports.Divider = Divider;
855
+ exports.LinearProgress = LinearProgress;
856
+ exports.Link = Link;
857
+ exports.Skeleton = Skeleton;
858
+ exports.Tooltip = Tooltip;