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