@camtomlabs/malix-design-system 0.2.0 → 0.4.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/README.md +114 -1
- package/dist/index.cjs +476 -288
- package/dist/index.d.cts +130 -4
- package/dist/index.d.ts +130 -4
- package/dist/index.js +463 -277
- package/eslint-plugin.cjs +128 -0
- package/package.json +9 -4
- package/src/reset.css +212 -0
- package/src/styles.css +133 -0
package/dist/index.cjs
CHANGED
|
@@ -45,6 +45,7 @@ __export(index_exports, {
|
|
|
45
45
|
CreditsIndicator: () => CreditsIndicator,
|
|
46
46
|
DataTable: () => DataTable,
|
|
47
47
|
DateInput: () => DateInput,
|
|
48
|
+
Dialog: () => Dialog,
|
|
48
49
|
Divider: () => Divider,
|
|
49
50
|
Dropzone: () => Dropzone,
|
|
50
51
|
EmptyState: () => EmptyState,
|
|
@@ -53,6 +54,7 @@ __export(index_exports, {
|
|
|
53
54
|
FlyoutMenu: () => FlyoutMenu,
|
|
54
55
|
GlassPopover: () => GlassPopover,
|
|
55
56
|
Header: () => Header,
|
|
57
|
+
Icon: () => Icon,
|
|
56
58
|
Input: () => Input,
|
|
57
59
|
InputGroup: () => InputGroup,
|
|
58
60
|
LanguageSelector: () => LanguageSelector,
|
|
@@ -1233,46 +1235,95 @@ function Overlay({ open, title, onClose, children }) {
|
|
|
1233
1235
|
}
|
|
1234
1236
|
|
|
1235
1237
|
// src/components/Modal.tsx
|
|
1238
|
+
var import_react10 = require("react");
|
|
1239
|
+
var import_react_dom2 = require("react-dom");
|
|
1240
|
+
|
|
1241
|
+
// src/hooks/useOverlayBehavior.ts
|
|
1236
1242
|
var import_react9 = require("react");
|
|
1237
|
-
var
|
|
1238
|
-
|
|
1239
|
-
function Modal({
|
|
1243
|
+
var FOCUSABLE_SELECTOR2 = 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
1244
|
+
function useOverlayBehavior({
|
|
1240
1245
|
open,
|
|
1241
|
-
title,
|
|
1242
1246
|
onClose,
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
children
|
|
1247
|
+
panelRef,
|
|
1248
|
+
closeOnEsc = true,
|
|
1249
|
+
initialFocusRef
|
|
1247
1250
|
}) {
|
|
1248
|
-
const
|
|
1251
|
+
const previousActiveRef = (0, import_react9.useRef)(null);
|
|
1249
1252
|
(0, import_react9.useEffect)(() => {
|
|
1250
|
-
if (!open
|
|
1253
|
+
if (!open) return;
|
|
1251
1254
|
const panel = panelRef.current;
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
const
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
if (
|
|
1255
|
+
if (!panel) return;
|
|
1256
|
+
previousActiveRef.current = document.activeElement ?? null;
|
|
1257
|
+
const previousBodyOverflow = document.body.style.overflow;
|
|
1258
|
+
document.body.style.overflow = "hidden";
|
|
1259
|
+
const focusTimer = window.setTimeout(() => {
|
|
1260
|
+
if (initialFocusRef?.current) {
|
|
1261
|
+
initialFocusRef.current.focus();
|
|
1262
|
+
return;
|
|
1263
|
+
}
|
|
1264
|
+
const focusables = Array.from(
|
|
1265
|
+
panel.querySelectorAll(FOCUSABLE_SELECTOR2)
|
|
1266
|
+
);
|
|
1267
|
+
if (focusables.length > 0) {
|
|
1268
|
+
focusables[0].focus();
|
|
1269
|
+
} else {
|
|
1270
|
+
panel.focus();
|
|
1271
|
+
}
|
|
1272
|
+
}, 0);
|
|
1273
|
+
const onKeyDown = (event) => {
|
|
1274
|
+
if (event.key === "Escape" && closeOnEsc) {
|
|
1258
1275
|
event.preventDefault();
|
|
1259
1276
|
onClose();
|
|
1277
|
+
return;
|
|
1260
1278
|
}
|
|
1261
|
-
if (event.key
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
}
|
|
1279
|
+
if (event.key !== "Tab") return;
|
|
1280
|
+
const focusables = Array.from(
|
|
1281
|
+
panel.querySelectorAll(FOCUSABLE_SELECTOR2)
|
|
1282
|
+
);
|
|
1283
|
+
if (focusables.length === 0) {
|
|
1284
|
+
event.preventDefault();
|
|
1285
|
+
return;
|
|
1269
1286
|
}
|
|
1270
|
-
|
|
1287
|
+
const first = focusables[0];
|
|
1288
|
+
const last = focusables[focusables.length - 1];
|
|
1289
|
+
const active = document.activeElement;
|
|
1290
|
+
if (event.shiftKey && active === first) {
|
|
1291
|
+
event.preventDefault();
|
|
1292
|
+
last.focus();
|
|
1293
|
+
} else if (!event.shiftKey && active === last) {
|
|
1294
|
+
event.preventDefault();
|
|
1295
|
+
first.focus();
|
|
1296
|
+
}
|
|
1297
|
+
};
|
|
1271
1298
|
document.addEventListener("keydown", onKeyDown);
|
|
1272
|
-
return () =>
|
|
1273
|
-
|
|
1299
|
+
return () => {
|
|
1300
|
+
window.clearTimeout(focusTimer);
|
|
1301
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
1302
|
+
document.body.style.overflow = previousBodyOverflow;
|
|
1303
|
+
const previous = previousActiveRef.current;
|
|
1304
|
+
if (previous && typeof previous.focus === "function") {
|
|
1305
|
+
previous.focus();
|
|
1306
|
+
}
|
|
1307
|
+
};
|
|
1308
|
+
}, [open, onClose, panelRef, closeOnEsc, initialFocusRef]);
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
// src/components/Modal.tsx
|
|
1312
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1313
|
+
function Modal({
|
|
1314
|
+
open,
|
|
1315
|
+
title,
|
|
1316
|
+
onClose,
|
|
1317
|
+
onConfirm,
|
|
1318
|
+
confirmLabel = "Confirm",
|
|
1319
|
+
cancelLabel = "Cancel",
|
|
1320
|
+
children
|
|
1321
|
+
}) {
|
|
1322
|
+
const panelRef = (0, import_react10.useRef)(null);
|
|
1323
|
+
useOverlayBehavior({ open, onClose, panelRef });
|
|
1274
1324
|
if (!open) return null;
|
|
1275
|
-
|
|
1325
|
+
if (typeof document === "undefined") return null;
|
|
1326
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "malix-overlay-backdrop", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
1276
1327
|
"div",
|
|
1277
1328
|
{
|
|
1278
1329
|
ref: panelRef,
|
|
@@ -1280,6 +1331,7 @@ function Modal({
|
|
|
1280
1331
|
role: "dialog",
|
|
1281
1332
|
"aria-modal": "true",
|
|
1282
1333
|
"aria-label": title,
|
|
1334
|
+
tabIndex: -1,
|
|
1283
1335
|
onMouseDown: (event) => event.stopPropagation(),
|
|
1284
1336
|
children: [
|
|
1285
1337
|
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "malix-modal__header", children: [
|
|
@@ -1291,10 +1343,24 @@ function Modal({
|
|
|
1291
1343
|
className: "malix-modal__close",
|
|
1292
1344
|
onClick: onClose,
|
|
1293
1345
|
"aria-label": "Close",
|
|
1294
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1346
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
1347
|
+
"svg",
|
|
1348
|
+
{
|
|
1349
|
+
width: "18",
|
|
1350
|
+
height: "18",
|
|
1351
|
+
viewBox: "0 0 24 24",
|
|
1352
|
+
fill: "none",
|
|
1353
|
+
stroke: "currentColor",
|
|
1354
|
+
strokeWidth: "2",
|
|
1355
|
+
strokeLinecap: "round",
|
|
1356
|
+
strokeLinejoin: "round",
|
|
1357
|
+
"aria-hidden": "true",
|
|
1358
|
+
children: [
|
|
1359
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
1360
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
1361
|
+
]
|
|
1362
|
+
}
|
|
1363
|
+
)
|
|
1298
1364
|
}
|
|
1299
1365
|
)
|
|
1300
1366
|
] }),
|
|
@@ -1324,12 +1390,13 @@ function Modal({
|
|
|
1324
1390
|
]
|
|
1325
1391
|
}
|
|
1326
1392
|
) });
|
|
1393
|
+
return (0, import_react_dom2.createPortal)(content, document.body);
|
|
1327
1394
|
}
|
|
1328
1395
|
|
|
1329
1396
|
// src/components/ConfirmDialog.tsx
|
|
1330
|
-
var
|
|
1397
|
+
var import_react11 = require("react");
|
|
1398
|
+
var import_react_dom3 = require("react-dom");
|
|
1331
1399
|
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1332
|
-
var FOCUSABLE_SELECTOR3 = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
|
|
1333
1400
|
function ConfirmDialog({
|
|
1334
1401
|
open,
|
|
1335
1402
|
title,
|
|
@@ -1343,50 +1410,30 @@ function ConfirmDialog({
|
|
|
1343
1410
|
children,
|
|
1344
1411
|
loading = false
|
|
1345
1412
|
}) {
|
|
1346
|
-
const panelRef = (0,
|
|
1347
|
-
(0,
|
|
1348
|
-
|
|
1349
|
-
|
|
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]);
|
|
1413
|
+
const panelRef = (0, import_react11.useRef)(null);
|
|
1414
|
+
const titleId = (0, import_react11.useId)();
|
|
1415
|
+
const descriptionId = (0, import_react11.useId)();
|
|
1416
|
+
useOverlayBehavior({ open, onClose: onCancel, panelRef });
|
|
1372
1417
|
if (!open) return null;
|
|
1373
|
-
|
|
1418
|
+
if (typeof document === "undefined") return null;
|
|
1419
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "malix-overlay-backdrop", onMouseDown: onCancel, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
1374
1420
|
"div",
|
|
1375
1421
|
{
|
|
1376
1422
|
ref: panelRef,
|
|
1377
1423
|
className: "malix-confirm-dialog",
|
|
1378
1424
|
role: "alertdialog",
|
|
1379
1425
|
"aria-modal": "true",
|
|
1380
|
-
"aria-labelledby":
|
|
1381
|
-
"aria-describedby": description ?
|
|
1426
|
+
"aria-labelledby": titleId,
|
|
1427
|
+
"aria-describedby": description ? descriptionId : void 0,
|
|
1382
1428
|
"data-variant": variant,
|
|
1429
|
+
tabIndex: -1,
|
|
1383
1430
|
onMouseDown: (event) => event.stopPropagation(),
|
|
1384
1431
|
children: [
|
|
1385
1432
|
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "malix-confirm-dialog__content", children: [
|
|
1386
1433
|
icon ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "malix-confirm-dialog__icon", children: icon }) : null,
|
|
1387
1434
|
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "malix-confirm-dialog__text", children: [
|
|
1388
|
-
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h3", { id:
|
|
1389
|
-
description ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { id:
|
|
1435
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h3", { id: titleId, className: "malix-confirm-dialog__title", children: title }),
|
|
1436
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { id: descriptionId, className: "malix-confirm-dialog__description", children: description }) : null,
|
|
1390
1437
|
children
|
|
1391
1438
|
] })
|
|
1392
1439
|
] }),
|
|
@@ -1419,10 +1466,124 @@ function ConfirmDialog({
|
|
|
1419
1466
|
]
|
|
1420
1467
|
}
|
|
1421
1468
|
) });
|
|
1469
|
+
return (0, import_react_dom3.createPortal)(content, document.body);
|
|
1422
1470
|
}
|
|
1423
1471
|
|
|
1424
|
-
// src/components/
|
|
1472
|
+
// src/components/Dialog.tsx
|
|
1473
|
+
var import_react12 = require("react");
|
|
1474
|
+
var import_react_dom4 = require("react-dom");
|
|
1425
1475
|
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1476
|
+
var DialogContext = (0, import_react12.createContext)(null);
|
|
1477
|
+
function useDialogContext(component) {
|
|
1478
|
+
const ctx = (0, import_react12.useContext)(DialogContext);
|
|
1479
|
+
if (!ctx) {
|
|
1480
|
+
throw new Error(
|
|
1481
|
+
`<Dialog.${component}> must be rendered inside <Dialog>. Wrap it in a <Dialog> component.`
|
|
1482
|
+
);
|
|
1483
|
+
}
|
|
1484
|
+
return ctx;
|
|
1485
|
+
}
|
|
1486
|
+
function Dialog({
|
|
1487
|
+
open,
|
|
1488
|
+
onClose,
|
|
1489
|
+
variant = "default",
|
|
1490
|
+
size = "md",
|
|
1491
|
+
closeOnBackdropClick = true,
|
|
1492
|
+
closeOnEsc = true,
|
|
1493
|
+
initialFocusRef,
|
|
1494
|
+
className,
|
|
1495
|
+
role = "dialog",
|
|
1496
|
+
children
|
|
1497
|
+
}) {
|
|
1498
|
+
const panelRef = (0, import_react12.useRef)(null);
|
|
1499
|
+
const titleId = (0, import_react12.useId)();
|
|
1500
|
+
const descriptionId = (0, import_react12.useId)();
|
|
1501
|
+
useOverlayBehavior({
|
|
1502
|
+
open,
|
|
1503
|
+
onClose,
|
|
1504
|
+
panelRef,
|
|
1505
|
+
closeOnEsc,
|
|
1506
|
+
initialFocusRef
|
|
1507
|
+
});
|
|
1508
|
+
if (!open) return null;
|
|
1509
|
+
if (typeof document === "undefined") return null;
|
|
1510
|
+
const handleBackdropMouseDown = closeOnBackdropClick ? onClose : void 0;
|
|
1511
|
+
const panelClassName = ["malix-dialog", className].filter(Boolean).join(" ");
|
|
1512
|
+
const contextValue = {
|
|
1513
|
+
onClose,
|
|
1514
|
+
titleId,
|
|
1515
|
+
descriptionId,
|
|
1516
|
+
variant
|
|
1517
|
+
};
|
|
1518
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DialogContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "malix-overlay-backdrop", onMouseDown: handleBackdropMouseDown, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1519
|
+
"div",
|
|
1520
|
+
{
|
|
1521
|
+
ref: panelRef,
|
|
1522
|
+
className: panelClassName,
|
|
1523
|
+
role,
|
|
1524
|
+
"aria-modal": "true",
|
|
1525
|
+
"aria-labelledby": titleId,
|
|
1526
|
+
"aria-describedby": descriptionId,
|
|
1527
|
+
"data-variant": variant,
|
|
1528
|
+
"data-size": size,
|
|
1529
|
+
tabIndex: -1,
|
|
1530
|
+
onMouseDown: (event) => event.stopPropagation(),
|
|
1531
|
+
children
|
|
1532
|
+
}
|
|
1533
|
+
) }) });
|
|
1534
|
+
return (0, import_react_dom4.createPortal)(content, document.body);
|
|
1535
|
+
}
|
|
1536
|
+
function DialogHeader({
|
|
1537
|
+
children,
|
|
1538
|
+
showClose = true,
|
|
1539
|
+
closeLabel = "Close"
|
|
1540
|
+
}) {
|
|
1541
|
+
const { onClose, titleId } = useDialogContext("Header");
|
|
1542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "malix-dialog__header", children: [
|
|
1543
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h2", { className: "malix-dialog__title", id: titleId, children }),
|
|
1544
|
+
showClose ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1545
|
+
"button",
|
|
1546
|
+
{
|
|
1547
|
+
type: "button",
|
|
1548
|
+
className: "malix-dialog__close",
|
|
1549
|
+
onClick: onClose,
|
|
1550
|
+
"aria-label": closeLabel,
|
|
1551
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
1552
|
+
"svg",
|
|
1553
|
+
{
|
|
1554
|
+
width: "18",
|
|
1555
|
+
height: "18",
|
|
1556
|
+
viewBox: "0 0 24 24",
|
|
1557
|
+
fill: "none",
|
|
1558
|
+
stroke: "currentColor",
|
|
1559
|
+
strokeWidth: "2",
|
|
1560
|
+
strokeLinecap: "round",
|
|
1561
|
+
strokeLinejoin: "round",
|
|
1562
|
+
"aria-hidden": "true",
|
|
1563
|
+
children: [
|
|
1564
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
1565
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
1566
|
+
]
|
|
1567
|
+
}
|
|
1568
|
+
)
|
|
1569
|
+
}
|
|
1570
|
+
) : null
|
|
1571
|
+
] });
|
|
1572
|
+
}
|
|
1573
|
+
function DialogBody({ children, className }) {
|
|
1574
|
+
const { descriptionId } = useDialogContext("Body");
|
|
1575
|
+
const bodyClassName = ["malix-dialog__body", className].filter(Boolean).join(" ");
|
|
1576
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { id: descriptionId, className: bodyClassName, children });
|
|
1577
|
+
}
|
|
1578
|
+
function DialogFooter({ children, align = "end" }) {
|
|
1579
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "malix-dialog__footer", "data-align": align, children });
|
|
1580
|
+
}
|
|
1581
|
+
Dialog.Header = DialogHeader;
|
|
1582
|
+
Dialog.Body = DialogBody;
|
|
1583
|
+
Dialog.Footer = DialogFooter;
|
|
1584
|
+
|
|
1585
|
+
// src/components/GlassPopover.tsx
|
|
1586
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1426
1587
|
function GlassPopover({
|
|
1427
1588
|
title,
|
|
1428
1589
|
onClose,
|
|
@@ -1430,37 +1591,37 @@ function GlassPopover({
|
|
|
1430
1591
|
className,
|
|
1431
1592
|
...props
|
|
1432
1593
|
}) {
|
|
1433
|
-
return /* @__PURE__ */ (0,
|
|
1594
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
|
|
1434
1595
|
"div",
|
|
1435
1596
|
{
|
|
1436
1597
|
className: `malix-glass-popover${className ? ` ${className}` : ""}`,
|
|
1437
1598
|
...props,
|
|
1438
1599
|
children: [
|
|
1439
|
-
title || onClose ? /* @__PURE__ */ (0,
|
|
1440
|
-
title ? /* @__PURE__ */ (0,
|
|
1441
|
-
onClose ? /* @__PURE__ */ (0,
|
|
1600
|
+
title || onClose ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "malix-glass-popover__header", children: [
|
|
1601
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "malix-glass-popover__title", children: title }) : null,
|
|
1602
|
+
onClose ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
1442
1603
|
"button",
|
|
1443
1604
|
{
|
|
1444
1605
|
type: "button",
|
|
1445
1606
|
className: "malix-glass-popover__close",
|
|
1446
1607
|
onClick: onClose,
|
|
1447
1608
|
"aria-label": "Close",
|
|
1448
|
-
children: /* @__PURE__ */ (0,
|
|
1449
|
-
/* @__PURE__ */ (0,
|
|
1450
|
-
/* @__PURE__ */ (0,
|
|
1609
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1610
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
1611
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
1451
1612
|
] })
|
|
1452
1613
|
}
|
|
1453
1614
|
) : null
|
|
1454
1615
|
] }) : null,
|
|
1455
|
-
/* @__PURE__ */ (0,
|
|
1616
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "malix-glass-popover__body", children })
|
|
1456
1617
|
]
|
|
1457
1618
|
}
|
|
1458
1619
|
);
|
|
1459
1620
|
}
|
|
1460
1621
|
|
|
1461
1622
|
// src/components/Accordion.tsx
|
|
1462
|
-
var
|
|
1463
|
-
var
|
|
1623
|
+
var import_react13 = require("react");
|
|
1624
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1464
1625
|
function Accordion({
|
|
1465
1626
|
title,
|
|
1466
1627
|
children,
|
|
@@ -1469,15 +1630,15 @@ function Accordion({
|
|
|
1469
1630
|
className,
|
|
1470
1631
|
...props
|
|
1471
1632
|
}) {
|
|
1472
|
-
const [open, setOpen] = (0,
|
|
1473
|
-
return /* @__PURE__ */ (0,
|
|
1633
|
+
const [open, setOpen] = (0, import_react13.useState)(defaultOpen);
|
|
1634
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
1474
1635
|
"div",
|
|
1475
1636
|
{
|
|
1476
1637
|
className: `malix-accordion${className ? ` ${className}` : ""}`,
|
|
1477
1638
|
"data-open": open,
|
|
1478
1639
|
...props,
|
|
1479
1640
|
children: [
|
|
1480
|
-
/* @__PURE__ */ (0,
|
|
1641
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
1481
1642
|
"button",
|
|
1482
1643
|
{
|
|
1483
1644
|
type: "button",
|
|
@@ -1485,9 +1646,9 @@ function Accordion({
|
|
|
1485
1646
|
onClick: () => setOpen((prev) => !prev),
|
|
1486
1647
|
"aria-expanded": open,
|
|
1487
1648
|
children: [
|
|
1488
|
-
icon ? /* @__PURE__ */ (0,
|
|
1489
|
-
/* @__PURE__ */ (0,
|
|
1490
|
-
/* @__PURE__ */ (0,
|
|
1649
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "malix-accordion__icon", children: icon }) : null,
|
|
1650
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "malix-accordion__title", children: title }),
|
|
1651
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1491
1652
|
"svg",
|
|
1492
1653
|
{
|
|
1493
1654
|
className: "malix-accordion__chevron",
|
|
@@ -1500,20 +1661,20 @@ function Accordion({
|
|
|
1500
1661
|
strokeLinecap: "round",
|
|
1501
1662
|
strokeLinejoin: "round",
|
|
1502
1663
|
"aria-hidden": "true",
|
|
1503
|
-
children: /* @__PURE__ */ (0,
|
|
1664
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("polyline", { points: "6 9 12 15 18 9" })
|
|
1504
1665
|
}
|
|
1505
1666
|
)
|
|
1506
1667
|
]
|
|
1507
1668
|
}
|
|
1508
1669
|
),
|
|
1509
|
-
/* @__PURE__ */ (0,
|
|
1670
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "malix-accordion__body", children })
|
|
1510
1671
|
]
|
|
1511
1672
|
}
|
|
1512
1673
|
);
|
|
1513
1674
|
}
|
|
1514
1675
|
|
|
1515
1676
|
// src/components/Badge.tsx
|
|
1516
|
-
var
|
|
1677
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1517
1678
|
function Badge({
|
|
1518
1679
|
variant = "default",
|
|
1519
1680
|
dot = false,
|
|
@@ -1521,41 +1682,41 @@ function Badge({
|
|
|
1521
1682
|
className,
|
|
1522
1683
|
...props
|
|
1523
1684
|
}) {
|
|
1524
|
-
return /* @__PURE__ */ (0,
|
|
1685
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
1525
1686
|
"span",
|
|
1526
1687
|
{
|
|
1527
1688
|
className: `malix-badge${className ? ` ${className}` : ""}`,
|
|
1528
1689
|
"data-variant": variant,
|
|
1529
1690
|
...props,
|
|
1530
1691
|
children: [
|
|
1531
|
-
dot ? /* @__PURE__ */ (0,
|
|
1532
|
-
/* @__PURE__ */ (0,
|
|
1692
|
+
dot ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "malix-badge__dot" }) : null,
|
|
1693
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "malix-badge__label", children })
|
|
1533
1694
|
]
|
|
1534
1695
|
}
|
|
1535
1696
|
);
|
|
1536
1697
|
}
|
|
1537
1698
|
|
|
1538
1699
|
// src/components/Banner.tsx
|
|
1539
|
-
var
|
|
1700
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1540
1701
|
var defaultIcons = {
|
|
1541
|
-
info: /* @__PURE__ */ (0,
|
|
1542
|
-
/* @__PURE__ */ (0,
|
|
1543
|
-
/* @__PURE__ */ (0,
|
|
1544
|
-
/* @__PURE__ */ (0,
|
|
1702
|
+
info: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1703
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1704
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
|
|
1705
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })
|
|
1545
1706
|
] }),
|
|
1546
|
-
success: /* @__PURE__ */ (0,
|
|
1547
|
-
/* @__PURE__ */ (0,
|
|
1548
|
-
/* @__PURE__ */ (0,
|
|
1707
|
+
success: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1708
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }),
|
|
1709
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("polyline", { points: "22 4 12 14.01 9 11.01" })
|
|
1549
1710
|
] }),
|
|
1550
|
-
warning: /* @__PURE__ */ (0,
|
|
1551
|
-
/* @__PURE__ */ (0,
|
|
1552
|
-
/* @__PURE__ */ (0,
|
|
1553
|
-
/* @__PURE__ */ (0,
|
|
1711
|
+
warning: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1712
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.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" }),
|
|
1713
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
|
|
1714
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
|
|
1554
1715
|
] }),
|
|
1555
|
-
error: /* @__PURE__ */ (0,
|
|
1556
|
-
/* @__PURE__ */ (0,
|
|
1557
|
-
/* @__PURE__ */ (0,
|
|
1558
|
-
/* @__PURE__ */ (0,
|
|
1716
|
+
error: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1717
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1718
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "15", y1: "9", x2: "9", y2: "15" }),
|
|
1719
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "9", y1: "9", x2: "15", y2: "15" })
|
|
1559
1720
|
] })
|
|
1560
1721
|
};
|
|
1561
1722
|
function Banner({
|
|
@@ -1566,7 +1727,7 @@ function Banner({
|
|
|
1566
1727
|
className,
|
|
1567
1728
|
...props
|
|
1568
1729
|
}) {
|
|
1569
|
-
return /* @__PURE__ */ (0,
|
|
1730
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
1570
1731
|
"div",
|
|
1571
1732
|
{
|
|
1572
1733
|
className: `malix-banner${className ? ` ${className}` : ""}`,
|
|
@@ -1574,18 +1735,18 @@ function Banner({
|
|
|
1574
1735
|
role: "alert",
|
|
1575
1736
|
...props,
|
|
1576
1737
|
children: [
|
|
1577
|
-
/* @__PURE__ */ (0,
|
|
1578
|
-
/* @__PURE__ */ (0,
|
|
1579
|
-
onClose ? /* @__PURE__ */ (0,
|
|
1738
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "malix-banner__icon", children: icon ?? defaultIcons[variant] }),
|
|
1739
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "malix-banner__content", children }),
|
|
1740
|
+
onClose ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
1580
1741
|
"button",
|
|
1581
1742
|
{
|
|
1582
1743
|
type: "button",
|
|
1583
1744
|
className: "malix-banner__close",
|
|
1584
1745
|
onClick: onClose,
|
|
1585
1746
|
"aria-label": "Dismiss",
|
|
1586
|
-
children: /* @__PURE__ */ (0,
|
|
1587
|
-
/* @__PURE__ */ (0,
|
|
1588
|
-
/* @__PURE__ */ (0,
|
|
1747
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1748
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
1749
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
1589
1750
|
] })
|
|
1590
1751
|
}
|
|
1591
1752
|
) : null
|
|
@@ -1595,7 +1756,7 @@ function Banner({
|
|
|
1595
1756
|
}
|
|
1596
1757
|
|
|
1597
1758
|
// src/components/Checkbox.tsx
|
|
1598
|
-
var
|
|
1759
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1599
1760
|
function Checkbox({
|
|
1600
1761
|
checked = false,
|
|
1601
1762
|
onChange,
|
|
@@ -1610,7 +1771,7 @@ function Checkbox({
|
|
|
1610
1771
|
onChange(!checked);
|
|
1611
1772
|
}
|
|
1612
1773
|
};
|
|
1613
|
-
const checkbox = /* @__PURE__ */ (0,
|
|
1774
|
+
const checkbox = /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1614
1775
|
"button",
|
|
1615
1776
|
{
|
|
1616
1777
|
type: "button",
|
|
@@ -1624,7 +1785,7 @@ function Checkbox({
|
|
|
1624
1785
|
onClick: handleClick,
|
|
1625
1786
|
...props,
|
|
1626
1787
|
children: [
|
|
1627
|
-
checked && !indeterminate ? /* @__PURE__ */ (0,
|
|
1788
|
+
checked && !indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1628
1789
|
"svg",
|
|
1629
1790
|
{
|
|
1630
1791
|
className: "malix-checkbox__icon",
|
|
@@ -1632,7 +1793,7 @@ function Checkbox({
|
|
|
1632
1793
|
fill: "none",
|
|
1633
1794
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1634
1795
|
"aria-hidden": "true",
|
|
1635
|
-
children: /* @__PURE__ */ (0,
|
|
1796
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1636
1797
|
"path",
|
|
1637
1798
|
{
|
|
1638
1799
|
d: "M2 6l3 3 5-5",
|
|
@@ -1644,7 +1805,7 @@ function Checkbox({
|
|
|
1644
1805
|
)
|
|
1645
1806
|
}
|
|
1646
1807
|
) : null,
|
|
1647
|
-
indeterminate ? /* @__PURE__ */ (0,
|
|
1808
|
+
indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1648
1809
|
"svg",
|
|
1649
1810
|
{
|
|
1650
1811
|
className: "malix-checkbox__icon",
|
|
@@ -1652,7 +1813,7 @@ function Checkbox({
|
|
|
1652
1813
|
fill: "none",
|
|
1653
1814
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1654
1815
|
"aria-hidden": "true",
|
|
1655
|
-
children: /* @__PURE__ */ (0,
|
|
1816
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1656
1817
|
"path",
|
|
1657
1818
|
{
|
|
1658
1819
|
d: "M2 6h8",
|
|
@@ -1667,16 +1828,16 @@ function Checkbox({
|
|
|
1667
1828
|
}
|
|
1668
1829
|
);
|
|
1669
1830
|
if (label) {
|
|
1670
|
-
return /* @__PURE__ */ (0,
|
|
1831
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("label", { className: "malix-checkbox-row", children: [
|
|
1671
1832
|
checkbox,
|
|
1672
|
-
/* @__PURE__ */ (0,
|
|
1833
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "malix-checkbox-row__label", children: label })
|
|
1673
1834
|
] });
|
|
1674
1835
|
}
|
|
1675
1836
|
return checkbox;
|
|
1676
1837
|
}
|
|
1677
1838
|
|
|
1678
1839
|
// src/components/Radio.tsx
|
|
1679
|
-
var
|
|
1840
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
1680
1841
|
function Radio({
|
|
1681
1842
|
checked = false,
|
|
1682
1843
|
onChange,
|
|
@@ -1692,7 +1853,7 @@ function Radio({
|
|
|
1692
1853
|
onChange(value);
|
|
1693
1854
|
}
|
|
1694
1855
|
};
|
|
1695
|
-
const radio = /* @__PURE__ */ (0,
|
|
1856
|
+
const radio = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1696
1857
|
"button",
|
|
1697
1858
|
{
|
|
1698
1859
|
type: "button",
|
|
@@ -1706,20 +1867,20 @@ function Radio({
|
|
|
1706
1867
|
"data-value": value,
|
|
1707
1868
|
onClick: handleClick,
|
|
1708
1869
|
...props,
|
|
1709
|
-
children: /* @__PURE__ */ (0,
|
|
1870
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "malix-radio__dot" })
|
|
1710
1871
|
}
|
|
1711
1872
|
);
|
|
1712
1873
|
if (label) {
|
|
1713
|
-
return /* @__PURE__ */ (0,
|
|
1874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("label", { className: "malix-radio-row", children: [
|
|
1714
1875
|
radio,
|
|
1715
|
-
/* @__PURE__ */ (0,
|
|
1876
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "malix-radio-row__label", children: label })
|
|
1716
1877
|
] });
|
|
1717
1878
|
}
|
|
1718
1879
|
return radio;
|
|
1719
1880
|
}
|
|
1720
1881
|
|
|
1721
1882
|
// src/components/Toggle.tsx
|
|
1722
|
-
var
|
|
1883
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
1723
1884
|
function Toggle({
|
|
1724
1885
|
checked = false,
|
|
1725
1886
|
onChange,
|
|
@@ -1733,7 +1894,7 @@ function Toggle({
|
|
|
1733
1894
|
onChange(!checked);
|
|
1734
1895
|
}
|
|
1735
1896
|
};
|
|
1736
|
-
const toggle = /* @__PURE__ */ (0,
|
|
1897
|
+
const toggle = /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1737
1898
|
"button",
|
|
1738
1899
|
{
|
|
1739
1900
|
type: "button",
|
|
@@ -1745,12 +1906,12 @@ function Toggle({
|
|
|
1745
1906
|
disabled,
|
|
1746
1907
|
onClick: handleClick,
|
|
1747
1908
|
...props,
|
|
1748
|
-
children: /* @__PURE__ */ (0,
|
|
1909
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "malix-toggle__knob" })
|
|
1749
1910
|
}
|
|
1750
1911
|
);
|
|
1751
1912
|
if (label) {
|
|
1752
|
-
return /* @__PURE__ */ (0,
|
|
1753
|
-
/* @__PURE__ */ (0,
|
|
1913
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "malix-toggle-row", children: [
|
|
1914
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "malix-toggle-row__label", children: label }),
|
|
1754
1915
|
toggle
|
|
1755
1916
|
] });
|
|
1756
1917
|
}
|
|
@@ -1758,7 +1919,7 @@ function Toggle({
|
|
|
1758
1919
|
}
|
|
1759
1920
|
|
|
1760
1921
|
// src/components/Select.tsx
|
|
1761
|
-
var
|
|
1922
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
1762
1923
|
function Select({
|
|
1763
1924
|
value,
|
|
1764
1925
|
placeholder,
|
|
@@ -1769,14 +1930,14 @@ function Select({
|
|
|
1769
1930
|
className,
|
|
1770
1931
|
...props
|
|
1771
1932
|
}) {
|
|
1772
|
-
return /* @__PURE__ */ (0,
|
|
1933
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
1773
1934
|
"div",
|
|
1774
1935
|
{
|
|
1775
1936
|
className: `malix-select${className ? ` ${className}` : ""}`,
|
|
1776
1937
|
"data-filled": filled || void 0,
|
|
1777
1938
|
"data-disabled": disabled || void 0,
|
|
1778
1939
|
children: [
|
|
1779
|
-
/* @__PURE__ */ (0,
|
|
1940
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
1780
1941
|
"select",
|
|
1781
1942
|
{
|
|
1782
1943
|
className: "malix-select__native",
|
|
@@ -1785,12 +1946,12 @@ function Select({
|
|
|
1785
1946
|
onChange: (e) => onChange?.(e.target.value),
|
|
1786
1947
|
...props,
|
|
1787
1948
|
children: [
|
|
1788
|
-
placeholder ? /* @__PURE__ */ (0,
|
|
1789
|
-
options.map((opt) => /* @__PURE__ */ (0,
|
|
1949
|
+
placeholder ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("option", { value: "", disabled: true, children: placeholder }) : null,
|
|
1950
|
+
options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("option", { value: opt.value, children: opt.label }, opt.value))
|
|
1790
1951
|
]
|
|
1791
1952
|
}
|
|
1792
1953
|
),
|
|
1793
|
-
/* @__PURE__ */ (0,
|
|
1954
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "malix-select__icon", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
1794
1955
|
"path",
|
|
1795
1956
|
{
|
|
1796
1957
|
d: "M4 6L8 10L12 6",
|
|
@@ -1806,7 +1967,7 @@ function Select({
|
|
|
1806
1967
|
}
|
|
1807
1968
|
|
|
1808
1969
|
// src/components/SelectGroup.tsx
|
|
1809
|
-
var
|
|
1970
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
1810
1971
|
function SelectGroup({
|
|
1811
1972
|
label,
|
|
1812
1973
|
helperText,
|
|
@@ -1815,23 +1976,23 @@ function SelectGroup({
|
|
|
1815
1976
|
className,
|
|
1816
1977
|
...props
|
|
1817
1978
|
}) {
|
|
1818
|
-
return /* @__PURE__ */ (0,
|
|
1979
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
|
|
1819
1980
|
"div",
|
|
1820
1981
|
{
|
|
1821
1982
|
className: `malix-select-group${className ? ` ${className}` : ""}`,
|
|
1822
1983
|
"data-error": error || void 0,
|
|
1823
1984
|
...props,
|
|
1824
1985
|
children: [
|
|
1825
|
-
label ? /* @__PURE__ */ (0,
|
|
1986
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "malix-select-group__label", children: label }) : null,
|
|
1826
1987
|
children,
|
|
1827
|
-
helperText ? /* @__PURE__ */ (0,
|
|
1988
|
+
helperText ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "malix-select-group__helper", children: helperText }) : null
|
|
1828
1989
|
]
|
|
1829
1990
|
}
|
|
1830
1991
|
);
|
|
1831
1992
|
}
|
|
1832
1993
|
|
|
1833
1994
|
// src/components/SegmentedControl.tsx
|
|
1834
|
-
var
|
|
1995
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
1835
1996
|
function SegmentedControl({
|
|
1836
1997
|
items,
|
|
1837
1998
|
value,
|
|
@@ -1839,13 +2000,13 @@ function SegmentedControl({
|
|
|
1839
2000
|
className,
|
|
1840
2001
|
...props
|
|
1841
2002
|
}) {
|
|
1842
|
-
return /* @__PURE__ */ (0,
|
|
2003
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
1843
2004
|
"div",
|
|
1844
2005
|
{
|
|
1845
2006
|
className: `malix-segmented-control${className ? ` ${className}` : ""}`,
|
|
1846
2007
|
role: "radiogroup",
|
|
1847
2008
|
...props,
|
|
1848
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
2009
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
1849
2010
|
"button",
|
|
1850
2011
|
{
|
|
1851
2012
|
type: "button",
|
|
@@ -1863,7 +2024,7 @@ function SegmentedControl({
|
|
|
1863
2024
|
}
|
|
1864
2025
|
|
|
1865
2026
|
// src/components/DataTable.tsx
|
|
1866
|
-
var
|
|
2027
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
1867
2028
|
function DataTable({
|
|
1868
2029
|
columns,
|
|
1869
2030
|
data,
|
|
@@ -1872,13 +2033,13 @@ function DataTable({
|
|
|
1872
2033
|
className,
|
|
1873
2034
|
...props
|
|
1874
2035
|
}) {
|
|
1875
|
-
return /* @__PURE__ */ (0,
|
|
2036
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
|
|
1876
2037
|
"table",
|
|
1877
2038
|
{
|
|
1878
2039
|
className: `malix-data-table${className ? ` ${className}` : ""}`,
|
|
1879
2040
|
...props,
|
|
1880
2041
|
children: [
|
|
1881
|
-
/* @__PURE__ */ (0,
|
|
2042
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("tr", { className: "malix-data-table__header-row", children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
1882
2043
|
"th",
|
|
1883
2044
|
{
|
|
1884
2045
|
className: "malix-data-table__header-cell",
|
|
@@ -1887,16 +2048,16 @@ function DataTable({
|
|
|
1887
2048
|
},
|
|
1888
2049
|
col.key
|
|
1889
2050
|
)) }) }),
|
|
1890
|
-
/* @__PURE__ */ (0,
|
|
2051
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("tbody", { className: "malix-data-table__body", children: data.length > 0 ? data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
1891
2052
|
"tr",
|
|
1892
2053
|
{
|
|
1893
2054
|
className: "malix-data-table__data-row",
|
|
1894
2055
|
"data-clickable": onRowClick ? true : void 0,
|
|
1895
2056
|
onClick: onRowClick ? () => onRowClick(row) : void 0,
|
|
1896
|
-
children: columns.map((col) => /* @__PURE__ */ (0,
|
|
2057
|
+
children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("td", { className: "malix-data-table__cell", children: col.render ? col.render(row[col.key], row) : row[col.key] }, col.key))
|
|
1897
2058
|
},
|
|
1898
2059
|
rowIndex
|
|
1899
|
-
)) : /* @__PURE__ */ (0,
|
|
2060
|
+
)) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("tr", { className: "malix-data-table__data-row", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
1900
2061
|
"td",
|
|
1901
2062
|
{
|
|
1902
2063
|
className: "malix-data-table__cell",
|
|
@@ -1910,12 +2071,12 @@ function DataTable({
|
|
|
1910
2071
|
}
|
|
1911
2072
|
|
|
1912
2073
|
// src/components/Pagination.tsx
|
|
1913
|
-
var
|
|
2074
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
1914
2075
|
function ChevronLeft() {
|
|
1915
|
-
return /* @__PURE__ */ (0,
|
|
2076
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { d: "M10 12L6 8L10 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
|
|
1916
2077
|
}
|
|
1917
2078
|
function ChevronRight() {
|
|
1918
|
-
return /* @__PURE__ */ (0,
|
|
2079
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { d: "M6 4L10 8L6 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
|
|
1919
2080
|
}
|
|
1920
2081
|
function Pagination({
|
|
1921
2082
|
currentPage,
|
|
@@ -1927,14 +2088,14 @@ function Pagination({
|
|
|
1927
2088
|
const isFirstPage = currentPage <= 1;
|
|
1928
2089
|
const isLastPage = currentPage >= totalPages;
|
|
1929
2090
|
const pages = Array.from({ length: totalPages }, (_, i) => i + 1);
|
|
1930
|
-
return /* @__PURE__ */ (0,
|
|
2091
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
|
|
1931
2092
|
"nav",
|
|
1932
2093
|
{
|
|
1933
2094
|
className: `malix-pagination${className ? ` ${className}` : ""}`,
|
|
1934
2095
|
"data-variant": variant,
|
|
1935
2096
|
"aria-label": "Pagination",
|
|
1936
2097
|
children: [
|
|
1937
|
-
/* @__PURE__ */ (0,
|
|
2098
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
1938
2099
|
"button",
|
|
1939
2100
|
{
|
|
1940
2101
|
type: "button",
|
|
@@ -1943,10 +2104,10 @@ function Pagination({
|
|
|
1943
2104
|
disabled: isFirstPage,
|
|
1944
2105
|
onClick: () => onPageChange(currentPage - 1),
|
|
1945
2106
|
"aria-label": "Previous page",
|
|
1946
|
-
children: /* @__PURE__ */ (0,
|
|
2107
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ChevronLeft, {})
|
|
1947
2108
|
}
|
|
1948
2109
|
),
|
|
1949
|
-
variant === "full" ? pages.map((page) => /* @__PURE__ */ (0,
|
|
2110
|
+
variant === "full" ? pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
1950
2111
|
"button",
|
|
1951
2112
|
{
|
|
1952
2113
|
type: "button",
|
|
@@ -1957,12 +2118,12 @@ function Pagination({
|
|
|
1957
2118
|
children: page
|
|
1958
2119
|
},
|
|
1959
2120
|
page
|
|
1960
|
-
)) : /* @__PURE__ */ (0,
|
|
2121
|
+
)) : /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("span", { className: "malix-pagination__label", children: [
|
|
1961
2122
|
currentPage,
|
|
1962
2123
|
" of ",
|
|
1963
2124
|
totalPages
|
|
1964
2125
|
] }),
|
|
1965
|
-
/* @__PURE__ */ (0,
|
|
2126
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
1966
2127
|
"button",
|
|
1967
2128
|
{
|
|
1968
2129
|
type: "button",
|
|
@@ -1971,7 +2132,7 @@ function Pagination({
|
|
|
1971
2132
|
disabled: isLastPage,
|
|
1972
2133
|
onClick: () => onPageChange(currentPage + 1),
|
|
1973
2134
|
"aria-label": "Next page",
|
|
1974
|
-
children: /* @__PURE__ */ (0,
|
|
2135
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ChevronRight, {})
|
|
1975
2136
|
}
|
|
1976
2137
|
)
|
|
1977
2138
|
]
|
|
@@ -1980,30 +2141,30 @@ function Pagination({
|
|
|
1980
2141
|
}
|
|
1981
2142
|
|
|
1982
2143
|
// src/components/StatusDot.tsx
|
|
1983
|
-
var
|
|
2144
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
1984
2145
|
function StatusDot({
|
|
1985
2146
|
variant = "default",
|
|
1986
2147
|
label,
|
|
1987
2148
|
className,
|
|
1988
2149
|
...props
|
|
1989
2150
|
}) {
|
|
1990
|
-
return /* @__PURE__ */ (0,
|
|
2151
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
|
|
1991
2152
|
"span",
|
|
1992
2153
|
{
|
|
1993
2154
|
className: `malix-status-dot${className ? ` ${className}` : ""}`,
|
|
1994
2155
|
"data-variant": variant,
|
|
1995
2156
|
...props,
|
|
1996
2157
|
children: [
|
|
1997
|
-
/* @__PURE__ */ (0,
|
|
1998
|
-
/* @__PURE__ */ (0,
|
|
2158
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-status-dot__dot", "aria-hidden": "true" }),
|
|
2159
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "malix-status-dot__label", children: label })
|
|
1999
2160
|
]
|
|
2000
2161
|
}
|
|
2001
2162
|
);
|
|
2002
2163
|
}
|
|
2003
2164
|
|
|
2004
2165
|
// src/components/Dropzone.tsx
|
|
2005
|
-
var
|
|
2006
|
-
var
|
|
2166
|
+
var import_react14 = require("react");
|
|
2167
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
2007
2168
|
function Dropzone({
|
|
2008
2169
|
onDrop,
|
|
2009
2170
|
accept,
|
|
@@ -2013,8 +2174,8 @@ function Dropzone({
|
|
|
2013
2174
|
className,
|
|
2014
2175
|
...props
|
|
2015
2176
|
}) {
|
|
2016
|
-
const [dragging, setDragging] = (0,
|
|
2017
|
-
const inputRef = (0,
|
|
2177
|
+
const [dragging, setDragging] = (0, import_react14.useState)(false);
|
|
2178
|
+
const inputRef = (0, import_react14.useRef)(null);
|
|
2018
2179
|
function handleDragOver(event) {
|
|
2019
2180
|
event.preventDefault();
|
|
2020
2181
|
if (!disabled) setDragging(true);
|
|
@@ -2038,7 +2199,7 @@ function Dropzone({
|
|
|
2038
2199
|
function handleClick() {
|
|
2039
2200
|
if (!disabled) inputRef.current?.click();
|
|
2040
2201
|
}
|
|
2041
|
-
return /* @__PURE__ */ (0,
|
|
2202
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
|
|
2042
2203
|
"div",
|
|
2043
2204
|
{
|
|
2044
2205
|
className: `malix-dropzone${className ? ` ${className}` : ""}`,
|
|
@@ -2053,7 +2214,7 @@ function Dropzone({
|
|
|
2053
2214
|
"aria-disabled": disabled || void 0,
|
|
2054
2215
|
...props,
|
|
2055
2216
|
children: [
|
|
2056
|
-
/* @__PURE__ */ (0,
|
|
2217
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
2057
2218
|
"input",
|
|
2058
2219
|
{
|
|
2059
2220
|
ref: inputRef,
|
|
@@ -2064,7 +2225,7 @@ function Dropzone({
|
|
|
2064
2225
|
"aria-hidden": "true"
|
|
2065
2226
|
}
|
|
2066
2227
|
),
|
|
2067
|
-
/* @__PURE__ */ (0,
|
|
2228
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
|
|
2068
2229
|
"svg",
|
|
2069
2230
|
{
|
|
2070
2231
|
className: "malix-dropzone__icon",
|
|
@@ -2078,23 +2239,23 @@ function Dropzone({
|
|
|
2078
2239
|
strokeLinejoin: "round",
|
|
2079
2240
|
"aria-hidden": "true",
|
|
2080
2241
|
children: [
|
|
2081
|
-
/* @__PURE__ */ (0,
|
|
2082
|
-
/* @__PURE__ */ (0,
|
|
2083
|
-
/* @__PURE__ */ (0,
|
|
2242
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }),
|
|
2243
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("path", { d: "M12 12v9" }),
|
|
2244
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("path", { d: "m16 16-4-4-4 4" })
|
|
2084
2245
|
]
|
|
2085
2246
|
}
|
|
2086
2247
|
),
|
|
2087
|
-
/* @__PURE__ */ (0,
|
|
2088
|
-
/* @__PURE__ */ (0,
|
|
2089
|
-
/* @__PURE__ */ (0,
|
|
2248
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-dropzone__title", children: title }),
|
|
2249
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-dropzone__hint", children: hint }),
|
|
2250
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "malix-dropzone__browse-btn", children: "Browse files" })
|
|
2090
2251
|
]
|
|
2091
2252
|
}
|
|
2092
2253
|
);
|
|
2093
2254
|
}
|
|
2094
2255
|
|
|
2095
2256
|
// src/components/SplitPane.tsx
|
|
2096
|
-
var
|
|
2097
|
-
var
|
|
2257
|
+
var import_react15 = require("react");
|
|
2258
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
2098
2259
|
function SplitPane({
|
|
2099
2260
|
leftPanel,
|
|
2100
2261
|
rightPanel,
|
|
@@ -2104,14 +2265,14 @@ function SplitPane({
|
|
|
2104
2265
|
className,
|
|
2105
2266
|
...props
|
|
2106
2267
|
}) {
|
|
2107
|
-
const [split, setSplit] = (0,
|
|
2108
|
-
const containerRef = (0,
|
|
2109
|
-
const dragging = (0,
|
|
2110
|
-
const onMouseDown = (0,
|
|
2268
|
+
const [split, setSplit] = (0, import_react15.useState)(defaultSplit);
|
|
2269
|
+
const containerRef = (0, import_react15.useRef)(null);
|
|
2270
|
+
const dragging = (0, import_react15.useRef)(false);
|
|
2271
|
+
const onMouseDown = (0, import_react15.useCallback)((e) => {
|
|
2111
2272
|
e.preventDefault();
|
|
2112
2273
|
dragging.current = true;
|
|
2113
2274
|
}, []);
|
|
2114
|
-
(0,
|
|
2275
|
+
(0, import_react15.useEffect)(() => {
|
|
2115
2276
|
function onMouseMove(e) {
|
|
2116
2277
|
if (!dragging.current || !containerRef.current) return;
|
|
2117
2278
|
const rect = containerRef.current.getBoundingClientRect();
|
|
@@ -2129,18 +2290,18 @@ function SplitPane({
|
|
|
2129
2290
|
document.removeEventListener("mouseup", onMouseUp);
|
|
2130
2291
|
};
|
|
2131
2292
|
}, []);
|
|
2132
|
-
return /* @__PURE__ */ (0,
|
|
2293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
|
|
2133
2294
|
"div",
|
|
2134
2295
|
{
|
|
2135
2296
|
ref: containerRef,
|
|
2136
2297
|
className: `malix-split-pane${className ? ` ${className}` : ""}`,
|
|
2137
2298
|
...props,
|
|
2138
2299
|
children: [
|
|
2139
|
-
/* @__PURE__ */ (0,
|
|
2140
|
-
leftTitle ? /* @__PURE__ */ (0,
|
|
2300
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "malix-split-pane__left", style: { width: `${split}%` }, children: [
|
|
2301
|
+
leftTitle ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-split-pane__panel-title", children: leftTitle }) : null,
|
|
2141
2302
|
leftPanel
|
|
2142
2303
|
] }),
|
|
2143
|
-
/* @__PURE__ */ (0,
|
|
2304
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
|
|
2144
2305
|
"div",
|
|
2145
2306
|
{
|
|
2146
2307
|
className: "malix-split-pane__handle",
|
|
@@ -2151,14 +2312,14 @@ function SplitPane({
|
|
|
2151
2312
|
"aria-label": "Resize panels",
|
|
2152
2313
|
onMouseDown,
|
|
2153
2314
|
children: [
|
|
2154
|
-
/* @__PURE__ */ (0,
|
|
2155
|
-
/* @__PURE__ */ (0,
|
|
2156
|
-
/* @__PURE__ */ (0,
|
|
2315
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" }),
|
|
2316
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" }),
|
|
2317
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-split-pane__handle-dot", "aria-hidden": "true" })
|
|
2157
2318
|
]
|
|
2158
2319
|
}
|
|
2159
2320
|
),
|
|
2160
|
-
/* @__PURE__ */ (0,
|
|
2161
|
-
rightTitle ? /* @__PURE__ */ (0,
|
|
2321
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "malix-split-pane__right", style: { width: `${100 - split}%` }, children: [
|
|
2322
|
+
rightTitle ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "malix-split-pane__panel-title", children: rightTitle }) : null,
|
|
2162
2323
|
rightPanel
|
|
2163
2324
|
] })
|
|
2164
2325
|
]
|
|
@@ -2167,7 +2328,7 @@ function SplitPane({
|
|
|
2167
2328
|
}
|
|
2168
2329
|
|
|
2169
2330
|
// src/components/PricingCard.tsx
|
|
2170
|
-
var
|
|
2331
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
2171
2332
|
function PricingCard({
|
|
2172
2333
|
planName,
|
|
2173
2334
|
price,
|
|
@@ -2180,21 +2341,21 @@ function PricingCard({
|
|
|
2180
2341
|
className,
|
|
2181
2342
|
...props
|
|
2182
2343
|
}) {
|
|
2183
|
-
return /* @__PURE__ */ (0,
|
|
2344
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
|
|
2184
2345
|
"div",
|
|
2185
2346
|
{
|
|
2186
2347
|
className: `malix-pricing-card${className ? ` ${className}` : ""}`,
|
|
2187
2348
|
"data-highlighted": highlighted || void 0,
|
|
2188
2349
|
...props,
|
|
2189
2350
|
children: [
|
|
2190
|
-
/* @__PURE__ */ (0,
|
|
2191
|
-
/* @__PURE__ */ (0,
|
|
2192
|
-
/* @__PURE__ */ (0,
|
|
2193
|
-
/* @__PURE__ */ (0,
|
|
2351
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "malix-pricing-card__badge", children: planName }),
|
|
2352
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "malix-pricing-card__price-row", children: [
|
|
2353
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "malix-pricing-card__price", children: price }),
|
|
2354
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "malix-pricing-card__period", children: period })
|
|
2194
2355
|
] }),
|
|
2195
|
-
description ? /* @__PURE__ */ (0,
|
|
2196
|
-
/* @__PURE__ */ (0,
|
|
2197
|
-
/* @__PURE__ */ (0,
|
|
2356
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "malix-pricing-card__description", children: description }) : null,
|
|
2357
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("ul", { className: "malix-pricing-card__features", children: features.map((feature, i) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("li", { className: "malix-pricing-card__feature-item", children: [
|
|
2358
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
2198
2359
|
"svg",
|
|
2199
2360
|
{
|
|
2200
2361
|
className: "malix-pricing-card__check-icon",
|
|
@@ -2207,12 +2368,12 @@ function PricingCard({
|
|
|
2207
2368
|
strokeLinecap: "round",
|
|
2208
2369
|
strokeLinejoin: "round",
|
|
2209
2370
|
"aria-hidden": "true",
|
|
2210
|
-
children: /* @__PURE__ */ (0,
|
|
2371
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("polyline", { points: "20 6 9 17 4 12" })
|
|
2211
2372
|
}
|
|
2212
2373
|
),
|
|
2213
|
-
/* @__PURE__ */ (0,
|
|
2374
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: feature })
|
|
2214
2375
|
] }, i)) }),
|
|
2215
|
-
/* @__PURE__ */ (0,
|
|
2376
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
2216
2377
|
"button",
|
|
2217
2378
|
{
|
|
2218
2379
|
type: "button",
|
|
@@ -2227,7 +2388,7 @@ function PricingCard({
|
|
|
2227
2388
|
}
|
|
2228
2389
|
|
|
2229
2390
|
// src/components/OnboardingPopover.tsx
|
|
2230
|
-
var
|
|
2391
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
2231
2392
|
function OnboardingPopover({
|
|
2232
2393
|
step,
|
|
2233
2394
|
totalSteps,
|
|
@@ -2239,7 +2400,7 @@ function OnboardingPopover({
|
|
|
2239
2400
|
className,
|
|
2240
2401
|
...props
|
|
2241
2402
|
}) {
|
|
2242
|
-
return /* @__PURE__ */ (0,
|
|
2403
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
2243
2404
|
"div",
|
|
2244
2405
|
{
|
|
2245
2406
|
className: `malix-onboarding-popover${className ? ` ${className}` : ""}`,
|
|
@@ -2247,16 +2408,16 @@ function OnboardingPopover({
|
|
|
2247
2408
|
"aria-label": `Step ${step} of ${totalSteps}: ${title}`,
|
|
2248
2409
|
...props,
|
|
2249
2410
|
children: [
|
|
2250
|
-
/* @__PURE__ */ (0,
|
|
2411
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "malix-onboarding-popover__step", children: [
|
|
2251
2412
|
"Step ",
|
|
2252
2413
|
step,
|
|
2253
2414
|
" of ",
|
|
2254
2415
|
totalSteps
|
|
2255
2416
|
] }),
|
|
2256
|
-
/* @__PURE__ */ (0,
|
|
2257
|
-
/* @__PURE__ */ (0,
|
|
2258
|
-
/* @__PURE__ */ (0,
|
|
2259
|
-
onSkip ? /* @__PURE__ */ (0,
|
|
2417
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "malix-onboarding-popover__title", children: title }),
|
|
2418
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "malix-onboarding-popover__description", children: description }),
|
|
2419
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "malix-onboarding-popover__actions", children: [
|
|
2420
|
+
onSkip ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2260
2421
|
"button",
|
|
2261
2422
|
{
|
|
2262
2423
|
type: "button",
|
|
@@ -2265,7 +2426,7 @@ function OnboardingPopover({
|
|
|
2265
2426
|
children: "Skip"
|
|
2266
2427
|
}
|
|
2267
2428
|
) : null,
|
|
2268
|
-
onNext ? /* @__PURE__ */ (0,
|
|
2429
|
+
onNext ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2269
2430
|
"button",
|
|
2270
2431
|
{
|
|
2271
2432
|
type: "button",
|
|
@@ -2281,20 +2442,20 @@ function OnboardingPopover({
|
|
|
2281
2442
|
}
|
|
2282
2443
|
|
|
2283
2444
|
// src/components/CreditsIndicator.tsx
|
|
2284
|
-
var
|
|
2445
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
2285
2446
|
function CreditsIndicator({
|
|
2286
2447
|
remaining,
|
|
2287
2448
|
label = "Credits Remaining",
|
|
2288
2449
|
className,
|
|
2289
2450
|
...props
|
|
2290
2451
|
}) {
|
|
2291
|
-
return /* @__PURE__ */ (0,
|
|
2452
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
|
|
2292
2453
|
"div",
|
|
2293
2454
|
{
|
|
2294
2455
|
className: `malix-credits-indicator${className ? ` ${className}` : ""}`,
|
|
2295
2456
|
...props,
|
|
2296
2457
|
children: [
|
|
2297
|
-
/* @__PURE__ */ (0,
|
|
2458
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-credits-indicator__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
|
|
2298
2459
|
"svg",
|
|
2299
2460
|
{
|
|
2300
2461
|
width: "20",
|
|
@@ -2306,15 +2467,15 @@ function CreditsIndicator({
|
|
|
2306
2467
|
strokeLinecap: "round",
|
|
2307
2468
|
strokeLinejoin: "round",
|
|
2308
2469
|
children: [
|
|
2309
|
-
/* @__PURE__ */ (0,
|
|
2310
|
-
/* @__PURE__ */ (0,
|
|
2311
|
-
/* @__PURE__ */ (0,
|
|
2470
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("ellipse", { cx: "12", cy: "6", rx: "8", ry: "3" }),
|
|
2471
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: "M4 6v6c0 1.66 3.58 3 8 3s8-1.34 8-3V6" }),
|
|
2472
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: "M4 12v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6" })
|
|
2312
2473
|
]
|
|
2313
2474
|
}
|
|
2314
2475
|
) }),
|
|
2315
|
-
/* @__PURE__ */ (0,
|
|
2316
|
-
/* @__PURE__ */ (0,
|
|
2317
|
-
/* @__PURE__ */ (0,
|
|
2476
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "malix-credits-indicator__info", children: [
|
|
2477
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-credits-indicator__label", children: label }),
|
|
2478
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "malix-credits-indicator__value", children: remaining })
|
|
2318
2479
|
] })
|
|
2319
2480
|
]
|
|
2320
2481
|
}
|
|
@@ -2322,7 +2483,7 @@ function CreditsIndicator({
|
|
|
2322
2483
|
}
|
|
2323
2484
|
|
|
2324
2485
|
// src/components/LanguageSelector.tsx
|
|
2325
|
-
var
|
|
2486
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
2326
2487
|
function LanguageSelector({
|
|
2327
2488
|
value,
|
|
2328
2489
|
options,
|
|
@@ -2332,13 +2493,13 @@ function LanguageSelector({
|
|
|
2332
2493
|
}) {
|
|
2333
2494
|
const selectedOption = options?.find((opt) => opt.value === value);
|
|
2334
2495
|
const displayLabel = selectedOption?.label ?? value;
|
|
2335
|
-
return /* @__PURE__ */ (0,
|
|
2496
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
2336
2497
|
"div",
|
|
2337
2498
|
{
|
|
2338
2499
|
className: `malix-language-selector${className ? ` ${className}` : ""}`,
|
|
2339
2500
|
...props,
|
|
2340
2501
|
children: [
|
|
2341
|
-
/* @__PURE__ */ (0,
|
|
2502
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-language-selector__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
2342
2503
|
"svg",
|
|
2343
2504
|
{
|
|
2344
2505
|
width: "16",
|
|
@@ -2350,24 +2511,24 @@ function LanguageSelector({
|
|
|
2350
2511
|
strokeLinecap: "round",
|
|
2351
2512
|
strokeLinejoin: "round",
|
|
2352
2513
|
children: [
|
|
2353
|
-
/* @__PURE__ */ (0,
|
|
2354
|
-
/* @__PURE__ */ (0,
|
|
2355
|
-
/* @__PURE__ */ (0,
|
|
2514
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
2515
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("line", { x1: "2", y1: "12", x2: "22", y2: "12" }),
|
|
2516
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.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" })
|
|
2356
2517
|
]
|
|
2357
2518
|
}
|
|
2358
2519
|
) }),
|
|
2359
|
-
/* @__PURE__ */ (0,
|
|
2520
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
2360
2521
|
"select",
|
|
2361
2522
|
{
|
|
2362
2523
|
className: "malix-language-selector__select",
|
|
2363
2524
|
value,
|
|
2364
2525
|
onChange: (e) => onChange?.(e.target.value),
|
|
2365
2526
|
"aria-label": "Select language",
|
|
2366
|
-
children: options ? options.map((opt) => /* @__PURE__ */ (0,
|
|
2527
|
+
children: options ? options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("option", { value: opt.value, children: opt.label }, opt.value)) : /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("option", { value, children: displayLabel })
|
|
2367
2528
|
}
|
|
2368
2529
|
),
|
|
2369
|
-
/* @__PURE__ */ (0,
|
|
2370
|
-
/* @__PURE__ */ (0,
|
|
2530
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-language-selector__label", children: displayLabel }),
|
|
2531
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "malix-language-selector__chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
2371
2532
|
"svg",
|
|
2372
2533
|
{
|
|
2373
2534
|
width: "14",
|
|
@@ -2378,7 +2539,7 @@ function LanguageSelector({
|
|
|
2378
2539
|
strokeWidth: "2",
|
|
2379
2540
|
strokeLinecap: "round",
|
|
2380
2541
|
strokeLinejoin: "round",
|
|
2381
|
-
children: /* @__PURE__ */ (0,
|
|
2542
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("polyline", { points: "6 9 12 15 18 9" })
|
|
2382
2543
|
}
|
|
2383
2544
|
) })
|
|
2384
2545
|
]
|
|
@@ -2387,7 +2548,7 @@ function LanguageSelector({
|
|
|
2387
2548
|
}
|
|
2388
2549
|
|
|
2389
2550
|
// src/components/UserProfilePopover.tsx
|
|
2390
|
-
var
|
|
2551
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
2391
2552
|
function UserProfilePopover({
|
|
2392
2553
|
name,
|
|
2393
2554
|
email,
|
|
@@ -2398,26 +2559,26 @@ function UserProfilePopover({
|
|
|
2398
2559
|
className,
|
|
2399
2560
|
...props
|
|
2400
2561
|
}) {
|
|
2401
|
-
return /* @__PURE__ */ (0,
|
|
2562
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
2402
2563
|
"div",
|
|
2403
2564
|
{
|
|
2404
2565
|
className: `malix-user-profile${className ? ` ${className}` : ""}`,
|
|
2405
2566
|
...props,
|
|
2406
2567
|
children: [
|
|
2407
|
-
/* @__PURE__ */ (0,
|
|
2408
|
-
avatar ? /* @__PURE__ */ (0,
|
|
2409
|
-
/* @__PURE__ */ (0,
|
|
2410
|
-
/* @__PURE__ */ (0,
|
|
2411
|
-
/* @__PURE__ */ (0,
|
|
2568
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "malix-user-profile__header", children: [
|
|
2569
|
+
avatar ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-user-profile__avatar", children: avatar }) : null,
|
|
2570
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "malix-user-profile__info", children: [
|
|
2571
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-user-profile__name", children: name }),
|
|
2572
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-user-profile__email", children: email })
|
|
2412
2573
|
] })
|
|
2413
2574
|
] }),
|
|
2414
|
-
credits !== void 0 ? /* @__PURE__ */ (0,
|
|
2415
|
-
/* @__PURE__ */ (0,
|
|
2416
|
-
/* @__PURE__ */ (0,
|
|
2575
|
+
credits !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "malix-user-profile__credits", children: [
|
|
2576
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-user-profile__credits-label", children: "Credits" }),
|
|
2577
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-user-profile__credits-value", children: credits })
|
|
2417
2578
|
] }) : null,
|
|
2418
|
-
menuItems && menuItems.length > 0 ? /* @__PURE__ */ (0,
|
|
2419
|
-
/* @__PURE__ */ (0,
|
|
2420
|
-
/* @__PURE__ */ (0,
|
|
2579
|
+
menuItems && menuItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
|
|
2580
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("hr", { className: "malix-user-profile__divider" }),
|
|
2581
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("nav", { className: "malix-user-profile__menu", role: "menu", children: menuItems.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
2421
2582
|
"button",
|
|
2422
2583
|
{
|
|
2423
2584
|
type: "button",
|
|
@@ -2425,23 +2586,23 @@ function UserProfilePopover({
|
|
|
2425
2586
|
role: "menuitem",
|
|
2426
2587
|
onClick: item.onClick,
|
|
2427
2588
|
children: [
|
|
2428
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
2429
|
-
/* @__PURE__ */ (0,
|
|
2589
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-user-profile__menu-item-icon", children: item.icon }) : null,
|
|
2590
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "malix-user-profile__menu-item-label", children: item.label })
|
|
2430
2591
|
]
|
|
2431
2592
|
},
|
|
2432
2593
|
i
|
|
2433
2594
|
)) })
|
|
2434
2595
|
] }) : null,
|
|
2435
|
-
onLogout ? /* @__PURE__ */ (0,
|
|
2436
|
-
/* @__PURE__ */ (0,
|
|
2437
|
-
/* @__PURE__ */ (0,
|
|
2596
|
+
onLogout ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
|
|
2597
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("hr", { className: "malix-user-profile__divider" }),
|
|
2598
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
2438
2599
|
"button",
|
|
2439
2600
|
{
|
|
2440
2601
|
type: "button",
|
|
2441
2602
|
className: "malix-user-profile__logout",
|
|
2442
2603
|
onClick: onLogout,
|
|
2443
2604
|
children: [
|
|
2444
|
-
/* @__PURE__ */ (0,
|
|
2605
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
2445
2606
|
"svg",
|
|
2446
2607
|
{
|
|
2447
2608
|
width: "16",
|
|
@@ -2453,13 +2614,13 @@ function UserProfilePopover({
|
|
|
2453
2614
|
strokeLinecap: "round",
|
|
2454
2615
|
strokeLinejoin: "round",
|
|
2455
2616
|
children: [
|
|
2456
|
-
/* @__PURE__ */ (0,
|
|
2457
|
-
/* @__PURE__ */ (0,
|
|
2458
|
-
/* @__PURE__ */ (0,
|
|
2617
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }),
|
|
2618
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("polyline", { points: "16 17 21 12 16 7" }),
|
|
2619
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("line", { x1: "21", y1: "12", x2: "9", y2: "12" })
|
|
2459
2620
|
]
|
|
2460
2621
|
}
|
|
2461
2622
|
),
|
|
2462
|
-
/* @__PURE__ */ (0,
|
|
2623
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { children: "Log out" })
|
|
2463
2624
|
]
|
|
2464
2625
|
}
|
|
2465
2626
|
)
|
|
@@ -2470,7 +2631,7 @@ function UserProfilePopover({
|
|
|
2470
2631
|
}
|
|
2471
2632
|
|
|
2472
2633
|
// src/components/ChatBubble.tsx
|
|
2473
|
-
var
|
|
2634
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
2474
2635
|
function ChatBubble({
|
|
2475
2636
|
variant,
|
|
2476
2637
|
message,
|
|
@@ -2479,22 +2640,22 @@ function ChatBubble({
|
|
|
2479
2640
|
className
|
|
2480
2641
|
}) {
|
|
2481
2642
|
const content = children ?? message;
|
|
2482
|
-
return /* @__PURE__ */ (0,
|
|
2643
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
2483
2644
|
"div",
|
|
2484
2645
|
{
|
|
2485
2646
|
className: `malix-chat-bubble-row${className ? ` ${className}` : ""}`,
|
|
2486
2647
|
"data-variant": variant,
|
|
2487
2648
|
children: [
|
|
2488
|
-
/* @__PURE__ */ (0,
|
|
2489
|
-
variant === "user" && avatarInitials ? /* @__PURE__ */ (0,
|
|
2649
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "malix-chat-bubble", "data-variant": variant, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "malix-chat-bubble__text", children: content }) }),
|
|
2650
|
+
variant === "user" && avatarInitials ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "malix-chat-bubble__avatar", children: avatarInitials }) : null
|
|
2490
2651
|
]
|
|
2491
2652
|
}
|
|
2492
2653
|
);
|
|
2493
2654
|
}
|
|
2494
2655
|
|
|
2495
2656
|
// src/components/AIAssistantPanel.tsx
|
|
2496
|
-
var
|
|
2497
|
-
var
|
|
2657
|
+
var import_react16 = require("react");
|
|
2658
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
2498
2659
|
function AIAssistantPanel({
|
|
2499
2660
|
title = "AI Assistant",
|
|
2500
2661
|
messages,
|
|
@@ -2505,9 +2666,9 @@ function AIAssistantPanel({
|
|
|
2505
2666
|
disabled,
|
|
2506
2667
|
className
|
|
2507
2668
|
}) {
|
|
2508
|
-
const [draft, setDraft] = (0,
|
|
2509
|
-
const bodyRef = (0,
|
|
2510
|
-
(0,
|
|
2669
|
+
const [draft, setDraft] = (0, import_react16.useState)("");
|
|
2670
|
+
const bodyRef = (0, import_react16.useRef)(null);
|
|
2671
|
+
(0, import_react16.useEffect)(() => {
|
|
2511
2672
|
if (bodyRef.current) {
|
|
2512
2673
|
bodyRef.current.scrollTop = bodyRef.current.scrollHeight;
|
|
2513
2674
|
}
|
|
@@ -2524,25 +2685,25 @@ function AIAssistantPanel({
|
|
|
2524
2685
|
handleSend();
|
|
2525
2686
|
}
|
|
2526
2687
|
};
|
|
2527
|
-
return /* @__PURE__ */ (0,
|
|
2528
|
-
/* @__PURE__ */ (0,
|
|
2529
|
-
/* @__PURE__ */ (0,
|
|
2530
|
-
/* @__PURE__ */ (0,
|
|
2531
|
-
onClose ? /* @__PURE__ */ (0,
|
|
2688
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: `malix-ai-panel${className ? ` ${className}` : ""}`, children: [
|
|
2689
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "malix-ai-panel__header", children: [
|
|
2690
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "malix-ai-panel__logo", children: /* @__PURE__ */ (0, import_jsx_runtime53.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_runtime53.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" }) }) }),
|
|
2691
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "malix-ai-panel__title", children: title }),
|
|
2692
|
+
onClose ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
2532
2693
|
"button",
|
|
2533
2694
|
{
|
|
2534
2695
|
type: "button",
|
|
2535
2696
|
className: "malix-ai-panel__close",
|
|
2536
2697
|
onClick: onClose,
|
|
2537
2698
|
"aria-label": "Close assistant",
|
|
2538
|
-
children: /* @__PURE__ */ (0,
|
|
2539
|
-
/* @__PURE__ */ (0,
|
|
2540
|
-
/* @__PURE__ */ (0,
|
|
2699
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2700
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M18 6 6 18" }),
|
|
2701
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "m6 6 12 12" })
|
|
2541
2702
|
] })
|
|
2542
2703
|
}
|
|
2543
2704
|
) : null
|
|
2544
2705
|
] }),
|
|
2545
|
-
/* @__PURE__ */ (0,
|
|
2706
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "malix-ai-panel__body", ref: bodyRef, children: messages.map((msg) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
2546
2707
|
ChatBubble,
|
|
2547
2708
|
{
|
|
2548
2709
|
variant: msg.variant,
|
|
@@ -2551,8 +2712,8 @@ function AIAssistantPanel({
|
|
|
2551
2712
|
},
|
|
2552
2713
|
msg.id
|
|
2553
2714
|
)) }),
|
|
2554
|
-
/* @__PURE__ */ (0,
|
|
2555
|
-
/* @__PURE__ */ (0,
|
|
2715
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "malix-ai-panel__footer", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "malix-ai-panel__input-row", children: [
|
|
2716
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
2556
2717
|
"input",
|
|
2557
2718
|
{
|
|
2558
2719
|
type: "text",
|
|
@@ -2565,7 +2726,7 @@ function AIAssistantPanel({
|
|
|
2565
2726
|
"aria-label": placeholder
|
|
2566
2727
|
}
|
|
2567
2728
|
),
|
|
2568
|
-
/* @__PURE__ */ (0,
|
|
2729
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
2569
2730
|
"button",
|
|
2570
2731
|
{
|
|
2571
2732
|
type: "button",
|
|
@@ -2573,9 +2734,9 @@ function AIAssistantPanel({
|
|
|
2573
2734
|
onClick: handleSend,
|
|
2574
2735
|
disabled: disabled || !draft.trim(),
|
|
2575
2736
|
"aria-label": "Send message",
|
|
2576
|
-
children: /* @__PURE__ */ (0,
|
|
2577
|
-
/* @__PURE__ */ (0,
|
|
2578
|
-
/* @__PURE__ */ (0,
|
|
2737
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
2738
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "M12 19V5" }),
|
|
2739
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { d: "m5 12 7-7 7 7" })
|
|
2579
2740
|
] })
|
|
2580
2741
|
}
|
|
2581
2742
|
)
|
|
@@ -2584,9 +2745,9 @@ function AIAssistantPanel({
|
|
|
2584
2745
|
}
|
|
2585
2746
|
|
|
2586
2747
|
// src/theme.ts
|
|
2587
|
-
var
|
|
2748
|
+
var import_react17 = require("react");
|
|
2588
2749
|
var STORAGE_KEY = "malix-theme";
|
|
2589
|
-
var MalixThemeContext = (0,
|
|
2750
|
+
var MalixThemeContext = (0, import_react17.createContext)(null);
|
|
2590
2751
|
function getSystemTheme() {
|
|
2591
2752
|
if (typeof window === "undefined") return "light";
|
|
2592
2753
|
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
@@ -2609,8 +2770,8 @@ function applyTheme(resolved) {
|
|
|
2609
2770
|
root.setAttribute("data-theme", resolved);
|
|
2610
2771
|
}
|
|
2611
2772
|
function MalixThemeProvider({ children, defaultTheme = "system" }) {
|
|
2612
|
-
const [theme, setThemeState] = (0,
|
|
2613
|
-
const setTheme = (0,
|
|
2773
|
+
const [theme, setThemeState] = (0, import_react17.useState)(() => getStoredTheme() ?? defaultTheme);
|
|
2774
|
+
const setTheme = (0, import_react17.useCallback)((next) => {
|
|
2614
2775
|
setThemeState(next);
|
|
2615
2776
|
try {
|
|
2616
2777
|
localStorage.setItem(STORAGE_KEY, next);
|
|
@@ -2618,7 +2779,7 @@ function MalixThemeProvider({ children, defaultTheme = "system" }) {
|
|
|
2618
2779
|
}
|
|
2619
2780
|
applyTheme(resolveTheme(next));
|
|
2620
2781
|
}, []);
|
|
2621
|
-
const toggleTheme = (0,
|
|
2782
|
+
const toggleTheme = (0, import_react17.useCallback)(() => {
|
|
2622
2783
|
setThemeState((prev) => {
|
|
2623
2784
|
const resolved = resolveTheme(prev);
|
|
2624
2785
|
const next = resolved === "dark" ? "light" : "dark";
|
|
@@ -2630,26 +2791,51 @@ function MalixThemeProvider({ children, defaultTheme = "system" }) {
|
|
|
2630
2791
|
return next;
|
|
2631
2792
|
});
|
|
2632
2793
|
}, []);
|
|
2633
|
-
(0,
|
|
2794
|
+
(0, import_react17.useEffect)(() => {
|
|
2634
2795
|
applyTheme(resolveTheme(theme));
|
|
2635
2796
|
}, [theme]);
|
|
2636
|
-
(0,
|
|
2797
|
+
(0, import_react17.useEffect)(() => {
|
|
2637
2798
|
if (theme !== "system") return;
|
|
2638
2799
|
const mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
2639
2800
|
const handler = () => applyTheme(getSystemTheme());
|
|
2640
2801
|
mq.addEventListener("change", handler);
|
|
2641
2802
|
return () => mq.removeEventListener("change", handler);
|
|
2642
2803
|
}, [theme]);
|
|
2643
|
-
const value = (0,
|
|
2644
|
-
return (0,
|
|
2804
|
+
const value = (0, import_react17.useMemo)(() => ({ theme, setTheme, toggleTheme }), [theme, setTheme, toggleTheme]);
|
|
2805
|
+
return (0, import_react17.createElement)(MalixThemeContext.Provider, { value }, children);
|
|
2645
2806
|
}
|
|
2646
2807
|
function useMalixTheme() {
|
|
2647
|
-
const ctx = (0,
|
|
2808
|
+
const ctx = (0, import_react17.useContext)(MalixThemeContext);
|
|
2648
2809
|
if (!ctx) {
|
|
2649
2810
|
throw new Error("useMalixTheme must be used within a MalixThemeProvider");
|
|
2650
2811
|
}
|
|
2651
2812
|
return ctx;
|
|
2652
2813
|
}
|
|
2814
|
+
|
|
2815
|
+
// src/components/Icon.tsx
|
|
2816
|
+
var import_react18 = require("react");
|
|
2817
|
+
var SIZE_MAP = {
|
|
2818
|
+
xs: 12,
|
|
2819
|
+
sm: 14,
|
|
2820
|
+
md: 16,
|
|
2821
|
+
lg: 20,
|
|
2822
|
+
xl: 24
|
|
2823
|
+
};
|
|
2824
|
+
function resolveSize(size) {
|
|
2825
|
+
return typeof size === "number" ? size : SIZE_MAP[size];
|
|
2826
|
+
}
|
|
2827
|
+
var Icon = (0, import_react18.forwardRef)(function Icon2({ as: Component, size = "md", label, ...props }, ref) {
|
|
2828
|
+
const pixelSize = resolveSize(size);
|
|
2829
|
+
const a11y = label ? { role: "img", "aria-label": label } : { "aria-hidden": true, focusable: false };
|
|
2830
|
+
return (0, import_react18.createElement)(Component, {
|
|
2831
|
+
ref,
|
|
2832
|
+
width: pixelSize,
|
|
2833
|
+
height: pixelSize,
|
|
2834
|
+
color: "currentColor",
|
|
2835
|
+
...a11y,
|
|
2836
|
+
...props
|
|
2837
|
+
});
|
|
2838
|
+
});
|
|
2653
2839
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2654
2840
|
0 && (module.exports = {
|
|
2655
2841
|
AIAssistantPanel,
|
|
@@ -2667,6 +2853,7 @@ function useMalixTheme() {
|
|
|
2667
2853
|
CreditsIndicator,
|
|
2668
2854
|
DataTable,
|
|
2669
2855
|
DateInput,
|
|
2856
|
+
Dialog,
|
|
2670
2857
|
Divider,
|
|
2671
2858
|
Dropzone,
|
|
2672
2859
|
EmptyState,
|
|
@@ -2675,6 +2862,7 @@ function useMalixTheme() {
|
|
|
2675
2862
|
FlyoutMenu,
|
|
2676
2863
|
GlassPopover,
|
|
2677
2864
|
Header,
|
|
2865
|
+
Icon,
|
|
2678
2866
|
Input,
|
|
2679
2867
|
InputGroup,
|
|
2680
2868
|
LanguageSelector,
|