@camtomlabs/malix-design-system 0.1.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -41,6 +41,7 @@ __export(index_exports, {
41
41
  ChatBubble: () => ChatBubble,
42
42
  ChatInput: () => ChatInput,
43
43
  Checkbox: () => Checkbox,
44
+ ConfirmDialog: () => ConfirmDialog,
44
45
  CreditsIndicator: () => CreditsIndicator,
45
46
  DataTable: () => DataTable,
46
47
  DateInput: () => DateInput,
@@ -52,9 +53,11 @@ __export(index_exports, {
52
53
  FlyoutMenu: () => FlyoutMenu,
53
54
  GlassPopover: () => GlassPopover,
54
55
  Header: () => Header,
56
+ Icon: () => Icon,
55
57
  Input: () => Input,
56
58
  InputGroup: () => InputGroup,
57
59
  LanguageSelector: () => LanguageSelector,
60
+ MalixThemeProvider: () => MalixThemeProvider,
58
61
  Modal: () => Modal,
59
62
  OnboardingPopover: () => OnboardingPopover,
60
63
  OperationStatus: () => OperationStatus,
@@ -82,7 +85,8 @@ __export(index_exports, {
82
85
  Tooltip: () => Tooltip,
83
86
  UserProfilePopover: () => UserProfilePopover,
84
87
  ValidationAlert: () => ValidationAlert,
85
- tokenRegistry: () => tokens_registry_default
88
+ tokenRegistry: () => tokens_registry_default,
89
+ useMalixTheme: () => useMalixTheme
86
90
  });
87
91
  module.exports = __toCommonJS(index_exports);
88
92
 
@@ -93,15 +97,32 @@ var tokens_registry_default = {
93
97
  "--malix-background-main",
94
98
  "--malix-surface",
95
99
  "--malix-surface-secondary",
100
+ "--malix-surface-elevated",
96
101
  "--malix-surface-hover",
102
+ "--malix-surface-active",
103
+ "--malix-surface-disabled",
104
+ "--malix-input-bg",
105
+ "--malix-input-autofill-bg",
97
106
  "--malix-foreground",
98
107
  "--malix-foreground-secondary",
99
108
  "--malix-foreground-tertiary",
100
109
  "--malix-foreground-disabled",
110
+ "--malix-placeholder",
101
111
  "--malix-border",
102
112
  "--malix-border-strong",
103
113
  "--malix-border-focus",
114
+ "--malix-border-disabled",
104
115
  "--malix-overlay",
116
+ "--malix-overlay-backdrop",
117
+ "--malix-focus-ring",
118
+ "--malix-z-dropdown",
119
+ "--malix-z-sticky",
120
+ "--malix-z-overlay",
121
+ "--malix-z-modal",
122
+ "--malix-z-tooltip",
123
+ "--malix-z-notification",
124
+ "--malix-primary",
125
+ "--malix-primary-bg",
105
126
  "--malix-cta-primary-bg",
106
127
  "--malix-primary-hover",
107
128
  "--malix-primary-active",
@@ -119,12 +140,25 @@ var tokens_registry_default = {
119
140
  "--malix-info",
120
141
  "--malix-info-light",
121
142
  "--malix-info-foreground",
143
+ "--malix-table-header-bg",
144
+ "--malix-table-row-hover",
145
+ "--malix-table-border",
122
146
  "--malix-glass-bg",
123
147
  "--malix-glass-border",
124
148
  "--malix-glass-blur",
125
149
  "--malix-sidebar-bg",
126
150
  "--malix-sidebar-hover-bg",
127
151
  "--malix-sidebar-active-bg",
152
+ "--malix-card-bg",
153
+ "--malix-card-border",
154
+ "--malix-card-radius",
155
+ "--malix-input-border",
156
+ "--malix-nav-bg",
157
+ "--malix-nav-height",
158
+ "--malix-container-sm",
159
+ "--malix-container-md",
160
+ "--malix-container-lg",
161
+ "--malix-container-xl",
128
162
  "--malix-space-xs",
129
163
  "--malix-space-sm",
130
164
  "--malix-space-md",
@@ -143,6 +177,10 @@ var tokens_registry_default = {
143
177
  "--malix-text-lg",
144
178
  "--malix-text-xl",
145
179
  "--malix-text-2xl",
180
+ "--malix-text-3xl",
181
+ "--malix-text-4xl",
182
+ "--malix-text-5xl",
183
+ "--malix-text-display",
146
184
  "--malix-font-body",
147
185
  "--malix-font-heading",
148
186
  "--malix-weight-normal",
@@ -208,6 +246,7 @@ var import_jsx_runtime4 = require("react/jsx-runtime");
208
246
  function Button({
209
247
  hierarchy = "primary",
210
248
  variant = "text",
249
+ size,
211
250
  icon,
212
251
  badge,
213
252
  loading = false,
@@ -225,6 +264,7 @@ function Button({
225
264
  className: "malix-button",
226
265
  "data-hierarchy": hierarchy,
227
266
  "data-variant": variant,
267
+ "data-size": size || void 0,
228
268
  "data-loading": loading,
229
269
  disabled: isDisabled,
230
270
  "aria-busy": loading || void 0,
@@ -277,13 +317,63 @@ function InputGroup({
277
317
 
278
318
  // src/components/Tooltip.tsx
279
319
  var import_react2 = __toESM(require("react"), 1);
320
+ var import_react_dom = require("react-dom");
280
321
  var import_jsx_runtime7 = require("react/jsx-runtime");
281
- function Tooltip({ content, children, placement = "top" }) {
322
+ function Tooltip({ content, children, placement = "top", usePortal = false }) {
282
323
  const [open, setOpen] = (0, import_react2.useState)(false);
283
324
  const tooltipId = (0, import_react2.useId)();
325
+ const triggerRef = (0, import_react2.useRef)(null);
326
+ const tooltipRef = (0, import_react2.useRef)(null);
327
+ const updatePortalPosition = (0, import_react2.useCallback)(() => {
328
+ if (!usePortal || !open || !triggerRef.current || !tooltipRef.current) return;
329
+ const triggerRect = triggerRef.current.getBoundingClientRect();
330
+ const tooltipEl = tooltipRef.current;
331
+ const gap = 8;
332
+ tooltipEl.style.left = "0";
333
+ tooltipEl.style.top = "0";
334
+ const tooltipRect = tooltipEl.getBoundingClientRect();
335
+ let top = 0;
336
+ let left = 0;
337
+ switch (placement) {
338
+ case "top":
339
+ top = triggerRect.top - tooltipRect.height - gap;
340
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;
341
+ break;
342
+ case "bottom":
343
+ top = triggerRect.bottom + gap;
344
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;
345
+ break;
346
+ case "left":
347
+ top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;
348
+ left = triggerRect.left - tooltipRect.width - gap;
349
+ break;
350
+ case "right":
351
+ top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;
352
+ left = triggerRect.right + gap;
353
+ break;
354
+ }
355
+ tooltipEl.style.top = `${top}px`;
356
+ tooltipEl.style.left = `${left}px`;
357
+ }, [usePortal, open, placement]);
358
+ (0, import_react2.useEffect)(() => {
359
+ updatePortalPosition();
360
+ }, [updatePortalPosition]);
361
+ const tooltipContent = open ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
362
+ "span",
363
+ {
364
+ ref: tooltipRef,
365
+ role: "tooltip",
366
+ id: tooltipId,
367
+ className: "malix-tooltip",
368
+ "data-placement": placement,
369
+ ...usePortal ? { "data-portal": "" } : {},
370
+ children: content
371
+ }
372
+ ) : null;
284
373
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
285
374
  "span",
286
375
  {
376
+ ref: triggerRef,
287
377
  className: "malix-tooltip-wrap",
288
378
  onMouseEnter: () => setOpen(true),
289
379
  onMouseLeave: () => setOpen(false),
@@ -293,7 +383,7 @@ function Tooltip({ content, children, placement = "top" }) {
293
383
  import_react2.default.cloneElement(children, {
294
384
  "aria-describedby": open ? tooltipId : void 0
295
385
  }),
296
- open ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { role: "tooltip", id: tooltipId, className: "malix-tooltip", "data-placement": placement, children: content }) : null
386
+ usePortal ? tooltipContent && (0, import_react_dom.createPortal)(tooltipContent, document.body) : tooltipContent
297
387
  ]
298
388
  }
299
389
  );
@@ -1237,8 +1327,103 @@ function Modal({
1237
1327
  ) });
1238
1328
  }
1239
1329
 
1240
- // src/components/GlassPopover.tsx
1330
+ // src/components/ConfirmDialog.tsx
1331
+ var import_react10 = require("react");
1241
1332
  var import_jsx_runtime30 = require("react/jsx-runtime");
1333
+ var FOCUSABLE_SELECTOR3 = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
1334
+ function ConfirmDialog({
1335
+ open,
1336
+ title,
1337
+ description,
1338
+ onConfirm,
1339
+ onCancel,
1340
+ confirmLabel = "Confirm",
1341
+ cancelLabel = "Cancel",
1342
+ variant = "default",
1343
+ icon,
1344
+ children,
1345
+ loading = false
1346
+ }) {
1347
+ const panelRef = (0, import_react10.useRef)(null);
1348
+ (0, import_react10.useEffect)(() => {
1349
+ if (!open || !panelRef.current) return;
1350
+ const panel = panelRef.current;
1351
+ const focusables = Array.from(panel.querySelectorAll(FOCUSABLE_SELECTOR3));
1352
+ const first = focusables[0];
1353
+ const last = focusables[focusables.length - 1];
1354
+ first?.focus();
1355
+ function onKeyDown(event) {
1356
+ if (event.key === "Escape") {
1357
+ event.preventDefault();
1358
+ onCancel();
1359
+ }
1360
+ if (event.key === "Tab" && focusables.length > 0) {
1361
+ if (event.shiftKey && document.activeElement === first) {
1362
+ event.preventDefault();
1363
+ last?.focus();
1364
+ } else if (!event.shiftKey && document.activeElement === last) {
1365
+ event.preventDefault();
1366
+ first?.focus();
1367
+ }
1368
+ }
1369
+ }
1370
+ document.addEventListener("keydown", onKeyDown);
1371
+ return () => document.removeEventListener("keydown", onKeyDown);
1372
+ }, [open, onCancel]);
1373
+ if (!open) return null;
1374
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "malix-overlay-backdrop", onMouseDown: onCancel, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1375
+ "div",
1376
+ {
1377
+ ref: panelRef,
1378
+ className: "malix-confirm-dialog",
1379
+ role: "alertdialog",
1380
+ "aria-modal": "true",
1381
+ "aria-labelledby": "malix-confirm-title",
1382
+ "aria-describedby": description ? "malix-confirm-desc" : void 0,
1383
+ "data-variant": variant,
1384
+ onMouseDown: (event) => event.stopPropagation(),
1385
+ children: [
1386
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "malix-confirm-dialog__content", children: [
1387
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "malix-confirm-dialog__icon", children: icon }) : null,
1388
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "malix-confirm-dialog__text", children: [
1389
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h3", { id: "malix-confirm-title", className: "malix-confirm-dialog__title", children: title }),
1390
+ description ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { id: "malix-confirm-desc", className: "malix-confirm-dialog__description", children: description }) : null,
1391
+ children
1392
+ ] })
1393
+ ] }),
1394
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "malix-confirm-dialog__actions", children: [
1395
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1396
+ "button",
1397
+ {
1398
+ type: "button",
1399
+ className: "malix-button",
1400
+ "data-hierarchy": "secondary",
1401
+ onClick: onCancel,
1402
+ disabled: loading,
1403
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: cancelLabel })
1404
+ }
1405
+ ),
1406
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1407
+ "button",
1408
+ {
1409
+ type: "button",
1410
+ className: "malix-button malix-confirm-dialog__confirm-btn",
1411
+ "data-hierarchy": "primary",
1412
+ "data-variant": variant,
1413
+ onClick: onConfirm,
1414
+ disabled: loading,
1415
+ "data-loading": loading || void 0,
1416
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: confirmLabel })
1417
+ }
1418
+ )
1419
+ ] })
1420
+ ]
1421
+ }
1422
+ ) });
1423
+ }
1424
+
1425
+ // src/components/GlassPopover.tsx
1426
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1242
1427
  function GlassPopover({
1243
1428
  title,
1244
1429
  onClose,
@@ -1246,37 +1431,37 @@ function GlassPopover({
1246
1431
  className,
1247
1432
  ...props
1248
1433
  }) {
1249
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1434
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
1250
1435
  "div",
1251
1436
  {
1252
1437
  className: `malix-glass-popover${className ? ` ${className}` : ""}`,
1253
1438
  ...props,
1254
1439
  children: [
1255
- title || onClose ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "malix-glass-popover__header", children: [
1256
- title ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "malix-glass-popover__title", children: title }) : null,
1257
- onClose ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1440
+ title || onClose ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "malix-glass-popover__header", children: [
1441
+ title ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "malix-glass-popover__title", children: title }) : null,
1442
+ onClose ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1258
1443
  "button",
1259
1444
  {
1260
1445
  type: "button",
1261
1446
  className: "malix-glass-popover__close",
1262
1447
  onClick: onClose,
1263
1448
  "aria-label": "Close",
1264
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1265
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
1266
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
1449
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1450
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
1451
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
1267
1452
  ] })
1268
1453
  }
