@rufous/ui 0.3.25 → 0.3.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.cjs +148 -88
- package/dist/main.css +6 -0
- package/dist/main.d.cts +2 -2
- package/dist/main.d.ts +2 -2
- package/dist/main.js +132 -71
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -1841,12 +1841,6 @@ var STEP_BY_VARIANT = {
|
|
|
1841
1841
|
"positive-integer": 1,
|
|
1842
1842
|
"positive-decimal": 0.1
|
|
1843
1843
|
};
|
|
1844
|
-
var MIN_BY_VARIANT = {
|
|
1845
|
-
"integer": void 0,
|
|
1846
|
-
"decimal": void 0,
|
|
1847
|
-
"positive-integer": 0,
|
|
1848
|
-
"positive-decimal": 0
|
|
1849
|
-
};
|
|
1850
1844
|
var TextField = (0, import_react17.forwardRef)(({
|
|
1851
1845
|
label,
|
|
1852
1846
|
name,
|
|
@@ -1935,21 +1929,23 @@ var TextField = (0, import_react17.forwardRef)(({
|
|
|
1935
1929
|
}
|
|
1936
1930
|
}
|
|
1937
1931
|
};
|
|
1932
|
+
const stepBy = (delta) => {
|
|
1933
|
+
if (!internalRef.current) return;
|
|
1934
|
+
const step = Number(stepProp ?? (numberVariant ? STEP_BY_VARIANT[numberVariant] : 1));
|
|
1935
|
+
const newVal = (parseFloat(internalRef.current.value) || 0) + delta * step;
|
|
1936
|
+
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value")?.set;
|
|
1937
|
+
nativeInputValueSetter?.call(internalRef.current, String(newVal));
|
|
1938
|
+
triggerChange();
|
|
1939
|
+
};
|
|
1938
1940
|
const handleIncrement = (e) => {
|
|
1939
1941
|
e.preventDefault();
|
|
1940
1942
|
e.stopPropagation();
|
|
1941
|
-
|
|
1942
|
-
internalRef.current.stepUp();
|
|
1943
|
-
triggerChange();
|
|
1944
|
-
}
|
|
1943
|
+
stepBy(1);
|
|
1945
1944
|
};
|
|
1946
1945
|
const handleDecrement = (e) => {
|
|
1947
1946
|
e.preventDefault();
|
|
1948
1947
|
e.stopPropagation();
|
|
1949
|
-
|
|
1950
|
-
internalRef.current.stepDown();
|
|
1951
|
-
triggerChange();
|
|
1952
|
-
}
|
|
1948
|
+
stepBy(-1);
|
|
1953
1949
|
};
|
|
1954
1950
|
const handleKeyDown = (e) => {
|
|
1955
1951
|
if (type === "number") {
|
|
@@ -1960,16 +1956,10 @@ var TextField = (0, import_react17.forwardRef)(({
|
|
|
1960
1956
|
}
|
|
1961
1957
|
if (e.key === "ArrowUp") {
|
|
1962
1958
|
e.preventDefault();
|
|
1963
|
-
|
|
1964
|
-
internalRef.current.stepUp();
|
|
1965
|
-
triggerChange();
|
|
1966
|
-
}
|
|
1959
|
+
stepBy(1);
|
|
1967
1960
|
} else if (e.key === "ArrowDown") {
|
|
1968
1961
|
e.preventDefault();
|
|
1969
|
-
|
|
1970
|
-
internalRef.current.stepDown();
|
|
1971
|
-
triggerChange();
|
|
1972
|
-
}
|
|
1962
|
+
stepBy(-1);
|
|
1973
1963
|
}
|
|
1974
1964
|
}
|
|
1975
1965
|
if (props.onKeyDown) props.onKeyDown(e);
|
|
@@ -1995,18 +1985,24 @@ var TextField = (0, import_react17.forwardRef)(({
|
|
|
1995
1985
|
"input",
|
|
1996
1986
|
{
|
|
1997
1987
|
ref: internalRef,
|
|
1998
|
-
type,
|
|
1988
|
+
type: type === "number" ? "text" : type,
|
|
1989
|
+
inputMode: type === "number" ? "numeric" : void 0,
|
|
1999
1990
|
onKeyDown: handleKeyDown,
|
|
2000
1991
|
className: "rf-text-field__input",
|
|
2001
1992
|
placeholder: placeholder || (variant === "outlined" ? " " : void 0),
|
|
2002
1993
|
name,
|
|
2003
1994
|
id: inputId,
|
|
2004
|
-
value
|
|
1995
|
+
value: (() => {
|
|
1996
|
+
if (type !== "number" || value === void 0 || value === null || value === "") return value;
|
|
1997
|
+
const str = String(value);
|
|
1998
|
+
if (!str.includes("e") && !str.includes("E")) return str;
|
|
1999
|
+
const num = Number(str);
|
|
2000
|
+
if (isNaN(num)) return str;
|
|
2001
|
+
return num.toLocaleString("en-US", { useGrouping: false, maximumFractionDigits: 20 });
|
|
2002
|
+
})(),
|
|
2005
2003
|
required,
|
|
2006
2004
|
disabled,
|
|
2007
2005
|
readOnly,
|
|
2008
|
-
step: type === "number" ? stepProp ?? (numberVariant ? STEP_BY_VARIANT[numberVariant] : void 0) : void 0,
|
|
2009
|
-
min: type === "number" && numberVariant ? MIN_BY_VARIANT[numberVariant] : void 0,
|
|
2010
2006
|
...slotProps?.input,
|
|
2011
2007
|
...props,
|
|
2012
2008
|
onChange: handleChange
|
|
@@ -2419,7 +2415,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2419
2415
|
onClose?.();
|
|
2420
2416
|
if (!justSelected && !freeSolo && !multiple && value == null) {
|
|
2421
2417
|
setInputStr("");
|
|
2422
|
-
onInputChange?.(null, "");
|
|
2418
|
+
onInputChange?.(null, "", "reset");
|
|
2423
2419
|
}
|
|
2424
2420
|
}, [openProp, freeSolo, multiple, value, onInputChange, onClose]);
|
|
2425
2421
|
(0, import_react19.useEffect)(() => {
|
|
@@ -2464,13 +2460,13 @@ function AutocompleteInner(props, _ref) {
|
|
|
2464
2460
|
onChange?.(event, next, already ? "removeOption" : "selectOption");
|
|
2465
2461
|
setInputStr("");
|
|
2466
2462
|
setFilterQuery("");
|
|
2467
|
-
onInputChange?.(event, "");
|
|
2463
|
+
onInputChange?.(event, "", "reset");
|
|
2468
2464
|
inputRef.current?.focus();
|
|
2469
2465
|
} else {
|
|
2470
2466
|
onChange?.(event, opt, "selectOption");
|
|
2471
2467
|
setInputStr(getOptionLabel(opt));
|
|
2472
2468
|
setFilterQuery("");
|
|
2473
|
-
onInputChange?.(event, getOptionLabel(opt));
|
|
2469
|
+
onInputChange?.(event, getOptionLabel(opt), "reset");
|
|
2474
2470
|
closePopup(true);
|
|
2475
2471
|
}
|
|
2476
2472
|
setFocusedIdx(-1);
|
|
@@ -2480,7 +2476,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2480
2476
|
onChange?.(e, multiple ? [] : null, "clear");
|
|
2481
2477
|
setInputStr("");
|
|
2482
2478
|
setFilterQuery("");
|
|
2483
|
-
onInputChange?.(e, "");
|
|
2479
|
+
onInputChange?.(e, "", "clear");
|
|
2484
2480
|
inputRef.current?.focus();
|
|
2485
2481
|
};
|
|
2486
2482
|
const removeTag = (opt, e) => {
|
|
@@ -2492,7 +2488,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2492
2488
|
const v = e.target.value;
|
|
2493
2489
|
setInputStr(v);
|
|
2494
2490
|
setFilterQuery(v);
|
|
2495
|
-
onInputChange?.(e, v);
|
|
2491
|
+
onInputChange?.(e, v, "input");
|
|
2496
2492
|
if (!open) openPopup();
|
|
2497
2493
|
};
|
|
2498
2494
|
const handleKeyDown = (e) => {
|
|
@@ -2579,7 +2575,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2579
2575
|
multiple && (renderTags ? renderTags(selectedValues, ({ index }) => ({
|
|
2580
2576
|
key: index,
|
|
2581
2577
|
onDelete: (e) => removeTag(selectedValues[index], e)
|
|
2582
|
-
})) : /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, visibleTags.map((opt, i) => /* @__PURE__ */ import_react19.default.createElement("span", { key: i, className: "rf-autocomplete__tag" }, /* @__PURE__ */ import_react19.default.createElement("span", { style: { overflow: "hidden", textOverflow: "ellipsis" } }, getOptionLabel(opt)), /* @__PURE__ */ import_react19.default.createElement(
|
|
2578
|
+
})) : /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, visibleTags.map((opt, i) => /* @__PURE__ */ import_react19.default.createElement("span", { key: i, className: "rf-autocomplete__tag" }, /* @__PURE__ */ import_react19.default.createElement("span", { style: { overflow: "hidden", textOverflow: "ellipsis" } }, getOptionLabel(opt)), !disabled && /* @__PURE__ */ import_react19.default.createElement(
|
|
2583
2579
|
"button",
|
|
2584
2580
|
{
|
|
2585
2581
|
type: "button",
|
|
@@ -2632,7 +2628,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2632
2628
|
"aria-label": "Clear"
|
|
2633
2629
|
},
|
|
2634
2630
|
/* @__PURE__ */ import_react19.default.createElement(CloseSmIcon, { size: 16 })
|
|
2635
|
-
), !freeSolo && /* @__PURE__ */ import_react19.default.createElement(
|
|
2631
|
+
), !freeSolo && !disabled && /* @__PURE__ */ import_react19.default.createElement(
|
|
2636
2632
|
"button",
|
|
2637
2633
|
{
|
|
2638
2634
|
type: "button",
|
|
@@ -3807,16 +3803,15 @@ var DateField = ({
|
|
|
3807
3803
|
}
|
|
3808
3804
|
}
|
|
3809
3805
|
),
|
|
3810
|
-
/* @__PURE__ */ import_react21.default.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ import_react21.default.createElement(
|
|
3806
|
+
!disabled && /* @__PURE__ */ import_react21.default.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ import_react21.default.createElement(
|
|
3811
3807
|
"button",
|
|
3812
3808
|
{
|
|
3813
3809
|
type: "button",
|
|
3814
3810
|
className: "rf-date-field__icon-btn",
|
|
3815
3811
|
tabIndex: -1,
|
|
3816
|
-
disabled,
|
|
3817
3812
|
onClick: (e) => {
|
|
3818
3813
|
e.stopPropagation();
|
|
3819
|
-
|
|
3814
|
+
setOpen((o) => !o);
|
|
3820
3815
|
},
|
|
3821
3816
|
"aria-label": "Pick date"
|
|
3822
3817
|
},
|
|
@@ -4416,16 +4411,15 @@ var DateRangeField = ({
|
|
|
4416
4411
|
}
|
|
4417
4412
|
}
|
|
4418
4413
|
),
|
|
4419
|
-
/* @__PURE__ */ import_react22.default.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ import_react22.default.createElement(
|
|
4414
|
+
!disabled && /* @__PURE__ */ import_react22.default.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ import_react22.default.createElement(
|
|
4420
4415
|
"button",
|
|
4421
4416
|
{
|
|
4422
4417
|
type: "button",
|
|
4423
4418
|
className: "rf-date-field__icon-btn",
|
|
4424
4419
|
tabIndex: -1,
|
|
4425
|
-
disabled,
|
|
4426
4420
|
onClick: (e) => {
|
|
4427
4421
|
e.stopPropagation();
|
|
4428
|
-
|
|
4422
|
+
setOpen((o) => !o);
|
|
4429
4423
|
},
|
|
4430
4424
|
"aria-label": "Pick date range"
|
|
4431
4425
|
},
|
|
@@ -4619,7 +4613,59 @@ var RufousLogoLoader = ({ size = 80, sx, className }) => {
|
|
|
4619
4613
|
|
|
4620
4614
|
// lib/DataGrid/DataGrid.tsx
|
|
4621
4615
|
var import_react23 = __toESM(require("react"), 1);
|
|
4616
|
+
var import_react_dom5 = __toESM(require("react-dom"), 1);
|
|
4622
4617
|
var import_lucide_react2 = require("lucide-react");
|
|
4618
|
+
function OverflowTooltip({ content }) {
|
|
4619
|
+
const ref = (0, import_react23.useRef)(null);
|
|
4620
|
+
const [pos, setPos] = (0, import_react23.useState)(null);
|
|
4621
|
+
return /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(
|
|
4622
|
+
"span",
|
|
4623
|
+
{
|
|
4624
|
+
ref,
|
|
4625
|
+
onMouseEnter: () => {
|
|
4626
|
+
if (ref.current && ref.current.scrollWidth > ref.current.clientWidth) {
|
|
4627
|
+
const r = ref.current.getBoundingClientRect();
|
|
4628
|
+
setPos({ top: r.top, left: r.left + r.width / 2 });
|
|
4629
|
+
}
|
|
4630
|
+
},
|
|
4631
|
+
onMouseLeave: () => setPos(null),
|
|
4632
|
+
style: { display: "block", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }
|
|
4633
|
+
},
|
|
4634
|
+
content
|
|
4635
|
+
), pos && import_react_dom5.default.createPortal(
|
|
4636
|
+
/* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
4637
|
+
position: "fixed",
|
|
4638
|
+
top: pos.top - 4,
|
|
4639
|
+
left: pos.left,
|
|
4640
|
+
transform: "translate(-50%, -100%)",
|
|
4641
|
+
background: "rgba(0,0,0,0.75)",
|
|
4642
|
+
color: "#fff",
|
|
4643
|
+
padding: "4px 8px",
|
|
4644
|
+
borderRadius: 4,
|
|
4645
|
+
fontSize: "0.75rem",
|
|
4646
|
+
maxWidth: 320,
|
|
4647
|
+
wordBreak: "break-word",
|
|
4648
|
+
zIndex: 9999,
|
|
4649
|
+
pointerEvents: "none",
|
|
4650
|
+
whiteSpace: "normal"
|
|
4651
|
+
} }, content),
|
|
4652
|
+
document.body
|
|
4653
|
+
));
|
|
4654
|
+
}
|
|
4655
|
+
function formatCellValue(value, colType) {
|
|
4656
|
+
if (value == null) return "";
|
|
4657
|
+
if (colType === "number") {
|
|
4658
|
+
const num = Number(value);
|
|
4659
|
+
if (!isNaN(num)) {
|
|
4660
|
+
const str = String(num);
|
|
4661
|
+
if (str.includes("e") || str.includes("E")) {
|
|
4662
|
+
return num.toLocaleString("en-US", { useGrouping: false, maximumFractionDigits: 20 });
|
|
4663
|
+
}
|
|
4664
|
+
return str;
|
|
4665
|
+
}
|
|
4666
|
+
}
|
|
4667
|
+
return String(value);
|
|
4668
|
+
}
|
|
4623
4669
|
function getAllGroupIds(rows, fields, getKey, depth = 0, parentId = "") {
|
|
4624
4670
|
if (!fields.length || !rows.length) return [];
|
|
4625
4671
|
const [field, ...rest] = fields;
|
|
@@ -5295,6 +5341,7 @@ function DataGrid({
|
|
|
5295
5341
|
onChange: (e) => {
|
|
5296
5342
|
setFilterText(e.target.value);
|
|
5297
5343
|
setCurrentPage(1);
|
|
5344
|
+
if (onPaginationModelChange) onPaginationModelChange({ page: 0, pageSize: activePageSize });
|
|
5298
5345
|
}
|
|
5299
5346
|
}
|
|
5300
5347
|
)), showFilterBtn && /* @__PURE__ */ import_react23.default.createElement(Tooltip, { title: "Filters", placement: "top" }, /* @__PURE__ */ import_react23.default.createElement(
|
|
@@ -5502,7 +5549,7 @@ function DataGrid({
|
|
|
5502
5549
|
const formattedValue = col.valueFormatter ? col.valueFormatter({ value, row: item, field }) : value;
|
|
5503
5550
|
if (col.renderCell) return col.renderCell({ value, row: item, field });
|
|
5504
5551
|
if (col.render) return col.render(value, item);
|
|
5505
|
-
return
|
|
5552
|
+
return /* @__PURE__ */ import_react23.default.createElement(OverflowTooltip, { content: formatCellValue(formattedValue, col.type) });
|
|
5506
5553
|
})()
|
|
5507
5554
|
);
|
|
5508
5555
|
}), actions && /* @__PURE__ */ import_react23.default.createElement("td", { className: "dg-row-actions-cell" }, (() => {
|
|
@@ -5571,7 +5618,7 @@ function DataGrid({
|
|
|
5571
5618
|
setActiveMenu(null);
|
|
5572
5619
|
} }, /* @__PURE__ */ import_react23.default.createElement(import_lucide_react2.Layers, { size: 14 }), " Group by");
|
|
5573
5620
|
})(),
|
|
5574
|
-
/* @__PURE__ */ import_react23.default.createElement("button", { className: "dg-menu-item", onClick: () => toggleHide(activeMenu) }, /* @__PURE__ */ import_react23.default.createElement(import_lucide_react2.EyeOff, { size: 14 }), " Hide column"),
|
|
5621
|
+
activeMenuCol?.hideable !== false && /* @__PURE__ */ import_react23.default.createElement("button", { className: "dg-menu-item", onClick: () => toggleHide(activeMenu) }, /* @__PURE__ */ import_react23.default.createElement(import_lucide_react2.EyeOff, { size: 14 }), " Hide column"),
|
|
5575
5622
|
/* @__PURE__ */ import_react23.default.createElement("button", { className: "dg-menu-item", onClick: () => {
|
|
5576
5623
|
setShowManageColumns(true);
|
|
5577
5624
|
setActiveMenu(null);
|
|
@@ -5588,7 +5635,7 @@ function DataGrid({
|
|
|
5588
5635
|
)), resolvedColumns.filter((c) => c.header.toLowerCase().includes(colSearch.toLowerCase())).map((col) => {
|
|
5589
5636
|
const key = String(col.key);
|
|
5590
5637
|
const isUnhideable = col.hideable === false;
|
|
5591
|
-
return /* @__PURE__ */ import_react23.default.createElement("div", { key, className: `dg-col-row${isUnhideable ? " disabled" : ""}` }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "dg-col-label" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "dg-col-dot", style: { background: col.hidden ? "var(--border-color)" : "var(--primary-color)" } }), col.header), !isUnhideable && /* @__PURE__ */ import_react23.default.createElement("button", { className: "dg-icon-btn", onClick: () => toggleHide(key) }, col.hidden ? /* @__PURE__ */ import_react23.default.createElement(import_lucide_react2.EyeOff, { size: 14 }) : /* @__PURE__ */ import_react23.default.createElement(import_lucide_react2.
|
|
5638
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key, className: `dg-col-row${isUnhideable ? " disabled" : ""}` }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "dg-col-label" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "dg-col-dot", style: { background: col.hidden ? "var(--border-color)" : "var(--primary-color)" } }), col.header), !isUnhideable && /* @__PURE__ */ import_react23.default.createElement("button", { className: "dg-icon-btn", onClick: () => toggleHide(key) }, col.hidden ? /* @__PURE__ */ import_react23.default.createElement(import_lucide_react2.EyeOff, { size: 14 }) : /* @__PURE__ */ import_react23.default.createElement(import_lucide_react2.Eye, { size: 14 })));
|
|
5592
5639
|
})), /* @__PURE__ */ import_react23.default.createElement("div", { className: "dg-modal-footer" }, /* @__PURE__ */ import_react23.default.createElement("button", { className: "dg-action-btn", onClick: () => setColumnOverrides((prev) => {
|
|
5593
5640
|
const next = { ...prev };
|
|
5594
5641
|
resolvedColumns.forEach((c) => {
|
|
@@ -5648,7 +5695,9 @@ function DataGrid({
|
|
|
5648
5695
|
value: f.value,
|
|
5649
5696
|
onChange: (val) => setAdvancedFilters((p) => p.map((fi, i) => i === idx ? { ...fi, value: val } : fi)),
|
|
5650
5697
|
variant: "compact",
|
|
5651
|
-
fullWidth: true
|
|
5698
|
+
fullWidth: true,
|
|
5699
|
+
dateFormat: "DD/MM/YYYY",
|
|
5700
|
+
placeholder: "DD/MM/YYYY"
|
|
5652
5701
|
}
|
|
5653
5702
|
)), !hideValue && col?.type === "status" && (() => {
|
|
5654
5703
|
const opts = col.statusOptions || [...new Set(data.map((item) => String(item[col.field || col.key || ""])))].filter((v) => v && v !== "undefined" && v !== "null").sort();
|
|
@@ -5702,7 +5751,7 @@ function DataGrid({
|
|
|
5702
5751
|
|
|
5703
5752
|
// lib/Select/Select.tsx
|
|
5704
5753
|
var import_react24 = __toESM(require("react"), 1);
|
|
5705
|
-
var
|
|
5754
|
+
var import_react_dom6 = __toESM(require("react-dom"), 1);
|
|
5706
5755
|
var ChevronDownIcon2 = () => /* @__PURE__ */ import_react24.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "6 9 12 15 18 9" }));
|
|
5707
5756
|
var CheckIcon2 = () => /* @__PURE__ */ import_react24.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "20 6 9 17 4 12" }));
|
|
5708
5757
|
function normaliseOptions(options) {
|
|
@@ -5911,10 +5960,10 @@ var Select = import_react24.default.forwardRef(function Select2(props, ref) {
|
|
|
5911
5960
|
renderDisplay(),
|
|
5912
5961
|
label && /* @__PURE__ */ import_react24.default.createElement("label", { id: inputId, className: "rf-text-field__label" }, label, required && /* @__PURE__ */ import_react24.default.createElement("span", { className: "rf-text-field__asterisk" }, " *")),
|
|
5913
5962
|
variant === "outlined" && /* @__PURE__ */ import_react24.default.createElement("fieldset", { className: "rf-text-field__notch" }, label ? /* @__PURE__ */ import_react24.default.createElement("legend", { className: "rf-text-field__legend" }, /* @__PURE__ */ import_react24.default.createElement("span", null, label, required ? " *" : "")) : /* @__PURE__ */ import_react24.default.createElement("legend", { className: "rf-text-field__legend--empty" })),
|
|
5914
|
-
/* @__PURE__ */ import_react24.default.createElement("div", { className: "rf-select__arrow", "aria-hidden": "true" }, /* @__PURE__ */ import_react24.default.createElement(ChevronDownIcon2, null))
|
|
5963
|
+
!disabled && /* @__PURE__ */ import_react24.default.createElement("div", { className: "rf-select__arrow", "aria-hidden": "true" }, /* @__PURE__ */ import_react24.default.createElement(ChevronDownIcon2, null))
|
|
5915
5964
|
),
|
|
5916
5965
|
helperText && /* @__PURE__ */ import_react24.default.createElement("div", { className: `rf-text-field__helper-text${error ? " rf-text-field__helper-text--error" : ""}` }, helperText),
|
|
5917
|
-
open && !disabled &&
|
|
5966
|
+
open && !disabled && import_react_dom6.default.createPortal(
|
|
5918
5967
|
/* @__PURE__ */ import_react24.default.createElement("div", { ref: popupRef, className: "rf-select__popup", role: "presentation", style: popupStyle }, /* @__PURE__ */ import_react24.default.createElement("ul", { ref: listRef, className: "rf-select__listbox", role: "listbox", "aria-multiselectable": multiple }, (() => {
|
|
5919
5968
|
const renderOpt = (opt, selectableIdx) => {
|
|
5920
5969
|
const selected = isSelected(opt.value);
|
|
@@ -8001,7 +8050,7 @@ Stepper.displayName = "Stepper";
|
|
|
8001
8050
|
|
|
8002
8051
|
// lib/Menu/Menu.tsx
|
|
8003
8052
|
var import_react40 = __toESM(require("react"), 1);
|
|
8004
|
-
var
|
|
8053
|
+
var import_react_dom7 = __toESM(require("react-dom"), 1);
|
|
8005
8054
|
var MenuDivider = () => /* @__PURE__ */ import_react40.default.createElement("hr", { className: "rf-menu-divider", "aria-hidden": "true" });
|
|
8006
8055
|
MenuDivider.displayName = "MenuDivider";
|
|
8007
8056
|
var MenuItem = ({
|
|
@@ -8154,13 +8203,13 @@ var Menu = ({
|
|
|
8154
8203
|
},
|
|
8155
8204
|
children
|
|
8156
8205
|
));
|
|
8157
|
-
return
|
|
8206
|
+
return import_react_dom7.default.createPortal(portal, document.body);
|
|
8158
8207
|
};
|
|
8159
8208
|
Menu.displayName = "Menu";
|
|
8160
8209
|
|
|
8161
8210
|
// lib/Drawer/Drawer.tsx
|
|
8162
8211
|
var import_react41 = __toESM(require("react"), 1);
|
|
8163
|
-
var
|
|
8212
|
+
var import_react_dom8 = __toESM(require("react-dom"), 1);
|
|
8164
8213
|
var Drawer = ({
|
|
8165
8214
|
open,
|
|
8166
8215
|
onClose,
|
|
@@ -8260,7 +8309,7 @@ var Drawer = ({
|
|
|
8260
8309
|
},
|
|
8261
8310
|
children
|
|
8262
8311
|
));
|
|
8263
|
-
return
|
|
8312
|
+
return import_react_dom8.default.createPortal(
|
|
8264
8313
|
/* @__PURE__ */ import_react41.default.createElement("div", { className: rootClasses, style }, drawerContent),
|
|
8265
8314
|
document.body
|
|
8266
8315
|
);
|
|
@@ -8269,7 +8318,7 @@ Drawer.displayName = "Drawer";
|
|
|
8269
8318
|
|
|
8270
8319
|
// lib/Snackbar/Snackbar.tsx
|
|
8271
8320
|
var import_react42 = __toESM(require("react"), 1);
|
|
8272
|
-
var
|
|
8321
|
+
var import_react_dom9 = __toESM(require("react-dom"), 1);
|
|
8273
8322
|
var SEVERITY_ICONS = {
|
|
8274
8323
|
success: "\u2713",
|
|
8275
8324
|
error: "\u2715",
|
|
@@ -8374,7 +8423,7 @@ var Snackbar = ({
|
|
|
8374
8423
|
"\u2715"
|
|
8375
8424
|
)
|
|
8376
8425
|
));
|
|
8377
|
-
return
|
|
8426
|
+
return import_react_dom9.default.createPortal(snackbarEl, document.body);
|
|
8378
8427
|
};
|
|
8379
8428
|
Snackbar.displayName = "Snackbar";
|
|
8380
8429
|
|
|
@@ -8428,7 +8477,7 @@ Link.displayName = "Link";
|
|
|
8428
8477
|
|
|
8429
8478
|
// lib/Popper/Popper.tsx
|
|
8430
8479
|
var import_react44 = __toESM(require("react"), 1);
|
|
8431
|
-
var
|
|
8480
|
+
var import_react_dom10 = __toESM(require("react-dom"), 1);
|
|
8432
8481
|
function computePopperPosition(anchorRect, popperRect, placement, offset2 = [0, 8]) {
|
|
8433
8482
|
const [skid, dist] = offset2;
|
|
8434
8483
|
let top = 0;
|
|
@@ -8571,13 +8620,13 @@ var Popper = ({
|
|
|
8571
8620
|
if (disablePortal) {
|
|
8572
8621
|
return /* @__PURE__ */ import_react44.default.createElement(import_react44.default.Fragment, null, popper);
|
|
8573
8622
|
}
|
|
8574
|
-
return
|
|
8623
|
+
return import_react_dom10.default.createPortal(popper, document.body);
|
|
8575
8624
|
};
|
|
8576
8625
|
Popper.displayName = "Popper";
|
|
8577
8626
|
|
|
8578
8627
|
// lib/Popover/Popover.tsx
|
|
8579
8628
|
var import_react45 = __toESM(require("react"), 1);
|
|
8580
|
-
var
|
|
8629
|
+
var import_react_dom11 = __toESM(require("react-dom"), 1);
|
|
8581
8630
|
function getPoint(rect, v, h) {
|
|
8582
8631
|
const x = h === "left" ? rect.left : h === "center" ? rect.left + rect.width / 2 : rect.right;
|
|
8583
8632
|
const y = v === "top" ? rect.top : v === "center" ? rect.top + rect.height / 2 : rect.bottom;
|
|
@@ -8680,7 +8729,7 @@ var Popover = ({
|
|
|
8680
8729
|
if (disablePortal) {
|
|
8681
8730
|
return /* @__PURE__ */ import_react45.default.createElement("div", { className: `${rootClasses} rf-popover-inline`, style }, content);
|
|
8682
8731
|
}
|
|
8683
|
-
return
|
|
8732
|
+
return import_react_dom11.default.createPortal(
|
|
8684
8733
|
/* @__PURE__ */ import_react45.default.createElement("div", { className: rootClasses, style }, content),
|
|
8685
8734
|
document.body
|
|
8686
8735
|
);
|
|
@@ -9331,7 +9380,7 @@ PhoneField.displayName = "PhoneField";
|
|
|
9331
9380
|
|
|
9332
9381
|
// lib/TreeSelect/TreeSelect.tsx
|
|
9333
9382
|
var import_react49 = __toESM(require("react"), 1);
|
|
9334
|
-
var
|
|
9383
|
+
var import_react_dom12 = __toESM(require("react-dom"), 1);
|
|
9335
9384
|
var import_lucide_react3 = require("lucide-react");
|
|
9336
9385
|
function nodeId(node) {
|
|
9337
9386
|
return node.id ?? node._id;
|
|
@@ -9641,11 +9690,13 @@ function TreeSelect({
|
|
|
9641
9690
|
error ? "rf-text-field--error" : "",
|
|
9642
9691
|
fullWidth ? "rf-text-field--full-width" : "",
|
|
9643
9692
|
isFloating ? "rf-text-field--floating" : "",
|
|
9693
|
+
label ? "rf-text-field--has-label" : "",
|
|
9694
|
+
"rf-text-field--adorned-end",
|
|
9644
9695
|
"rf-tree-select",
|
|
9645
9696
|
sxClass,
|
|
9646
9697
|
className
|
|
9647
9698
|
].filter(Boolean).join(" ");
|
|
9648
|
-
return /* @__PURE__ */ import_react49.default.createElement("div", { className: rootClasses, style },
|
|
9699
|
+
return /* @__PURE__ */ import_react49.default.createElement("div", { className: rootClasses, style }, /* @__PURE__ */ import_react49.default.createElement(
|
|
9649
9700
|
"div",
|
|
9650
9701
|
{
|
|
9651
9702
|
ref: triggerRef,
|
|
@@ -9657,7 +9708,7 @@ function TreeSelect({
|
|
|
9657
9708
|
onBlur: handleTriggerBlur,
|
|
9658
9709
|
onKeyDown: handleKeyDown
|
|
9659
9710
|
},
|
|
9660
|
-
isMultiple ? /* @__PURE__ */ import_react49.default.createElement("div", { className: "rf-ts__chips" }, tagNodes.length > 0 ? tagNodes.map((node) => /* @__PURE__ */ import_react49.default.createElement("span", { key: node.id, className: "rf-ts__chip" }, node.label, /* @__PURE__ */ import_react49.default.createElement(
|
|
9711
|
+
isMultiple ? /* @__PURE__ */ import_react49.default.createElement("div", { className: "rf-ts__chips" }, tagNodes.length > 0 ? tagNodes.map((node) => /* @__PURE__ */ import_react49.default.createElement("span", { key: node.id, className: "rf-ts__chip" }, node.label, !disabled && /* @__PURE__ */ import_react49.default.createElement(
|
|
9661
9712
|
"button",
|
|
9662
9713
|
{
|
|
9663
9714
|
type: "button",
|
|
@@ -9666,8 +9717,8 @@ function TreeSelect({
|
|
|
9666
9717
|
tabIndex: -1
|
|
9667
9718
|
},
|
|
9668
9719
|
/* @__PURE__ */ import_react49.default.createElement(import_lucide_react3.X, { size: 10 })
|
|
9669
|
-
))) :
|
|
9670
|
-
/* @__PURE__ */ import_react49.default.createElement("div", { className: "rf-autocomplete__endgroup" }, clearable && hasValue && /* @__PURE__ */ import_react49.default.createElement(
|
|
9720
|
+
))) : isFloating || !label ? /* @__PURE__ */ import_react49.default.createElement("span", { className: "rf-ts__placeholder" }, placeholder) : null) : /* @__PURE__ */ import_react49.default.createElement("div", { className: `rf-ts__display${!hasValue ? " rf-ts__display--placeholder" : ""}` }, hasValue ? tagNodes[0]?.label : isFloating || !label ? placeholder : "\xA0"),
|
|
9721
|
+
/* @__PURE__ */ import_react49.default.createElement("div", { className: "rf-autocomplete__endgroup" }, !disabled && clearable && hasValue && /* @__PURE__ */ import_react49.default.createElement(
|
|
9671
9722
|
"button",
|
|
9672
9723
|
{
|
|
9673
9724
|
type: "button",
|
|
@@ -9676,7 +9727,7 @@ function TreeSelect({
|
|
|
9676
9727
|
tabIndex: -1
|
|
9677
9728
|
},
|
|
9678
9729
|
/* @__PURE__ */ import_react49.default.createElement(import_lucide_react3.X, { size: 16 })
|
|
9679
|
-
), /* @__PURE__ */ import_react49.default.createElement(
|
|
9730
|
+
), !disabled && /* @__PURE__ */ import_react49.default.createElement(
|
|
9680
9731
|
"button",
|
|
9681
9732
|
{
|
|
9682
9733
|
type: "button",
|
|
@@ -9689,10 +9740,11 @@ function TreeSelect({
|
|
|
9689
9740
|
},
|
|
9690
9741
|
/* @__PURE__ */ import_react49.default.createElement(import_lucide_react3.ChevronDown, { size: 18 })
|
|
9691
9742
|
)),
|
|
9743
|
+
label && /* @__PURE__ */ import_react49.default.createElement("label", { className: "rf-text-field__label" }, label, required && /* @__PURE__ */ import_react49.default.createElement("span", { className: "rf-text-field__asterisk" }, " *")),
|
|
9692
9744
|
variant === "outlined" && /* @__PURE__ */ import_react49.default.createElement("fieldset", { "aria-hidden": true, className: "rf-text-field__notch" }, /* @__PURE__ */ import_react49.default.createElement("legend", { className: "rf-text-field__legend" }, label && /* @__PURE__ */ import_react49.default.createElement("span", null, label, required ? " *" : ""))),
|
|
9693
9745
|
variant === "filled" && /* @__PURE__ */ import_react49.default.createElement(import_react49.default.Fragment, null, /* @__PURE__ */ import_react49.default.createElement("div", { className: "rf-text-field__filled-bg" }), /* @__PURE__ */ import_react49.default.createElement("div", { className: "rf-text-field__underline" })),
|
|
9694
9746
|
variant === "standard" && /* @__PURE__ */ import_react49.default.createElement("div", { className: "rf-text-field__underline" })
|
|
9695
|
-
), helperText && /* @__PURE__ */ import_react49.default.createElement("p", { className: `rf-text-field__helper-text${error ? " rf-text-field__helper-text--error" : ""}` }, helperText), open &&
|
|
9747
|
+
), helperText && /* @__PURE__ */ import_react49.default.createElement("p", { className: `rf-text-field__helper-text${error ? " rf-text-field__helper-text--error" : ""}` }, helperText), open && import_react_dom12.default.createPortal(
|
|
9696
9748
|
/* @__PURE__ */ import_react49.default.createElement(
|
|
9697
9749
|
"div",
|
|
9698
9750
|
{
|
|
@@ -9911,11 +9963,18 @@ function SmartSelect({
|
|
|
9911
9963
|
}, [options, getOptionChildren]);
|
|
9912
9964
|
const flatOptionsList = (0, import_react51.useMemo)(() => flatItems.map((f) => f.option), [flatItems]);
|
|
9913
9965
|
const displayOptions = (0, import_react51.useMemo)(() => {
|
|
9914
|
-
|
|
9915
|
-
|
|
9916
|
-
|
|
9917
|
-
|
|
9918
|
-
|
|
9966
|
+
let base = flatOptionsList;
|
|
9967
|
+
if (searchResults.length) {
|
|
9968
|
+
const localKeys = new Set(flatOptionsList.map((o) => getValue(o)));
|
|
9969
|
+
const serverOnly = searchResults.filter((o) => !localKeys.has(getValue(o)));
|
|
9970
|
+
base = [...flatOptionsList, ...serverOnly];
|
|
9971
|
+
}
|
|
9972
|
+
if (!multiple && value != null) {
|
|
9973
|
+
const key = getValue(value);
|
|
9974
|
+
if (!base.some((o) => getValue(o) === key)) base = [value, ...base];
|
|
9975
|
+
}
|
|
9976
|
+
return base;
|
|
9977
|
+
}, [flatOptionsList, searchResults, getValue, value, multiple]);
|
|
9919
9978
|
const depthMap = (0, import_react51.useMemo)(() => {
|
|
9920
9979
|
const map = /* @__PURE__ */ new Map();
|
|
9921
9980
|
flatItems.forEach(({ option, depth }) => map.set(getValue(option), depth));
|
|
@@ -9931,14 +9990,15 @@ function SmartSelect({
|
|
|
9931
9990
|
}
|
|
9932
9991
|
return value != null ? /* @__PURE__ */ new Set([getValue(value)]) : /* @__PURE__ */ new Set();
|
|
9933
9992
|
}, [multiple, value, getValue]);
|
|
9934
|
-
const handleInputChange = (0, import_react51.useCallback)((_, inputValue2) => {
|
|
9993
|
+
const handleInputChange = (0, import_react51.useCallback)((_, inputValue2, reason) => {
|
|
9935
9994
|
setInputValue(inputValue2);
|
|
9936
9995
|
if (!onSearchChange) return;
|
|
9937
9996
|
if (debounceTimer.current) clearTimeout(debounceTimer.current);
|
|
9938
|
-
if (
|
|
9939
|
-
onSearchChange("", 0);
|
|
9997
|
+
if (reason !== "input") {
|
|
9998
|
+
if (reason === "clear") onSearchChange("", 0);
|
|
9940
9999
|
return;
|
|
9941
10000
|
}
|
|
10001
|
+
if (!inputValue2) return;
|
|
9942
10002
|
const q = inputValue2.toLowerCase();
|
|
9943
10003
|
let localCount = 0;
|
|
9944
10004
|
for (const opt of flatOptionsList) {
|
|
@@ -10097,7 +10157,7 @@ function SmartSelect({
|
|
|
10097
10157
|
|
|
10098
10158
|
// lib/RufousTextEditor/RufousTextEditor.tsx
|
|
10099
10159
|
var import_react62 = __toESM(require("react"), 1);
|
|
10100
|
-
var
|
|
10160
|
+
var import_react_dom19 = require("react-dom");
|
|
10101
10161
|
var import_react63 = require("@tiptap/react");
|
|
10102
10162
|
var import_starter_kit = __toESM(require("@tiptap/starter-kit"), 1);
|
|
10103
10163
|
var import_extension_placeholder = __toESM(require("@tiptap/extension-placeholder"), 1);
|
|
@@ -10219,7 +10279,7 @@ function createMentionSuggestion(users) {
|
|
|
10219
10279
|
|
|
10220
10280
|
// lib/RufousTextEditor/Toolbar.tsx
|
|
10221
10281
|
var import_react58 = __toESM(require("react"), 1);
|
|
10222
|
-
var
|
|
10282
|
+
var import_react_dom15 = require("react-dom");
|
|
10223
10283
|
|
|
10224
10284
|
// lib/RufousTextEditor/TextToSpeech.tsx
|
|
10225
10285
|
var import_react54 = __toESM(require("react"), 1);
|
|
@@ -10530,7 +10590,7 @@ var SpeechToText_default = SpeechToText;
|
|
|
10530
10590
|
|
|
10531
10591
|
// lib/RufousTextEditor/AICommands.tsx
|
|
10532
10592
|
var import_react56 = __toESM(require("react"), 1);
|
|
10533
|
-
var
|
|
10593
|
+
var import_react_dom13 = require("react-dom");
|
|
10534
10594
|
var AI_COMMANDS = [
|
|
10535
10595
|
{ id: "improve", label: "Improve writing", prompt: "Improve the following text to make it clearer, more engaging, and well-structured. Return only the improved text, no explanations." },
|
|
10536
10596
|
{ id: "shorter", label: "Make shorter", prompt: "Make the following text shorter and more concise while keeping the key points. Return only the shortened text, no explanations." },
|
|
@@ -10686,7 +10746,7 @@ var AICommands = ({ editor, onAICommand }) => {
|
|
|
10686
10746
|
onClick: () => handleCommandSelect(cmd)
|
|
10687
10747
|
},
|
|
10688
10748
|
cmd.label
|
|
10689
|
-
))), /* @__PURE__ */ import_react56.default.createElement("div", { className: "ai-commands-hint" }, editor.state.selection.empty ? "Will apply to all text" : "Will apply to selected text"))), showModal && (0,
|
|
10749
|
+
))), /* @__PURE__ */ import_react56.default.createElement("div", { className: "ai-commands-hint" }, editor.state.selection.empty ? "Will apply to all text" : "Will apply to selected text"))), showModal && (0, import_react_dom13.createPortal)(
|
|
10690
10750
|
/* @__PURE__ */ import_react56.default.createElement("div", { className: "ai-modal-overlay", onMouseDown: handleCancel }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "ai-modal", onMouseDown: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react56.default.createElement("div", { className: "ai-modal-header" }, /* @__PURE__ */ import_react56.default.createElement("span", { className: "ai-modal-title" }, "AI Assistant"), /* @__PURE__ */ import_react56.default.createElement("button", { className: "ai-modal-close", onClick: handleCancel }, "\xD7")), /* @__PURE__ */ import_react56.default.createElement("div", { className: "ai-modal-prompt-section" }, /* @__PURE__ */ import_react56.default.createElement("label", { className: "ai-modal-label" }, "Prompt"), /* @__PURE__ */ import_react56.default.createElement("div", { className: "ai-modal-prompt-row" }, /* @__PURE__ */ import_react56.default.createElement(
|
|
10691
10751
|
"textarea",
|
|
10692
10752
|
{
|
|
@@ -10735,7 +10795,7 @@ var AICommands_default = AICommands;
|
|
|
10735
10795
|
|
|
10736
10796
|
// lib/RufousTextEditor/TranslateModal.tsx
|
|
10737
10797
|
var import_react57 = __toESM(require("react"), 1);
|
|
10738
|
-
var
|
|
10798
|
+
var import_react_dom14 = require("react-dom");
|
|
10739
10799
|
var LANGUAGES = [
|
|
10740
10800
|
{ code: "af", name: "Afrikaans" },
|
|
10741
10801
|
{ code: "sq", name: "Albanian" },
|
|
@@ -10926,7 +10986,7 @@ var TranslateModal = ({ editor, onClose, onTranslate, initialSource, initialTarg
|
|
|
10926
10986
|
setTranslating(false);
|
|
10927
10987
|
}
|
|
10928
10988
|
};
|
|
10929
|
-
return (0,
|
|
10989
|
+
return (0, import_react_dom14.createPortal)(
|
|
10930
10990
|
/* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-overlay", onClick: onClose }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-content translate-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-header" }, /* @__PURE__ */ import_react57.default.createElement("h3", null, "Translate options"), /* @__PURE__ */ import_react57.default.createElement("button", { className: "modal-close", onClick: onClose }, "\xD7")), /* @__PURE__ */ import_react57.default.createElement("div", { className: "modal-body" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "translate-columns" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "translate-col" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "translate-filter" }, /* @__PURE__ */ import_react57.default.createElement(
|
|
10931
10991
|
"input",
|
|
10932
10992
|
{
|
|
@@ -11835,7 +11895,7 @@ var Dropdown = ({ trigger, children, className = "", keepOpen = false }) => {
|
|
|
11835
11895
|
},
|
|
11836
11896
|
trigger.label,
|
|
11837
11897
|
/* @__PURE__ */ import_react58.default.createElement("span", { className: "dropdown-arrow" }, "\u25BE")
|
|
11838
|
-
)), open && (0,
|
|
11898
|
+
)), open && (0, import_react_dom15.createPortal)(
|
|
11839
11899
|
/* @__PURE__ */ import_react58.default.createElement("div", { className: "rf-rte-wrapper rf-rte-dropdown-portal" }, /* @__PURE__ */ import_react58.default.createElement("div", { ref: menuRef, className: "dropdown-menu dropdown-menu-fixed", onClick: keepOpen ? void 0 : () => setOpen(false) }, typeof children === "function" ? children(() => setOpen(false)) : children)),
|
|
11840
11900
|
document.body
|
|
11841
11901
|
));
|
|
@@ -12720,7 +12780,7 @@ var Toolbar_default = Toolbar;
|
|
|
12720
12780
|
|
|
12721
12781
|
// lib/RufousTextEditor/ImageToolbar.tsx
|
|
12722
12782
|
var import_react59 = __toESM(require("react"), 1);
|
|
12723
|
-
var
|
|
12783
|
+
var import_react_dom16 = require("react-dom");
|
|
12724
12784
|
var ALIGNMENTS = [
|
|
12725
12785
|
{ value: "left", label: "Left", icon: "\u2630" },
|
|
12726
12786
|
{ value: "center", label: "Center", icon: "\u2261" },
|
|
@@ -12891,7 +12951,7 @@ var ImageToolbar = ({ editor }) => {
|
|
|
12891
12951
|
}, [editor]);
|
|
12892
12952
|
const node = editor?.state.selection.node;
|
|
12893
12953
|
const isImage = node && node.type.name === "image";
|
|
12894
|
-
if (!editor || !isImage || !pos) return showModal ? (0,
|
|
12954
|
+
if (!editor || !isImage || !pos) return showModal ? (0, import_react_dom16.createPortal)(
|
|
12895
12955
|
/* @__PURE__ */ import_react59.default.createElement(ImagePropertiesModal, { editor, node, onClose: () => setShowModal(false) }),
|
|
12896
12956
|
document.body
|
|
12897
12957
|
) : null;
|
|
@@ -12968,7 +13028,7 @@ var ImageToolbar = ({ editor }) => {
|
|
|
12968
13028
|
);
|
|
12969
13029
|
setShowVAlign(false);
|
|
12970
13030
|
};
|
|
12971
|
-
return (0,
|
|
13031
|
+
return (0, import_react_dom16.createPortal)(
|
|
12972
13032
|
/* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, /* @__PURE__ */ import_react59.default.createElement(
|
|
12973
13033
|
"div",
|
|
12974
13034
|
{
|
|
@@ -12999,7 +13059,7 @@ var ImageToolbar_default = ImageToolbar;
|
|
|
12999
13059
|
|
|
13000
13060
|
// lib/RufousTextEditor/VideoToolbar.tsx
|
|
13001
13061
|
var import_react60 = __toESM(require("react"), 1);
|
|
13002
|
-
var
|
|
13062
|
+
var import_react_dom17 = require("react-dom");
|
|
13003
13063
|
var ALIGNMENTS2 = [
|
|
13004
13064
|
{ value: "left", label: "Left", icon: "\u2630" },
|
|
13005
13065
|
{ value: "center", label: "Center", icon: "\u2261" },
|
|
@@ -13144,7 +13204,7 @@ var VideoToolbar = ({ editor }) => {
|
|
|
13144
13204
|
const node = editor?.state.selection.node;
|
|
13145
13205
|
const isVideo = node && VIDEO_TYPES.includes(node.type.name);
|
|
13146
13206
|
const nodeType = node?.type.name;
|
|
13147
|
-
if (!editor || !isVideo || !pos) return showModal ? (0,
|
|
13207
|
+
if (!editor || !isVideo || !pos) return showModal ? (0, import_react_dom17.createPortal)(
|
|
13148
13208
|
/* @__PURE__ */ import_react60.default.createElement(VideoPropertiesModal, { editor, node, nodeType, onClose: () => setShowModal(false) }),
|
|
13149
13209
|
document.body
|
|
13150
13210
|
) : null;
|
|
@@ -13191,7 +13251,7 @@ var VideoToolbar = ({ editor }) => {
|
|
|
13191
13251
|
})
|
|
13192
13252
|
);
|
|
13193
13253
|
};
|
|
13194
|
-
return (0,
|
|
13254
|
+
return (0, import_react_dom17.createPortal)(
|
|
13195
13255
|
/* @__PURE__ */ import_react60.default.createElement(import_react60.default.Fragment, null, /* @__PURE__ */ import_react60.default.createElement(
|
|
13196
13256
|
"div",
|
|
13197
13257
|
{
|
|
@@ -13239,7 +13299,7 @@ var VideoToolbar_default = VideoToolbar;
|
|
|
13239
13299
|
|
|
13240
13300
|
// lib/RufousTextEditor/TableToolbar.tsx
|
|
13241
13301
|
var import_react61 = __toESM(require("react"), 1);
|
|
13242
|
-
var
|
|
13302
|
+
var import_react_dom18 = require("react-dom");
|
|
13243
13303
|
var IconAddRowBefore = () => /* @__PURE__ */ import_react61.default.createElement("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "currentColor" }, /* @__PURE__ */ import_react61.default.createElement("path", { d: "M20 3H4c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-1 8H5V5h14v6zm0 8H5v-6h14v6z" }), /* @__PURE__ */ import_react61.default.createElement("path", { d: "M9 6h2v1.5h1.5v2H11V11H9V9.5H7.5v-2H9z" }));
|
|
13244
13304
|
var IconAddRowAfter = () => /* @__PURE__ */ import_react61.default.createElement("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "currentColor" }, /* @__PURE__ */ import_react61.default.createElement("path", { d: "M20 3H4c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-1 8H5V5h14v6zm0 8H5v-6h14v6z" }), /* @__PURE__ */ import_react61.default.createElement("path", { d: "M9 14h2v1.5h1.5v2H11V19H9v-1.5H7.5v-2H9z" }));
|
|
13245
13305
|
var IconAddColBefore = () => /* @__PURE__ */ import_react61.default.createElement("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "currentColor" }, /* @__PURE__ */ import_react61.default.createElement("path", { d: "M20 3H4c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-9 16H5V5h6v14zm8 0h-6V5h6v14z" }), /* @__PURE__ */ import_react61.default.createElement("path", { d: "M6 10h1.5v2H6v1.5H4v-2h1.5V10H4V8h2z", transform: "translate(2,1)" }));
|
|
@@ -13296,7 +13356,7 @@ var TableToolbar = ({ editor }) => {
|
|
|
13296
13356
|
const canMerge = editor.can().mergeCells();
|
|
13297
13357
|
const canSplit = editor.can().splitCell();
|
|
13298
13358
|
const prevent = (e) => e.preventDefault();
|
|
13299
|
-
return (0,
|
|
13359
|
+
return (0, import_react_dom18.createPortal)(
|
|
13300
13360
|
/* @__PURE__ */ import_react61.default.createElement(
|
|
13301
13361
|
"div",
|
|
13302
13362
|
{
|
|
@@ -13903,7 +13963,7 @@ var RufousTextEditor = ({
|
|
|
13903
13963
|
},
|
|
13904
13964
|
"\u201C Quote"
|
|
13905
13965
|
)
|
|
13906
|
-
), /* @__PURE__ */ import_react62.default.createElement("div", { className: "status-bar" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "status-bar-left" }, onSaveProp && /* @__PURE__ */ import_react62.default.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ import_react62.default.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export")), /* @__PURE__ */ import_react62.default.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ import_react62.default.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ import_react62.default.createElement(import_react62.default.Fragment, null, /* @__PURE__ */ import_react62.default.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ import_react62.default.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen && (0,
|
|
13966
|
+
), /* @__PURE__ */ import_react62.default.createElement("div", { className: "status-bar" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "status-bar-left" }, onSaveProp && /* @__PURE__ */ import_react62.default.createElement("button", { onClick: handleSave, className: "status-btn save-btn" }, "Save"), onExportProp && /* @__PURE__ */ import_react62.default.createElement("button", { onClick: handleExport, className: "status-btn export-btn" }, "Export")), /* @__PURE__ */ import_react62.default.createElement("div", { className: "status-bar-right" }, saveStatus && /* @__PURE__ */ import_react62.default.createElement("span", { className: "save-status" }, saveStatus), editor && /* @__PURE__ */ import_react62.default.createElement(import_react62.default.Fragment, null, /* @__PURE__ */ import_react62.default.createElement("span", { className: "word-count" }, "CHARS: ", editor.storage.characterCount?.characters?.() ?? editor.getText().length), /* @__PURE__ */ import_react62.default.createElement("span", { className: "word-count" }, "WORDS: ", editor.storage.characterCount?.words?.() ?? editor.getText().split(/\s+/).filter(Boolean).length)))), linkModalOpen && (0, import_react_dom19.createPortal)(
|
|
13907
13967
|
/* @__PURE__ */ import_react62.default.createElement("div", { className: "link-modal-overlay", onClick: handleLinkCancel }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "link-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "link-modal-body" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "link-modal-field" }, /* @__PURE__ */ import_react62.default.createElement("label", { className: "link-modal-label" }, "URL"), /* @__PURE__ */ import_react62.default.createElement(
|
|
13908
13968
|
"input",
|
|
13909
13969
|
{
|
|
@@ -13948,7 +14008,7 @@ var RufousTextEditor = ({
|
|
|
13948
14008
|
)),
|
|
13949
14009
|
helperText && /* @__PURE__ */ import_react62.default.createElement("div", { className: `rf-rte-helper-text ${error ? "rf-rte-helper-error" : ""}` }, helperText)
|
|
13950
14010
|
);
|
|
13951
|
-
return isFullscreen ? (0,
|
|
14011
|
+
return isFullscreen ? (0, import_react_dom19.createPortal)(wrapperJsx, document.body) : wrapperJsx;
|
|
13952
14012
|
};
|
|
13953
14013
|
var RufousTextContent = ({ content, className, style, sx }) => {
|
|
13954
14014
|
const sxClass = useSx(sx);
|
package/dist/main.css
CHANGED
|
@@ -6944,6 +6944,12 @@ pre {
|
|
|
6944
6944
|
.rf-text-field__input:focus::placeholder {
|
|
6945
6945
|
opacity: 1;
|
|
6946
6946
|
}
|
|
6947
|
+
.rf-text-field:not(.rf-text-field--has-label) .rf-text-field__input::placeholder {
|
|
6948
|
+
opacity: 1;
|
|
6949
|
+
}
|
|
6950
|
+
.rf-text-field__legend--empty {
|
|
6951
|
+
display: none;
|
|
6952
|
+
}
|
|
6947
6953
|
.rf-text-field__helper-text {
|
|
6948
6954
|
color: var(--tf-placeholder-color);
|
|
6949
6955
|
font-size: 0.75rem;
|
package/dist/main.d.cts
CHANGED
|
@@ -714,8 +714,8 @@ interface AutocompleteProps<T = string> {
|
|
|
714
714
|
onChange?: (event: React__default.SyntheticEvent, value: T | T[] | null, reason: 'selectOption' | 'removeOption' | 'clear' | 'freeSolo') => void;
|
|
715
715
|
/** Controlled text in the input */
|
|
716
716
|
inputValue?: string;
|
|
717
|
-
/** Called on every keystroke — receives the native event
|
|
718
|
-
onInputChange?: (event: React__default.SyntheticEvent | null, value: string) => void;
|
|
717
|
+
/** Called on every keystroke or when input resets — receives the native event, new input string, and reason */
|
|
718
|
+
onInputChange?: (event: React__default.SyntheticEvent | null, value: string, reason: 'input' | 'reset' | 'clear') => void;
|
|
719
719
|
/** Return the string label for an option */
|
|
720
720
|
getOptionLabel?: (option: T) => string;
|
|
721
721
|
/** Decide equality between option and value (useful for objects) */
|
package/dist/main.d.ts
CHANGED
|
@@ -714,8 +714,8 @@ interface AutocompleteProps<T = string> {
|
|
|
714
714
|
onChange?: (event: React__default.SyntheticEvent, value: T | T[] | null, reason: 'selectOption' | 'removeOption' | 'clear' | 'freeSolo') => void;
|
|
715
715
|
/** Controlled text in the input */
|
|
716
716
|
inputValue?: string;
|
|
717
|
-
/** Called on every keystroke — receives the native event
|
|
718
|
-
onInputChange?: (event: React__default.SyntheticEvent | null, value: string) => void;
|
|
717
|
+
/** Called on every keystroke or when input resets — receives the native event, new input string, and reason */
|
|
718
|
+
onInputChange?: (event: React__default.SyntheticEvent | null, value: string, reason: 'input' | 'reset' | 'clear') => void;
|
|
719
719
|
/** Return the string label for an option */
|
|
720
720
|
getOptionLabel?: (option: T) => string;
|
|
721
721
|
/** Decide equality between option and value (useful for objects) */
|
package/dist/main.js
CHANGED
|
@@ -1659,12 +1659,6 @@ var STEP_BY_VARIANT = {
|
|
|
1659
1659
|
"positive-integer": 1,
|
|
1660
1660
|
"positive-decimal": 0.1
|
|
1661
1661
|
};
|
|
1662
|
-
var MIN_BY_VARIANT = {
|
|
1663
|
-
"integer": void 0,
|
|
1664
|
-
"decimal": void 0,
|
|
1665
|
-
"positive-integer": 0,
|
|
1666
|
-
"positive-decimal": 0
|
|
1667
|
-
};
|
|
1668
1662
|
var TextField = forwardRef3(({
|
|
1669
1663
|
label,
|
|
1670
1664
|
name,
|
|
@@ -1753,21 +1747,23 @@ var TextField = forwardRef3(({
|
|
|
1753
1747
|
}
|
|
1754
1748
|
}
|
|
1755
1749
|
};
|
|
1750
|
+
const stepBy = (delta) => {
|
|
1751
|
+
if (!internalRef.current) return;
|
|
1752
|
+
const step = Number(stepProp ?? (numberVariant ? STEP_BY_VARIANT[numberVariant] : 1));
|
|
1753
|
+
const newVal = (parseFloat(internalRef.current.value) || 0) + delta * step;
|
|
1754
|
+
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value")?.set;
|
|
1755
|
+
nativeInputValueSetter?.call(internalRef.current, String(newVal));
|
|
1756
|
+
triggerChange();
|
|
1757
|
+
};
|
|
1756
1758
|
const handleIncrement = (e) => {
|
|
1757
1759
|
e.preventDefault();
|
|
1758
1760
|
e.stopPropagation();
|
|
1759
|
-
|
|
1760
|
-
internalRef.current.stepUp();
|
|
1761
|
-
triggerChange();
|
|
1762
|
-
}
|
|
1761
|
+
stepBy(1);
|
|
1763
1762
|
};
|
|
1764
1763
|
const handleDecrement = (e) => {
|
|
1765
1764
|
e.preventDefault();
|
|
1766
1765
|
e.stopPropagation();
|
|
1767
|
-
|
|
1768
|
-
internalRef.current.stepDown();
|
|
1769
|
-
triggerChange();
|
|
1770
|
-
}
|
|
1766
|
+
stepBy(-1);
|
|
1771
1767
|
};
|
|
1772
1768
|
const handleKeyDown = (e) => {
|
|
1773
1769
|
if (type === "number") {
|
|
@@ -1778,16 +1774,10 @@ var TextField = forwardRef3(({
|
|
|
1778
1774
|
}
|
|
1779
1775
|
if (e.key === "ArrowUp") {
|
|
1780
1776
|
e.preventDefault();
|
|
1781
|
-
|
|
1782
|
-
internalRef.current.stepUp();
|
|
1783
|
-
triggerChange();
|
|
1784
|
-
}
|
|
1777
|
+
stepBy(1);
|
|
1785
1778
|
} else if (e.key === "ArrowDown") {
|
|
1786
1779
|
e.preventDefault();
|
|
1787
|
-
|
|
1788
|
-
internalRef.current.stepDown();
|
|
1789
|
-
triggerChange();
|
|
1790
|
-
}
|
|
1780
|
+
stepBy(-1);
|
|
1791
1781
|
}
|
|
1792
1782
|
}
|
|
1793
1783
|
if (props.onKeyDown) props.onKeyDown(e);
|
|
@@ -1813,18 +1803,24 @@ var TextField = forwardRef3(({
|
|
|
1813
1803
|
"input",
|
|
1814
1804
|
{
|
|
1815
1805
|
ref: internalRef,
|
|
1816
|
-
type,
|
|
1806
|
+
type: type === "number" ? "text" : type,
|
|
1807
|
+
inputMode: type === "number" ? "numeric" : void 0,
|
|
1817
1808
|
onKeyDown: handleKeyDown,
|
|
1818
1809
|
className: "rf-text-field__input",
|
|
1819
1810
|
placeholder: placeholder || (variant === "outlined" ? " " : void 0),
|
|
1820
1811
|
name,
|
|
1821
1812
|
id: inputId,
|
|
1822
|
-
value
|
|
1813
|
+
value: (() => {
|
|
1814
|
+
if (type !== "number" || value === void 0 || value === null || value === "") return value;
|
|
1815
|
+
const str = String(value);
|
|
1816
|
+
if (!str.includes("e") && !str.includes("E")) return str;
|
|
1817
|
+
const num = Number(str);
|
|
1818
|
+
if (isNaN(num)) return str;
|
|
1819
|
+
return num.toLocaleString("en-US", { useGrouping: false, maximumFractionDigits: 20 });
|
|
1820
|
+
})(),
|
|
1823
1821
|
required,
|
|
1824
1822
|
disabled,
|
|
1825
1823
|
readOnly,
|
|
1826
|
-
step: type === "number" ? stepProp ?? (numberVariant ? STEP_BY_VARIANT[numberVariant] : void 0) : void 0,
|
|
1827
|
-
min: type === "number" && numberVariant ? MIN_BY_VARIANT[numberVariant] : void 0,
|
|
1828
1824
|
...slotProps?.input,
|
|
1829
1825
|
...props,
|
|
1830
1826
|
onChange: handleChange
|
|
@@ -2247,7 +2243,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2247
2243
|
onClose?.();
|
|
2248
2244
|
if (!justSelected && !freeSolo && !multiple && value == null) {
|
|
2249
2245
|
setInputStr("");
|
|
2250
|
-
onInputChange?.(null, "");
|
|
2246
|
+
onInputChange?.(null, "", "reset");
|
|
2251
2247
|
}
|
|
2252
2248
|
}, [openProp, freeSolo, multiple, value, onInputChange, onClose]);
|
|
2253
2249
|
useEffect5(() => {
|
|
@@ -2292,13 +2288,13 @@ function AutocompleteInner(props, _ref) {
|
|
|
2292
2288
|
onChange?.(event, next, already ? "removeOption" : "selectOption");
|
|
2293
2289
|
setInputStr("");
|
|
2294
2290
|
setFilterQuery("");
|
|
2295
|
-
onInputChange?.(event, "");
|
|
2291
|
+
onInputChange?.(event, "", "reset");
|
|
2296
2292
|
inputRef.current?.focus();
|
|
2297
2293
|
} else {
|
|
2298
2294
|
onChange?.(event, opt, "selectOption");
|
|
2299
2295
|
setInputStr(getOptionLabel(opt));
|
|
2300
2296
|
setFilterQuery("");
|
|
2301
|
-
onInputChange?.(event, getOptionLabel(opt));
|
|
2297
|
+
onInputChange?.(event, getOptionLabel(opt), "reset");
|
|
2302
2298
|
closePopup(true);
|
|
2303
2299
|
}
|
|
2304
2300
|
setFocusedIdx(-1);
|
|
@@ -2308,7 +2304,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2308
2304
|
onChange?.(e, multiple ? [] : null, "clear");
|
|
2309
2305
|
setInputStr("");
|
|
2310
2306
|
setFilterQuery("");
|
|
2311
|
-
onInputChange?.(e, "");
|
|
2307
|
+
onInputChange?.(e, "", "clear");
|
|
2312
2308
|
inputRef.current?.focus();
|
|
2313
2309
|
};
|
|
2314
2310
|
const removeTag = (opt, e) => {
|
|
@@ -2320,7 +2316,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2320
2316
|
const v = e.target.value;
|
|
2321
2317
|
setInputStr(v);
|
|
2322
2318
|
setFilterQuery(v);
|
|
2323
|
-
onInputChange?.(e, v);
|
|
2319
|
+
onInputChange?.(e, v, "input");
|
|
2324
2320
|
if (!open) openPopup();
|
|
2325
2321
|
};
|
|
2326
2322
|
const handleKeyDown = (e) => {
|
|
@@ -2407,7 +2403,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2407
2403
|
multiple && (renderTags ? renderTags(selectedValues, ({ index }) => ({
|
|
2408
2404
|
key: index,
|
|
2409
2405
|
onDelete: (e) => removeTag(selectedValues[index], e)
|
|
2410
|
-
})) : /* @__PURE__ */ React70.createElement(React70.Fragment, null, visibleTags.map((opt, i) => /* @__PURE__ */ React70.createElement("span", { key: i, className: "rf-autocomplete__tag" }, /* @__PURE__ */ React70.createElement("span", { style: { overflow: "hidden", textOverflow: "ellipsis" } }, getOptionLabel(opt)), /* @__PURE__ */ React70.createElement(
|
|
2406
|
+
})) : /* @__PURE__ */ React70.createElement(React70.Fragment, null, visibleTags.map((opt, i) => /* @__PURE__ */ React70.createElement("span", { key: i, className: "rf-autocomplete__tag" }, /* @__PURE__ */ React70.createElement("span", { style: { overflow: "hidden", textOverflow: "ellipsis" } }, getOptionLabel(opt)), !disabled && /* @__PURE__ */ React70.createElement(
|
|
2411
2407
|
"button",
|
|
2412
2408
|
{
|
|
2413
2409
|
type: "button",
|
|
@@ -2460,7 +2456,7 @@ function AutocompleteInner(props, _ref) {
|
|
|
2460
2456
|
"aria-label": "Clear"
|
|
2461
2457
|
},
|
|
2462
2458
|
/* @__PURE__ */ React70.createElement(CloseSmIcon, { size: 16 })
|
|
2463
|
-
), !freeSolo && /* @__PURE__ */ React70.createElement(
|
|
2459
|
+
), !freeSolo && !disabled && /* @__PURE__ */ React70.createElement(
|
|
2464
2460
|
"button",
|
|
2465
2461
|
{
|
|
2466
2462
|
type: "button",
|
|
@@ -3640,16 +3636,15 @@ var DateField = ({
|
|
|
3640
3636
|
}
|
|
3641
3637
|
}
|
|
3642
3638
|
),
|
|
3643
|
-
/* @__PURE__ */ React72.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ React72.createElement(
|
|
3639
|
+
!disabled && /* @__PURE__ */ React72.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ React72.createElement(
|
|
3644
3640
|
"button",
|
|
3645
3641
|
{
|
|
3646
3642
|
type: "button",
|
|
3647
3643
|
className: "rf-date-field__icon-btn",
|
|
3648
3644
|
tabIndex: -1,
|
|
3649
|
-
disabled,
|
|
3650
3645
|
onClick: (e) => {
|
|
3651
3646
|
e.stopPropagation();
|
|
3652
|
-
|
|
3647
|
+
setOpen((o) => !o);
|
|
3653
3648
|
},
|
|
3654
3649
|
"aria-label": "Pick date"
|
|
3655
3650
|
},
|
|
@@ -4253,16 +4248,15 @@ var DateRangeField = ({
|
|
|
4253
4248
|
}
|
|
4254
4249
|
}
|
|
4255
4250
|
),
|
|
4256
|
-
/* @__PURE__ */ React73.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ React73.createElement(
|
|
4251
|
+
!disabled && /* @__PURE__ */ React73.createElement("div", { className: "rf-text-field__adornment rf-text-field__adornment--end" }, /* @__PURE__ */ React73.createElement(
|
|
4257
4252
|
"button",
|
|
4258
4253
|
{
|
|
4259
4254
|
type: "button",
|
|
4260
4255
|
className: "rf-date-field__icon-btn",
|
|
4261
4256
|
tabIndex: -1,
|
|
4262
|
-
disabled,
|
|
4263
4257
|
onClick: (e) => {
|
|
4264
4258
|
e.stopPropagation();
|
|
4265
|
-
|
|
4259
|
+
setOpen((o) => !o);
|
|
4266
4260
|
},
|
|
4267
4261
|
"aria-label": "Pick date range"
|
|
4268
4262
|
},
|
|
@@ -4456,6 +4450,7 @@ var RufousLogoLoader = ({ size = 80, sx, className }) => {
|
|
|
4456
4450
|
|
|
4457
4451
|
// lib/DataGrid/DataGrid.tsx
|
|
4458
4452
|
import React75, { useState as useState9, useMemo as useMemo2, useRef as useRef10, useEffect as useEffect9 } from "react";
|
|
4453
|
+
import ReactDOM4 from "react-dom";
|
|
4459
4454
|
import {
|
|
4460
4455
|
ChevronUp,
|
|
4461
4456
|
ChevronDown,
|
|
@@ -4468,6 +4463,7 @@ import {
|
|
|
4468
4463
|
X as X2,
|
|
4469
4464
|
Pin,
|
|
4470
4465
|
EyeOff,
|
|
4466
|
+
Eye,
|
|
4471
4467
|
Columns,
|
|
4472
4468
|
ArrowUp,
|
|
4473
4469
|
ArrowDown,
|
|
@@ -4476,6 +4472,57 @@ import {
|
|
|
4476
4472
|
ChevronsUpDown,
|
|
4477
4473
|
Layers
|
|
4478
4474
|
} from "lucide-react";
|
|
4475
|
+
function OverflowTooltip({ content }) {
|
|
4476
|
+
const ref = useRef10(null);
|
|
4477
|
+
const [pos, setPos] = useState9(null);
|
|
4478
|
+
return /* @__PURE__ */ React75.createElement(React75.Fragment, null, /* @__PURE__ */ React75.createElement(
|
|
4479
|
+
"span",
|
|
4480
|
+
{
|
|
4481
|
+
ref,
|
|
4482
|
+
onMouseEnter: () => {
|
|
4483
|
+
if (ref.current && ref.current.scrollWidth > ref.current.clientWidth) {
|
|
4484
|
+
const r = ref.current.getBoundingClientRect();
|
|
4485
|
+
setPos({ top: r.top, left: r.left + r.width / 2 });
|
|
4486
|
+
}
|
|
4487
|
+
},
|
|
4488
|
+
onMouseLeave: () => setPos(null),
|
|
4489
|
+
style: { display: "block", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }
|
|
4490
|
+
},
|
|
4491
|
+
content
|
|
4492
|
+
), pos && ReactDOM4.createPortal(
|
|
4493
|
+
/* @__PURE__ */ React75.createElement("div", { style: {
|
|
4494
|
+
position: "fixed",
|
|
4495
|
+
top: pos.top - 4,
|
|
4496
|
+
left: pos.left,
|
|
4497
|
+
transform: "translate(-50%, -100%)",
|
|
4498
|
+
background: "rgba(0,0,0,0.75)",
|
|
4499
|
+
color: "#fff",
|
|
4500
|
+
padding: "4px 8px",
|
|
4501
|
+
borderRadius: 4,
|
|
4502
|
+
fontSize: "0.75rem",
|
|
4503
|
+
maxWidth: 320,
|
|
4504
|
+
wordBreak: "break-word",
|
|
4505
|
+
zIndex: 9999,
|
|
4506
|
+
pointerEvents: "none",
|
|
4507
|
+
whiteSpace: "normal"
|
|
4508
|
+
} }, content),
|
|
4509
|
+
document.body
|
|
4510
|
+
));
|
|
4511
|
+
}
|
|
4512
|
+
function formatCellValue(value, colType) {
|
|
4513
|
+
if (value == null) return "";
|
|
4514
|
+
if (colType === "number") {
|
|
4515
|
+
const num = Number(value);
|
|
4516
|
+
if (!isNaN(num)) {
|
|
4517
|
+
const str = String(num);
|
|
4518
|
+
if (str.includes("e") || str.includes("E")) {
|
|
4519
|
+
return num.toLocaleString("en-US", { useGrouping: false, maximumFractionDigits: 20 });
|
|
4520
|
+
}
|
|
4521
|
+
return str;
|
|
4522
|
+
}
|
|
4523
|
+
}
|
|
4524
|
+
return String(value);
|
|
4525
|
+
}
|
|
4479
4526
|
function getAllGroupIds(rows, fields, getKey, depth = 0, parentId = "") {
|
|
4480
4527
|
if (!fields.length || !rows.length) return [];
|
|
4481
4528
|
const [field, ...rest] = fields;
|
|
@@ -5151,6 +5198,7 @@ function DataGrid({
|
|
|
5151
5198
|
onChange: (e) => {
|
|
5152
5199
|
setFilterText(e.target.value);
|
|
5153
5200
|
setCurrentPage(1);
|
|
5201
|
+
if (onPaginationModelChange) onPaginationModelChange({ page: 0, pageSize: activePageSize });
|
|
5154
5202
|
}
|
|
5155
5203
|
}
|
|
5156
5204
|
)), showFilterBtn && /* @__PURE__ */ React75.createElement(Tooltip, { title: "Filters", placement: "top" }, /* @__PURE__ */ React75.createElement(
|
|
@@ -5358,7 +5406,7 @@ function DataGrid({
|
|
|
5358
5406
|
const formattedValue = col.valueFormatter ? col.valueFormatter({ value, row: item, field }) : value;
|
|
5359
5407
|
if (col.renderCell) return col.renderCell({ value, row: item, field });
|
|
5360
5408
|
if (col.render) return col.render(value, item);
|
|
5361
|
-
return
|
|
5409
|
+
return /* @__PURE__ */ React75.createElement(OverflowTooltip, { content: formatCellValue(formattedValue, col.type) });
|
|
5362
5410
|
})()
|
|
5363
5411
|
);
|
|
5364
5412
|
}), actions && /* @__PURE__ */ React75.createElement("td", { className: "dg-row-actions-cell" }, (() => {
|
|
@@ -5427,7 +5475,7 @@ function DataGrid({
|
|
|
5427
5475
|
setActiveMenu(null);
|
|
5428
5476
|
} }, /* @__PURE__ */ React75.createElement(Layers, { size: 14 }), " Group by");
|
|
5429
5477
|
})(),
|
|
5430
|
-
/* @__PURE__ */ React75.createElement("button", { className: "dg-menu-item", onClick: () => toggleHide(activeMenu) }, /* @__PURE__ */ React75.createElement(EyeOff, { size: 14 }), " Hide column"),
|
|
5478
|
+
activeMenuCol?.hideable !== false && /* @__PURE__ */ React75.createElement("button", { className: "dg-menu-item", onClick: () => toggleHide(activeMenu) }, /* @__PURE__ */ React75.createElement(EyeOff, { size: 14 }), " Hide column"),
|
|
5431
5479
|
/* @__PURE__ */ React75.createElement("button", { className: "dg-menu-item", onClick: () => {
|
|
5432
5480
|
setShowManageColumns(true);
|
|
5433
5481
|
setActiveMenu(null);
|
|
@@ -5444,7 +5492,7 @@ function DataGrid({
|
|
|
5444
5492
|
)), resolvedColumns.filter((c) => c.header.toLowerCase().includes(colSearch.toLowerCase())).map((col) => {
|
|
5445
5493
|
const key = String(col.key);
|
|
5446
5494
|
const isUnhideable = col.hideable === false;
|
|
5447
|
-
return /* @__PURE__ */ React75.createElement("div", { key, className: `dg-col-row${isUnhideable ? " disabled" : ""}` }, /* @__PURE__ */ React75.createElement("div", { className: "dg-col-label" }, /* @__PURE__ */ React75.createElement("div", { className: "dg-col-dot", style: { background: col.hidden ? "var(--border-color)" : "var(--primary-color)" } }), col.header), !isUnhideable && /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: () => toggleHide(key) }, col.hidden ? /* @__PURE__ */ React75.createElement(EyeOff, { size: 14 }) : /* @__PURE__ */ React75.createElement(
|
|
5495
|
+
return /* @__PURE__ */ React75.createElement("div", { key, className: `dg-col-row${isUnhideable ? " disabled" : ""}` }, /* @__PURE__ */ React75.createElement("div", { className: "dg-col-label" }, /* @__PURE__ */ React75.createElement("div", { className: "dg-col-dot", style: { background: col.hidden ? "var(--border-color)" : "var(--primary-color)" } }), col.header), !isUnhideable && /* @__PURE__ */ React75.createElement("button", { className: "dg-icon-btn", onClick: () => toggleHide(key) }, col.hidden ? /* @__PURE__ */ React75.createElement(EyeOff, { size: 14 }) : /* @__PURE__ */ React75.createElement(Eye, { size: 14 })));
|
|
5448
5496
|
})), /* @__PURE__ */ React75.createElement("div", { className: "dg-modal-footer" }, /* @__PURE__ */ React75.createElement("button", { className: "dg-action-btn", onClick: () => setColumnOverrides((prev) => {
|
|
5449
5497
|
const next = { ...prev };
|
|
5450
5498
|
resolvedColumns.forEach((c) => {
|
|
@@ -5504,7 +5552,9 @@ function DataGrid({
|
|
|
5504
5552
|
value: f.value,
|
|
5505
5553
|
onChange: (val) => setAdvancedFilters((p) => p.map((fi, i) => i === idx ? { ...fi, value: val } : fi)),
|
|
5506
5554
|
variant: "compact",
|
|
5507
|
-
fullWidth: true
|
|
5555
|
+
fullWidth: true,
|
|
5556
|
+
dateFormat: "DD/MM/YYYY",
|
|
5557
|
+
placeholder: "DD/MM/YYYY"
|
|
5508
5558
|
}
|
|
5509
5559
|
)), !hideValue && col?.type === "status" && (() => {
|
|
5510
5560
|
const opts = col.statusOptions || [...new Set(data.map((item) => String(item[col.field || col.key || ""])))].filter((v) => v && v !== "undefined" && v !== "null").sort();
|
|
@@ -5563,7 +5613,7 @@ import React76, {
|
|
|
5563
5613
|
useEffect as useEffect10,
|
|
5564
5614
|
useCallback as useCallback5
|
|
5565
5615
|
} from "react";
|
|
5566
|
-
import
|
|
5616
|
+
import ReactDOM5 from "react-dom";
|
|
5567
5617
|
var ChevronDownIcon2 = () => /* @__PURE__ */ React76.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React76.createElement("polyline", { points: "6 9 12 15 18 9" }));
|
|
5568
5618
|
var CheckIcon2 = () => /* @__PURE__ */ React76.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React76.createElement("polyline", { points: "20 6 9 17 4 12" }));
|
|
5569
5619
|
function normaliseOptions(options) {
|
|
@@ -5772,10 +5822,10 @@ var Select = React76.forwardRef(function Select2(props, ref) {
|
|
|
5772
5822
|
renderDisplay(),
|
|
5773
5823
|
label && /* @__PURE__ */ React76.createElement("label", { id: inputId, className: "rf-text-field__label" }, label, required && /* @__PURE__ */ React76.createElement("span", { className: "rf-text-field__asterisk" }, " *")),
|
|
5774
5824
|
variant === "outlined" && /* @__PURE__ */ React76.createElement("fieldset", { className: "rf-text-field__notch" }, label ? /* @__PURE__ */ React76.createElement("legend", { className: "rf-text-field__legend" }, /* @__PURE__ */ React76.createElement("span", null, label, required ? " *" : "")) : /* @__PURE__ */ React76.createElement("legend", { className: "rf-text-field__legend--empty" })),
|
|
5775
|
-
/* @__PURE__ */ React76.createElement("div", { className: "rf-select__arrow", "aria-hidden": "true" }, /* @__PURE__ */ React76.createElement(ChevronDownIcon2, null))
|
|
5825
|
+
!disabled && /* @__PURE__ */ React76.createElement("div", { className: "rf-select__arrow", "aria-hidden": "true" }, /* @__PURE__ */ React76.createElement(ChevronDownIcon2, null))
|
|
5776
5826
|
),
|
|
5777
5827
|
helperText && /* @__PURE__ */ React76.createElement("div", { className: `rf-text-field__helper-text${error ? " rf-text-field__helper-text--error" : ""}` }, helperText),
|
|
5778
|
-
open && !disabled &&
|
|
5828
|
+
open && !disabled && ReactDOM5.createPortal(
|
|
5779
5829
|
/* @__PURE__ */ React76.createElement("div", { ref: popupRef, className: "rf-select__popup", role: "presentation", style: popupStyle }, /* @__PURE__ */ React76.createElement("ul", { ref: listRef, className: "rf-select__listbox", role: "listbox", "aria-multiselectable": multiple }, (() => {
|
|
5780
5830
|
const renderOpt = (opt, selectableIdx) => {
|
|
5781
5831
|
const selected = isSelected(opt.value);
|
|
@@ -7892,7 +7942,7 @@ import React97, {
|
|
|
7892
7942
|
useRef as useRef17,
|
|
7893
7943
|
useState as useState17
|
|
7894
7944
|
} from "react";
|
|
7895
|
-
import
|
|
7945
|
+
import ReactDOM6 from "react-dom";
|
|
7896
7946
|
var MenuDivider = () => /* @__PURE__ */ React97.createElement("hr", { className: "rf-menu-divider", "aria-hidden": "true" });
|
|
7897
7947
|
MenuDivider.displayName = "MenuDivider";
|
|
7898
7948
|
var MenuItem = ({
|
|
@@ -8045,7 +8095,7 @@ var Menu = ({
|
|
|
8045
8095
|
},
|
|
8046
8096
|
children
|
|
8047
8097
|
));
|
|
8048
|
-
return
|
|
8098
|
+
return ReactDOM6.createPortal(portal, document.body);
|
|
8049
8099
|
};
|
|
8050
8100
|
Menu.displayName = "Menu";
|
|
8051
8101
|
|
|
@@ -8054,7 +8104,7 @@ import React98, {
|
|
|
8054
8104
|
useEffect as useEffect14,
|
|
8055
8105
|
useState as useState18
|
|
8056
8106
|
} from "react";
|
|
8057
|
-
import
|
|
8107
|
+
import ReactDOM7 from "react-dom";
|
|
8058
8108
|
var Drawer = ({
|
|
8059
8109
|
open,
|
|
8060
8110
|
onClose,
|
|
@@ -8154,7 +8204,7 @@ var Drawer = ({
|
|
|
8154
8204
|
},
|
|
8155
8205
|
children
|
|
8156
8206
|
));
|
|
8157
|
-
return
|
|
8207
|
+
return ReactDOM7.createPortal(
|
|
8158
8208
|
/* @__PURE__ */ React98.createElement("div", { className: rootClasses, style }, drawerContent),
|
|
8159
8209
|
document.body
|
|
8160
8210
|
);
|
|
@@ -8168,7 +8218,7 @@ import React99, {
|
|
|
8168
8218
|
useRef as useRef18,
|
|
8169
8219
|
useState as useState19
|
|
8170
8220
|
} from "react";
|
|
8171
|
-
import
|
|
8221
|
+
import ReactDOM8 from "react-dom";
|
|
8172
8222
|
var SEVERITY_ICONS = {
|
|
8173
8223
|
success: "\u2713",
|
|
8174
8224
|
error: "\u2715",
|
|
@@ -8273,7 +8323,7 @@ var Snackbar = ({
|
|
|
8273
8323
|
"\u2715"
|
|
8274
8324
|
)
|
|
8275
8325
|
));
|
|
8276
|
-
return
|
|
8326
|
+
return ReactDOM8.createPortal(snackbarEl, document.body);
|
|
8277
8327
|
};
|
|
8278
8328
|
Snackbar.displayName = "Snackbar";
|
|
8279
8329
|
|
|
@@ -8332,7 +8382,7 @@ import React101, {
|
|
|
8332
8382
|
useRef as useRef19,
|
|
8333
8383
|
useState as useState20
|
|
8334
8384
|
} from "react";
|
|
8335
|
-
import
|
|
8385
|
+
import ReactDOM9 from "react-dom";
|
|
8336
8386
|
function computePopperPosition(anchorRect, popperRect, placement, offset2 = [0, 8]) {
|
|
8337
8387
|
const [skid, dist] = offset2;
|
|
8338
8388
|
let top = 0;
|
|
@@ -8475,7 +8525,7 @@ var Popper = ({
|
|
|
8475
8525
|
if (disablePortal) {
|
|
8476
8526
|
return /* @__PURE__ */ React101.createElement(React101.Fragment, null, popper);
|
|
8477
8527
|
}
|
|
8478
|
-
return
|
|
8528
|
+
return ReactDOM9.createPortal(popper, document.body);
|
|
8479
8529
|
};
|
|
8480
8530
|
Popper.displayName = "Popper";
|
|
8481
8531
|
|
|
@@ -8486,7 +8536,7 @@ import React102, {
|
|
|
8486
8536
|
useRef as useRef20,
|
|
8487
8537
|
useState as useState21
|
|
8488
8538
|
} from "react";
|
|
8489
|
-
import
|
|
8539
|
+
import ReactDOM10 from "react-dom";
|
|
8490
8540
|
function getPoint(rect, v, h) {
|
|
8491
8541
|
const x = h === "left" ? rect.left : h === "center" ? rect.left + rect.width / 2 : rect.right;
|
|
8492
8542
|
const y = v === "top" ? rect.top : v === "center" ? rect.top + rect.height / 2 : rect.bottom;
|
|
@@ -8589,7 +8639,7 @@ var Popover = ({
|
|
|
8589
8639
|
if (disablePortal) {
|
|
8590
8640
|
return /* @__PURE__ */ React102.createElement("div", { className: `${rootClasses} rf-popover-inline`, style }, content);
|
|
8591
8641
|
}
|
|
8592
|
-
return
|
|
8642
|
+
return ReactDOM10.createPortal(
|
|
8593
8643
|
/* @__PURE__ */ React102.createElement("div", { className: rootClasses, style }, content),
|
|
8594
8644
|
document.body
|
|
8595
8645
|
);
|
|
@@ -9256,7 +9306,7 @@ import React106, {
|
|
|
9256
9306
|
useEffect as useEffect20,
|
|
9257
9307
|
useCallback as useCallback10
|
|
9258
9308
|
} from "react";
|
|
9259
|
-
import
|
|
9309
|
+
import ReactDOM11 from "react-dom";
|
|
9260
9310
|
import { ChevronDown as ChevronDown2, ChevronRight as ChevronRight2, X as X3, Search as Search2, Check, Minus } from "lucide-react";
|
|
9261
9311
|
function nodeId(node) {
|
|
9262
9312
|
return node.id ?? node._id;
|
|
@@ -9566,11 +9616,13 @@ function TreeSelect({
|
|
|
9566
9616
|
error ? "rf-text-field--error" : "",
|
|
9567
9617
|
fullWidth ? "rf-text-field--full-width" : "",
|
|
9568
9618
|
isFloating ? "rf-text-field--floating" : "",
|
|
9619
|
+
label ? "rf-text-field--has-label" : "",
|
|
9620
|
+
"rf-text-field--adorned-end",
|
|
9569
9621
|
"rf-tree-select",
|
|
9570
9622
|
sxClass,
|
|
9571
9623
|
className
|
|
9572
9624
|
].filter(Boolean).join(" ");
|
|
9573
|
-
return /* @__PURE__ */ React106.createElement("div", { className: rootClasses, style },
|
|
9625
|
+
return /* @__PURE__ */ React106.createElement("div", { className: rootClasses, style }, /* @__PURE__ */ React106.createElement(
|
|
9574
9626
|
"div",
|
|
9575
9627
|
{
|
|
9576
9628
|
ref: triggerRef,
|
|
@@ -9582,7 +9634,7 @@ function TreeSelect({
|
|
|
9582
9634
|
onBlur: handleTriggerBlur,
|
|
9583
9635
|
onKeyDown: handleKeyDown
|
|
9584
9636
|
},
|
|
9585
|
-
isMultiple ? /* @__PURE__ */ React106.createElement("div", { className: "rf-ts__chips" }, tagNodes.length > 0 ? tagNodes.map((node) => /* @__PURE__ */ React106.createElement("span", { key: node.id, className: "rf-ts__chip" }, node.label, /* @__PURE__ */ React106.createElement(
|
|
9637
|
+
isMultiple ? /* @__PURE__ */ React106.createElement("div", { className: "rf-ts__chips" }, tagNodes.length > 0 ? tagNodes.map((node) => /* @__PURE__ */ React106.createElement("span", { key: node.id, className: "rf-ts__chip" }, node.label, !disabled && /* @__PURE__ */ React106.createElement(
|
|
9586
9638
|
"button",
|
|
9587
9639
|
{
|
|
9588
9640
|
type: "button",
|
|
@@ -9591,8 +9643,8 @@ function TreeSelect({
|
|
|
9591
9643
|
tabIndex: -1
|
|
9592
9644
|
},
|
|
9593
9645
|
/* @__PURE__ */ React106.createElement(X3, { size: 10 })
|
|
9594
|
-
))) :
|
|
9595
|
-
/* @__PURE__ */ React106.createElement("div", { className: "rf-autocomplete__endgroup" }, clearable && hasValue && /* @__PURE__ */ React106.createElement(
|
|
9646
|
+
))) : 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"),
|
|
9647
|
+
/* @__PURE__ */ React106.createElement("div", { className: "rf-autocomplete__endgroup" }, !disabled && clearable && hasValue && /* @__PURE__ */ React106.createElement(
|
|
9596
9648
|
"button",
|
|
9597
9649
|
{
|
|
9598
9650
|
type: "button",
|
|
@@ -9601,7 +9653,7 @@ function TreeSelect({
|
|
|
9601
9653
|
tabIndex: -1
|
|
9602
9654
|
},
|
|
9603
9655
|
/* @__PURE__ */ React106.createElement(X3, { size: 16 })
|
|
9604
|
-
), /* @__PURE__ */ React106.createElement(
|
|
9656
|
+
), !disabled && /* @__PURE__ */ React106.createElement(
|
|
9605
9657
|
"button",
|
|
9606
9658
|
{
|
|
9607
9659
|
type: "button",
|
|
@@ -9614,10 +9666,11 @@ function TreeSelect({
|
|
|
9614
9666
|
},
|
|
9615
9667
|
/* @__PURE__ */ React106.createElement(ChevronDown2, { size: 18 })
|
|
9616
9668
|
)),
|
|
9669
|
+
label && /* @__PURE__ */ React106.createElement("label", { className: "rf-text-field__label" }, label, required && /* @__PURE__ */ React106.createElement("span", { className: "rf-text-field__asterisk" }, " *")),
|
|
9617
9670
|
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 ? " *" : ""))),
|
|
9618
9671
|
variant === "filled" && /* @__PURE__ */ React106.createElement(React106.Fragment, null, /* @__PURE__ */ React106.createElement("div", { className: "rf-text-field__filled-bg" }), /* @__PURE__ */ React106.createElement("div", { className: "rf-text-field__underline" })),
|
|
9619
9672
|
variant === "standard" && /* @__PURE__ */ React106.createElement("div", { className: "rf-text-field__underline" })
|
|
9620
|
-
), helperText && /* @__PURE__ */ React106.createElement("p", { className: `rf-text-field__helper-text${error ? " rf-text-field__helper-text--error" : ""}` }, helperText), open &&
|
|
9673
|
+
), helperText && /* @__PURE__ */ React106.createElement("p", { className: `rf-text-field__helper-text${error ? " rf-text-field__helper-text--error" : ""}` }, helperText), open && ReactDOM11.createPortal(
|
|
9621
9674
|
/* @__PURE__ */ React106.createElement(
|
|
9622
9675
|
"div",
|
|
9623
9676
|
{
|
|
@@ -9836,11 +9889,18 @@ function SmartSelect({
|
|
|
9836
9889
|
}, [options, getOptionChildren]);
|
|
9837
9890
|
const flatOptionsList = useMemo3(() => flatItems.map((f) => f.option), [flatItems]);
|
|
9838
9891
|
const displayOptions = useMemo3(() => {
|
|
9839
|
-
|
|
9840
|
-
|
|
9841
|
-
|
|
9842
|
-
|
|
9843
|
-
|
|
9892
|
+
let base = flatOptionsList;
|
|
9893
|
+
if (searchResults.length) {
|
|
9894
|
+
const localKeys = new Set(flatOptionsList.map((o) => getValue(o)));
|
|
9895
|
+
const serverOnly = searchResults.filter((o) => !localKeys.has(getValue(o)));
|
|
9896
|
+
base = [...flatOptionsList, ...serverOnly];
|
|
9897
|
+
}
|
|
9898
|
+
if (!multiple && value != null) {
|
|
9899
|
+
const key = getValue(value);
|
|
9900
|
+
if (!base.some((o) => getValue(o) === key)) base = [value, ...base];
|
|
9901
|
+
}
|
|
9902
|
+
return base;
|
|
9903
|
+
}, [flatOptionsList, searchResults, getValue, value, multiple]);
|
|
9844
9904
|
const depthMap = useMemo3(() => {
|
|
9845
9905
|
const map = /* @__PURE__ */ new Map();
|
|
9846
9906
|
flatItems.forEach(({ option, depth }) => map.set(getValue(option), depth));
|
|
@@ -9856,14 +9916,15 @@ function SmartSelect({
|
|
|
9856
9916
|
}
|
|
9857
9917
|
return value != null ? /* @__PURE__ */ new Set([getValue(value)]) : /* @__PURE__ */ new Set();
|
|
9858
9918
|
}, [multiple, value, getValue]);
|
|
9859
|
-
const handleInputChange = useCallback11((_, inputValue2) => {
|
|
9919
|
+
const handleInputChange = useCallback11((_, inputValue2, reason) => {
|
|
9860
9920
|
setInputValue(inputValue2);
|
|
9861
9921
|
if (!onSearchChange) return;
|
|
9862
9922
|
if (debounceTimer.current) clearTimeout(debounceTimer.current);
|
|
9863
|
-
if (
|
|
9864
|
-
onSearchChange("", 0);
|
|
9923
|
+
if (reason !== "input") {
|
|
9924
|
+
if (reason === "clear") onSearchChange("", 0);
|
|
9865
9925
|
return;
|
|
9866
9926
|
}
|
|
9927
|
+
if (!inputValue2) return;
|
|
9867
9928
|
const q = inputValue2.toLowerCase();
|
|
9868
9929
|
let localCount = 0;
|
|
9869
9930
|
for (const opt of flatOptionsList) {
|