@rufous/ui 0.3.36 → 0.3.38

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.
Files changed (3) hide show
  1. package/dist/main.cjs +1435 -1115
  2. package/dist/main.js +349 -49
  3. package/package.json +2 -2
package/dist/main.js CHANGED
@@ -1355,7 +1355,290 @@ IconButton.displayName = "IconButton";
1355
1355
  import * as React65 from "react";
1356
1356
  import { useState as useState2, useContext, useEffect as useEffect2, useRef as useRef3, useCallback } from "react";
1357
1357
  import ReactDOM from "react-dom";
1358
- import { X } from "lucide-react";
1358
+
1359
+ // node_modules/lucide-react/dist/esm/createLucideIcon.js
1360
+ import { forwardRef as forwardRef4, createElement as createElement54 } from "react";
1361
+
1362
+ // node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
1363
+ var mergeClasses = (...classes) => classes.filter((className, index, array) => {
1364
+ return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
1365
+ }).join(" ").trim();
1366
+
1367
+ // node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js
1368
+ var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
1369
+
1370
+ // node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js
1371
+ var toCamelCase = (string) => string.replace(
1372
+ /^([A-Z])|[\s-_]+(\w)/g,
1373
+ (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
1374
+ );
1375
+
1376
+ // node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js
1377
+ var toPascalCase = (string) => {
1378
+ const camelCase = toCamelCase(string);
1379
+ return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
1380
+ };
1381
+
1382
+ // node_modules/lucide-react/dist/esm/Icon.js
1383
+ import { forwardRef as forwardRef3, createElement as createElement53 } from "react";
1384
+
1385
+ // node_modules/lucide-react/dist/esm/defaultAttributes.js
1386
+ var defaultAttributes = {
1387
+ xmlns: "http://www.w3.org/2000/svg",
1388
+ width: 24,
1389
+ height: 24,
1390
+ viewBox: "0 0 24 24",
1391
+ fill: "none",
1392
+ stroke: "currentColor",
1393
+ strokeWidth: 2,
1394
+ strokeLinecap: "round",
1395
+ strokeLinejoin: "round"
1396
+ };
1397
+
1398
+ // node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js
1399
+ var hasA11yProp = (props) => {
1400
+ for (const prop in props) {
1401
+ if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
1402
+ return true;
1403
+ }
1404
+ }
1405
+ return false;
1406
+ };
1407
+
1408
+ // node_modules/lucide-react/dist/esm/Icon.js
1409
+ var Icon = forwardRef3(
1410
+ ({
1411
+ color = "currentColor",
1412
+ size = 24,
1413
+ strokeWidth = 2,
1414
+ absoluteStrokeWidth,
1415
+ className = "",
1416
+ children,
1417
+ iconNode,
1418
+ ...rest
1419
+ }, ref) => createElement53(
1420
+ "svg",
1421
+ {
1422
+ ref,
1423
+ ...defaultAttributes,
1424
+ width: size,
1425
+ height: size,
1426
+ stroke: color,
1427
+ strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
1428
+ className: mergeClasses("lucide", className),
1429
+ ...!children && !hasA11yProp(rest) && { "aria-hidden": "true" },
1430
+ ...rest
1431
+ },
1432
+ [
1433
+ ...iconNode.map(([tag, attrs]) => createElement53(tag, attrs)),
1434
+ ...Array.isArray(children) ? children : [children]
1435
+ ]
1436
+ )
1437
+ );
1438
+
1439
+ // node_modules/lucide-react/dist/esm/createLucideIcon.js
1440
+ var createLucideIcon = (iconName, iconNode) => {
1441
+ const Component = forwardRef4(
1442
+ ({ className, ...props }, ref) => createElement54(Icon, {
1443
+ ref,
1444
+ iconNode,
1445
+ className: mergeClasses(
1446
+ `lucide-${toKebabCase(toPascalCase(iconName))}`,
1447
+ `lucide-${iconName}`,
1448
+ className
1449
+ ),
1450
+ ...props
1451
+ })
1452
+ );
1453
+ Component.displayName = toPascalCase(iconName);
1454
+ return Component;
1455
+ };
1456
+
1457
+ // node_modules/lucide-react/dist/esm/icons/arrow-down.js
1458
+ var __iconNode = [
1459
+ ["path", { d: "M12 5v14", key: "s699le" }],
1460
+ ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
1461
+ ];
1462
+ var ArrowDown = createLucideIcon("arrow-down", __iconNode);
1463
+
1464
+ // node_modules/lucide-react/dist/esm/icons/arrow-up.js
1465
+ var __iconNode2 = [
1466
+ ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
1467
+ ["path", { d: "M12 19V5", key: "x0mq9r" }]
1468
+ ];
1469
+ var ArrowUp = createLucideIcon("arrow-up", __iconNode2);
1470
+
1471
+ // node_modules/lucide-react/dist/esm/icons/check.js
1472
+ var __iconNode3 = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
1473
+ var Check = createLucideIcon("check", __iconNode3);
1474
+
1475
+ // node_modules/lucide-react/dist/esm/icons/chevron-down.js
1476
+ var __iconNode4 = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
1477
+ var ChevronDown = createLucideIcon("chevron-down", __iconNode4);
1478
+
1479
+ // node_modules/lucide-react/dist/esm/icons/chevron-left.js
1480
+ var __iconNode5 = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
1481
+ var ChevronLeft = createLucideIcon("chevron-left", __iconNode5);
1482
+
1483
+ // node_modules/lucide-react/dist/esm/icons/chevron-right.js
1484
+ var __iconNode6 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
1485
+ var ChevronRight = createLucideIcon("chevron-right", __iconNode6);
1486
+
1487
+ // node_modules/lucide-react/dist/esm/icons/chevron-up.js
1488
+ var __iconNode7 = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
1489
+ var ChevronUp = createLucideIcon("chevron-up", __iconNode7);
1490
+
1491
+ // node_modules/lucide-react/dist/esm/icons/chevrons-up-down.js
1492
+ var __iconNode8 = [
1493
+ ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
1494
+ ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
1495
+ ];
1496
+ var ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode8);
1497
+
1498
+ // node_modules/lucide-react/dist/esm/icons/columns-2.js
1499
+ var __iconNode9 = [
1500
+ ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
1501
+ ["path", { d: "M12 3v18", key: "108xh3" }]
1502
+ ];
1503
+ var Columns2 = createLucideIcon("columns-2", __iconNode9);
1504
+
1505
+ // node_modules/lucide-react/dist/esm/icons/download.js
1506
+ var __iconNode10 = [
1507
+ ["path", { d: "M12 15V3", key: "m9g1x1" }],
1508
+ ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
1509
+ ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
1510
+ ];
1511
+ var Download = createLucideIcon("download", __iconNode10);
1512
+
1513
+ // node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js
1514
+ var __iconNode11 = [
1515
+ ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
1516
+ ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
1517
+ ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
1518
+ ];
1519
+ var EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode11);
1520
+
1521
+ // node_modules/lucide-react/dist/esm/icons/eye-off.js
1522
+ var __iconNode12 = [
1523
+ [
1524
+ "path",
1525
+ {
1526
+ d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
1527
+ key: "ct8e1f"
1528
+ }
1529
+ ],
1530
+ ["path", { d: "M14.084 14.158a3 3 0 0 1-4.242-4.242", key: "151rxh" }],
1531
+ [
1532
+ "path",
1533
+ {
1534
+ d: "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",
1535
+ key: "13bj9a"
1536
+ }
1537
+ ],
1538
+ ["path", { d: "m2 2 20 20", key: "1ooewy" }]
1539
+ ];
1540
+ var EyeOff = createLucideIcon("eye-off", __iconNode12);
1541
+
1542
+ // node_modules/lucide-react/dist/esm/icons/eye.js
1543
+ var __iconNode13 = [
1544
+ [
1545
+ "path",
1546
+ {
1547
+ d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",
1548
+ key: "1nclc0"
1549
+ }
1550
+ ],
1551
+ ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
1552
+ ];
1553
+ var Eye = createLucideIcon("eye", __iconNode13);
1554
+
1555
+ // node_modules/lucide-react/dist/esm/icons/funnel.js
1556
+ var __iconNode14 = [
1557
+ [
1558
+ "path",
1559
+ {
1560
+ d: "M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",
1561
+ key: "sc7q7i"
1562
+ }
1563
+ ]
1564
+ ];
1565
+ var Funnel = createLucideIcon("funnel", __iconNode14);
1566
+
1567
+ // node_modules/lucide-react/dist/esm/icons/layers.js
1568
+ var __iconNode15 = [
1569
+ [
1570
+ "path",
1571
+ {
1572
+ d: "M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",
1573
+ key: "zw3jo"
1574
+ }
1575
+ ],
1576
+ [
1577
+ "path",
1578
+ {
1579
+ d: "M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",
1580
+ key: "1wduqc"
1581
+ }
1582
+ ],
1583
+ [
1584
+ "path",
1585
+ {
1586
+ d: "M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",
1587
+ key: "kqbvx6"
1588
+ }
1589
+ ]
1590
+ ];
1591
+ var Layers = createLucideIcon("layers", __iconNode15);
1592
+
1593
+ // node_modules/lucide-react/dist/esm/icons/minus.js
1594
+ var __iconNode16 = [["path", { d: "M5 12h14", key: "1ays0h" }]];
1595
+ var Minus = createLucideIcon("minus", __iconNode16);
1596
+
1597
+ // node_modules/lucide-react/dist/esm/icons/pin.js
1598
+ var __iconNode17 = [
1599
+ ["path", { d: "M12 17v5", key: "bb1du9" }],
1600
+ [
1601
+ "path",
1602
+ {
1603
+ d: "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",
1604
+ key: "1nkz8b"
1605
+ }
1606
+ ]
1607
+ ];
1608
+ var Pin = createLucideIcon("pin", __iconNode17);
1609
+
1610
+ // node_modules/lucide-react/dist/esm/icons/plus.js
1611
+ var __iconNode18 = [
1612
+ ["path", { d: "M5 12h14", key: "1ays0h" }],
1613
+ ["path", { d: "M12 5v14", key: "s699le" }]
1614
+ ];
1615
+ var Plus = createLucideIcon("plus", __iconNode18);
1616
+
1617
+ // node_modules/lucide-react/dist/esm/icons/search.js
1618
+ var __iconNode19 = [
1619
+ ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
1620
+ ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
1621
+ ];
1622
+ var Search = createLucideIcon("search", __iconNode19);
1623
+
1624
+ // node_modules/lucide-react/dist/esm/icons/trash-2.js
1625
+ var __iconNode20 = [
1626
+ ["path", { d: "M10 11v6", key: "nco0om" }],
1627
+ ["path", { d: "M14 11v6", key: "outv1u" }],
1628
+ ["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
1629
+ ["path", { d: "M3 6h18", key: "d0wm0j" }],
1630
+ ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
1631
+ ];
1632
+ var Trash2 = createLucideIcon("trash-2", __iconNode20);
1633
+
1634
+ // node_modules/lucide-react/dist/esm/icons/x.js
1635
+ var __iconNode21 = [
1636
+ ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
1637
+ ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
1638
+ ];
1639
+ var X = createLucideIcon("x", __iconNode21);
1640
+
1641
+ // lib/Dialogs/BaseDialog.tsx
1359
1642
  var DialogDepthContext = React65.createContext(0);
1360
1643
  var BaseDialog = ({
1361
1644
  open = false,
@@ -1644,7 +1927,7 @@ var Checkbox = ({
1644
1927
 
1645
1928
  // lib/TextFields/TextField.tsx
1646
1929
  import React68, {
1647
- forwardRef as forwardRef3
1930
+ forwardRef as forwardRef5
1648
1931
  } from "react";
1649
1932
  var NUMBER_BLOCKED_KEYS = ["e", "E", "+", "-"];
1650
1933
  var BLOCKED_KEYS_BY_VARIANT = {
@@ -1659,7 +1942,7 @@ var STEP_BY_VARIANT = {
1659
1942
  "positive-integer": 1,
1660
1943
  "positive-decimal": 0.1
1661
1944
  };
1662
- var TextField = forwardRef3(({
1945
+ var TextField = forwardRef5(({
1663
1946
  label,
1664
1947
  name,
1665
1948
  id,
@@ -4466,27 +4749,6 @@ var RufousLogoLoader = ({ size = 80, sx, className }) => {
4466
4749
  // lib/DataGrid/DataGrid.tsx
4467
4750
  import React75, { useState as useState9, useMemo as useMemo2, useRef as useRef10, useEffect as useEffect9 } from "react";
4468
4751
  import ReactDOM4 from "react-dom";
4469
- import {
4470
- ChevronUp,
4471
- ChevronDown,
4472
- Search,
4473
- Download,
4474
- MoreVertical,
4475
- ChevronLeft,
4476
- ChevronRight,
4477
- Filter,
4478
- X as X2,
4479
- Pin,
4480
- EyeOff,
4481
- Eye,
4482
- Columns,
4483
- ArrowUp,
4484
- ArrowDown,
4485
- Trash2,
4486
- Plus,
4487
- ChevronsUpDown,
4488
- Layers
4489
- } from "lucide-react";
4490
4752
  function OverflowTooltip({ content }) {
4491
4753
  const ref = useRef10(null);
4492
4754
  const [pos, setPos] = useState9(null);
@@ -5224,14 +5486,14 @@ function DataGrid({
5224
5486
  className: `dg-icon-btn ${hasActiveFilters ? "active" : ""}`,
5225
5487
  onClick: () => setShowAdvancedFilter(true)
5226
5488
  },
5227
- /* @__PURE__ */ React75.createElement(Filter, { size: 16 })
5489
+ /* @__PURE__ */ React75.createElement(Funnel, { size: 16 })
5228
5490
  )), showColumnsBtn && /* @__PURE__ */ React75.createElement(Tooltip, { title: "Manage Columns", placement: "top" }, /* @__PURE__ */ React75.createElement(
5229
5491
  "button",
5230
5492
  {
5231
5493
  className: "dg-icon-btn",
5232
5494
  onClick: () => setShowManageColumns(true)
5233
5495
  },
5234
- /* @__PURE__ */ React75.createElement(Columns, { size: 16 })
5496
+ /* @__PURE__ */ React75.createElement(Columns2, { size: 16 })
5235
5497
  )), showExportBtn && /* @__PURE__ */ React75.createElement("button", { className: "dg-action-btn", onClick: handleExport }, /* @__PURE__ */ React75.createElement(Download, { size: 14 }), " Export CSV")), headerActions && /* @__PURE__ */ React75.createElement("div", { className: `dg-header-slot ${alignClass(headerActions.align)}` }, headerActions.content))), !tOpts.hideHeader && /* @__PURE__ */ React75.createElement("div", { className: `dg-toolbar ${alignClass(toolbarContent?.align)}` }, toolbarContent?.content || ""), isGroupingActive && /* @__PURE__ */ React75.createElement("div", { className: "dg-grouping-bar" }, /* @__PURE__ */ React75.createElement("span", { className: "dg-grouping-bar-label" }, "Grouped by"), activeGroupingModel.map((gField) => {
5236
5498
  const col = resolvedColumns.find((c) => String(c.field) === gField || String(c.key) === gField);
5237
5499
  return /* @__PURE__ */ React75.createElement("div", { key: gField, className: "dg-group-chip" }, /* @__PURE__ */ React75.createElement(Layers, { size: 11 }), /* @__PURE__ */ React75.createElement("span", null, col?.header ?? col?.headerName ?? gField), !disableRowGrouping && /* @__PURE__ */ React75.createElement(
@@ -5241,7 +5503,7 @@ function DataGrid({
5241
5503
  onClick: () => removeFromGrouping(gField),
5242
5504
  title: `Remove grouping by ${col?.header ?? gField}`
5243
5505
  },
5244
- /* @__PURE__ */ React75.createElement(X2, { size: 10 })
5506
+ /* @__PURE__ */ React75.createElement(X, { size: 10 })
5245
5507
  ));
5246
5508
  })), /* @__PURE__ */ React75.createElement("div", { className: `dg-table-wrap${filteredData.length === 0 && !loading ? " dg-table-wrap--empty" : ""} ${tOpts.hideHeader ? "rm-top-border" : ""} ${tOpts.hideFooter ? "rm-bottom-border" : ""}` }, loading && /* @__PURE__ */ React75.createElement("div", { className: "dg-loading-overlay" }, /* @__PURE__ */ React75.createElement("div", { className: "dg-loading-spinner" })), /* @__PURE__ */ React75.createElement("table", { className: "dg-table" }, /* @__PURE__ */ React75.createElement("thead", null, /* @__PURE__ */ React75.createElement("tr", null, visibleColumns.map((col, idx) => {
5247
5509
  const colField = String(col.field);
@@ -5276,14 +5538,14 @@ function DataGrid({
5276
5538
  setShowAdvancedFilter(true);
5277
5539
  }
5278
5540
  },
5279
- /* @__PURE__ */ React75.createElement(Filter, { size: 11 })
5541
+ /* @__PURE__ */ React75.createElement(Funnel, { size: 11 })
5280
5542
  ), !col.disableColumnMenu && /* @__PURE__ */ React75.createElement(
5281
5543
  "button",
5282
5544
  {
5283
5545
  className: "dg-th-menu-btn",
5284
5546
  onClick: (e) => handleMenuOpen(e, colField)
5285
5547
  },
5286
- /* @__PURE__ */ React75.createElement(MoreVertical, { size: 13 })
5548
+ /* @__PURE__ */ React75.createElement(EllipsisVertical, { size: 13 })
5287
5549
  ), /* @__PURE__ */ React75.createElement(
5288
5550
  "div",
5289
5551
  {
@@ -5480,7 +5742,7 @@ function DataGrid({
5480
5742
  }
5481
5743
  setShowAdvancedFilter(true);
5482
5744
  setActiveMenu(null);
5483
- } }, /* @__PURE__ */ React75.createElement(Filter, { size: 14 }), " Filter\u2026"),
5745
+ } }, /* @__PURE__ */ React75.createElement(Funnel, { size: 14 }), " Filter\u2026"),
5484
5746
  !disableRowGrouping && activeMenuCol?.groupable !== false && (() => {
5485
5747
  const gField = String(activeMenuCol?.field ?? "");
5486
5748
  const isGrouped = activeGroupingModel.includes(gField);
@@ -5496,8 +5758,8 @@ function DataGrid({
5496
5758
  /* @__PURE__ */ React75.createElement("button", { className: "dg-menu-item", onClick: () => {
5497
5759
  setShowManageColumns(true);
5498
5760
  setActiveMenu(null);
5499
- } }, /* @__PURE__ */ React75.createElement(Columns, { size: 14 }), " Manage columns")
5500
- ), showManageColumns && /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-overlay", onClick: () => setShowManageColumns(false) }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-header" }, /* @__PURE__ */ React75.createElement("h3", null, "Manage Columns"), /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: () => setShowManageColumns(false) }, /* @__PURE__ */ React75.createElement(X2, { size: 18 }))), /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-body" }, /* @__PURE__ */ React75.createElement("div", { className: "dg-search-wrap", style: { marginBottom: 8 } }, /* @__PURE__ */ React75.createElement(Search, { size: 14 }), /* @__PURE__ */ React75.createElement(
5761
+ } }, /* @__PURE__ */ React75.createElement(Columns2, { size: 14 }), " Manage columns")
5762
+ ), showManageColumns && /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-overlay", onClick: () => setShowManageColumns(false) }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-header" }, /* @__PURE__ */ React75.createElement("h3", null, "Manage Columns"), /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: () => setShowManageColumns(false) }, /* @__PURE__ */ React75.createElement(X, { size: 18 }))), /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-body" }, /* @__PURE__ */ React75.createElement("div", { className: "dg-search-wrap", style: { marginBottom: 8 } }, /* @__PURE__ */ React75.createElement(Search, { size: 14 }), /* @__PURE__ */ React75.createElement(
5501
5763
  "input",
5502
5764
  {
5503
5765
  className: "dg-search",
@@ -5526,7 +5788,7 @@ function DataGrid({
5526
5788
  }
5527
5789
  });
5528
5790
  setColumnOverrides(newOverrides);
5529
- } }, "Hide All")))), showAdvancedFilter && /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-overlay", onClick: closeFilterModal }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal dg-modal-wide dg-filter-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-header" }, /* @__PURE__ */ React75.createElement("h3", null, "Filters"), /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: closeFilterModal }, /* @__PURE__ */ React75.createElement(X2, { size: 18 }))), /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-body" }, advancedFilters.map((f, idx) => /* @__PURE__ */ React75.createElement("div", { key: idx }, idx > 0 && /* @__PURE__ */ React75.createElement("div", { className: "dg-filter-logic" }, /* @__PURE__ */ React75.createElement(
5791
+ } }, "Hide All")))), showAdvancedFilter && /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-overlay", onClick: closeFilterModal }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal dg-modal-wide dg-filter-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-header" }, /* @__PURE__ */ React75.createElement("h3", null, "Filters"), /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: closeFilterModal }, /* @__PURE__ */ React75.createElement(X, { size: 18 }))), /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-body" }, advancedFilters.map((f, idx) => /* @__PURE__ */ React75.createElement("div", { key: idx }, idx > 0 && /* @__PURE__ */ React75.createElement("div", { className: "dg-filter-logic" }, /* @__PURE__ */ React75.createElement(
5530
5792
  "button",