1269
1454
  ) : null
1270
1455
  ] }) : null,
1271
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "malix-glass-popover__body", children })
1456
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "malix-glass-popover__body", children })
1272
1457
  ]
1273
1458
  }
1274
1459
  );
1275
1460
  }
1276
1461
 
1277
1462
  // src/components/Accordion.tsx
1278
- var import_react10 = require("react");
1279
- var import_jsx_runtime31 = require("react/jsx-runtime");
1463
+ var import_react11 = require("react");
1464
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1280
1465
  function Accordion({
1281
1466
  title,
1282
1467
  children,
@@ -1285,15 +1470,15 @@ function Accordion({
1285
1470
  className,
1286
1471
  ...props
1287
1472
  }) {
1288
- const [open, setOpen] = (0, import_react10.useState)(defaultOpen);
1289
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
1473
+ const [open, setOpen] = (0, import_react11.useState)(defaultOpen);
1474
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1290
1475
  "div",
1291
1476
  {
1292
1477
  className: `malix-accordion${className ? ` ${className}` : ""}`,
1293
1478
  "data-open": open,
1294
1479
  ...props,
1295
1480
  children: [
1296
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
1481
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1297
1482
  "button",
1298
1483
  {
1299
1484
  type: "button",
@@ -1301,9 +1486,9 @@ function Accordion({
1301
1486
  onClick: () => setOpen((prev) => !prev),
1302
1487
  "aria-expanded": open,
1303
1488
  children: [
1304
- icon ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "malix-accordion__icon", children: icon }) : null,
1305
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "malix-accordion__title", children: title }),
1306
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1489
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "malix-accordion__icon", children: icon }) : null,
1490
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "malix-accordion__title", children: title }),
1491
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1307
1492
  "svg",
1308
1493
  {
1309
1494
  className: "malix-accordion__chevron",
@@ -1316,20 +1501,20 @@ function Accordion({
1316
1501
  strokeLinecap: "round",
1317
1502
  strokeLinejoin: "round",
1318
1503
  "aria-hidden": "true",
1319
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("polyline", { points: "6 9 12 15 18 9" })
1504
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("polyline", { points: "6 9 12 15 18 9" })
1320
1505
  }
1321
1506
  )
1322
1507
  ]
1323
1508
  }
1324
1509
  ),
1325
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "malix-accordion__body", children })
1510
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "malix-accordion__body", children })
1326
1511
  ]
1327
1512
  }
1328
1513
  );
1329
1514
  }
1330
1515
 
