mainbase-ui 1.2.4 → 1.2.5

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.
package/README.md CHANGED
@@ -1,279 +1,35 @@
1
1
  # Mainbase UI
2
2
 
3
- Mainbase UI is a React component library built with React and TypeScript.
3
+ A React component library built with React and TypeScript.
4
4
 
5
- The library provides reusable interface components, a customizable theme system,
6
- CSS variables, and typed component APIs for building web applications.
5
+ Mainbase UI provides reusable interface components, a customizable theme system, CSS variables, and fully typed component APIs for building modern web applications.
7
6
 
8
- ## Requirements
9
-
10
- - React 18 or higher
11
- - React DOM 18 or higher
12
- - TypeScript 5 or higher (recommended)
13
-
14
- ## Installation
15
-
16
- Install the package using npm:
17
-
18
- ```bash
19
- npm install mainbase-ui
20
-
21
- or using pnpm:
22
-
23
- pnpm add mainbase-ui
24
-
25
- or using yarn:
26
-
27
- yarn add mainbase-ui
28
- Basic Usage
29
-
30
- Import the global styles:
31
-
32
- import "mainbase-ui/styles.css";
33
-
34
- Import required components:
35
-
36
- import {
37
- MainbaseProvider,
38
- Button,
39
- } from "mainbase-ui";
40
-
41
- Example:
42
-
43
- export default function App() {
44
- return (
45
- <MainbaseProvider>
46
- <Button>
47
- Click me
48
- </Button>
49
- </MainbaseProvider>
50
- );
51
- }
52
- MainbaseProvider
53
-
54
- MainbaseProvider is the root configuration component.
55
-
56
- It provides:
57
-
58
- theme configuration;
59
- component default values;
60
- design tokens;
61
- CSS variables.
62
-
63
- Example:
64
-
65
- <MainbaseProvider
66
- theme={{
67
- colors: {
68
- primary: "#ff8a1f",
69
- primaryHover: "#f47c0f",
70
- primaryActive: "#dd6d06",
71
- },
72
-
73
- radii: {
74
- sm: 4,
75
- md: 4,
76
- lg: 4,
77
- xl: 4,
78
- full: 999,
79
- },
80
- }}
81
- >
82
- <App />
83
- </MainbaseProvider>
84
- Theme Configuration
85
-
86
- The theme system allows changing global interface values.
87
-
88
- Supported theme sections:
89
-
90
- colors;
91
- typography;
92
- radii;
93
- spacing;
94
- shadows;
95
- transitions;
96
- z-index;
97
- component defaults.
98
-
99
- Example:
7
+ ## Features
100
8
 
101
- <MainbaseProvider
102
- theme={{
103
- typography: {
104
- fontFamily:
105
- "Manrope, sans-serif",
106
- },
9
+ - React 18+ support
10
+ - TypeScript-first API
11
+ - Customizable theme system
12
+ - Design tokens
13
+ - Reusable UI components
14
+ - CSS variables support
15
+ - Accessibility support
16
+ - Tree-shakable component exports
107
17
 
108
- colors: {
109
- primary: "#2563eb",
110
- },
111
- }}
112
- >
113
- <App />
114
- </MainbaseProvider>
115
- Colors
18
+ ---
116
19
 
117
- Available color tokens:
118
-
119
- colors: {
120
- primary,
121
- primaryHover,
122
- primaryActive,
123
-
124
- text,
125
- textSecondary,
126
- textMuted,
127
-
128
- background,
129
- backgroundSecondary,
130
-
131
- border,
132
- borderHover,
133
-
134
- success,
135
- warning,
136
- danger,
137
- info
138
- }
139
- Border Radius
140
-
141
- Global component radius can be configured:
142
-
143
- <MainbaseProvider
144
- theme={{
145
- radii: {
146
- sm: 4,
147
- md: 4,
148
- lg: 4,
149
- xl: 4,
150
- full: 999,
151
- },
152
- }}
153
- >
154
-
155
- These values are used by components automatically.
156
-
157
- Typography
158
-
159
- Example:
160
-
161
- <MainbaseProvider
162
- theme={{
163
- typography: {
164
- fontFamily:
165
- "Manrope, sans-serif",
166
- },
167
- }}
168
- >
169
- Components
170
-
171
- Mainbase UI includes the following components.
172
-
173
- Layout
174
- Stack
175
- Group
176
- Card
177
- Divider
178
- Typography
179
- Text
180
- Title
181
- Buttons
182
- Button
183
- IconButton
184
- Inputs
185
- Input
186
- Textarea
187
- PasswordInput
188
- PinInput
189
- Select
190
- FileInput
191
- DatePicker
192
- Selection
193
- Checkbox
194
- Radio
195
- Switch
196
- Feedback
197
- Alert
198
- Badge
199
- Spinner
200
- Progress
201
- Skeleton
202
- Toast
203
- Navigation
204
- Tabs
205
- Accordion
206
- Pagination
207
- Overlay
208
- Modal
209
- Drawer
210
- Menu
211
- Popover
212
- Tooltip
213
- User Components
214
- Avatar
215
- AvatarGroup
216
- Component Defaults
217
-
218
- Default component settings can be configured through the theme.
219
-
220
- Example:
221
-
222
- <MainbaseProvider
223
- theme={{
224
- components: {
225
- Button: {
226
- size: "lg",
227
- variant: "primary",
228
- },
229
-
230
- Card: {
231
- radius: "md",
232
- },
233
- },
234
- }}
235
- >
236
- TypeScript Support
237
-
238
- Mainbase UI provides TypeScript definitions for all public components.
239
-
240
- Example:
241
-
242
- import type {
243
- ButtonProps,
244
- DatePickerProps,
245
- } from "mainbase-ui";
246
- CSS Variables
247
-
248
- Mainbase UI exposes CSS variables that can be customized.
249
-
250
- Example:
251
-
252
- :root {
253
- --mb-primary: #ff8a1f;
254
- --mb-radius: 8px;
255
- }
256
- Accessibility
257
-
258
- Components are designed with accessibility support:
20
+ ## Requirements
259
21
 
260
- keyboard navigation;
261
- ARIA attributes;
262
- focus states;
263
- disabled states.
264
- Browser Support
22
+ - React `18` or higher
23
+ - React DOM `18` or higher
24
+ - TypeScript `5` or higher (recommended)
265
25
 
266
- Mainbase UI supports modern browsers:
26
+ ---
267
27
 
268
- Chrome
269
- Edge
270
- Firefox
271
- Safari
272
- License
28
+ # Installation
273
29
 
274
- Mainbase UI is distributed under the MIT License.
30
+ Install Mainbase UI using your preferred package manager.
275
31
 
276
- You are free to use, modify, and distribute this software
277
- according to the terms of the license.
32
+ ## npm
278
33
 
279
- See the LICENSE file for full license text.
34
+ ```bash
35
+ npm install mainbase-ui
package/dist/index.cjs CHANGED
@@ -33,9 +33,12 @@ __export(index_exports, {
33
33
  Drawer: () => Drawer,
34
34
  FileInput: () => FileInput,
35
35
  Group: () => Group,
36
+ Highlight: () => Highlight,
36
37
  Icon: () => Icon,
37
38
  IconButton: () => IconButton,
39
+ Image: () => Image,
38
40
  Input: () => Input,
41
+ Link: () => Link,
39
42
  MainbasePortalContext: () => MainbasePortalContext,
40
43
  MainbaseProvider: () => MainbaseProvider,
41
44
  Menu: () => Menu,
@@ -235,6 +238,10 @@ var defaultMainbaseTheme = {
235
238
  size: "md",
236
239
  firstDayOfWeek: 1,
237
240
  clearable: true
241
+ },
242
+ Image: {
243
+ radius: "md",
244
+ fit: "cover"
238
245
  }
239
246
  }
240
247
  };
