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