1331
1516
  // src/components/Badge.tsx
1332
- var import_jsx_runtime32 = require("react/jsx-runtime");
1517
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1333
1518
  function Badge({
1334
1519
  variant = "default",
1335
1520
  dot = false,
@@ -1337,41 +1522,41 @@ function Badge({
1337
1522
  className,
1338
1523
  ...props
1339
1524
  }) {
1340
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1525
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1341
1526
  "span",
1342
1527
  {
1343
1528
  className: `malix-badge${className ? ` ${className}` : ""}`,
1344
1529
  "data-variant": variant,
1345
1530
  ...props,
1346
1531
  children: [
1347
- dot ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "malix-badge__dot" }) : null,
1348
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "malix-badge__label", children })
1532
+ dot ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "malix-badge__dot" }) : null,
1533
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "malix-badge__label", children })
1349
1534
  ]
1350
1535
  }
1351
1536
  );
1352
1537
  }
1353
1538
 
1354
1539
  // src/components/Banner.tsx
1355
- var import_jsx_runtime33 = require("react/jsx-runtime");
1540
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1356
1541
  var defaultIcons = {
1357
- info: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1358
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1359
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
1360
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })
1542
+ info: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1543
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1544
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
1545
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })
1361
1546
  ] }),
1362
- success: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1363
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }),
1364
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("polyline", { points: "22 4 12 14.01 9 11.01" })
1547
+ success: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1548
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }),
1549
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("polyline", { points: "22 4 12 14.01 9 11.01" })
1365
1550
  ] }),
1366
- warning: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1367
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("path", { d: "M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" }),
1368
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
1369
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
1551
+ warning: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1552
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { d: "M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" }),
1553
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
1554
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
1370
1555
  ] }),
1371
- error: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1372
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1373
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "15", y1: "9", x2: "9", y2: "15" }),
1374
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "9", y1: "9", x2: "15", y2: "15" })
1556
+ error: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1557
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1558
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "15", y1: "9", x2: "9", y2: "15" }),
1559
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "9", y1: "9", x2: "15", y2: "15" })
1375
1560
  ] })
1376
1561
  };
1377
1562
  function Banner({
@@ -1382,7 +1567,7 @@ function Banner({
1382
1567
  className,
1383
1568
  ...props
1384
1569
  }) {
1385
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1570
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1386
1571
  "div",
1387
1572
  {
1388
1573
  className: `malix-banner${className ? ` ${className}` : ""}`,
@@ -1390,18 +1575,18 @@ function Banner({
1390
1575
  role: "alert",
1391
1576
  ...props,
1392
1577
  children: [
1393
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "malix-banner__icon", children: icon ?? defaultIcons[variant] }),
1394
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "malix-banner__content", children }),
1395
- onClose ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1578
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "malix-banner__icon", children: icon ?? defaultIcons[variant] }),
1579
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "malix-banner__content", children }),
1580
+ onClose ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1396
1581
  "button",
1397
1582
  {
1398
1583
  type: "button",
1399
1584
  className: "malix-banner__close",
1400
1585
  onClick: onClose,
1401
1586
  "aria-label": "Dismiss",
1402
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1403
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
1404
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
1587
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
1588
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
1589
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
1405
1590
  ] })
1406
1591
  }
1407
1592
  ) : null
@@ -1411,7 +1596,7 @@ function Banner({
1411
1596
  }
1412
1597
 
1413
1598
  // src/components/Checkbox.tsx
1414
- var import_jsx_runtime34 = require("react/jsx-runtime");
1599
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1415
1600
  function Checkbox({
1416
1601
  checked = false,
1417
1602
  onChange,
@@ -1426,7 +1611,7 @@ function Checkbox({
1426
1611
  onChange(!checked);
1427
1612
  }
1428
1613
  };
1429
- const checkbox = /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1614
+ const checkbox = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1430
1615
  "button",
1431
1616
  {
1432
1617
  type: "button",
@@ -1440,7 +1625,7 @@ function Checkbox({
1440
1625
  onClick: handleClick,
1441
1626
  ...props,
1442
1627
  children: [
1443
- checked && !indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1628
+ checked && !indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1444
1629
  "svg",
1445
1630
  {
1446
1631
  className: "malix-checkbox__icon",
@@ -1448,7 +1633,7 @@ function Checkbox({
1448
1633
  fill: "none",
1449
1634
  xmlns: "http://www.w3.org/2000/svg",
1450
1635
  "aria-hidden": "true",
1451
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1636
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1452
1637
  "path",
1453
1638
  {
1454
1639
  d: "M2 6l3 3 5-5",
@@ -1460,7 +1645,7 @@ function Checkbox({
1460
1645
  )
1461
1646
  }
1462
1647
  ) : null,
1463
- indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1648
+ indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1464
1649
  "svg",
1465
1650
  {
1466
1651
  className: "malix-checkbox__icon",
@@ -1468,7 +1653,7 @@ function Checkbox({
1468
1653
  fill: "none",
1469
1654
  xmlns: "http://www.w3.org/2000/svg",
1470
1655
  "aria-hidden": "true",
1471
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1656
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1472
1657
  "path",
1473
1658
  {
1474
1659
  d: "M2 6h8",
@@ -1483,16 +1668,16 @@ function Checkbox({
1483
1668
  }
1484
1669
  );
1485
1670
  if (label) {
1486
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("label", { className: "malix-checkbox-row", children: [
1671
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "malix-checkbox-row", children: [
1487
1672
  checkbox,
1488
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "malix-checkbox-row__label", children: label })
1673
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "malix-checkbox-row__label", children: label })
1489
1674
  ] });
1490
1675
  }
1491
1676
  return checkbox;
1492
1677
  }
1493
1678
 
1494
1679
  // src/components/Radio.tsx
1495
- var import_jsx_runtime35 = require("react/jsx-runtime");
1680
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1496
1681
  function Radio({
1497
1682
  checked = false,
1498
1683
  onChange,
@@ -1508,7 +1693,7 @@ function Radio({
1508
1693
  onChange(value);
1509
1694
  }
1510
1695
  };
1511
- const radio = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1696
+ const radio = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1512
1697
  "button",
1513
1698
  {
1514
1699
  type: "button",
@@ -1522,20 +1707,20 @@ function Radio({
1522
1707
  "data-value": value,
1523
1708
  onClick: handleClick,
1524
1709
  ...props,
1525
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "malix-radio__dot" })
1710
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "malix-radio__dot" })
1526
1711
  }
1527
1712
  );
1528
1713
  if (label) {
1529
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "malix-radio-row", children: [
1714
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("label", { className: "malix-radio-row", children: [
1530
1715
  radio,
1531
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "malix-radio-row__label", children: label })
1716
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "malix-radio-row__label", children: label })
1532
1717
  ] });
1533
1718
  }
1534
1719
  return radio;
1535
1720
  }
1536
1721
 
1537
1722
  // src/components/Toggle.tsx
1538
- var import_jsx_runtime36 = require("react/jsx-runtime");
1723
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1539
1724
  function Toggle({
1540
1725
  checked = false,
1541
1726
  onChange,
@@ -1549,7 +1734,7 @@ function Toggle({
1549
1734
  onChange(!checked);
1550
1735
  }
1551
1736
  };
1552
- const toggle = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1737
+ const toggle = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1553
1738
  "button",
1554
1739
  {
1555
1740
  type: "button",
@@ -1561,12 +1746,12 @@ function Toggle({
1561
1746
  disabled,
1562
1747
  onClick: handleClick,
1563
1748
  ...props,
1564
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "malix-toggle__knob" })
1749
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "malix-toggle__knob" })
1565
1750
  }
1566
1751
  );
1567
1752
  if (label) {
1568
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "malix-toggle-row", children: [
1569
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "malix-toggle-row__label", children: label }),
1753
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "malix-toggle-row", children: [
1754
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "malix-toggle-row__label", children: label }),
1570
1755
  toggle
1571
1756
  ] });
1572
1757
  }