@@ -431,6 +438,10 @@ function mergeTheme(parentTheme, override) {
431
438
  DatePicker: {
432
439
  ...parentTheme.components.DatePicker,
433
440
  ...override.components?.DatePicker
441
+ },
442
+ Image: {
443
+ ...parentTheme.components.Image,
444
+ ...override.components?.Image
434
445
  }
435
446
  }
436
447
  };
@@ -629,6 +640,11 @@ function Badge({
629
640
  // src/components/Button/Button.tsx
630
641
  var import_react6 = require("react");
631
642
 
643
+ // src/utils/cx.ts
644
+ function cx(...classes) {
645
+ return classes.filter((value) => Boolean(value)).join(" ");
646
+ }
647
+
632
648
  // src/components/Spinner/Spinner.tsx
633
649
  var import_jsx_runtime5 = require("react/jsx-runtime");
634
650
  function Spinner({
@@ -674,42 +690,52 @@ var Button = (0, import_react6.forwardRef)(function Button2({
674
690
  type = "button",
675
691
  ...props
676
692
  }, ref) {
677
- const defaults = useComponentDefaults("Button");
693
+ const defaults = useComponentDefaults(
694
+ "Button"
695
+ );
678
696
  const resolvedVariant = variant ?? defaults.variant ?? "primary";
679
697
  const resolvedSize = size ?? defaults.size ?? "md";
680
- const classes = [
681
- "mb-button",
682
- `mb-button--${resolvedVariant}`,
683
- `mb-button--${resolvedSize}`,
684
- className
685
- ].filter(Boolean).join(" ");
686
- const iconSize = {
687
- sm: 16,
688
- md: 18,
689
- lg: 20
690
- }[resolvedSize];
691
698
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
692
699
  "button",
693
700
  {
694
701
  ref,
695
702
  type,
696
- className: classes,
703
+ className: cx(
704
+ "mb-button",
705
+ `mb-button--${resolvedVariant}`,
706
+ `mb-button--${resolvedSize}`,
707
+ loading ? "mb-button--loading" : void 0,
708
+ className
709
+ ),
697
710
  disabled: disabled || loading,
698
- "aria-busy": loading || void 0,
699
711
  ...props,
700
712
  children: [
701
713
  loading ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
702
714
  Spinner,
703
715
  {
704
- size: 14,
705
- thickness: 2,
706
- color: "currentColor",
707
- trackColor: "transparent",
708
- "aria-hidden": "true"
716
+ size: 16
717
+ }
718
+ ) : leftSection && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
719
+ "span",
720
+ {
721
+ className: "mb-button__icon",
722
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Icon, { size: 18, children: leftSection })
723
+ }
724
+ ),
725
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
726
+ "span",
727
+ {
728
+ className: "mb-button__label",
729
+ children
730
+ }
731
+ ),
732
+ rightSection && !loading ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
733
+ "span",
734
+ {
735
+ className: "mb-button__icon",
736
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Icon, { size: 18, children: rightSection })
709
737
  }
710
- ) : leftSection != null ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Icon, { size: iconSize, children: leftSection }) : null,
711
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "mb-button__content", children }),
712
- !loading && rightSection != null ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Icon, { size: iconSize, children: rightSection }) : null
738
+ ) : null
713
739
  ]
