@camtomlabs/malix-design-system 0.1.6 → 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/README.md +39 -0
- package/dist/index.cjs +472 -217
- package/dist/index.d.cts +148 -80
- package/dist/index.d.ts +148 -80
- package/dist/index.js +470 -218
- package/package.json +15 -9
- package/src/styles.css +225 -55
- package/src/tokens.css +84 -18
- package/src/tokens.registry.json +34 -0
- package/stylelint.config.cjs +56 -0
- package/tailwind.preset.js +173 -0
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
|
-
|
|
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/
|
|
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,
|
|
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,
|
|
1256
|
-
title ? /* @__PURE__ */ (0,
|
|
1257
|
-
onClose ? /* @__PURE__ */ (0,
|
|
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,
|
|
1265
|
-
/* @__PURE__ */ (0,
|
|
1266
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
1279
|
-
var
|
|
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,
|
|
1289
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1305
|
-
/* @__PURE__ */ (0,
|
|
1306
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
1348
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1539
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1356
1540
|
var defaultIcons = {
|
|
1357
|
-
info: /* @__PURE__ */ (0,
|
|
1358
|
-
/* @__PURE__ */ (0,
|
|
1359
|
-
/* @__PURE__ */ (0,
|
|
1360
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1363
|
-
/* @__PURE__ */ (0,
|
|
1364
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1367
|
-
/* @__PURE__ */ (0,
|
|
1368
|
-
/* @__PURE__ */ (0,
|
|
1369
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1372
|
-
/* @__PURE__ */ (0,
|
|
1373
|
-
/* @__PURE__ */ (0,
|
|
1374
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1394
|
-
/* @__PURE__ */ (0,
|
|
1395
|
-
onClose ? /* @__PURE__ */ (0,
|
|
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,
|
|
1403
|
-
/* @__PURE__ */ (0,
|
|
1404
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1670
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "malix-checkbox-row", children: [
|
|
1487
1671
|
checkbox,
|
|
1488
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
1713
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("label", { className: "malix-radio-row", children: [
|
|
1530
1714
|
radio,
|
|
1531
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
1569
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
1605
|
-
options.map((opt) => /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
1825
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "malix-select-group__label", children: label }) : null,
|
|
1642
1826
|
children,
|
|
1643
|
-
helperText ? /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
1913
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
1730
1914
|
function ChevronLeft() {
|
|
1731
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1946
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ChevronLeft, {})
|
|
1763
1947
|
}
|
|
1764
1948
|
),
|
|
1765
|
-
variant === "full" ? pages.map((page) => /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
1814
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1822
|
-
var
|
|
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,
|
|
1833
|
-
const inputRef = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1898
|
-
/* @__PURE__ */ (0,
|
|
1899
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1904
|
-
/* @__PURE__ */ (0,
|
|
1905
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1913
|
-
var
|
|
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,
|
|
1924
|
-
const containerRef = (0,
|
|
1925
|
-
const dragging = (0,
|
|
1926
|
-
const onMouseDown = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
1956
|
-
leftTitle ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1971
|
-
/* @__PURE__ */ (0,
|
|
1972
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1977
|
-
rightTitle ? /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
2007
|
-
/* @__PURE__ */ (0,
|
|
2008
|
-
/* @__PURE__ */ (0,
|
|
2009
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2012
|
-
/* @__PURE__ */ (0,
|
|
2013
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2210
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("polyline", { points: "20 6 9 17 4 12" })
|
|
2027
2211
|
}
|
|
2028
2212
|
),
|
|
2029
|
-
/* @__PURE__ */ (0,
|
|
2213
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: feature })
|
|
2030
2214
|
] }, i)) }),
|
|
2031
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
2073
|
-
/* @__PURE__ */ (0,
|
|
2074
|
-
/* @__PURE__ */ (0,
|
|
2075
|
-
onSkip ? /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
2126
|
-
/* @__PURE__ */ (0,
|
|
2127
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2132
|
-
/* @__PURE__ */ (0,
|
|
2133
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
2170
|
-
/* @__PURE__ */ (0,
|
|
2171
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
2186
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
2224
|
-
avatar ? /* @__PURE__ */ (0,
|
|
2225
|
-
/* @__PURE__ */ (0,
|
|
2226
|
-
/* @__PURE__ */ (0,
|
|
2227
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2231
|
-
/* @__PURE__ */ (0,
|
|
2232
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2235
|
-
/* @__PURE__ */ (0,
|
|
2236
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2245
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2252
|
-
/* @__PURE__ */ (0,
|
|
2253
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
2273
|
-
/* @__PURE__ */ (0,
|
|
2274
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
2305
|
-
variant === "user" && avatarInitials ? /* @__PURE__ */ (0,
|
|
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
|
|
2313
|
-
var
|
|
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,
|
|
2325
|
-
const bodyRef = (0,
|
|
2326
|
-
(0,
|
|
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,
|
|
2344
|
-
/* @__PURE__ */ (0,
|
|
2345
|
-
/* @__PURE__ */ (0,
|
|
2346
|
-
/* @__PURE__ */ (0,
|
|
2347
|
-
onClose ? /* @__PURE__ */ (0,
|
|
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,
|
|
2355
|
-
/* @__PURE__ */ (0,
|
|
2356
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
2371
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
2393
|
-
/* @__PURE__ */ (0,
|
|
2394
|
-
/* @__PURE__ */ (0,
|
|
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
|
});
|