@@ -1574,7 +1759,7 @@ function Toggle({
1574
1759
  }
1575
1760
 
1576
1761
  // src/components/Select.tsx
1577
- var import_jsx_runtime37 = require("react/jsx-runtime");
1762
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1578
1763
  function Select({
1579
1764
  value,
1580
1765
  placeholder,
@@ -1585,14 +1770,14 @@ function Select({
1585
1770
  className,
1586
1771
  ...props
1587
1772
  }) {
1588
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1773
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
1589
1774
  "div",
1590
1775
  {
1591
1776
  className: `malix-select${className ? ` ${className}` : ""}`,
1592
1777
  "data-filled": filled || void 0,
1593
1778
  "data-disabled": disabled || void 0,
1594
1779
  children: [
1595
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1780
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
1596
1781
  "select",
1597
1782
  {
1598
1783
  className: "malix-select__native",
@@ -1601,12 +1786,12 @@ function Select({
1601
1786
  onChange: (e) => onChange?.(e.target.value),
1602
1787
  ...props,
1603
1788
  children: [
1604
- placeholder ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("option", { value: "", disabled: true, children: placeholder }) : null,
1605
- options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("option", { value: opt.value, children: opt.label }, opt.value))
1789
+ placeholder ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("option", { value: "", disabled: true, children: placeholder }) : null,
1790
+ options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("option", { value: opt.value, children: opt.label }, opt.value))
1606
1791
  ]
1607
1792
  }
1608
1793
  ),
1609
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "malix-select__icon", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1794
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "malix-select__icon", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1610
1795
  "path",
1611
1796
  {
1612
1797
  d: "M4 6L8 10L12 6",
@@ -1622,7 +1807,7 @@ function Select({
1622
1807
  }
1623
1808
 
1624
1809
  // src/components/SelectGroup.tsx
1625
- var import_jsx_runtime38 = require("react/jsx-runtime");
1810
+ var import_jsx_runtime39 = require("react/jsx-runtime");
1626
1811
  function SelectGroup({
1627
1812
  label,
1628
1813
  helperText,
@@ -1631,23 +1816,23 @@ function SelectGroup({
1631
1816
  className,
1632
1817
  ...props
1633
1818
  }) {
1634
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
1819
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
1635
1820
  "div",
1636
1821
  {
1637
1822
  className: `malix-select-group${className ? ` ${className}` : ""}`,
1638
1823
  "data-error": error || void 0,
1639
1824
  ...props,
1640
1825
  children: [
1641
- label ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "malix-select-group__label", children: label }) : null,
1826
+ label ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "malix-select-group__label", children: label }) : null,
1642
1827
  children,
1643
- helperText ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "malix-select-group__helper", children: helperText }) : null
1828
+ helperText ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "malix-select-group__helper", children: helperText }) : null
1644
1829
  ]
1645
1830
  }
1646
1831
  );
1647
1832
  }
1648
1833
 
1649
1834
  // src/components/SegmentedControl.tsx