714
740
  }
715
741
  );
@@ -931,11 +957,6 @@ function useLockScroll(locked = true) {
931
957
  }, [locked]);
932
958
  }
933
959
 
934
- // src/utils/cx.ts
935
- function cx(...classes) {
936
- return classes.filter((value) => Boolean(value)).join(" ");
937
- }
938
-
939
960
  // src/components/Portal/Portal.tsx
940
961
  var import_react11 = require("react");
941
962
  var import_react_dom = require("react-dom");
@@ -6167,8 +6188,103 @@ function DatePicker({
6167
6188
  );
6168
6189
  }
6169
6190
 
6170
- // src/components/Card/Card.tsx
6191
+ // src/components/Image/Image.tsx
6192
+ var import_react31 = require("react");
6171
6193
  var import_jsx_runtime33 = require("react/jsx-runtime");
6194
+ var Image = (0, import_react31.forwardRef)(function Image2({
6195
+ radius,
6196
+ fit,
6197
+ fallback,
6198
+ className = "",
6199
+ src,
6200
+ onError,
6201
+ ...props
6202
+ }, ref) {
6203
+ const defaults = useComponentDefaults(
6204
+ "Image"
6205
+ );
6206
+ const [
6207
+ currentSrc,
6208
+ setCurrentSrc
6209
+ ] = (0, import_react31.useState)(
6210
+ src
6211
+ );
6212
+ const resolvedRadius = radius ?? defaults.radius ?? "md";
6213
+ const resolvedFit = fit ?? defaults.fit ?? "cover";
6214
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
6215
+ "img",
6216
+ {
6217
+ ref,
6218
+ src: currentSrc,
6219
+ className: cx(
6220
+ "mb-image",
6221
+ `mb-image--${resolvedRadius}`,
6222
+ `mb-image--${resolvedFit}`,
6223
+ className
6224
+ ),
6225
+ onError: (event) => {
6226
+ if (fallback && currentSrc !== fallback) {
6227
+ setCurrentSrc(
6228
+ fallback
6229
+ );
6230
+ }
6231
+ onError?.(
6232
+ event
6233
+ );
6234
+ },
6235
+ ...props
6236
+ }
6237
+ );
6238
+ });
6239
+
6240
+ // src/components/Highlight/Highlight.tsx
6241
+ var import_jsx_runtime34 = require("react/jsx-runtime");
6242
+ function Highlight({
6243
+ children,
6244
+ color = "primary",
6245
+ className = "",
6246
+ ...props
6247
+ }) {
6248
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
6249
+ "span",
6250
+ {
6251
+ className: cx(
6252
+ "mb-highlight",
6253
+ `mb-highlight--${color}`,
6254
+ className
6255
+ ),
6256
+ ...props,
6257
+ children
6258
+ }
6259
+ );
6260
+ }
6261
+
6262
+ // src/components/Link/Link.tsx
6263
+ var import_react32 = require("react");
6264
+ var import_jsx_runtime35 = require("react/jsx-runtime");
6265
+ var Link = (0, import_react32.forwardRef)(function Link2({
6266
+ variant = "default",
6267
+ className = "",
6268
+ children,
6269
+ ...props
6270
+ }, ref) {
6271
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
6272
+ "a",
6273
+ {
6274
+ ref,
6275
+ className: cx(
6276
+ "mb-link",
6277
+ `mb-link--${variant}`,
6278
+ className
6279
+ ),
6280
+ ...props,
6281
+ children
6282
+ }
6283
+ );
6284
+ });
6285
+
6286
+ // src/components/Card/Card.tsx
6287
+ var import_jsx_runtime36 = require("react/jsx-runtime");
6172
6288
  function Card({
6173
6289
  padding,
6174
6290
  radius,
@@ -6190,24 +6306,24 @@ function Card({
6190
6306
  `mb-card--shadow-${resolvedShadow}`,
6191
6307
  className
6192
6308
  ].filter(Boolean).join(" ");
6193
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
6309
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
6194
6310
  "div",
6195
6311
  {
6196
6312
  className: classes,
6197
6313
  ...props,
6198
6314
  children: [
6199
- header != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "mb-card__header", children: header }) : null,
6200
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "mb-card__content", children }),
6201
- footer != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "mb-card__footer", children: footer }) : null
6315
+ header != null ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "mb-card__header", children: header }) : null,
6316
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "mb-card__content", children }),
6317
+ footer != null ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "mb-card__footer", children: footer }) : null
6202
6318
  ]