5531
5793
  {
5532
5794
  className: `dg-logic-btn${f.logic === "AND" ? " active" : ""}`,
@@ -5540,7 +5802,7 @@ function DataGrid({
5540
5802
  onClick: () => setAdvancedFilters((p) => p.map((fi, i) => i === idx ? { ...fi, logic: "OR" } : fi))
5541
5803
  },
5542
5804
  "OR"
5543
- )), /* @__PURE__ */ React75.createElement("div", { className: "dg-filter-row" }, advancedFilters.length > 1 && /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: () => setAdvancedFilters((p) => p.filter((_, i) => i !== idx)) }, /* @__PURE__ */ React75.createElement(X2, { size: 14 })), /* @__PURE__ */ React75.createElement(
5805
+ )), /* @__PURE__ */ React75.createElement("div", { className: "dg-filter-row" }, advancedFilters.length > 1 && /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: () => setAdvancedFilters((p) => p.filter((_, i) => i !== idx)) }, /* @__PURE__ */ React75.createElement(X, { size: 14 })), /* @__PURE__ */ React75.createElement(
5544
5806
  FilterSelect,
5545
5807
  {
5546
5808
  value: f.column,
@@ -9015,7 +9277,7 @@ import React105, {
9015
9277
  useRef as useRef23,
9016
9278
  useEffect as useEffect19,
9017
9279
  useCallback as useCallback9,
9018
- forwardRef as forwardRef10
9280
+ forwardRef as forwardRef12
9019
9281
  } from "react";
9020
9282
  import { Country as Country2 } from "country-state-city";
9021
9283
  import { computePosition as computePosition2, flip, offset, shift, size as floatingSize } from "@floating-ui/dom";
@@ -9043,7 +9305,7 @@ function detectCountryFromValue(countries, digits) {
9043
9305
  }
9044
9306
  return null;
9045
9307
  }
9046
- var PhoneField = forwardRef10(function PhoneField2(props, ref) {
9308
+ var PhoneField = forwardRef12(function PhoneField2(props, ref) {
9047
9309
  const {
9048
9310
  value = "",
9049
9311
  onChange,
@@ -9324,7 +9586,6 @@ import React106, {
9324
9586
  useCallback as useCallback10
9325
9587
  } from "react";
9326
9588
  import ReactDOM11 from "react-dom";
9327
- import { ChevronDown as ChevronDown2, ChevronRight as ChevronRight2, X as X3, Search as Search2, Check, Minus } from "lucide-react";
9328
9589
  function nodeId(node) {
9329
9590
  return node.id ?? node._id;
9330
9591
  }
@@ -9423,7 +9684,7 @@ function TreeNodeItem({
9423
9684
  onToggleExpand(nid);
9424
9685
  }
9425
9686
  },
9426
- isExpanded ? /* @__PURE__ */ React106.createElement(ChevronDown2, { size: 14 }) : /* @__PURE__ */ React106.createElement(ChevronRight2, { size: 14 })
9687
+ isExpanded ? /* @__PURE__ */ React106.createElement(ChevronDown, { size: 14 }) : /* @__PURE__ */ React106.createElement(ChevronRight, { size: 14 })
9427
9688
  ) : /* @__PURE__ */ React106.createElement("span", { className: "rf-tsn__expand-ph" }),
9428
9689
  /* @__PURE__ */ React106.createElement("span", { className: "rf-tsn__label" }, node.label),
9429
9690
  /* @__PURE__ */ React106.createElement("span", { className: "rf-tsn__check", "aria-hidden": "true" }, state === "partial" ? /* @__PURE__ */ React106.createElement(Minus, { size: 13, strokeWidth: 2.5 }) : /* @__PURE__ */ React106.createElement(Check, { size: 13, strokeWidth: 2.5 }))
@@ -9659,7 +9920,7 @@ function TreeSelect({
9659
9920
  onClick: (e) => handleRemoveTag(e, node),
9660
9921
  tabIndex: -1
9661
9922
  },
9662
- /* @__PURE__ */ React106.createElement(X3, { size: 10 })
9923
+ /* @__PURE__ */ React106.createElement(X, { size: 10 })
9663
9924
  ))) : isFloating || !label ? /* @__PURE__ */ React106.createElement("span", { className: "rf-ts__placeholder" }, placeholder) : null) : /* @__PURE__ */ React106.createElement("div", { className: `rf-ts__display${!hasValue ? " rf-ts__display--placeholder" : ""}` }, hasValue ? tagNodes[0]?.label : isFloating || !label ? placeholder : "\xA0"),
9664
9925
  /* @__PURE__ */ React106.createElement("div", { className: "rf-autocomplete__endgroup" }, !disabled && clearable && hasValue && /* @__PURE__ */ React106.createElement(
9665
9926
  "button",
@@ -9669,7 +9930,7 @@ function TreeSelect({
9669
9930
  onClick: handleClear,
9670
9931
  tabIndex: -1
9671
9932
  },
9672
- /* @__PURE__ */ React106.createElement(X3, { size: 16 })
9933
+ /* @__PURE__ */ React106.createElement(X, { size: 16 })
9673
9934
  ), !disabled && /* @__PURE__ */ React106.createElement(
9674
9935
  "button",
9675
9936
  {
@@ -9681,7 +9942,7 @@ function TreeSelect({
9681
9942
  },
9682
9943
  tabIndex: -1
9683
9944
  },
9684
- /* @__PURE__ */ React106.createElement(ChevronDown2, { size: 18 })
9945
+ /* @__PURE__ */ React106.createElement(ChevronDown, { size: 18 })
9685
9946
  )),
9686
9947
  label && /* @__PURE__ */ React106.createElement("label", { className: "rf-text-field__label" }, label, required && /* @__PURE__ */ React106.createElement("span", { className: "rf-text-field__asterisk" }, " *")),
9687
9948
  variant === "outlined" && /* @__PURE__ */ React106.createElement("fieldset", { "aria-hidden": true, className: "rf-text-field__notch" }, /* @__PURE__ */ React106.createElement("legend", { className: "rf-text-field__legend" }, label && /* @__PURE__ */ React106.createElement("span", null, label, required ? " *" : ""))),
@@ -9695,7 +9956,7 @@ function TreeSelect({
9695
9956
  className: "rf-tree-select__popup",
9696
9957
  style: dropdownStyle
9697
9958
  },
9698
- filter && /* @__PURE__ */ React106.createElement("div", { className: "rf-tree-select__filter" }, /* @__PURE__ */ React106.createElement(Search2, { size: 14, className: "rf-tree-select__filter-icon" }), /* @__PURE__ */ React106.createElement(
9959
+ filter && /* @__PURE__ */ React106.createElement("div", { className: "rf-tree-select__filter" }, /* @__PURE__ */ React106.createElement(Search, { size: 14, className: "rf-tree-select__filter-icon" }), /* @__PURE__ */ React106.createElement(
9699
9960
  "input",
9700
9961
  {
9701
9962
  ref: filterInputRef,
@@ -9712,7 +9973,7 @@ function TreeSelect({
9712
9973
  onClick: () => setFilterQuery(""),
9713
9974
  tabIndex: -1
9714
9975
  },
9715
- /* @__PURE__ */ React106.createElement(X3, { size: 12 })
9976
+ /* @__PURE__ */ React106.createElement(X, { size: 12 })
9716
9977
  )),
9717
9978
  /* @__PURE__ */ React106.createElement("div", { className: "rf-tree-select__tree" }, filteredTree.length === 0 ? /* @__PURE__ */ React106.createElement("div", { className: "rf-tree-select__empty" }, "No results found") : filteredTree.map((node) => /* @__PURE__ */ React106.createElement(
9718
9979
  TreeNodeItem,
@@ -10130,8 +10391,8 @@ import { ReactRenderer } from "@tiptap/react";
10130
10391
  import tippy from "tippy.js";
10131
10392
 
10132
10393
  // lib/RufousTextEditor/MentionList.tsx
10133
- import React109, { forwardRef as forwardRef11, useEffect as useEffect22, useImperativeHandle, useState as useState27 } from "react";
10134
- var MentionList = forwardRef11((props, ref) => {
10394
+ import React109, { forwardRef as forwardRef13, useEffect as useEffect22, useImperativeHandle, useState as useState27 } from "react";
10395
+ var MentionList = forwardRef13((props, ref) => {
10135
10396
  const [selectedIndex, setSelectedIndex] = useState27(0);
10136
10397
  const selectItem = (index) => {
10137
10398
  const item = props.items[index];
@@ -10230,8 +10491,8 @@ import React115, { useState as useState32, useRef as useRef29, useEffect as useE
10230
10491
  import { createPortal as createPortal4 } from "react-dom";
10231
10492
 
10232
10493
  // lib/RufousTextEditor/TextToSpeech.tsx
10233
- import React110, { useState as useState28, useEffect as useEffect23, useRef as useRef26, useCallback as useCallback12, forwardRef as forwardRef12, useImperativeHandle as useImperativeHandle2 } from "react";
10234
- var TextToSpeech = forwardRef12(({ editor, onTextToSpeech }, ref) => {
10494
+ import React110, { useState as useState28, useEffect as useEffect23, useRef as useRef26, useCallback as useCallback12, forwardRef as forwardRef14, useImperativeHandle as useImperativeHandle2 } from "react";
10495
+ var TextToSpeech = forwardRef14(({ editor, onTextToSpeech }, ref) => {
10235
10496
  const [speaking, setSpeaking] = useState28(false);
10236
10497
  const [paused, setPaused] = useState28(false);
10237
10498
  const [voices, setVoices] = useState28([]);
@@ -10375,8 +10636,8 @@ var TextToSpeech = forwardRef12(({ editor, onTextToSpeech }, ref) => {
10375
10636
  var TextToSpeech_default = TextToSpeech;
10376
10637
 
10377
10638
  // lib/RufousTextEditor/SpeechToText.tsx
10378
- import React111, { useState as useState29, useRef as useRef27, useCallback as useCallback13, useEffect as useEffect24, forwardRef as forwardRef13, useImperativeHandle as useImperativeHandle3 } from "react";
10379
- var SpeechToText = forwardRef13(({ editor, onSpeechToText }, ref) => {
10639
+ import React111, { useState as useState29, useRef as useRef27, useCallback as useCallback13, useEffect as useEffect24, forwardRef as forwardRef15, useImperativeHandle as useImperativeHandle3 } from "react";
10640
+ var SpeechToText = forwardRef15(({ editor, onSpeechToText }, ref) => {
10380
10641
  const [listening, setListening] = useState29(false);
10381
10642
  const [showPanel, setShowPanel] = useState29(false);
10382
10643
  const [language, setLanguage] = useState29("en-US");
@@ -14312,3 +14573,42 @@ export {
14312
14573
  useRufousTheme,
14313
14574
  useStatesSearch
14314
14575
  };
14576
+ /*! Bundled license information:
14577
+
14578
+ lucide-react/dist/esm/shared/src/utils/mergeClasses.js:
14579
+ lucide-react/dist/esm/shared/src/utils/toKebabCase.js:
14580
+ lucide-react/dist/esm/shared/src/utils/toCamelCase.js:
14581
+ lucide-react/dist/esm/shared/src/utils/toPascalCase.js:
14582
+ lucide-react/dist/esm/defaultAttributes.js:
14583
+ lucide-react/dist/esm/shared/src/utils/hasA11yProp.js:
14584
+ lucide-react/dist/esm/Icon.js:
14585
+ lucide-react/dist/esm/createLucideIcon.js:
14586
+ lucide-react/dist/esm/icons/arrow-down.js:
14587
+ lucide-react/dist/esm/icons/arrow-up.js:
14588
+ lucide-react/dist/esm/icons/check.js:
14589
+ lucide-react/dist/esm/icons/chevron-down.js:
14590
+ lucide-react/dist/esm/icons/chevron-left.js:
14591
+ lucide-react/dist/esm/icons/chevron-right.js:
14592
+ lucide-react/dist/esm/icons/chevron-up.js:
14593
+ lucide-react/dist/esm/icons/chevrons-up-down.js:
14594
+ lucide-react/dist/esm/icons/columns-2.js:
14595
+ lucide-react/dist/esm/icons/download.js:
14596
+ lucide-react/dist/esm/icons/ellipsis-vertical.js:
14597
+ lucide-react/dist/esm/icons/eye-off.js:
14598
+ lucide-react/dist/esm/icons/eye.js:
14599
+ lucide-react/dist/esm/icons/funnel.js:
14600
+ lucide-react/dist/esm/icons/layers.js:
14601
+ lucide-react/dist/esm/icons/minus.js:
14602
+ lucide-react/dist/esm/icons/pin.js:
14603
+ lucide-react/dist/esm/icons/plus.js:
14604
+ lucide-react/dist/esm/icons/search.js:
14605
+ lucide-react/dist/esm/icons/trash-2.js:
14606
+ lucide-react/dist/esm/icons/x.js:
14607
+ lucide-react/dist/esm/lucide-react.js:
14608
+ (**
14609
+ * @license lucide-react v0.575.0 - ISC
14610
+ *
14611
+ * This source code is licensed under the ISC license.
14612
+ * See the LICENSE file in the root directory of this source tree.
14613
+ *)
14614
+ */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rufous/ui",
3
3
  "private": false,
4
- "version": "0.3.36",
4
+ "version": "0.3.38",
5
5
  "type": "module",
6
6
  "description": "Experimental: A lightweight React UI component library (Beta)",
7
7
  "style": "./dist/main.css",
@@ -64,11 +64,11 @@
64
64
  "crypto-js": "^4.2.0",
65
65
  "lucide-react": "^0.575.0",
66
66
  "motion": "^12.34.3",
67
- "react-router-dom": "^7.13.1",
68
67
  "react-secure-storage": "^1.3.2",
69
68
  "tippy.js": "^6.3.7"
70
69
  },
71
70
  "devDependencies": {
71
+ "react-router-dom": "^7.13.1",
72
72
  "@eslint/js": "^9.30.1",
73
73
  "@types/node": "^24.1.0",
74
74
  "@types/react": "^19.1.8",