1650
- var import_jsx_runtime39 = require("react/jsx-runtime");
1835
+ var import_jsx_runtime40 = require("react/jsx-runtime");
1651
1836
  function SegmentedControl({
1652
1837
  items,
1653
1838
  value,
@@ -1655,13 +1840,13 @@ function SegmentedControl({
1655
1840
  className,
1656
1841
  ...props
1657
1842
  }) {
1658
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1843
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1659
1844
  "div",
1660
1845
  {
1661
1846
  className: `malix-segmented-control${className ? ` ${className}` : ""}`,
1662
1847
  role: "radiogroup",
1663
1848
  ...props,
1664
- children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1849
+ children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1665
1850
  "button",
1666
1851
  {
1667
1852
  type: "button",
@@ -1679,7 +1864,7 @@ function SegmentedControl({
1679
1864
  }
1680
1865
 
1681
1866
  // src/components/DataTable.tsx
1682
- var import_jsx_runtime40 = require("react/jsx-runtime");
1867
+ var import_jsx_runtime41 = require("react/jsx-runtime");
1683
1868
  function DataTable({
1684
1869
  columns,
1685
1870
  data,
@@ -1688,13 +1873,13 @@ function DataTable({
1688
1873
  className,
1689
1874
  ...props
1690
1875
  }) {
1691
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
1876
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
1692
1877
  "table",
1693
1878
  {
1694
1879
  className: `malix-data-table${className ? ` ${className}` : ""}`,
1695
1880
  ...props,
1696
1881
  children: [
1697
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("tr", { className: "malix-data-table__header-row", children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1882
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("tr", { className: "malix-data-table__header-row", children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1698
1883
  "th",
1699
1884
  {
1700
1885
  className: "malix-data-table__header-cell",
@@ -1703,16 +1888,16 @@ function DataTable({
1703
1888
  },
1704
1889
  col.key
1705
1890
  )) }) }),
1706
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("tbody", { className: "malix-data-table__body", children: data.length > 0 ? data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1891
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("tbody", { className: "malix-data-table__body", children: data.length > 0 ? data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1707
1892
  "tr",
1708
1893
  {
1709
1894
  className: "malix-data-table__data-row",
1710
1895
  "data-clickable": onRowClick ? true : void 0,
1711
1896
  onClick: onRowClick ? () => onRowClick(row) : void 0,
1712
- children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("td", { className: "malix-data-table__cell", children: col.render ? col.render(row[col.key], row) : row[col.key] }, col.key))
1897
+ children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("td", { className: "malix-data-table__cell", children: col.render ? col.render(row[col.key], row) : row[col.key] }, col.key))
1713
1898
  },
1714
1899
  rowIndex
1715
- )) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("tr", { className: "malix-data-table__data-row", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1900
+ )) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("tr", { className: "malix-data-table__data-row", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1716
1901
  "td",
1717
1902
  {
1718
1903
  className: "malix-data-table__cell",
@@ -1726,12 +1911,12 @@ function DataTable({
1726
1911
  }
1727
1912
 
1728
1913
  // src/components/Pagination.tsx
1729
- var import_jsx_runtime41 = require("react/jsx-runtime");
1914
+ var import_jsx_runtime42 = require("react/jsx-runtime");
1730
1915
  function ChevronLeft() {
1731
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("path", { d: "M10 12L6 8L10 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1916
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { d: "M10 12L6 8L10 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1732
1917
  }
1733
1918
  function ChevronRight() {
1734
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("path", { d: "M6 4L10 8L6 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1919
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { d: "M6 4L10 8L6 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1735
1920
  }
1736
1921
  function Pagination({
1737
1922
  currentPage,
@@ -1743,14 +1928,14 @@ function Pagination({
1743
1928
  const isFirstPage = currentPage <= 1;
1744
1929
  const isLastPage = currentPage >= totalPages;
1745
1930
  const pages = Array.from({ length: totalPages }, (_, i) => i + 1);
1746
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
1931
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
1747
1932
  "nav",
1748
1933
  {
1749
1934
  className: `malix-pagination${className ? ` ${className}` : ""}`,
1750
1935
  "data-variant": variant,
1751
1936
  "aria-label": "Pagination",
1752
1937
  children: [
1753
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1938
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1754
1939
  "button",
1755
1940
  {
1756
1941
  type: "button",
@@ -1759,10 +1944,10 @@ function Pagination({
1759
1944
  disabled: isFirstPage,
1760
1945
  onClick: () => onPageChange(currentPage - 1),
1761
1946
  "aria-label": "Previous page",
1762
- children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronLeft, {})
1947
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ChevronLeft, {})
1763
1948
  }
1764
1949
  ),
1765
- variant === "full" ? pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1950
+ variant === "full" ? pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1766
1951
  "button",
1767
1952
  {
1768
1953
  type: "button",
@@ -1773,12 +1958,12 @@ function Pagination({
1773
1958
  children: page
1774
1959
  },
1775
1960
  page
1776
- )) : /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("span", { className: "malix-pagination__label", children: [
1961
+ )) : /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "malix-pagination__label", children: [
1777
1962
  currentPage,
1778
1963
  " of ",
1779
1964
  totalPages
1780
1965
  ] }),
1781
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1966
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1782
1967
  "button",
1783
1968
  {
1784
1969
  type: "button",
@@ -1787,7 +1972,7 @@ function Pagination({
1787
1972
  disabled: isLastPage,
1788
1973
  onClick: () => onPageChange(currentPage + 1),
1789
1974
  "aria-label": "Next page",
1790
- children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronRight, {})
1975
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ChevronRight, {})
1791
1976
  }
1792
1977
  )
1793
1978
  ]
@@ -1796,30 +1981,30 @@ function Pagination({
1796
1981
  }
1797
1982
 
1798
1983
  // src/components/StatusDot.tsx
1799
- var import_jsx_runtime42 = require("react/jsx-runtime");
1984
+ var import_jsx_runtime43 = require("react/jsx-runtime");
1800
1985
  function StatusDot({
1801
1986
  variant = "default",
1802
1987
  label,
1803
1988
  className,
1804
1989
  ...props
1805
1990
  }) {
1806
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
1991
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
1807
1992
  "span",
1808
1993
  {
1809
1994
  className: `malix-status-dot${className ? ` ${className}` : ""}`,
1810
1995
  "data-variant": variant,
1811
1996
  ...props,
1812
1997
  children: [
1813
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "malix-status-dot__dot", "aria-hidden": "true" }),
1814
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "malix-status-dot__label", children: label })
1998
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "malix-status-dot__dot", "aria-hidden": "true" }),
1999
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "malix-status-dot__label", children: label })
1815
2000
  ]
1816
2001
  }
1817
2002
  );
1818
2003
  }
1819
2004
 
1820
2005
  // src/components/Dropzone.tsx
1821
- var import_react11 = require("react");
1822
- var import_jsx_runtime43 = require("react/jsx-runtime");
2006
+ var import_react12 = require("react");
2007
+ var import_jsx_runtime44 = require("react/jsx-runtime");
1823
2008
  function Dropzone({
1824
2009
  onDrop,
1825
2010
  accept,
@@ -1829,8 +2014,8 @@ function Dropzone({
1829
2014
  className,
1830
2015
  ...props
1831
2016
  }) {
1832
- const [dragging, setDragging] = (0, import_react11.useState)(false);
1833
- const inputRef = (0, import_react11.useRef)(null);
2017
+ const [dragging, setDragging] = (0, import_react12.useState)(false);
2018
+ const inputRef = (0, import_react12.useRef)(null);
1834
2019
  function handleDragOver(event) {
1835
2020
  event.preventDefault();
1836
2021
  if (!disabled) setDragging(true);
@@ -1854,7 +2039,7 @@ function Dropzone({
1854
2039
  function handleClick() {
1855
2040
  if (!disabled) inputRef.current?.click();
1856
2041
  }
1857
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
2042
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
1858
2043
  "div",
1859
2044
  {
1860
2045
  className: `malix-dropzone${className ? ` ${className}` : ""}`,
@@ -1869,7 +2054,7 @@ function Dropzone({
1869
2054
  "aria-disabled": disabled || void 0,
1870
2055
  ...props,
1871
2056
  children: [
1872
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2057
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
1873
2058
  "input",
1874
2059
  {
1875
2060
  ref: inputRef,
@@ -1880,7 +2065,7 @@ function Dropzone({
1880
2065
  "aria-hidden": "true"
1881
2066
  }
1882
2067
  ),
1883
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
2068
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
1884
2069
  "svg",
1885
2070
  {
1886
2071
  className: "malix-dropzone__icon",
@@ -1894,23 +2079,23 @@ function Dropzone({
1894
2079
  strokeLinejoin: "round",
1895
2080
  "aria-hidden": "true",
1896
2081
  children: [
1897
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }),
1898
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { d: "M12 12v9" }),
1899
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { d: "m16 16-4-4-4 4" })
2082
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }),
2083
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { d: "M12 12v9" }),
2084
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { d: "m16 16-4-4-4 4" })
1900
2085
  ]
1901
2086
  }
1902
2087
  ),
1903
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "malix-dropzone__title", children: title }),
1904
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "malix-dropzone__hint", children: hint }),
1905
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "malix-dropzone__browse-btn", children: "Browse files" })
2088
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-dropzone__title", children: title }),
2089
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-dropzone__hint", children: hint }),
2090
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-dropzone__browse-btn", children: "Browse files" })
1906
2091
  ]
1907
2092
  }
1908
2093
  );
1909
2094
  }
1910
2095
 
1911
2096
  // src/components/SplitPane.tsx
1912
- var import_react12 = require("react");
1913
- var import_jsx_runtime44 = require("react/jsx-runtime");
2097
+ var import_react13 = require("react");
2098
+ var import_jsx_runtime45 = require("react/jsx-runtime");
1914
2099
  function SplitPane({
1915
2100
  leftPanel,
1916
2101
  rightPanel,
@@ -1920,14 +2105,14 @@ function SplitPane({
1920
2105
  className,
1921
2106
  ...props
1922
2107
  }) {
1923
- const [split, setSplit] = (0, import_react12.useState)(defaultSplit);
1924
- const containerRef = (0, import_react12.useRef)(null);
1925
- const dragging = (0, import_react12.useRef)(false);
1926
- const onMouseDown = (0, import_react12.useCallback)((e) => {
2108
+ const [split, setSplit] = (0, import_react13.useState)(defaultSplit);
2109
+ const containerRef = (0, import_react13.useRef)(null);
2110
+ const dragging = (0, import_react13.useRef)(false);
2111
+ const onMouseDown = (0, import_react13.useCallback)((e) => {
1927
2112
  e.preventDefault();
1928
2113
  dragging.current = true;
1929
2114
  }, []);
1930
- (0, import_react12.useEffect)(() => {
2115
+ (0, import_react13.useEffect)(() => {
1931
2116
  function onMouseMove(e) {
1932
2117
  if (!dragging.current || !containerRef.current) return;
1933
2118
  const rect = containerRef.current.getBoundingClientRect();
@@ -1945,18 +2130,18 @@ function SplitPane({
1945
2130
  document.removeEventListener("mouseup", onMouseUp);
1946
2131
  };
1947
2132
  }, []);
1948
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2133
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
1949
2134
  "div",
1950
2135
  {
1951
2136
  ref: containerRef,
1952
2137
  className: `malix-split-pane${className ? ` ${className}` : ""}`,
1953
2138
  ...props,
1954
2139
  children: [
1955
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "malix-split-pane__left", style: { width: `${split}%` }, children: [
1956
- leftTitle ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-split-pane__panel-title", children: leftTitle }) : null,
2140
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "malix-split-pane__left", style: { width: `${split}%` }, children: [
2141
+ leftTitle ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-split-pane__panel-title", children: leftTitle }) : null,
1957
2142
  leftPanel
1958
2143
  ] }),
1959
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2144
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
1960
2145
  "div",
1961
2146
  {
1962
2147
  className: "malix-split-pane__handle",
@@ -1967,14 +2152,14 @@ function SplitPane({
1967
2152
  "aria-label": "Resize panels",
1968
2153
  onMouseDown,
1969
2154
  children: [
1970
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" }),
1971
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" }),
1972
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" })
2155
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" }),
2156
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" }),
2157
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" })
1973
2158
  ]
1974
2159
  }
1975
2160
  ),
1976
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "malix-split-pane__right", style: { width: `${100 - split}%` }, children: [
1977
- rightTitle ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-split-pane__panel-title", children: rightTitle }) : null,
2161
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "malix-split-pane__right", style: { width: `${100 - split}%` }, children: [
2162
+ rightTitle ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-split-pane__panel-title", children: rightTitle }) : null,
1978
2163
  rightPanel
1979
2164
  ] })
1980
2165
  ]
@@ -1983,7 +2168,7 @@ function SplitPane({
1983
2168
  }
1984
2169
 
1985
2170
  // src/components/PricingCard.tsx
1986
- var import_jsx_runtime45 = require("react/jsx-runtime");
2171
+ var import_jsx_runtime46 = require("react/jsx-runtime");
1987
2172
  function PricingCard({
1988
2173
  planName,
1989
2174
  price,
@@ -1996,21 +2181,21 @@ function PricingCard({
1996
2181
  className,
1997
2182
  ...props
1998
2183
  }) {
1999
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
2184
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
2000
2185
  "div",
2001
2186
  {
2002
2187
  className: `malix-pricing-card${className ? ` ${className}` : ""}`,
2003
2188
  "data-highlighted": highlighted || void 0,
2004
2189
  ...props,
2005
2190
  children: [
2006
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-pricing-card__badge", children: planName }),
2007
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "malix-pricing-card__price-row", children: [
2008
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-pricing-card__price", children: price }),
2009
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-pricing-card__period", children: period })
2191
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-pricing-card__badge", children: planName }),
2192
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "malix-pricing-card__price-row", children: [
2193
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-pricing-card__price", children: price }),
2194
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-pricing-card__period", children: period })
2010
2195
  ] }),
2011
- description ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "malix-pricing-card__description", children: description }) : null,
2012
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("ul", { className: "malix-pricing-card__features", children: features.map((feature, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("li", { className: "malix-pricing-card__feature-item", children: [
2013
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2196
+ description ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "malix-pricing-card__description", children: description }) : null,
2197
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("ul", { className: "malix-pricing-card__features", children: features.map((feature, i) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("li", { className: "malix-pricing-card__feature-item", children: [
2198
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2014
2199
  "svg",
2015
2200
  {
2016
2201
  className: "malix-pricing-card__check-icon",
@@ -2023,12 +2208,12 @@ function PricingCard({
2023
2208
  strokeLinecap: "round",
2024
2209
  strokeLinejoin: "round",
2025
2210
  "aria-hidden": "true",
2026
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("polyline", { points: "20 6 9 17 4 12" })
2211
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("polyline", { points: "20 6 9 17 4 12" })
2027
2212
  }
2028
2213
  ),
2029
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { children: feature })
2214
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: feature })
2030
2215
  ] }, i)) }),
2031
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2216
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2032
2217
  "button",
2033
2218
  {
2034
2219
  type: "button",
@@ -2043,7 +2228,7 @@ function PricingCard({
2043
2228
  }
2044
2229
 
2045
2230
  // src/components/OnboardingPopover.tsx
2046
- var import_jsx_runtime46 = require("react/jsx-runtime");
2231
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2047
2232
  function OnboardingPopover({
2048
2233
  step,
2049
2234
  totalSteps,
@@ -2055,7 +2240,7 @@ function OnboardingPopover({
2055
2240
  className,
2056
2241
  ...props
2057
2242
  }) {
2058
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
2243
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
2059
2244
  "div",
2060
2245
  {
2061
2246
  className: `malix-onboarding-popover${className ? ` ${className}` : ""}`,
@@ -2063,16 +2248,16 @@ function OnboardingPopover({
2063
2248
  "aria-label": `Step ${step} of ${totalSteps}: ${title}`,
2064
2249
  ...props,
2065
2250
  children: [
2066
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { className: "malix-onboarding-popover__step", children: [
2251
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "malix-onboarding-popover__step", children: [
2067
2252
  "Step ",
2068
2253
  step,
2069
2254
  " of ",
2070
2255
  totalSteps
2071
2256
  ] }),
2072
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("h3", { className: "malix-onboarding-popover__title", children: title }),
2073
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "malix-onboarding-popover__description", children: description }),
2074
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "malix-onboarding-popover__actions", children: [
2075
- onSkip ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2257
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h3", { className: "malix-onboarding-popover__title", children: title }),
2258
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "malix-onboarding-popover__description", children: description }),
2259
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "malix-onboarding-popover__actions", children: [
2260
+ onSkip ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2076
2261
  "button",
2077
2262
  {
2078
2263
  type: "button",
@@ -2081,7 +2266,7 @@ function OnboardingPopover({
2081
2266
  children: "Skip"
2082
2267
  }
2083
2268
  ) : null,
2084
- onNext ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2269
+ onNext ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2085
2270
  "button",
2086
2271
  {
2087
2272
  type: "button",
@@ -2097,20 +2282,20 @@ function OnboardingPopover({
2097
2282
  }
2098
2283
 
2099
2284
  // src/components/CreditsIndicator.tsx
2100
- var import_jsx_runtime47 = require("react/jsx-runtime");
2285
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2101
2286
  function CreditsIndicator({
2102
2287
  remaining,
2103
2288
  label = "Credits Remaining",
2104
2289
  className,
2105
2290
  ...props
2106
2291
  }) {
2107
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
2292
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
2108
2293
  "div",
2109
2294
  {
2110
2295
  className: `malix-credits-indicator${className ? ` ${className}` : ""}`,
2111
2296
  ...props,
2112
2297
  children: [
2113
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "malix-credits-indicator__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
2298
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "malix-credits-indicator__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
2114
2299
  "svg",
2115
2300
  {
2116
2301
  width: "20",
@@ -2122,15 +2307,15 @@ function CreditsIndicator({
2122
2307
  strokeLinecap: "round",
2123
2308
  strokeLinejoin: "round",
2124
2309
  children: [
2125
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("ellipse", { cx: "12", cy: "6", rx: "8", ry: "3" }),
2126
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { d: "M4 6v6c0 1.66 3.58 3 8 3s8-1.34 8-3V6" }),
2127
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { d: "M4 12v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6" })
2310
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("ellipse", { cx: "12", cy: "6", rx: "8", ry: "3" }),
2311
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { d: "M4 6v6c0 1.66 3.58 3 8 3s8-1.34 8-3V6" }),
2312
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { d: "M4 12v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6" })
2128
2313
  ]
2129
2314
  }
2130
2315
  ) }),
2131
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "malix-credits-indicator__info", children: [
2132
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "malix-credits-indicator__label", children: label }),
2133
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "malix-credits-indicator__value", children: remaining })
2316
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "malix-credits-indicator__info", children: [
2317
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "malix-credits-indicator__label", children: label }),
2318
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "malix-credits-indicator__value", children: remaining })
2134
2319
  ] })
2135
2320
  ]
2136
2321
  }
@@ -2138,7 +2323,7 @@ function CreditsIndicator({
2138
2323
  }
2139
2324
 
2140
2325
  // src/components/LanguageSelector.tsx
2141
- var import_jsx_runtime48 = require("react/jsx-runtime");
2326
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2142
2327
  function LanguageSelector({
2143
2328
  value,
2144
2329
  options,
@@ -2148,13 +2333,13 @@ function LanguageSelector({
2148
2333
  }) {
2149
2334
  const selectedOption = options?.find((opt) => opt.value === value);
2150
2335
  const displayLabel = selectedOption?.label ?? value;
2151
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
2336
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2152
2337
  "div",
2153
2338
  {
2154
2339
  className: `malix-language-selector${className ? ` ${className}` : ""}`,
2155
2340
  ...props,
2156
2341
  children: [
2157
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "malix-language-selector__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
2342
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-language-selector__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2158
2343
  "svg",
2159
2344
  {
2160
2345
  width: "16",
@@ -2166,24 +2351,24 @@ function LanguageSelector({
2166
2351
  strokeLinecap: "round",
2167
2352
  strokeLinejoin: "round",
2168
2353
  children: [
2169
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
2170
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("line", { x1: "2", y1: "12", x2: "22", y2: "12" }),
2171
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10A15.3 15.3 0 0 1 12 2z" })
2354
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
2355
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("line", { x1: "2", y1: "12", x2: "22", y2: "12" }),
2356
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10A15.3 15.3 0 0 1 12 2z" })
2172
2357
  ]
2173
2358
  }
2174
2359
  ) }),
2175
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2360
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2176
2361
  "select",
2177
2362
  {
2178
2363
  className: "malix-language-selector__select",
2179
2364
  value,
2180
2365
  onChange: (e) => onChange?.(e.target.value),
2181
2366
  "aria-label": "Select language",
2182
- children: options ? options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("option", { value: opt.value, children: opt.label }, opt.value)) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("option", { value, children: displayLabel })
2367
+ children: options ? options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: opt.value, children: opt.label }, opt.value)) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value, children: displayLabel })
2183
2368
  }
2184
2369
  ),
2185
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "malix-language-selector__label", children: displayLabel }),
2186
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "malix-language-selector__chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2370
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-language-selector__label", children: displayLabel }),
2371
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-language-selector__chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2187
2372
  "svg",
2188
2373
  {
2189
2374
  width: "14",
@@ -2194,7 +2379,7 @@ function LanguageSelector({
2194
2379
  strokeWidth: "2",
2195
2380
  strokeLinecap: "round",
2196
2381
  strokeLinejoin: "round",
2197
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("polyline", { points: "6 9 12 15 18 9" })
2382
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("polyline", { points: "6 9 12 15 18 9" })
2198
2383
  }
2199
2384
  ) })
2200
2385
  ]
@@ -2203,7 +2388,7 @@ function LanguageSelector({
2203
2388
  }
2204
2389
 
2205
2390
  // src/components/UserProfilePopover.tsx
2206
- var import_jsx_runtime49 = require("react/jsx-runtime");
2391
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2207
2392
  function UserProfilePopover({
2208
2393
  name,
2209
2394
  email,
@@ -2214,26 +2399,26 @@ function UserProfilePopover({
2214
2399
  className,
2215
2400
  ...props
2216
2401
  }) {
2217
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2402
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
2218
2403
  "div",
2219
2404
  {
2220
2405
  className: `malix-user-profile${className ? ` ${className}` : ""}`,
2221
2406
  ...props,
2222
2407
  children: [
2223
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "malix-user-profile__header", children: [
2224
- avatar ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-user-profile__avatar", children: avatar }) : null,
2225
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "malix-user-profile__info", children: [
2226
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-user-profile__name", children: name }),
2227
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-user-profile__email", children: email })
2408
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "malix-user-profile__header", children: [
2409
+ avatar ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-user-profile__avatar", children: avatar }) : null,
2410
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "malix-user-profile__info", children: [
2411
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-user-profile__name", children: name }),
2412
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-user-profile__email", children: email })
2228
2413
  ] })
2229
2414
  ] }),
2230
- credits !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "malix-user-profile__credits", children: [
2231
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-user-profile__credits-label", children: "Credits" }),
2232
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-user-profile__credits-value", children: credits })
2415
+ credits !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "malix-user-profile__credits", children: [
2416
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-user-profile__credits-label", children: "Credits" }),
2417
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-user-profile__credits-value", children: credits })
2233
2418
  ] }) : null,
2234
- menuItems && menuItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
2235
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("hr", { className: "malix-user-profile__divider" }),
2236
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("nav", { className: "malix-user-profile__menu", role: "menu", children: menuItems.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2419
+ menuItems && menuItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
2420
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("hr", { className: "malix-user-profile__divider" }),
2421
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("nav", { className: "malix-user-profile__menu", role: "menu", children: menuItems.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
2237
2422
  "button",
2238
2423
  {
2239
2424
  type: "button",
@@ -2241,23 +2426,23 @@ function UserProfilePopover({
2241
2426
  role: "menuitem",
2242
2427
  onClick: item.onClick,
2243
2428
  children: [
2244
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-user-profile__menu-item-icon", children: item.icon }) : null,
2245
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-user-profile__menu-item-label", children: item.label })
2429
+ item.icon ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-user-profile__menu-item-icon", children: item.icon }) : null,
2430
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-user-profile__menu-item-label", children: item.label })
2246
2431
  ]
2247
2432
  },
2248
2433
  i
2249
2434
  )) })
2250
2435
  ] }) : null,
2251
- onLogout ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
2252
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("hr", { className: "malix-user-profile__divider" }),
2253
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2436
+ onLogout ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
2437
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("hr", { className: "malix-user-profile__divider" }),
2438
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
2254
2439
  "button",
2255
2440
  {
2256
2441
  type: "button",
2257
2442
  className: "malix-user-profile__logout",
2258
2443
  onClick: onLogout,
2259
2444
  children: [
2260
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2445
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
2261
2446
  "svg",
2262
2447
  {
2263
2448
  width: "16",
@@ -2269,13 +2454,13 @@ function UserProfilePopover({
2269
2454
  strokeLinecap: "round",
2270
2455
  strokeLinejoin: "round",
2271
2456
  children: [
2272
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }),
2273
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("polyline", { points: "16 17 21 12 16 7" }),
2274
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("line", { x1: "21", y1: "12", x2: "9", y2: "12" })
2457
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }),
2458
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("polyline", { points: "16 17 21 12 16 7" }),
2459
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("line", { x1: "21", y1: "12", x2: "9", y2: "12" })
2275
2460
  ]
2276
2461
  }
2277
2462
  ),
2278
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: "Log out" })
2463
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: "Log out" })
2279
2464
  ]
2280
2465
  }
2281
2466
  )
@@ -2286,7 +2471,7 @@ function UserProfilePopover({
2286
2471
  }
2287
2472
 
2288
2473
  // src/components/ChatBubble.tsx
2289
- var import_jsx_runtime50 = require("react/jsx-runtime");
2474
+ var import_jsx_runtime51 = require("react/jsx-runtime");
2290
2475
  function ChatBubble({
2291
2476
  variant,
2292
2477
  message,
@@ -2295,22 +2480,22 @@ function ChatBubble({
2295
2480
  className
2296
2481
  }) {
2297
2482
  const content = children ?? message;
2298
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
2483
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
2299
2484
  "div",
2300
2485
  {
2301
2486
  className: `malix-chat-bubble-row${className ? ` ${className}` : ""}`,
2302
2487
  "data-variant": variant,
2303
2488
  children: [
2304
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "malix-chat-bubble", "data-variant": variant, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-chat-bubble__text", children: content }) }),
2305
- variant === "user" && avatarInitials ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-chat-bubble__avatar", children: avatarInitials }) : null
2489
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "malix-chat-bubble", "data-variant": variant, children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-chat-bubble__text", children: content }) }),
2490
+ variant === "user" && avatarInitials ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-chat-bubble__avatar", children: avatarInitials }) : null
2306
2491
  ]
2307
2492
  }
2308
2493
  );
2309
2494
  }
2310
2495
 
2311
2496
  // src/components/AIAssistantPanel.tsx
2312
- var import_react13 = require("react");
2313
- var import_jsx_runtime51 = require("react/jsx-runtime");
2497
+ var import_react14 = require("react");
2498
+ var import_jsx_runtime52 = require("react/jsx-runtime");
2314
2499
  function AIAssistantPanel({
2315
2500
  title = "AI Assistant",
2316
2501
  messages,
@@ -2321,9 +2506,9 @@ function AIAssistantPanel({
2321
2506
  disabled,
2322
2507
  className
2323
2508
  }) {
2324
- const [draft, setDraft] = (0, import_react13.useState)("");
2325
- const bodyRef = (0, import_react13.useRef)(null);
2326
- (0, import_react13.useEffect)(() => {
2509
+ const [draft, setDraft] = (0, import_react14.useState)("");
2510
+ const bodyRef = (0, import_react14.useRef)(null);
2511
+ (0, import_react14.useEffect)(() => {
2327
2512
  if (bodyRef.current) {
2328
2513
  bodyRef.current.scrollTop = bodyRef.current.scrollHeight;
2329
2514
  }
@@ -2340,25 +2525,25 @@ function AIAssistantPanel({
2340
2525
  handleSend();
2341
2526
  }
2342
2527
  };
2343
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: `malix-ai-panel${className ? ` ${className}` : ""}`, children: [
2344
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "malix-ai-panel__header", children: [
2345
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-ai-panel__logo", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { d: "M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" }) }) }),
2346
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-ai-panel__title", children: title }),
2347
- onClose ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2528
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: `malix-ai-panel${className ? ` ${className}` : ""}`, children: [
2529
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "malix-ai-panel__header", children: [
2530
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "malix-ai-panel__logo", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { d: "M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" }) }) }),
2531
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "malix-ai-panel__title", children: title }),
2532
+ onClose ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
2348
2533
  "button",
2349
2534
  {
2350
2535
  type: "button",
2351
2536
  className: "malix-ai-panel__close",
2352
2537
  onClick: onClose,
2353
2538
  "aria-label": "Close assistant",
2354
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2355
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { d: "M18 6 6 18" }),
2356
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { d: "m6 6 12 12" })
2539
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2540
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { d: "M18 6 6 18" }),
2541
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { d: "m6 6 12 12" })
2357
2542
  ] })
2358
2543
  }
2359
2544
  ) : null
2360
2545
  ] }),
2361
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "malix-ai-panel__body", ref: bodyRef, children: messages.map((msg) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2546
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "malix-ai-panel__body", ref: bodyRef, children: messages.map((msg) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
2362
2547
  ChatBubble,
2363
2548
  {
2364
2549
  variant: msg.variant,
@@ -2367,8 +2552,8 @@ function AIAssistantPanel({
2367
2552
  },
2368
2553
  msg.id
2369
2554
  )) }),
2370
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "malix-ai-panel__footer", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "malix-ai-panel__input-row", children: [
2371
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2555
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "malix-ai-panel__footer", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "malix-ai-panel__input-row", children: [
2556
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
2372
2557
  "input",
2373
2558
  {
2374
2559
  type: "text",
@@ -2381,7 +2566,7 @@ function AIAssistantPanel({
2381
2566
  "aria-label": placeholder
2382
2567
  }
2383
2568
  ),
2384
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2569
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
2385
2570
  "button",
2386
2571
  {
2387
2572
  type: "button",
@@ -2389,15 +2574,108 @@ function AIAssistantPanel({
2389
2574
  onClick: handleSend,
2390
2575
  disabled: disabled || !draft.trim(),
2391
2576
  "aria-label": "Send message",
2392
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2393
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { d: "M12 19V5" }),
2394
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { d: "m5 12 7-7 7 7" })
2577
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2578
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { d: "M12 19V5" }),
2579
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { d: "m5 12 7-7 7 7" })
2395
2580
  ] })
2396
2581
  }
2397
2582
  )
2398
2583
  ] }) })