6203
6319
  }
6204
6320
  );
6205
6321
  }
6206
6322
 
6207
6323
  // src/components/IconButton/IconButton.tsx
6208
- var import_react31 = require("react");
6209
- var import_jsx_runtime34 = require("react/jsx-runtime");
6210
- var IconButton = (0, import_react31.forwardRef)(function IconButton2({
6324
+ var import_react33 = require("react");
6325
+ var import_jsx_runtime37 = require("react/jsx-runtime");
6326
+ var IconButton = (0, import_react33.forwardRef)(function IconButton2({
6211
6327
  icon,
6212
6328
  label,
6213
6329
  variant,
@@ -6232,7 +6348,7 @@ var IconButton = (0, import_react31.forwardRef)(function IconButton2({
6232
6348
  md: 18,
6233
6349
  lg: 20
6234
6350
  }[resolvedSize];
6235
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
6351
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
6236
6352
  "button",
6237
6353
  {
6238
6354
  ref,
@@ -6242,7 +6358,7 @@ var IconButton = (0, import_react31.forwardRef)(function IconButton2({
6242
6358
  "aria-label": label,
6243
6359
  "aria-busy": loading || void 0,
6244
6360
  ...props,
6245
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
6361
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
6246
6362
  Spinner,
6247
6363
  {
6248
6364
  size: 14,
@@ -6251,13 +6367,13 @@ var IconButton = (0, import_react31.forwardRef)(function IconButton2({
6251
6367
  trackColor: "transparent",
6252
6368
  "aria-hidden": "true"
6253
6369
  }
6254
- ) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { size: iconSize, children: icon })
6370
+ ) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { size: iconSize, children: icon })
6255
6371
  }
6256
6372
  );
6257
6373
  });
6258
6374
 
6259
6375
  // src/components/Input/Input.tsx
6260
- var import_jsx_runtime35 = require("react/jsx-runtime");
6376
+ var import_jsx_runtime38 = require("react/jsx-runtime");
6261
6377
  function Input({
6262
6378
  leftSection,
6263
6379
  rightSection,
@@ -6274,9 +6390,9 @@ function Input({
6274
6390
  disabled && "mb-input--disabled",
6275
6391
  className
6276
6392
  ].filter(Boolean).join(" ");
6277
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: classes, children: [
6278
- leftSection ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "mb-input__section mb-input__section--left", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon, { size: 18, children: leftSection }) }) : null,
6279
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
6393
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: classes, children: [
6394
+ leftSection ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "mb-input__section mb-input__section--left", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { size: 18, children: leftSection }) }) : null,
6395
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
6280
6396
  "input",
6281
6397
  {
6282
6398
  className: "mb-input__control",
@@ -6285,17 +6401,17 @@ function Input({
6285
6401
  ...props
6286
6402
  }
6287
6403
  ),
6288
- rightSection ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "mb-input__section mb-input__section--right", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon, { size: 18, children: rightSection }) }) : null
6404
+ rightSection ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "mb-input__section mb-input__section--right", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { size: 18, children: rightSection }) }) : null
6289
6405
  ] });
6290
6406
  }
6291
6407
 
6292
6408
  // src/components/Textarea/Textarea.tsx
6293
- var import_jsx_runtime36 = require("react/jsx-runtime");
6409
+ var import_jsx_runtime39 = require("react/jsx-runtime");
6294
6410
  function Textarea({
6295
6411
  className = "",
6296
6412
  ...props
6297
6413
  }) {
6298
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
6414
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
6299
6415
  "textarea",
6300
6416
  {
6301
6417
  className: `mb-textarea ${className}`,
@@ -6305,7 +6421,7 @@ function Textarea({
6305
6421
  }
6306
6422
 
6307
6423
  // src/components/Text/Text.tsx
6308
- var import_jsx_runtime37 = require("react/jsx-runtime");
6424
+ var import_jsx_runtime40 = require("react/jsx-runtime");
6309
6425
  function Text({
6310
6426
  as: Component = "p",
6311
6427
  size,
@@ -6334,22 +6450,22 @@ function Text({
6334
6450
  md: 16,
6335
6451
  lg: 18
6336
6452
  }[resolvedSize];
6337
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
6453
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
6338
6454
  Component,
6339
6455
  {
6340
6456
  className: classes,
6341
6457
  ...props,
6342
6458
  children: [
6343
- leftSection != null ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { size: iconSize, children: leftSection }) : null,
6344
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "mb-text__content", children }),
6345
- rightSection != null ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { size: iconSize, children: rightSection }) : null
6459
+ leftSection != null ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Icon, { size: iconSize, children: leftSection }) : null,
6460
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "mb-text__content", children }),
6461
+ rightSection != null ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Icon, { size: iconSize, children: rightSection }) : null
6346
6462
  ]
6347
6463
  }
6348
6464
  );
6349
6465
  }
6350
6466
 
6351
6467
  // src/components/Title/Title.tsx
6352
- var import_jsx_runtime38 = require("react/jsx-runtime");
6468
+ var import_jsx_runtime41 = require("react/jsx-runtime");
6353
6469
  function Title({
6354
6470
  order,
6355
6471
  size,
@@ -6387,15 +6503,15 @@ function Title({
6387
6503
  `mb-title--${color}`,
6388
6504
  className
6389
6505
  ].filter(Boolean).join(" ");
6390
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
6506
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
6391
6507
  Component,
6392
6508
  {
6393
6509
  className: classes,
6394
6510
  ...props,
6395
6511
  children: [
6396
- leftSection != null ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { size: iconSize, children: leftSection }) : null,
6397
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "mb-title__content", children }),
6398
- rightSection != null ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { size: iconSize, children: rightSection }) : null
6512
+ leftSection != null ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon, { size: iconSize, children: leftSection }) : null,
6513
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "mb-title__content", children }),
6514
+ rightSection != null ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon, { size: iconSize, children: rightSection }) : null
6399
6515
  ]
6400
6516
  }
6401
6517
  );
@@ -6415,9 +6531,12 @@ function Title({
6415
6531
  Drawer,
6416
6532
  FileInput,
6417
6533
  Group,
6534
+ Highlight,
6418
6535
  Icon,
6419
6536
  IconButton,
6537
+ Image,
6420
6538
  Input,
6539
+ Link,
6421
6540
  MainbasePortalContext,
6422
6541
  MainbaseProvider,
6423
6542
  Menu,