2399
2584
  ] });
2400
2585
  }
2586
+
2587
+ // src/theme.ts
2588
+ var import_react15 = require("react");
2589
+ var STORAGE_KEY = "malix-theme";
2590
+ var MalixThemeContext = (0, import_react15.createContext)(null);
2591
+ function getSystemTheme() {
2592
+ if (typeof window === "undefined") return "light";
2593
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
2594
+ }
2595
+ function getStoredTheme() {
2596
+ if (typeof window === "undefined") return null;
2597
+ try {
2598
+ const stored = localStorage.getItem(STORAGE_KEY);
2599
+ if (stored === "light" || stored === "dark" || stored === "system") return stored;
2600
+ } catch {
2601
+ }
2602
+ return null;
2603
+ }
2604
+ function resolveTheme(theme) {
2605
+ return theme === "system" ? getSystemTheme() : theme;
2606
+ }
2607
+ function applyTheme(resolved) {
2608
+ const root = document.documentElement;
2609
+ root.classList.toggle("dark", resolved === "dark");
2610
+ root.setAttribute("data-theme", resolved);
2611
+ }
2612
+ function MalixThemeProvider({ children, defaultTheme = "system" }) {
2613
+ const [theme, setThemeState] = (0, import_react15.useState)(() => getStoredTheme() ?? defaultTheme);
2614
+ const setTheme = (0, import_react15.useCallback)((next) => {
2615
+ setThemeState(next);
2616
+ try {
2617
+ localStorage.setItem(STORAGE_KEY, next);
2618
+ } catch {
2619
+ }
2620
+ applyTheme(resolveTheme(next));
2621
+ }, []);
2622
+ const toggleTheme = (0, import_react15.useCallback)(() => {
2623
+ setThemeState((prev) => {
2624
+ const resolved = resolveTheme(prev);
2625
+ const next = resolved === "dark" ? "light" : "dark";
2626
+ try {
2627
+ localStorage.setItem(STORAGE_KEY, next);
2628
+ } catch {
2629
+ }
2630
+ applyTheme(next);
2631
+ return next;
2632
+ });
2633
+ }, []);
2634
+ (0, import_react15.useEffect)(() => {
2635
+ applyTheme(resolveTheme(theme));
2636
+ }, [theme]);
2637
+ (0, import_react15.useEffect)(() => {
2638
+ if (theme !== "system") return;
2639
+ const mq = window.matchMedia("(prefers-color-scheme: dark)");
2640
+ const handler = () => applyTheme(getSystemTheme());
2641
+ mq.addEventListener("change", handler);
2642
+ return () => mq.removeEventListener("change", handler);
2643
+ }, [theme]);
2644
+ const value = (0, import_react15.useMemo)(() => ({ theme, setTheme, toggleTheme }), [theme, setTheme, toggleTheme]);
2645
+ return (0, import_react15.createElement)(MalixThemeContext.Provider, { value }, children);
2646
+ }
2647
+ function useMalixTheme() {
2648
+ const ctx = (0, import_react15.useContext)(MalixThemeContext);
2649
+ if (!ctx) {
2650
+ throw new Error("useMalixTheme must be used within a MalixThemeProvider");
2651
+ }
2652
+ return ctx;
2653
+ }
2654
+
2655
+ // src/components/Icon.tsx
2656
+ var import_react16 = require("react");
2657
+ var SIZE_MAP = {
2658
+ xs: 12,
2659
+ sm: 14,
2660
+ md: 16,
2661
+ lg: 20,
2662
+ xl: 24
2663
+ };
2664
+ function resolveSize(size) {
2665
+ return typeof size === "number" ? size : SIZE_MAP[size];
2666
+ }
2667
+ var Icon = (0, import_react16.forwardRef)(function Icon2({ as: Component, size = "md", label, ...props }, ref) {
2668
+ const pixelSize = resolveSize(size);
2669
+ const a11y = label ? { role: "img", "aria-label": label } : { "aria-hidden": true, focusable: false };
2670
+ return (0, import_react16.createElement)(Component, {
2671
+ ref,
2672
+ width: pixelSize,
2673
+ height: pixelSize,
2674
+ color: "currentColor",
2675
+ ...a11y,
2676
+ ...props
2677
+ });
2678
+ });
2401
2679
  // Annotate the CommonJS export names for ESM import in node:
2402
2680
  0 && (module.exports = {
2403
2681
  AIAssistantPanel,
@@ -2411,6 +2689,7 @@ function AIAssistantPanel({
2411
2689
  ChatBubble,
2412
2690
  ChatInput,
2413
2691
  Checkbox,
2692
+ ConfirmDialog,
2414
2693
  CreditsIndicator,
2415
2694
  DataTable,
2416
2695
  DateInput,
@@ -2422,9 +2701,11 @@ function AIAssistantPanel({
2422
2701
  FlyoutMenu,
2423
2702
  GlassPopover,
2424
2703
  Header,
2704
+ Icon,
2425
2705
  Input,
2426
2706
  InputGroup,
2427
2707
  LanguageSelector,
2708
+ MalixThemeProvider,
2428
2709
  Modal,
2429
2710
  OnboardingPopover,
2430
2711
  OperationStatus,
@@ -2452,5 +2733,6 @@ function AIAssistantPanel({
2452
2733
  Tooltip,
2453
2734
  UserProfilePopover,
2454
2735
  ValidationAlert,
2455
- tokenRegistry
2736
+ tokenRegistry,
2737
+ useMalixTheme
2456
2738
  });