@lax-wp/design-system 0.13.33-beta.6 → 0.13.33
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/components/button/Button.cjs.js +5 -5
- package/dist/components/button/Button.cjs.js.map +1 -1
- package/dist/components/button/Button.es.js +18 -18
- package/dist/components/button/Button.es.js.map +1 -1
- package/dist/components/button/IconButton.cjs.js +1 -1
- package/dist/components/button/IconButton.cjs.js.map +1 -1
- package/dist/components/button/IconButton.es.js +8 -8
- package/dist/components/button/IconButton.es.js.map +1 -1
- package/dist/components/buttons/option-button/OptionButton.cjs.js +1 -1
- package/dist/components/buttons/option-button/OptionButton.cjs.js.map +1 -1
- package/dist/components/buttons/option-button/OptionButton.es.js +1 -1
- package/dist/components/buttons/option-button/OptionButton.es.js.map +1 -1
- package/dist/components/data-display/comparison/components/Header.cjs.js +1 -1
- package/dist/components/data-display/comparison/components/Header.cjs.js.map +1 -1
- package/dist/components/data-display/comparison/components/Header.es.js +13 -13
- package/dist/components/data-display/comparison/components/Header.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/PendingEditsFloatingBar.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/PendingEditsFloatingBar.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/PendingEditsFloatingBar.es.js +57 -56
- package/dist/components/data-display/infinite-table/PendingEditsFloatingBar.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/ActionCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/ActionCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/ActionCell.es.js +11 -11
- package/dist/components/data-display/infinite-table/body/cell/ActionCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.es.js +44 -43
- package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js +148 -145
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/LoaderCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/LoaderCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/LoaderCell.es.js +12 -11
- package/dist/components/data-display/infinite-table/body/cell/LoaderCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/PendingEditCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/PendingEditCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/PendingEditCell.es.js +9 -9
- package/dist/components/data-display/infinite-table/body/cell/PendingEditCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/RowActionCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/RowActionCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/RowActionCell.es.js +3 -3
- package/dist/components/data-display/infinite-table/body/cell/RowActionCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/RowOptionsCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/RowOptionsCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/RowOptionsCell.es.js +24 -24
- package/dist/components/data-display/infinite-table/body/cell/RowOptionsCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/SpinnerCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/SpinnerCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/SpinnerCell.es.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/SpinnerCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/rows/row.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/rows/row.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/rows/row.es.js +286 -281
- package/dist/components/data-display/infinite-table/body/rows/row.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/constants.cjs.js +2 -0
- package/dist/components/data-display/infinite-table/constants.cjs.js.map +1 -0
- package/dist/components/data-display/infinite-table/constants.d.ts +41 -0
- package/dist/components/data-display/infinite-table/constants.es.js +27 -0
- package/dist/components/data-display/infinite-table/constants.es.js.map +1 -0
- package/dist/components/data-display/infinite-table/context.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/context.d.ts +1 -0
- package/dist/components/data-display/infinite-table/context.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/CheckAll.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/CheckAll.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/CheckAll.es.js +1 -1
- package/dist/components/data-display/infinite-table/head/CheckAll.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.es.js +37 -36
- package/dist/components/data-display/infinite-table/head/cell/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/index.es.js +20 -20
- package/dist/components/data-display/infinite-table/head/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.d.ts +1 -1
- package/dist/components/data-display/infinite-table/index.es.js +410 -406
- package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/types.d.ts +22 -0
- package/dist/components/data-display/tag/Tag.cjs.js +1 -1
- package/dist/components/data-display/tag/Tag.cjs.js.map +1 -1
- package/dist/components/data-display/tag/Tag.es.js +9 -11
- package/dist/components/data-display/tag/Tag.es.js.map +1 -1
- package/dist/components/floating-bar/FloatingBar.cjs.js +1 -1
- package/dist/components/floating-bar/FloatingBar.cjs.js.map +1 -1
- package/dist/components/floating-bar/FloatingBar.es.js +9 -9
- package/dist/components/floating-bar/FloatingBar.es.js.map +1 -1
- package/dist/components/forms/base-input-field/BaseInputField.cjs.js +2 -2
- package/dist/components/forms/base-input-field/BaseInputField.cjs.js.map +1 -1
- package/dist/components/forms/base-input-field/BaseInputField.es.js +42 -40
- package/dist/components/forms/base-input-field/BaseInputField.es.js.map +1 -1
- package/dist/components/forms/creatable-select/CreatableSelect.cjs.js +1 -1
- package/dist/components/forms/creatable-select/CreatableSelect.cjs.js.map +1 -1
- package/dist/components/forms/creatable-select/CreatableSelect.es.js +15 -14
- package/dist/components/forms/creatable-select/CreatableSelect.es.js.map +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.cjs.js +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.cjs.js.map +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.es.js +65 -57
- package/dist/components/forms/currency-input/CurrencyInputField.es.js.map +1 -1
- package/dist/components/forms/date-time-field/DateTimeField.cjs.js +1 -1
- package/dist/components/forms/date-time-field/DateTimeField.cjs.js.map +1 -1
- package/dist/components/forms/date-time-field/DateTimeField.es.js +33 -33
- package/dist/components/forms/date-time-field/DateTimeField.es.js.map +1 -1
- package/dist/components/forms/debounce-input/DebounceInputField.cjs.js +1 -1
- package/dist/components/forms/debounce-input/DebounceInputField.cjs.js.map +1 -1
- package/dist/components/forms/debounce-input/DebounceInputField.es.js +2 -2
- package/dist/components/forms/debounce-input/DebounceInputField.es.js.map +1 -1
- package/dist/components/forms/dynamic-data-input/DynamicDataInput.cjs.js +1 -1
- package/dist/components/forms/dynamic-data-input/DynamicDataInput.cjs.js.map +1 -1
- package/dist/components/forms/dynamic-data-input/DynamicDataInput.es.js +7 -7
- package/dist/components/forms/dynamic-data-input/DynamicDataInput.es.js.map +1 -1
- package/dist/components/forms/dynamic-data-input/DynamicDataInputField.cjs.js +1 -1
- package/dist/components/forms/dynamic-data-input/DynamicDataInputField.cjs.js.map +1 -1
- package/dist/components/forms/dynamic-data-input/DynamicDataInputField.es.js +19 -17
- package/dist/components/forms/dynamic-data-input/DynamicDataInputField.es.js.map +1 -1
- package/dist/components/forms/field-options/Item.cjs.js +1 -1
- package/dist/components/forms/field-options/Item.cjs.js.map +1 -1
- package/dist/components/forms/field-options/Item.es.js +5 -5
- package/dist/components/forms/field-options/Item.es.js.map +1 -1
- package/dist/components/forms/formula-input/FormulaInput.cjs.js +1 -1
- package/dist/components/forms/formula-input/FormulaInput.cjs.js.map +1 -1
- package/dist/components/forms/formula-input/FormulaInput.es.js +10 -10
- package/dist/components/forms/formula-input/FormulaInput.es.js.map +1 -1
- package/dist/components/forms/icon-picker/IconPicker.cjs.js +1 -1
- package/dist/components/forms/icon-picker/IconPicker.cjs.js.map +1 -1
- package/dist/components/forms/icon-picker/IconPicker.es.js +57 -42
- package/dist/components/forms/icon-picker/IconPicker.es.js.map +1 -1
- package/dist/components/forms/input-field/InputField.cjs.js.map +1 -1
- package/dist/components/forms/input-field/InputField.es.js.map +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js.map +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.es.js +60 -54
- package/dist/components/forms/master-data-input/MasterDataInputField.es.js.map +1 -1
- package/dist/components/forms/md-input/RichMarkdownInput.cjs.js +3 -3
- package/dist/components/forms/md-input/RichMarkdownInput.cjs.js.map +1 -1
- package/dist/components/forms/md-input/RichMarkdownInput.es.js +63 -63
- package/dist/components/forms/md-input/RichMarkdownInput.es.js.map +1 -1
- package/dist/components/forms/number-input-field/NumberInputField.cjs.js +1 -1
- package/dist/components/forms/number-input-field/NumberInputField.cjs.js.map +1 -1
- package/dist/components/forms/number-input-field/NumberInputField.es.js +5 -5
- package/dist/components/forms/number-input-field/NumberInputField.es.js.map +1 -1
- package/dist/components/forms/percentage-input/PercentageInputField.cjs.js +2 -2
- package/dist/components/forms/percentage-input/PercentageInputField.cjs.js.map +1 -1
- package/dist/components/forms/percentage-input/PercentageInputField.es.js +20 -20
- package/dist/components/forms/percentage-input/PercentageInputField.es.js.map +1 -1
- package/dist/components/forms/search-bar/SearchBar.cjs.js +1 -1
- package/dist/components/forms/search-bar/SearchBar.cjs.js.map +1 -1
- package/dist/components/forms/search-bar/SearchBar.es.js +16 -16
- package/dist/components/forms/search-bar/SearchBar.es.js.map +1 -1
- package/dist/components/forms/select-field/SelectField.cjs.js +2 -2
- package/dist/components/forms/select-field/SelectField.cjs.js.map +1 -1
- package/dist/components/forms/select-field/SelectField.d.ts +0 -4
- package/dist/components/forms/select-field/SelectField.es.js +203 -202
- package/dist/components/forms/select-field/SelectField.es.js.map +1 -1
- package/dist/components/forms/text-area-field/TextAreaField.cjs.js +1 -1
- package/dist/components/forms/text-area-field/TextAreaField.cjs.js.map +1 -1
- package/dist/components/forms/text-area-field/TextAreaField.es.js +14 -14
- package/dist/components/forms/text-area-field/TextAreaField.es.js.map +1 -1
- package/dist/components/forms/toggle/Toggle.cjs.js +1 -1
- package/dist/components/forms/toggle/Toggle.cjs.js.map +1 -1
- package/dist/components/forms/toggle/Toggle.es.js +59 -65
- package/dist/components/forms/toggle/Toggle.es.js.map +1 -1
- package/dist/components/navigation/accordion/Accordion.cjs.js +1 -1
- package/dist/components/navigation/accordion/Accordion.cjs.js.map +1 -1
- package/dist/components/navigation/accordion/Accordion.es.js +5 -5
- package/dist/components/navigation/accordion/Accordion.es.js.map +1 -1
- package/dist/components/navigation/stepper/Stepper.cjs.js +1 -1
- package/dist/components/navigation/stepper/Stepper.cjs.js.map +1 -1
- package/dist/components/navigation/stepper/Stepper.es.js +1 -1
- package/dist/components/navigation/stepper/Stepper.es.js.map +1 -1
- package/dist/components/navigation/tabs/TabOptions.cjs.js +1 -1
- package/dist/components/navigation/tabs/TabOptions.cjs.js.map +1 -1
- package/dist/components/navigation/tabs/TabOptions.es.js +15 -15
- package/dist/components/navigation/tabs/TabOptions.es.js.map +1 -1
- package/dist/components/navigation/tabs/TabSwitch.cjs.js +1 -1
- package/dist/components/navigation/tabs/TabSwitch.cjs.js.map +1 -1
- package/dist/components/navigation/tabs/TabSwitch.es.js +7 -7
- package/dist/components/navigation/tabs/TabSwitch.es.js.map +1 -1
- package/dist/components/navigation/tabs/Tabs.cjs.js +1 -1
- package/dist/components/navigation/tabs/Tabs.cjs.js.map +1 -1
- package/dist/components/navigation/tabs/Tabs.es.js +1 -1
- package/dist/components/navigation/tabs/Tabs.es.js.map +1 -1
- package/dist/components/tooltip/Tooltip.cjs.js +1 -1
- package/dist/components/tooltip/Tooltip.cjs.js.map +1 -1
- package/dist/components/tooltip/Tooltip.es.js +19 -19
- package/dist/components/tooltip/Tooltip.es.js.map +1 -1
- package/dist/components/user-avatar/UserAvatar.cjs.js +1 -1
- package/dist/components/user-avatar/UserAvatar.cjs.js.map +1 -1
- package/dist/components/user-avatar/UserAvatar.d.ts +1 -1
- package/dist/components/user-avatar/UserAvatar.es.js +38 -40
- package/dist/components/user-avatar/UserAvatar.es.js.map +1 -1
- package/dist/components/user-avatar/constants.cjs.js +1 -1
- package/dist/components/user-avatar/constants.cjs.js.map +1 -1
- package/dist/components/user-avatar/constants.d.ts +0 -1
- package/dist/components/user-avatar/constants.es.js +9 -10
- package/dist/components/user-avatar/constants.es.js.map +1 -1
- package/dist/design-system.css +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +3 -2
|
@@ -1,57 +1,58 @@
|
|
|
1
1
|
import { jsxs as n, jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import { formatDate as ne } from "../../../utils/formatters.es.js";
|
|
3
3
|
import { KeyboardArrowDownRounded as oe, SearchRounded as le, CloseRounded as ie, RemoveOutlined as se, DragIndicator as ce } from "@mui/icons-material";
|
|
4
|
-
import { motion as o, AnimatePresence as
|
|
5
|
-
import { useState as x, useRef as p, useMemo as
|
|
6
|
-
import { createPortal as
|
|
7
|
-
|
|
4
|
+
import { motion as o, AnimatePresence as D } from "framer-motion";
|
|
5
|
+
import { useState as x, useRef as p, useMemo as S, useEffect as C, useCallback as I } from "react";
|
|
6
|
+
import { createPortal as P } from "react-dom";
|
|
7
|
+
import { FLOATING_BAR_TOOLTIP_MARGIN_BOTTOM as de, FLOATING_BAR_TOOLTIP_MARGIN_LEFT as ue } from "./constants.es.js";
|
|
8
|
+
const me = {
|
|
8
9
|
hidden: { opacity: 0, y: -8, scale: 0.95 },
|
|
9
10
|
visible: { opacity: 1, y: 0, scale: 1, transition: { type: "spring", stiffness: 400, damping: 25 } },
|
|
10
11
|
exit: { opacity: 0, y: -8, scale: 0.95, transition: { duration: 0.1 } }
|
|
11
12
|
}, E = {
|
|
12
13
|
hidden: { opacity: 0 },
|
|
13
14
|
visible: { opacity: 1, transition: { staggerChildren: 0.03, delayChildren: 0.05 } }
|
|
14
|
-
},
|
|
15
|
+
}, M = {
|
|
15
16
|
hidden: { opacity: 0, y: -8 },
|
|
16
17
|
visible: { opacity: 1, y: 0, transition: { type: "spring", stiffness: 400, damping: 25 } }
|
|
17
|
-
},
|
|
18
|
+
}, ve = ({
|
|
18
19
|
pendingEditsCount: w,
|
|
19
20
|
pendingEditsList: h,
|
|
20
21
|
rowsWithPendingEdits: d,
|
|
21
22
|
fieldOperationLoading: u,
|
|
22
|
-
onClearAll:
|
|
23
|
-
onSaveAll:
|
|
24
|
-
onScrollToCell:
|
|
23
|
+
onClearAll: U,
|
|
24
|
+
onSaveAll: q,
|
|
25
|
+
onScrollToCell: J
|
|
25
26
|
}) => {
|
|
26
|
-
const [
|
|
27
|
+
const [Q, T] = x(!1), [m, B] = x(!1), [l, $] = x(null), [i, A] = x(null), [L, _] = x(!1), [s, g] = x(""), [b, z] = x(!1), [v, Z] = x(null), y = p(null), c = p(null), k = p(null), H = p(null), F = p(null), V = p(null), W = S(() => l ? h.filter((e) => e.rowId === l) : h, [h, l]), X = S(() => {
|
|
27
28
|
if (!s) return d;
|
|
28
29
|
const e = s.toLowerCase();
|
|
29
30
|
return d.filter((a) => `row ${a.rowIndex + 1}`.toLowerCase().includes(e));
|
|
30
|
-
}, [d, s]), ee =
|
|
31
|
+
}, [d, s]), ee = S(() => {
|
|
31
32
|
if (!l) return `All Rows (${h.length})`;
|
|
32
33
|
const e = d.find((a) => a.rowId === l);
|
|
33
34
|
return e ? `Row ${e.rowIndex + 1} (${e.editCount})` : `All Rows (${h.length})`;
|
|
34
35
|
}, [l, d, h.length]);
|
|
35
36
|
C(() => {
|
|
36
|
-
l && !d.find((e) => e.rowId === l) &&
|
|
37
|
+
l && !d.find((e) => e.rowId === l) && $(null);
|
|
37
38
|
}, [d, l]), C(() => {
|
|
38
39
|
const e = (a) => {
|
|
39
40
|
const r = a.target;
|
|
40
|
-
!
|
|
41
|
+
!H.current?.contains(r) && !V.current?.contains(r) && (z(!1), g(""));
|
|
41
42
|
};
|
|
42
43
|
return b && document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
43
44
|
}, [b]);
|
|
44
|
-
const
|
|
45
|
-
y.current && (clearTimeout(y.current), y.current = null),
|
|
46
|
-
}, []),
|
|
47
|
-
y.current = setTimeout(() =>
|
|
48
|
-
}, []), N =
|
|
45
|
+
const Y = I(() => {
|
|
46
|
+
y.current && (clearTimeout(y.current), y.current = null), T(!0);
|
|
47
|
+
}, []), j = I(() => {
|
|
48
|
+
y.current = setTimeout(() => T(!1), 300);
|
|
49
|
+
}, []), N = I((e, a, r, R) => {
|
|
49
50
|
const f = Math.max(0, window.innerWidth - r), ae = Math.max(0, window.innerHeight - R);
|
|
50
51
|
return {
|
|
51
52
|
x: Math.min(Math.max(e, 0), f),
|
|
52
53
|
y: Math.min(Math.max(a, 0), ae)
|
|
53
54
|
};
|
|
54
|
-
}, []),
|
|
55
|
+
}, []), G = I((e) => {
|
|
55
56
|
e.preventDefault();
|
|
56
57
|
const a = e.currentTarget.closest(".pending-edits-floating-bar");
|
|
57
58
|
if (!a) return;
|
|
@@ -63,30 +64,30 @@ const de = {
|
|
|
63
64
|
barY: i?.y ?? r.top,
|
|
64
65
|
barWidth: r.width,
|
|
65
66
|
barHeight: r.height
|
|
66
|
-
},
|
|
67
|
+
}, _(!0);
|
|
67
68
|
}, [i]);
|
|
68
69
|
C(() => {
|
|
69
|
-
if (!
|
|
70
|
+
if (!L) return;
|
|
70
71
|
const e = (r) => {
|
|
71
72
|
if (!c.current) return;
|
|
72
73
|
const R = c.current.barX + r.clientX - c.current.x, f = c.current.barY + r.clientY - c.current.y;
|
|
73
|
-
|
|
74
|
+
A(N(R, f, c.current.barWidth, c.current.barHeight));
|
|
74
75
|
}, a = () => {
|
|
75
|
-
|
|
76
|
+
_(!1), c.current = null;
|
|
76
77
|
};
|
|
77
78
|
return document.addEventListener("mousemove", e), document.addEventListener("mouseup", a), () => {
|
|
78
79
|
document.removeEventListener("mousemove", e), document.removeEventListener("mouseup", a);
|
|
79
80
|
};
|
|
80
|
-
}, [
|
|
81
|
+
}, [L, N]), C(() => {
|
|
81
82
|
if (!i || !k.current) return;
|
|
82
83
|
const e = () => {
|
|
83
84
|
if (!k.current) return;
|
|
84
85
|
const a = k.current.getBoundingClientRect(), r = N(i.x, i.y, a.width, a.height);
|
|
85
|
-
(r.x !== i.x || r.y !== i.y) &&
|
|
86
|
+
(r.x !== i.x || r.y !== i.y) && A(r);
|
|
86
87
|
};
|
|
87
88
|
return e(), window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
|
|
88
89
|
}, [i, N]);
|
|
89
|
-
const
|
|
90
|
+
const O = (e, a) => {
|
|
90
91
|
if (typeof e == "boolean") return e ? "Yes" : "No";
|
|
91
92
|
if (e == null || e === "") return "-";
|
|
92
93
|
const r = String(e);
|
|
@@ -96,9 +97,9 @@ const de = {
|
|
|
96
97
|
}
|
|
97
98
|
return a ? `${r} ${a}` : r;
|
|
98
99
|
}, te = (e) => {
|
|
99
|
-
|
|
100
|
-
},
|
|
101
|
-
|
|
100
|
+
T(!1), J(e.rowId, e.columnKey, e.rowIndex);
|
|
101
|
+
}, K = (e) => {
|
|
102
|
+
$(e), z(!1), g("");
|
|
102
103
|
};
|
|
103
104
|
if (w === 0) return null;
|
|
104
105
|
const re = /* @__PURE__ */ n(
|
|
@@ -114,26 +115,26 @@ const de = {
|
|
|
114
115
|
animate: { opacity: 1, scale: 1 },
|
|
115
116
|
transition: { type: "spring", stiffness: 300, damping: 25 },
|
|
116
117
|
children: [
|
|
117
|
-
/* @__PURE__ */ t(
|
|
118
|
+
/* @__PURE__ */ t(D, { children: Q && !m && /* @__PURE__ */ t(
|
|
118
119
|
o.div,
|
|
119
120
|
{
|
|
120
121
|
className: "absolute w-80",
|
|
121
|
-
style: { bottom: "100%", left: "50%", marginLeft:
|
|
122
|
+
style: { bottom: "100%", left: "50%", marginLeft: ue, marginBottom: de },
|
|
122
123
|
initial: { opacity: 0, y: 10, scale: 0.95 },
|
|
123
124
|
animate: { opacity: 1, y: 0, scale: 1 },
|
|
124
125
|
exit: { opacity: 0, y: 10, scale: 0.95 },
|
|
125
126
|
transition: { type: "spring", stiffness: 300, damping: 24 },
|
|
126
|
-
onMouseEnter:
|
|
127
|
-
onMouseLeave:
|
|
127
|
+
onMouseEnter: Y,
|
|
128
|
+
onMouseLeave: j,
|
|
128
129
|
children: /* @__PURE__ */ n("div", { className: "bg-white dark:bg-black-700 rounded-lg shadow-xl border border-neutral-200 dark:border-black-600 py-2 overflow-hidden", children: [
|
|
129
130
|
/* @__PURE__ */ t("div", { className: "px-3 py-1.5 text-xs font-semibold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider border-b border-neutral-100 dark:border-black-600", children: "Pending Changes" }),
|
|
130
|
-
d.length > 1 && /* @__PURE__ */ t("div", { className: "px-3 py-2 border-b border-neutral-100 dark:border-black-600", ref:
|
|
131
|
+
d.length > 1 && /* @__PURE__ */ t("div", { className: "px-3 py-2 border-b border-neutral-100 dark:border-black-600", ref: H, children: /* @__PURE__ */ n("div", { className: "relative", children: [
|
|
131
132
|
/* @__PURE__ */ n(
|
|
132
133
|
"button",
|
|
133
134
|
{
|
|
134
|
-
ref:
|
|
135
|
+
ref: F,
|
|
135
136
|
onClick: () => {
|
|
136
|
-
|
|
137
|
+
F.current && Z(F.current.getBoundingClientRect()), z(!b);
|
|
137
138
|
},
|
|
138
139
|
className: "w-full text-xs px-2 py-1.5 rounded border border-neutral-200 dark:border-black-500 bg-neutral-50 dark:bg-black-600 text-neutral-700 dark:text-neutral-200 focus:outline-none focus:ring-1 focus:ring-primary-500 flex items-center justify-between gap-2",
|
|
139
140
|
children: [
|
|
@@ -142,14 +143,14 @@ const de = {
|
|
|
142
143
|
]
|
|
143
144
|
}
|
|
144
145
|
),
|
|
145
|
-
b && v &&
|
|
146
|
-
/* @__PURE__ */ t(
|
|
146
|
+
b && v && P(
|
|
147
|
+
/* @__PURE__ */ t(D, { children: /* @__PURE__ */ n(
|
|
147
148
|
o.div,
|
|
148
149
|
{
|
|
149
|
-
ref:
|
|
150
|
+
ref: V,
|
|
150
151
|
className: "fixed bg-white dark:bg-black-700 rounded-lg shadow-xl border border-neutral-200 dark:border-black-600 overflow-hidden",
|
|
151
152
|
style: { zIndex: 2147483647, top: v.bottom + 4, left: v.left, width: v.width },
|
|
152
|
-
variants:
|
|
153
|
+
variants: me,
|
|
153
154
|
initial: "hidden",
|
|
154
155
|
animate: "visible",
|
|
155
156
|
exit: "exit",
|
|
@@ -160,12 +161,12 @@ const de = {
|
|
|
160
161
|
s && /* @__PURE__ */ t("button", { onClick: () => g(""), className: "absolute right-2 z-10 text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-300", children: /* @__PURE__ */ t(ie, { sx: { fontSize: 14 } }) })
|
|
161
162
|
] }) }),
|
|
162
163
|
/* @__PURE__ */ n(o.div, { className: "max-h-40 overflow-y-auto", variants: E, initial: "hidden", animate: "visible", children: [
|
|
163
|
-
(!s || "all rows".includes(s.toLowerCase())) && /* @__PURE__ */ n(o.button, { variants:
|
|
164
|
+
(!s || "all rows".includes(s.toLowerCase())) && /* @__PURE__ */ n(o.button, { variants: M, onClick: () => K(null), className: `w-full text-left px-3 py-2 text-xs transition-colors ${l ? "text-neutral-700 dark:text-neutral-200 hover:bg-neutral-50 dark:hover:bg-black-600" : "bg-primary-50 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300"}`, children: [
|
|
164
165
|
"All Rows (",
|
|
165
166
|
h.length,
|
|
166
167
|
" changes)"
|
|
167
168
|
] }),
|
|
168
|
-
|
|
169
|
+
X.map((e) => /* @__PURE__ */ n(o.button, { variants: M, onClick: () => K(e.rowId), className: `w-full text-left px-3 py-2 text-xs transition-colors ${l === e.rowId ? "bg-primary-50 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300" : "text-neutral-700 dark:text-neutral-200 hover:bg-neutral-50 dark:hover:bg-black-600"}`, children: [
|
|
169
170
|
"Row ",
|
|
170
171
|
e.rowIndex + 1,
|
|
171
172
|
" (",
|
|
@@ -174,7 +175,7 @@ const de = {
|
|
|
174
175
|
e.editCount === 1 ? "change" : "changes",
|
|
175
176
|
")"
|
|
176
177
|
] }, e.rowId)),
|
|
177
|
-
|
|
178
|
+
X.length === 0 && s && !"all rows".includes(s.toLowerCase()) && /* @__PURE__ */ t(o.div, { variants: M, className: "px-3 py-2 text-xs text-neutral-500 dark:text-neutral-400", children: "No rows found" })
|
|
178
179
|
] })
|
|
179
180
|
]
|
|
180
181
|
}
|
|
@@ -182,7 +183,7 @@ const de = {
|
|
|
182
183
|
document.body
|
|
183
184
|
)
|
|
184
185
|
] }) }),
|
|
185
|
-
/* @__PURE__ */ t(o.div, { className: "max-h-52 overflow-y-auto", variants: E, initial: "hidden", animate: "visible", children: W?.map((e, a) => /* @__PURE__ */ n(o.button, { variants:
|
|
186
|
+
/* @__PURE__ */ t(o.div, { className: "max-h-52 overflow-y-auto", variants: E, initial: "hidden", animate: "visible", children: W?.map((e, a) => /* @__PURE__ */ n(o.button, { variants: M, onClick: () => te(e), className: "w-full px-3 py-2 text-left hover:bg-neutral-50 dark:hover:bg-black-600 transition-colors", whileHover: { backgroundColor: "rgba(0,0,0,0.03)" }, whileTap: { scale: 0.98 }, children: [
|
|
186
187
|
/* @__PURE__ */ n("div", { className: "text-xs font-bold text-neutral-700 dark:text-neutral-300 mb-1", children: [
|
|
187
188
|
e.fieldName,
|
|
188
189
|
" ",
|
|
@@ -193,9 +194,9 @@ const de = {
|
|
|
193
194
|
] })
|
|
194
195
|
] }),
|
|
195
196
|
/* @__PURE__ */ n("div", { className: "flex items-center gap-1.5 text-sm", children: [
|
|
196
|
-
/* @__PURE__ */ t("span", { className: "text-neutral-400 dark:text-neutral-500 line-through truncate max-w-[100px]", children:
|
|
197
|
+
/* @__PURE__ */ t("span", { className: "text-neutral-400 dark:text-neutral-500 line-through truncate max-w-[100px]", children: O(e.originalValue, e.originalMeta?.currency_code) }),
|
|
197
198
|
/* @__PURE__ */ t("span", { className: "text-neutral-400 dark:text-neutral-500 flex-shrink-0", children: "→" }),
|
|
198
|
-
/* @__PURE__ */ t("span", { className: "text-primary-600 dark:text-primary-400 font-medium truncate max-w-[100px]", children:
|
|
199
|
+
/* @__PURE__ */ t("span", { className: "text-primary-600 dark:text-primary-400 font-medium truncate max-w-[100px]", children: O(e.value, e.meta?.currency_code) })
|
|
199
200
|
] })
|
|
200
201
|
] }, `${e.rowId}-${e.columnKey}-${a}`)) })
|
|
201
202
|
] })
|
|
@@ -208,14 +209,14 @@ const de = {
|
|
|
208
209
|
animate: { padding: m ? "8px" : "12px 16px", gap: m ? "0px" : "12px", borderRadius: m ? "9999px" : "8px" },
|
|
209
210
|
transition: { type: "spring", stiffness: 300, damping: 25 },
|
|
210
211
|
children: [
|
|
211
|
-
/* @__PURE__ */ t(
|
|
212
|
+
/* @__PURE__ */ t(D, { mode: "wait", children: m ? /* @__PURE__ */ t(
|
|
212
213
|
o.div,
|
|
213
214
|
{
|
|
214
215
|
initial: { opacity: 0, scale: 0.8 },
|
|
215
216
|
animate: { opacity: 1, scale: 1 },
|
|
216
217
|
exit: { opacity: 0, scale: 0.8 },
|
|
217
|
-
onMouseDown:
|
|
218
|
-
onClick: () =>
|
|
218
|
+
onMouseDown: G,
|
|
219
|
+
onClick: () => B(!1),
|
|
219
220
|
className: "flex items-center justify-center cursor-grab active:cursor-grabbing flex-shrink-0",
|
|
220
221
|
style: { width: "32px", height: "32px", borderRadius: "9999px", backgroundColor: "var(--color-primary-600)", color: "white" },
|
|
221
222
|
title: "Drag to move / Click to expand",
|
|
@@ -230,7 +231,7 @@ const de = {
|
|
|
230
231
|
initial: { opacity: 0, scale: 0.8 },
|
|
231
232
|
animate: { opacity: 1, scale: 1 },
|
|
232
233
|
exit: { opacity: 0, scale: 0.8 },
|
|
233
|
-
onClick: () =>
|
|
234
|
+
onClick: () => B(!0),
|
|
234
235
|
className: "flex items-center justify-center flex-shrink-0",
|
|
235
236
|
style: { width: "24px", height: "24px", borderRadius: "4px", backgroundColor: "transparent", color: "var(--color-neutral-400)" },
|
|
236
237
|
title: "Minimize",
|
|
@@ -248,8 +249,8 @@ const de = {
|
|
|
248
249
|
transition: { type: "spring", stiffness: 300, damping: 25 },
|
|
249
250
|
style: { overflow: "hidden", pointerEvents: m ? "none" : "auto" },
|
|
250
251
|
children: [
|
|
251
|
-
/* @__PURE__ */ t("div", { onMouseDown:
|
|
252
|
-
/* @__PURE__ */ t("div", { className: "relative", onMouseEnter:
|
|
252
|
+
/* @__PURE__ */ t("div", { onMouseDown: G, className: "cursor-grab active:cursor-grabbing text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 flex items-center", title: "Drag to move", children: /* @__PURE__ */ t(ce, { sx: { fontSize: 18 } }) }),
|
|
253
|
+
/* @__PURE__ */ t("div", { className: "relative", onMouseEnter: Y, onMouseLeave: j, children: /* @__PURE__ */ n("span", { className: "text-sm font-medium text-neutral-700 dark:text-neutral-200 cursor-pointer hover:text-primary-600 dark:hover:text-primary-400 whitespace-nowrap", children: [
|
|
253
254
|
w,
|
|
254
255
|
" unsaved ",
|
|
255
256
|
w === 1 ? "change" : "changes"
|
|
@@ -258,7 +259,7 @@ const de = {
|
|
|
258
259
|
/* @__PURE__ */ t(
|
|
259
260
|
o.button,
|
|
260
261
|
{
|
|
261
|
-
onClick:
|
|
262
|
+
onClick: U,
|
|
262
263
|
disabled: !!u,
|
|
263
264
|
className: `px-3 py-1.5 text-sm font-medium rounded-md whitespace-nowrap flex-shrink-0 ${u ? "text-neutral-400 dark:text-neutral-500 cursor-not-allowed" : "text-neutral-600 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-black-600"}`,
|
|
264
265
|
whileHover: u ? void 0 : { scale: 1.02 },
|
|
@@ -269,7 +270,7 @@ const de = {
|
|
|
269
270
|
/* @__PURE__ */ t(
|
|
270
271
|
o.button,
|
|
271
272
|
{
|
|
272
|
-
onClick:
|
|
273
|
+
onClick: q,
|
|
273
274
|
disabled: !!u,
|
|
274
275
|
className: `px-3 py-1.5 text-sm font-medium rounded-md whitespace-nowrap flex-shrink-0 ${u ? "text-white bg-primary-400 cursor-not-allowed" : "text-white bg-primary-600 hover:bg-primary-700"}`,
|
|
275
276
|
whileHover: u ? void 0 : { scale: 1.02 },
|
|
@@ -286,9 +287,9 @@ const de = {
|
|
|
286
287
|
]
|
|
287
288
|
}
|
|
288
289
|
);
|
|
289
|
-
return
|
|
290
|
+
return P(re, document.body);
|
|
290
291
|
};
|
|
291
292
|
export {
|
|
292
|
-
|
|
293
|
+
ve as PendingEditsFloatingBar
|
|
293
294
|
};
|
|
294
295
|
//# sourceMappingURL=PendingEditsFloatingBar.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PendingEditsFloatingBar.es.js","sources":["../../../../src/components/data-display/infinite-table/PendingEditsFloatingBar.tsx"],"sourcesContent":["import { formatDate } from '../../../utils/formatters';\nimport { CloseRounded, DragIndicator, KeyboardArrowDownRounded, RemoveOutlined, SearchRounded } from '@mui/icons-material';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface PendingEdit {\n rowId: string;\n columnKey: string;\n fieldName: string;\n value: unknown;\n originalValue: unknown;\n meta?: { currency_code?: string | null; [key: string]: unknown | null } | null;\n originalMeta?: { currency_code?: string | null; [key: string]: unknown | null } | null;\n rowIndex: number;\n}\n\ninterface RowWithPendingEdits {\n rowId: string;\n rowIndex: number;\n editCount: number;\n}\n\ninterface PendingEditsFloatingBarProps {\n pendingEditsCount: number;\n pendingEditsList: PendingEdit[];\n rowsWithPendingEdits: RowWithPendingEdits[];\n fieldOperationLoading: string | null;\n onClearAll: () => void;\n onSaveAll: () => void;\n onScrollToCell: (rowId: string, columnKey: string, rowIndex: number) => void;\n}\n\nconst rowFilterDropdownVariants = {\n hidden: { opacity: 0, y: -8, scale: 0.95 },\n visible: { opacity: 1, y: 0, scale: 1, transition: { type: 'spring' as const, stiffness: 400, damping: 25 } },\n exit: { opacity: 0, y: -8, scale: 0.95, transition: { duration: 0.1 } },\n};\n\nconst listContainerVariants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: { staggerChildren: 0.03, delayChildren: 0.05 } },\n};\n\nconst listItemVariants = {\n hidden: { opacity: 0, y: -8 },\n visible: { opacity: 1, y: 0, transition: { type: 'spring' as const, stiffness: 400, damping: 25 } },\n};\n\nexport const PendingEditsFloatingBar: React.FC<PendingEditsFloatingBarProps> = ({\n pendingEditsCount, pendingEditsList, rowsWithPendingEdits, fieldOperationLoading, onClearAll, onSaveAll, onScrollToCell,\n}) => {\n const [showDropdown, setShowDropdown] = useState(false);\n const [isMinimized, setIsMinimized] = useState(false);\n const [rowFilter, setRowFilter] = useState<string | null>(null);\n const [position, setPosition] = useState<{ x: number; y: number } | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [rowFilterSearch, setRowFilterSearch] = useState('');\n const [showRowFilterDropdown, setShowRowFilterDropdown] = useState(false);\n const [rowFilterButtonRect, setRowFilterButtonRect] = useState<DOMRect | null>(null);\n\n const dropdownTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const dragStartRef = useRef<{ x: number; y: number; barX: number; barY: number; barWidth: number; barHeight: number } | null>(null);\n const floatingBarRef = useRef<HTMLDivElement>(null);\n const rowFilterRef = useRef<HTMLDivElement>(null);\n const rowFilterButtonRef = useRef<HTMLButtonElement>(null);\n const rowFilterDropdownRef = useRef<HTMLDivElement>(null);\n\n const filteredPendingEditsList = useMemo(() => {\n if (!rowFilter) return pendingEditsList;\n return pendingEditsList.filter((edit) => edit.rowId === rowFilter);\n }, [pendingEditsList, rowFilter]);\n\n const filteredRowOptions = useMemo(() => {\n if (!rowFilterSearch) return rowsWithPendingEdits;\n const searchLower = rowFilterSearch.toLowerCase();\n return rowsWithPendingEdits.filter((row) => `row ${row.rowIndex + 1}`.toLowerCase().includes(searchLower));\n }, [rowsWithPendingEdits, rowFilterSearch]);\n\n const selectedRowLabel = useMemo(() => {\n if (!rowFilter) return `All Rows (${pendingEditsList.length})`;\n const row = rowsWithPendingEdits.find((r) => r.rowId === rowFilter);\n if (!row) return `All Rows (${pendingEditsList.length})`;\n return `Row ${row.rowIndex + 1} (${row.editCount})`;\n }, [rowFilter, rowsWithPendingEdits, pendingEditsList.length]);\n\n useEffect(() => {\n if (rowFilter && !rowsWithPendingEdits.find((row) => row.rowId === rowFilter)) setRowFilter(null);\n }, [rowsWithPendingEdits, rowFilter]);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n if (!rowFilterRef.current?.contains(target) && !rowFilterDropdownRef.current?.contains(target)) {\n setShowRowFilterDropdown(false);\n setRowFilterSearch('');\n }\n };\n if (showRowFilterDropdown) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showRowFilterDropdown]);\n\n const handleMouseEnter = useCallback(() => {\n if (dropdownTimeoutRef.current) { clearTimeout(dropdownTimeoutRef.current); dropdownTimeoutRef.current = null; }\n setShowDropdown(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n dropdownTimeoutRef.current = setTimeout(() => setShowDropdown(false), 300);\n }, []);\n\n const clampPositionToViewport = useCallback((nextX: number, nextY: number, barWidth: number, barHeight: number) => {\n const maxX = Math.max(0, window.innerWidth - barWidth);\n const maxY = Math.max(0, window.innerHeight - barHeight);\n\n return {\n x: Math.min(Math.max(nextX, 0), maxX),\n y: Math.min(Math.max(nextY, 0), maxY),\n };\n }, []);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n const barElement = e.currentTarget.closest('.pending-edits-floating-bar') as HTMLElement;\n if (!barElement) return;\n const rect = barElement.getBoundingClientRect();\n dragStartRef.current = {\n x: e.clientX,\n y: e.clientY,\n barX: position?.x ?? rect.left,\n barY: position?.y ?? rect.top,\n barWidth: rect.width,\n barHeight: rect.height,\n };\n setIsDragging(true);\n }, [position]);\n\n useEffect(() => {\n if (!isDragging) return;\n const handleMouseMove = (e: MouseEvent) => {\n if (!dragStartRef.current) return;\n const nextX = dragStartRef.current.barX + e.clientX - dragStartRef.current.x;\n const nextY = dragStartRef.current.barY + e.clientY - dragStartRef.current.y;\n setPosition(clampPositionToViewport(nextX, nextY, dragStartRef.current.barWidth, dragStartRef.current.barHeight));\n };\n const handleMouseUp = () => { setIsDragging(false); dragStartRef.current = null; };\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => { document.removeEventListener('mousemove', handleMouseMove); document.removeEventListener('mouseup', handleMouseUp); };\n }, [isDragging, clampPositionToViewport]);\n\n useEffect(() => {\n if (!position || !floatingBarRef.current) return;\n\n const keepBarInViewport = () => {\n if (!floatingBarRef.current) return;\n const rect = floatingBarRef.current.getBoundingClientRect();\n const clampedPosition = clampPositionToViewport(position.x, position.y, rect.width, rect.height);\n if (clampedPosition.x !== position.x || clampedPosition.y !== position.y) {\n setPosition(clampedPosition);\n }\n };\n\n keepBarInViewport();\n window.addEventListener('resize', keepBarInViewport);\n return () => window.removeEventListener('resize', keepBarInViewport);\n }, [position, clampPositionToViewport]);\n\n const formatValue = (val: unknown, currencyCode?: string | null): string => {\n if (typeof val === 'boolean') return val ? 'Yes' : 'No';\n if (val === null || val === undefined || val === '') return '-';\n const strVal = String(val);\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?/;\n if (dateRegex.test(strVal)) {\n const hasTime = strVal.includes('T');\n return formatDate(strVal, { withTime: hasTime, skipTimezone: true }) || strVal;\n }\n if (currencyCode) return `${strVal} ${currencyCode}`;\n return strVal;\n };\n\n const handleCellClick = (edit: PendingEdit) => { setShowDropdown(false); onScrollToCell(edit.rowId, edit.columnKey, edit.rowIndex); };\n const handleRowFilterSelect = (rowId: string | null) => { setRowFilter(rowId); setShowRowFilterDropdown(false); setRowFilterSearch(''); };\n\n if (pendingEditsCount === 0) return null;\n\n const floatingBar = (\n <motion.div\n ref={floatingBarRef}\n className='pending-edits-floating-bar fixed z-[9999]'\n style={{\n zIndex: 2147483646,\n ...(position ? { left: position.x, top: position.y } : { bottom: 24, left: '50%', transform: 'translateX(-50%)' }),\n }}\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 25 }}\n >\n <AnimatePresence>\n {showDropdown && !isMinimized && (\n <motion.div\n className='absolute w-80'\n style={{ bottom: '100%', left: '50%', marginLeft: '-160px', marginBottom: '4px' }}\n initial={{ opacity: 0, y: 10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 10, scale: 0.95 }}\n transition={{ type: 'spring', stiffness: 300, damping: 24 }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div className='bg-white dark:bg-black-700 rounded-lg shadow-xl border border-neutral-200 dark:border-black-600 py-2 overflow-hidden'>\n <div className='px-3 py-1.5 text-xs font-semibold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider border-b border-neutral-100 dark:border-black-600'>Pending Changes</div>\n {rowsWithPendingEdits.length > 1 && (\n <div className='px-3 py-2 border-b border-neutral-100 dark:border-black-600' ref={rowFilterRef}>\n <div className='relative'>\n <button\n ref={rowFilterButtonRef}\n onClick={() => { if (rowFilterButtonRef.current) setRowFilterButtonRect(rowFilterButtonRef.current.getBoundingClientRect()); setShowRowFilterDropdown(!showRowFilterDropdown); }}\n className='w-full text-xs px-2 py-1.5 rounded border border-neutral-200 dark:border-black-500 bg-neutral-50 dark:bg-black-600 text-neutral-700 dark:text-neutral-200 focus:outline-none focus:ring-1 focus:ring-primary-500 flex items-center justify-between gap-2'\n >\n <span className='truncate'>{selectedRowLabel}</span>\n <motion.div animate={{ rotate: showRowFilterDropdown ? 180 : 0 }} transition={{ duration: 0.2 }}>\n <KeyboardArrowDownRounded sx={{ fontSize: 16 }} className='text-neutral-400' />\n </motion.div>\n </button>\n {showRowFilterDropdown && rowFilterButtonRect && createPortal(\n <AnimatePresence>\n <motion.div\n ref={rowFilterDropdownRef}\n className='fixed bg-white dark:bg-black-700 rounded-lg shadow-xl border border-neutral-200 dark:border-black-600 overflow-hidden'\n style={{ zIndex: 2147483647, top: rowFilterButtonRect.bottom + 4, left: rowFilterButtonRect.left, width: rowFilterButtonRect.width }}\n variants={rowFilterDropdownVariants}\n initial='hidden' animate='visible' exit='exit'\n >\n <div className='p-2 border-b border-neutral-100 dark:border-black-600'>\n <div className='relative flex items-center'>\n <SearchRounded sx={{ fontSize: 14 }} className='absolute left-2 text-neutral-400 dark:text-neutral-500 z-10 pointer-events-none' />\n <input type='text' value={rowFilterSearch} onChange={(e) => setRowFilterSearch(e.target.value)} placeholder='Search rows...' className='w-full text-xs pl-7 pr-7 py-1.5 rounded border border-neutral-200 dark:border-black-500 bg-white dark:bg-black-600 text-neutral-700 dark:text-neutral-200 focus:outline-none focus:ring-1 focus:ring-primary-500 placeholder:text-neutral-400' autoFocus />\n {rowFilterSearch && <button onClick={() => setRowFilterSearch('')} className='absolute right-2 z-10 text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-300'><CloseRounded sx={{ fontSize: 14 }} /></button>}\n </div>\n </div>\n <motion.div className='max-h-40 overflow-y-auto' variants={listContainerVariants} initial='hidden' animate='visible'>\n {(!rowFilterSearch || 'all rows'.includes(rowFilterSearch.toLowerCase())) && (\n <motion.button variants={listItemVariants} onClick={() => handleRowFilterSelect(null)} className={`w-full text-left px-3 py-2 text-xs transition-colors ${!rowFilter ? 'bg-primary-50 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300' : 'text-neutral-700 dark:text-neutral-200 hover:bg-neutral-50 dark:hover:bg-black-600'}`}>\n All Rows ({pendingEditsList.length} changes)\n </motion.button>\n )}\n {filteredRowOptions.map((row) => (\n <motion.button key={row.rowId} variants={listItemVariants} onClick={() => handleRowFilterSelect(row.rowId)} className={`w-full text-left px-3 py-2 text-xs transition-colors ${rowFilter === row.rowId ? 'bg-primary-50 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300' : 'text-neutral-700 dark:text-neutral-200 hover:bg-neutral-50 dark:hover:bg-black-600'}`}>\n Row {row.rowIndex + 1} ({row.editCount} {row.editCount === 1 ? 'change' : 'changes'})\n </motion.button>\n ))}\n {filteredRowOptions.length === 0 && rowFilterSearch && !'all rows'.includes(rowFilterSearch.toLowerCase()) && (\n <motion.div variants={listItemVariants} className='px-3 py-2 text-xs text-neutral-500 dark:text-neutral-400'>No rows found</motion.div>\n )}\n </motion.div>\n </motion.div>\n </AnimatePresence>,\n document.body,\n )}\n </div>\n </div>\n )}\n <motion.div className='max-h-52 overflow-y-auto' variants={listContainerVariants} initial='hidden' animate='visible'>\n {filteredPendingEditsList?.map((edit, idx) => (\n <motion.button key={`${edit.rowId}-${edit.columnKey}-${idx}`} variants={listItemVariants} onClick={() => handleCellClick(edit)} className='w-full px-3 py-2 text-left hover:bg-neutral-50 dark:hover:bg-black-600 transition-colors' whileHover={{ backgroundColor: 'rgba(0,0,0,0.03)' }} whileTap={{ scale: 0.98 }}>\n <div className='text-xs font-bold text-neutral-700 dark:text-neutral-300 mb-1'>\n {edit.fieldName} {!rowFilter && <span className='font-normal text-neutral-500 dark:text-neutral-400'>(Row {edit.rowIndex + 1})</span>}\n </div>\n <div className='flex items-center gap-1.5 text-sm'>\n <span className='text-neutral-400 dark:text-neutral-500 line-through truncate max-w-[100px]'>{formatValue(edit.originalValue, edit.originalMeta?.currency_code)}</span>\n <span className='text-neutral-400 dark:text-neutral-500 flex-shrink-0'>→</span>\n <span className='text-primary-600 dark:text-primary-400 font-medium truncate max-w-[100px]'>{formatValue(edit.value, edit.meta?.currency_code)}</span>\n </div>\n </motion.button>\n ))}\n </motion.div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n <motion.div\n className='flex items-center bg-white dark:bg-black-700 shadow-lg border border-neutral-200 dark:border-black-600 overflow-hidden'\n animate={{ padding: isMinimized ? '8px' : '12px 16px', gap: isMinimized ? '0px' : '12px', borderRadius: isMinimized ? '9999px' : '8px' }}\n transition={{ type: 'spring', stiffness: 300, damping: 25 }}\n >\n <AnimatePresence mode='wait'>\n {isMinimized ? (\n <motion.div key='minimized' initial={{ opacity: 0, scale: 0.8 }} animate={{ opacity: 1, scale: 1 }} exit={{ opacity: 0, scale: 0.8 }}\n onMouseDown={handleMouseDown} onClick={() => setIsMinimized(false)}\n className='flex items-center justify-center cursor-grab active:cursor-grabbing flex-shrink-0'\n style={{ width: '32px', height: '32px', borderRadius: '9999px', backgroundColor: 'var(--color-primary-600)', color: 'white' }}\n title='Drag to move / Click to expand' whileHover={{ backgroundColor: 'var(--color-primary-700)', scale: 1.05 }} whileTap={{ scale: 0.95 }}\n >\n <span className='text-xs font-bold'>{pendingEditsCount}</span>\n </motion.div>\n ) : (\n <motion.button key='minimize-btn' initial={{ opacity: 0, scale: 0.8 }} animate={{ opacity: 1, scale: 1 }} exit={{ opacity: 0, scale: 0.8 }}\n onClick={() => setIsMinimized(true)} className='flex items-center justify-center flex-shrink-0'\n style={{ width: '24px', height: '24px', borderRadius: '4px', backgroundColor: 'transparent', color: 'var(--color-neutral-400)' }}\n title='Minimize' whileHover={{ backgroundColor: 'var(--color-neutral-100)', color: 'var(--color-neutral-600)' }} whileTap={{ scale: 0.9 }}\n >\n <RemoveOutlined sx={{ fontSize: 16 }} />\n </motion.button>\n )}\n </AnimatePresence>\n\n <motion.div className='flex items-center gap-3' animate={{ width: isMinimized ? 0 : 'auto', opacity: isMinimized ? 0 : 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 25 }} style={{ overflow: 'hidden', pointerEvents: isMinimized ? 'none' : 'auto' }}\n >\n <div onMouseDown={handleMouseDown} className='cursor-grab active:cursor-grabbing text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 flex items-center' title='Drag to move'>\n <DragIndicator sx={{ fontSize: 18 }} />\n </div>\n <div className='relative' onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>\n <span className='text-sm font-medium text-neutral-700 dark:text-neutral-200 cursor-pointer hover:text-primary-600 dark:hover:text-primary-400 whitespace-nowrap'>\n {pendingEditsCount} unsaved {pendingEditsCount === 1 ? 'change' : 'changes'}\n </span>\n </div>\n <div className='h-4 w-px bg-neutral-200 dark:bg-black-600 flex-shrink-0' />\n <motion.button onClick={onClearAll} disabled={!!fieldOperationLoading}\n className={`px-3 py-1.5 text-sm font-medium rounded-md whitespace-nowrap flex-shrink-0 ${fieldOperationLoading ? 'text-neutral-400 dark:text-neutral-500 cursor-not-allowed' : 'text-neutral-600 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-black-600'}`}\n whileHover={!fieldOperationLoading ? { scale: 1.02 } : undefined} whileTap={!fieldOperationLoading ? { scale: 0.98 } : undefined}\n >\n Cancel\n </motion.button>\n <motion.button onClick={onSaveAll} disabled={!!fieldOperationLoading}\n className={`px-3 py-1.5 text-sm font-medium rounded-md whitespace-nowrap flex-shrink-0 ${fieldOperationLoading ? 'text-white bg-primary-400 cursor-not-allowed' : 'text-white bg-primary-600 hover:bg-primary-700'}`}\n whileHover={!fieldOperationLoading ? { scale: 1.02 } : undefined} whileTap={!fieldOperationLoading ? { scale: 0.98 } : undefined}\n >\n Save All\n </motion.button>\n </motion.div>\n </motion.div>\n </motion.div>\n );\n\n return createPortal(floatingBar, document.body);\n};\n"],"names":["rowFilterDropdownVariants","listContainerVariants","listItemVariants","PendingEditsFloatingBar","pendingEditsCount","pendingEditsList","rowsWithPendingEdits","fieldOperationLoading","onClearAll","onSaveAll","onScrollToCell","showDropdown","setShowDropdown","useState","isMinimized","setIsMinimized","rowFilter","setRowFilter","position","setPosition","isDragging","setIsDragging","rowFilterSearch","setRowFilterSearch","showRowFilterDropdown","setShowRowFilterDropdown","rowFilterButtonRect","setRowFilterButtonRect","dropdownTimeoutRef","useRef","dragStartRef","floatingBarRef","rowFilterRef","rowFilterButtonRef","rowFilterDropdownRef","filteredPendingEditsList","useMemo","edit","filteredRowOptions","searchLower","row","selectedRowLabel","r","useEffect","handleClickOutside","e","target","handleMouseEnter","useCallback","handleMouseLeave","clampPositionToViewport","nextX","nextY","barWidth","barHeight","maxX","maxY","handleMouseDown","barElement","rect","handleMouseMove","handleMouseUp","keepBarInViewport","clampedPosition","formatValue","val","currencyCode","strVal","hasTime","formatDate","handleCellClick","handleRowFilterSelect","rowId","floatingBar","jsxs","motion","jsx","AnimatePresence","KeyboardArrowDownRounded","createPortal","SearchRounded","CloseRounded","idx","RemoveOutlined","DragIndicator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PendingEditsFloatingBar.es.js","sources":["../../../../src/components/data-display/infinite-table/PendingEditsFloatingBar.tsx"],"sourcesContent":["import { formatDate } from '../../../utils/formatters';\nimport { CloseRounded, DragIndicator, KeyboardArrowDownRounded, RemoveOutlined, SearchRounded } from '@mui/icons-material';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { FLOATING_BAR_TOOLTIP_MARGIN_BOTTOM, FLOATING_BAR_TOOLTIP_MARGIN_LEFT } from './constants';\n\ninterface PendingEdit {\n rowId: string;\n columnKey: string;\n fieldName: string;\n value: unknown;\n originalValue: unknown;\n meta?: { currency_code?: string | null; [key: string]: unknown | null } | null;\n originalMeta?: { currency_code?: string | null; [key: string]: unknown | null } | null;\n rowIndex: number;\n}\n\ninterface RowWithPendingEdits {\n rowId: string;\n rowIndex: number;\n editCount: number;\n}\n\ninterface PendingEditsFloatingBarProps {\n pendingEditsCount: number;\n pendingEditsList: PendingEdit[];\n rowsWithPendingEdits: RowWithPendingEdits[];\n fieldOperationLoading: string | null;\n onClearAll: () => void;\n onSaveAll: () => void;\n onScrollToCell: (rowId: string, columnKey: string, rowIndex: number) => void;\n}\n\nconst rowFilterDropdownVariants = {\n hidden: { opacity: 0, y: -8, scale: 0.95 },\n visible: { opacity: 1, y: 0, scale: 1, transition: { type: 'spring' as const, stiffness: 400, damping: 25 } },\n exit: { opacity: 0, y: -8, scale: 0.95, transition: { duration: 0.1 } },\n};\n\nconst listContainerVariants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: { staggerChildren: 0.03, delayChildren: 0.05 } },\n};\n\nconst listItemVariants = {\n hidden: { opacity: 0, y: -8 },\n visible: { opacity: 1, y: 0, transition: { type: 'spring' as const, stiffness: 400, damping: 25 } },\n};\n\nexport const PendingEditsFloatingBar: React.FC<PendingEditsFloatingBarProps> = ({\n pendingEditsCount, pendingEditsList, rowsWithPendingEdits, fieldOperationLoading, onClearAll, onSaveAll, onScrollToCell,\n}) => {\n const [showDropdown, setShowDropdown] = useState(false);\n const [isMinimized, setIsMinimized] = useState(false);\n const [rowFilter, setRowFilter] = useState<string | null>(null);\n const [position, setPosition] = useState<{ x: number; y: number } | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [rowFilterSearch, setRowFilterSearch] = useState('');\n const [showRowFilterDropdown, setShowRowFilterDropdown] = useState(false);\n const [rowFilterButtonRect, setRowFilterButtonRect] = useState<DOMRect | null>(null);\n\n const dropdownTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const dragStartRef = useRef<{ x: number; y: number; barX: number; barY: number; barWidth: number; barHeight: number } | null>(null);\n const floatingBarRef = useRef<HTMLDivElement>(null);\n const rowFilterRef = useRef<HTMLDivElement>(null);\n const rowFilterButtonRef = useRef<HTMLButtonElement>(null);\n const rowFilterDropdownRef = useRef<HTMLDivElement>(null);\n\n const filteredPendingEditsList = useMemo(() => {\n if (!rowFilter) return pendingEditsList;\n return pendingEditsList.filter((edit) => edit.rowId === rowFilter);\n }, [pendingEditsList, rowFilter]);\n\n const filteredRowOptions = useMemo(() => {\n if (!rowFilterSearch) return rowsWithPendingEdits;\n const searchLower = rowFilterSearch.toLowerCase();\n return rowsWithPendingEdits.filter((row) => `row ${row.rowIndex + 1}`.toLowerCase().includes(searchLower));\n }, [rowsWithPendingEdits, rowFilterSearch]);\n\n const selectedRowLabel = useMemo(() => {\n if (!rowFilter) return `All Rows (${pendingEditsList.length})`;\n const row = rowsWithPendingEdits.find((r) => r.rowId === rowFilter);\n if (!row) return `All Rows (${pendingEditsList.length})`;\n return `Row ${row.rowIndex + 1} (${row.editCount})`;\n }, [rowFilter, rowsWithPendingEdits, pendingEditsList.length]);\n\n useEffect(() => {\n if (rowFilter && !rowsWithPendingEdits.find((row) => row.rowId === rowFilter)) setRowFilter(null);\n }, [rowsWithPendingEdits, rowFilter]);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n if (!rowFilterRef.current?.contains(target) && !rowFilterDropdownRef.current?.contains(target)) {\n setShowRowFilterDropdown(false);\n setRowFilterSearch('');\n }\n };\n if (showRowFilterDropdown) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showRowFilterDropdown]);\n\n const handleMouseEnter = useCallback(() => {\n if (dropdownTimeoutRef.current) { clearTimeout(dropdownTimeoutRef.current); dropdownTimeoutRef.current = null; }\n setShowDropdown(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n dropdownTimeoutRef.current = setTimeout(() => setShowDropdown(false), 300);\n }, []);\n\n const clampPositionToViewport = useCallback((nextX: number, nextY: number, barWidth: number, barHeight: number) => {\n const maxX = Math.max(0, window.innerWidth - barWidth);\n const maxY = Math.max(0, window.innerHeight - barHeight);\n\n return {\n x: Math.min(Math.max(nextX, 0), maxX),\n y: Math.min(Math.max(nextY, 0), maxY),\n };\n }, []);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n const barElement = e.currentTarget.closest('.pending-edits-floating-bar') as HTMLElement;\n if (!barElement) return;\n const rect = barElement.getBoundingClientRect();\n dragStartRef.current = {\n x: e.clientX,\n y: e.clientY,\n barX: position?.x ?? rect.left,\n barY: position?.y ?? rect.top,\n barWidth: rect.width,\n barHeight: rect.height,\n };\n setIsDragging(true);\n }, [position]);\n\n useEffect(() => {\n if (!isDragging) return;\n const handleMouseMove = (e: MouseEvent) => {\n if (!dragStartRef.current) return;\n const nextX = dragStartRef.current.barX + e.clientX - dragStartRef.current.x;\n const nextY = dragStartRef.current.barY + e.clientY - dragStartRef.current.y;\n setPosition(clampPositionToViewport(nextX, nextY, dragStartRef.current.barWidth, dragStartRef.current.barHeight));\n };\n const handleMouseUp = () => { setIsDragging(false); dragStartRef.current = null; };\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => { document.removeEventListener('mousemove', handleMouseMove); document.removeEventListener('mouseup', handleMouseUp); };\n }, [isDragging, clampPositionToViewport]);\n\n useEffect(() => {\n if (!position || !floatingBarRef.current) return;\n\n const keepBarInViewport = () => {\n if (!floatingBarRef.current) return;\n const rect = floatingBarRef.current.getBoundingClientRect();\n const clampedPosition = clampPositionToViewport(position.x, position.y, rect.width, rect.height);\n if (clampedPosition.x !== position.x || clampedPosition.y !== position.y) {\n setPosition(clampedPosition);\n }\n };\n\n keepBarInViewport();\n window.addEventListener('resize', keepBarInViewport);\n return () => window.removeEventListener('resize', keepBarInViewport);\n }, [position, clampPositionToViewport]);\n\n const formatValue = (val: unknown, currencyCode?: string | null): string => {\n if (typeof val === 'boolean') return val ? 'Yes' : 'No';\n if (val === null || val === undefined || val === '') return '-';\n const strVal = String(val);\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?/;\n if (dateRegex.test(strVal)) {\n const hasTime = strVal.includes('T');\n return formatDate(strVal, { withTime: hasTime, skipTimezone: true }) || strVal;\n }\n if (currencyCode) return `${strVal} ${currencyCode}`;\n return strVal;\n };\n\n const handleCellClick = (edit: PendingEdit) => { setShowDropdown(false); onScrollToCell(edit.rowId, edit.columnKey, edit.rowIndex); };\n const handleRowFilterSelect = (rowId: string | null) => { setRowFilter(rowId); setShowRowFilterDropdown(false); setRowFilterSearch(''); };\n\n if (pendingEditsCount === 0) return null;\n\n const floatingBar = (\n <motion.div\n ref={floatingBarRef}\n className='pending-edits-floating-bar fixed z-[9999]'\n style={{\n zIndex: 2147483646,\n ...(position ? { left: position.x, top: position.y } : { bottom: 24, left: '50%', transform: 'translateX(-50%)' }),\n }}\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 25 }}\n >\n <AnimatePresence>\n {showDropdown && !isMinimized && (\n <motion.div\n className='absolute w-80'\n style={{ bottom: '100%', left: '50%', marginLeft: FLOATING_BAR_TOOLTIP_MARGIN_LEFT, marginBottom: FLOATING_BAR_TOOLTIP_MARGIN_BOTTOM }}\n initial={{ opacity: 0, y: 10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 10, scale: 0.95 }}\n transition={{ type: 'spring', stiffness: 300, damping: 24 }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div className='bg-white dark:bg-black-700 rounded-lg shadow-xl border border-neutral-200 dark:border-black-600 py-2 overflow-hidden'>\n <div className='px-3 py-1.5 text-xs font-semibold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider border-b border-neutral-100 dark:border-black-600'>Pending Changes</div>\n {rowsWithPendingEdits.length > 1 && (\n <div className='px-3 py-2 border-b border-neutral-100 dark:border-black-600' ref={rowFilterRef}>\n <div className='relative'>\n <button\n ref={rowFilterButtonRef}\n onClick={() => { if (rowFilterButtonRef.current) setRowFilterButtonRect(rowFilterButtonRef.current.getBoundingClientRect()); setShowRowFilterDropdown(!showRowFilterDropdown); }}\n className='w-full text-xs px-2 py-1.5 rounded border border-neutral-200 dark:border-black-500 bg-neutral-50 dark:bg-black-600 text-neutral-700 dark:text-neutral-200 focus:outline-none focus:ring-1 focus:ring-primary-500 flex items-center justify-between gap-2'\n >\n <span className='truncate'>{selectedRowLabel}</span>\n <motion.div animate={{ rotate: showRowFilterDropdown ? 180 : 0 }} transition={{ duration: 0.2 }}>\n <KeyboardArrowDownRounded sx={{ fontSize: 16 }} className='text-neutral-400' />\n </motion.div>\n </button>\n {showRowFilterDropdown && rowFilterButtonRect && createPortal(\n <AnimatePresence>\n <motion.div\n ref={rowFilterDropdownRef}\n className='fixed bg-white dark:bg-black-700 rounded-lg shadow-xl border border-neutral-200 dark:border-black-600 overflow-hidden'\n style={{ zIndex: 2147483647, top: rowFilterButtonRect.bottom + 4, left: rowFilterButtonRect.left, width: rowFilterButtonRect.width }}\n variants={rowFilterDropdownVariants}\n initial='hidden' animate='visible' exit='exit'\n >\n <div className='p-2 border-b border-neutral-100 dark:border-black-600'>\n <div className='relative flex items-center'>\n <SearchRounded sx={{ fontSize: 14 }} className='absolute left-2 text-neutral-400 dark:text-neutral-500 z-10 pointer-events-none' />\n <input type='text' value={rowFilterSearch} onChange={(e) => setRowFilterSearch(e.target.value)} placeholder='Search rows...' className='w-full text-xs pl-7 pr-7 py-1.5 rounded border border-neutral-200 dark:border-black-500 bg-white dark:bg-black-600 text-neutral-700 dark:text-neutral-200 focus:outline-none focus:ring-1 focus:ring-primary-500 placeholder:text-neutral-400' autoFocus />\n {rowFilterSearch && <button onClick={() => setRowFilterSearch('')} className='absolute right-2 z-10 text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-300'><CloseRounded sx={{ fontSize: 14 }} /></button>}\n </div>\n </div>\n <motion.div className='max-h-40 overflow-y-auto' variants={listContainerVariants} initial='hidden' animate='visible'>\n {(!rowFilterSearch || 'all rows'.includes(rowFilterSearch.toLowerCase())) && (\n <motion.button variants={listItemVariants} onClick={() => handleRowFilterSelect(null)} className={`w-full text-left px-3 py-2 text-xs transition-colors ${!rowFilter ? 'bg-primary-50 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300' : 'text-neutral-700 dark:text-neutral-200 hover:bg-neutral-50 dark:hover:bg-black-600'}`}>\n All Rows ({pendingEditsList.length} changes)\n </motion.button>\n )}\n {filteredRowOptions.map((row) => (\n <motion.button key={row.rowId} variants={listItemVariants} onClick={() => handleRowFilterSelect(row.rowId)} className={`w-full text-left px-3 py-2 text-xs transition-colors ${rowFilter === row.rowId ? 'bg-primary-50 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300' : 'text-neutral-700 dark:text-neutral-200 hover:bg-neutral-50 dark:hover:bg-black-600'}`}>\n Row {row.rowIndex + 1} ({row.editCount} {row.editCount === 1 ? 'change' : 'changes'})\n </motion.button>\n ))}\n {filteredRowOptions.length === 0 && rowFilterSearch && !'all rows'.includes(rowFilterSearch.toLowerCase()) && (\n <motion.div variants={listItemVariants} className='px-3 py-2 text-xs text-neutral-500 dark:text-neutral-400'>No rows found</motion.div>\n )}\n </motion.div>\n </motion.div>\n </AnimatePresence>,\n document.body,\n )}\n </div>\n </div>\n )}\n <motion.div className='max-h-52 overflow-y-auto' variants={listContainerVariants} initial='hidden' animate='visible'>\n {filteredPendingEditsList?.map((edit, idx) => (\n <motion.button key={`${edit.rowId}-${edit.columnKey}-${idx}`} variants={listItemVariants} onClick={() => handleCellClick(edit)} className='w-full px-3 py-2 text-left hover:bg-neutral-50 dark:hover:bg-black-600 transition-colors' whileHover={{ backgroundColor: 'rgba(0,0,0,0.03)' }} whileTap={{ scale: 0.98 }}>\n <div className='text-xs font-bold text-neutral-700 dark:text-neutral-300 mb-1'>\n {edit.fieldName} {!rowFilter && <span className='font-normal text-neutral-500 dark:text-neutral-400'>(Row {edit.rowIndex + 1})</span>}\n </div>\n <div className='flex items-center gap-1.5 text-sm'>\n <span className='text-neutral-400 dark:text-neutral-500 line-through truncate max-w-[100px]'>{formatValue(edit.originalValue, edit.originalMeta?.currency_code)}</span>\n <span className='text-neutral-400 dark:text-neutral-500 flex-shrink-0'>→</span>\n <span className='text-primary-600 dark:text-primary-400 font-medium truncate max-w-[100px]'>{formatValue(edit.value, edit.meta?.currency_code)}</span>\n </div>\n </motion.button>\n ))}\n </motion.div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n <motion.div\n className='flex items-center bg-white dark:bg-black-700 shadow-lg border border-neutral-200 dark:border-black-600 overflow-hidden'\n animate={{ padding: isMinimized ? '8px' : '12px 16px', gap: isMinimized ? '0px' : '12px', borderRadius: isMinimized ? '9999px' : '8px' }}\n transition={{ type: 'spring', stiffness: 300, damping: 25 }}\n >\n <AnimatePresence mode='wait'>\n {isMinimized ? (\n <motion.div key='minimized' initial={{ opacity: 0, scale: 0.8 }} animate={{ opacity: 1, scale: 1 }} exit={{ opacity: 0, scale: 0.8 }}\n onMouseDown={handleMouseDown} onClick={() => setIsMinimized(false)}\n className='flex items-center justify-center cursor-grab active:cursor-grabbing flex-shrink-0'\n style={{ width: '32px', height: '32px', borderRadius: '9999px', backgroundColor: 'var(--color-primary-600)', color: 'white' }}\n title='Drag to move / Click to expand' whileHover={{ backgroundColor: 'var(--color-primary-700)', scale: 1.05 }} whileTap={{ scale: 0.95 }}\n >\n <span className='text-xs font-bold'>{pendingEditsCount}</span>\n </motion.div>\n ) : (\n <motion.button key='minimize-btn' initial={{ opacity: 0, scale: 0.8 }} animate={{ opacity: 1, scale: 1 }} exit={{ opacity: 0, scale: 0.8 }}\n onClick={() => setIsMinimized(true)} className='flex items-center justify-center flex-shrink-0'\n style={{ width: '24px', height: '24px', borderRadius: '4px', backgroundColor: 'transparent', color: 'var(--color-neutral-400)' }}\n title='Minimize' whileHover={{ backgroundColor: 'var(--color-neutral-100)', color: 'var(--color-neutral-600)' }} whileTap={{ scale: 0.9 }}\n >\n <RemoveOutlined sx={{ fontSize: 16 }} />\n </motion.button>\n )}\n </AnimatePresence>\n\n <motion.div className='flex items-center gap-3' animate={{ width: isMinimized ? 0 : 'auto', opacity: isMinimized ? 0 : 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 25 }} style={{ overflow: 'hidden', pointerEvents: isMinimized ? 'none' : 'auto' }}\n >\n <div onMouseDown={handleMouseDown} className='cursor-grab active:cursor-grabbing text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 flex items-center' title='Drag to move'>\n <DragIndicator sx={{ fontSize: 18 }} />\n </div>\n <div className='relative' onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>\n <span className='text-sm font-medium text-neutral-700 dark:text-neutral-200 cursor-pointer hover:text-primary-600 dark:hover:text-primary-400 whitespace-nowrap'>\n {pendingEditsCount} unsaved {pendingEditsCount === 1 ? 'change' : 'changes'}\n </span>\n </div>\n <div className='h-4 w-px bg-neutral-200 dark:bg-black-600 flex-shrink-0' />\n <motion.button onClick={onClearAll} disabled={!!fieldOperationLoading}\n className={`px-3 py-1.5 text-sm font-medium rounded-md whitespace-nowrap flex-shrink-0 ${fieldOperationLoading ? 'text-neutral-400 dark:text-neutral-500 cursor-not-allowed' : 'text-neutral-600 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-black-600'}`}\n whileHover={!fieldOperationLoading ? { scale: 1.02 } : undefined} whileTap={!fieldOperationLoading ? { scale: 0.98 } : undefined}\n >\n Cancel\n </motion.button>\n <motion.button onClick={onSaveAll} disabled={!!fieldOperationLoading}\n className={`px-3 py-1.5 text-sm font-medium rounded-md whitespace-nowrap flex-shrink-0 ${fieldOperationLoading ? 'text-white bg-primary-400 cursor-not-allowed' : 'text-white bg-primary-600 hover:bg-primary-700'}`}\n whileHover={!fieldOperationLoading ? { scale: 1.02 } : undefined} whileTap={!fieldOperationLoading ? { scale: 0.98 } : undefined}\n >\n Save All\n </motion.button>\n </motion.div>\n </motion.div>\n </motion.div>\n );\n\n return createPortal(floatingBar, document.body);\n};\n"],"names":["rowFilterDropdownVariants","listContainerVariants","listItemVariants","PendingEditsFloatingBar","pendingEditsCount","pendingEditsList","rowsWithPendingEdits","fieldOperationLoading","onClearAll","onSaveAll","onScrollToCell","showDropdown","setShowDropdown","useState","isMinimized","setIsMinimized","rowFilter","setRowFilter","position","setPosition","isDragging","setIsDragging","rowFilterSearch","setRowFilterSearch","showRowFilterDropdown","setShowRowFilterDropdown","rowFilterButtonRect","setRowFilterButtonRect","dropdownTimeoutRef","useRef","dragStartRef","floatingBarRef","rowFilterRef","rowFilterButtonRef","rowFilterDropdownRef","filteredPendingEditsList","useMemo","edit","filteredRowOptions","searchLower","row","selectedRowLabel","r","useEffect","handleClickOutside","e","target","handleMouseEnter","useCallback","handleMouseLeave","clampPositionToViewport","nextX","nextY","barWidth","barHeight","maxX","maxY","handleMouseDown","barElement","rect","handleMouseMove","handleMouseUp","keepBarInViewport","clampedPosition","formatValue","val","currencyCode","strVal","hasTime","formatDate","handleCellClick","handleRowFilterSelect","rowId","floatingBar","jsxs","motion","jsx","AnimatePresence","FLOATING_BAR_TOOLTIP_MARGIN_LEFT","FLOATING_BAR_TOOLTIP_MARGIN_BOTTOM","KeyboardArrowDownRounded","createPortal","SearchRounded","CloseRounded","idx","RemoveOutlined","DragIndicator"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),S=require("../../../../tooltip/Tooltip.cjs.js"),r=require("react"),C=require("../../../../../providers/design-system-provider/hooks.cjs.js"),y=({rowHovering:f,level:a,totalWidth:c,isCheckbox:s,id:i,onClick:l,cells:m,isRoot:b,name:u,uploadCell:j,row:d,disabled:t,disabledTooltip:x})=>{const p=C.useTableConfig(),o=d?.name?.props,g=r.useCallback(()=>o?.text&&o.text==="+ New Line Item"?"new-line-item":`id-${Math.random().toString(36).substring(2,15)}`,[o?.text]),w=r.useMemo(()=>g(),[g]),N=r.useCallback(n=>{t||l&&l(n)},[l,t]),h=r.useMemo(()=>m.filter(n=>n?.column?.visible!==!1)?.length-(s?1:0),[m,s]),k=r.useMemo(()=>a>0?a*16:0,[a]);if(j&&p?.renderUploadAttachmentRow)return e.jsx(e.Fragment,{children:p.renderUploadAttachmentRow({data:d,colSpan:h+2,totalWidth:c})});const v=t&&x?e.jsx(S,{title:x,placement:"top",children:e.jsx("span",{className:t?"text-neutral-400":"text-primary-600",children:u})}):e.jsx("span",{className:t?"text-neutral-400":"text-primary-600",children:u});return e.jsxs("div",{className:"relative dark:bg-black-800",children:[s&&e.jsx("td",{className:`min-w-[40px] ${f===i?"bg-neutral-100 dark:bg-black-700":""}`}),e.jsxs("td",{id:String(w)||String(i),onClick:N,className:`relative w-full h-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),S=require("../../../../tooltip/Tooltip.cjs.js"),r=require("react"),C=require("../../../../../providers/design-system-provider/hooks.cjs.js"),y=({rowHovering:f,level:a,totalWidth:c,isCheckbox:s,id:i,onClick:l,cells:m,isRoot:b,name:u,uploadCell:j,row:d,disabled:t,disabledTooltip:x})=>{const p=C.useTableConfig(),o=d?.name?.props,g=r.useCallback(()=>o?.text&&o.text==="+ New Line Item"?"new-line-item":`id-${Math.random().toString(36).substring(2,15)}`,[o?.text]),w=r.useMemo(()=>g(),[g]),N=r.useCallback(n=>{t||l&&l(n)},[l,t]),h=r.useMemo(()=>m.filter(n=>n?.column?.visible!==!1)?.length-(s?1:0),[m,s]),k=r.useMemo(()=>a>0?a*16:0,[a]);if(j&&p?.renderUploadAttachmentRow)return e.jsx(e.Fragment,{children:p.renderUploadAttachmentRow({data:d,colSpan:h+2,totalWidth:c})});const v=t&&x?e.jsx(S,{title:x,placement:"top",children:e.jsx("span",{className:t?"text-neutral-400":"text-primary-600",children:u})}):e.jsx("span",{className:t?"text-neutral-400":"text-primary-600",children:u});return e.jsxs("div",{className:"relative dark:bg-black-800",children:[s&&e.jsx("td",{className:`min-w-[40px] ${f===i?"bg-neutral-100 dark:bg-black-700":""}`}),e.jsxs("td",{id:String(w)||String(i),onClick:N,className:`relative w-full h-row overflow-x-hidden ${t?"cursor-not-allowed":"cursor-pointer"}`,colSpan:h,style:{paddingLeft:k,width:c},children:[!b&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"h-1/2 border-l border-neutral-300 ml-2 dark:border-black-700"}),e.jsx("div",{className:"ml-2 w-2.5 h-px bg-neutral-300 dark:bg-black-700"})]}),e.jsx("div",{className:"px-6 w-full absolute h-row top-0 flex items-center",children:v})]})]})},A=r.memo(y);exports.ActionCell=A;
|
|
2
2
|
//# sourceMappingURL=ActionCell.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionCell.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/ActionCell.tsx"],"sourcesContent":["import Tooltip from '../../../../tooltip/Tooltip';\nimport React, { useCallback, useMemo } from 'react';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\n\ntype CellProps = {\n rowHovering: number | string;\n level: number;\n totalWidth: number;\n isCheckbox: boolean;\n id: number | string;\n onClick: (e?: React.MouseEvent<HTMLTableCellElement>) => void;\n cells: Array<{ column?: { visible?: boolean; [k: string]: unknown }; [k: string]: unknown }>;\n isRoot: boolean;\n name: string;\n uploadCell?: boolean;\n row?: Record<string, unknown>;\n disabled?: boolean;\n disabledTooltip?: string;\n};\n\nconst ActionCellInner: React.FC<CellProps> = ({\n rowHovering,\n level,\n totalWidth,\n isCheckbox,\n id,\n onClick,\n cells,\n isRoot,\n name,\n uploadCell,\n row,\n disabled,\n disabledTooltip,\n}) => {\n const tableConfig = useTableConfig();\n\n const rowNameProps = (row?.name as { props?: { text?: string } } | undefined)?.props;\n const generateId = useCallback(() => {\n if (rowNameProps?.text && rowNameProps.text === '+ New Line Item') {\n return 'new-line-item';\n } else {\n const formatted = Math.random().toString(36).substring(2, 15);\n return `id-${formatted}`;\n }\n }, [rowNameProps?.text]);\n const currentId = useMemo(() => generateId(), [generateId]);\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (disabled) return;\n if (onClick) onClick(e);\n },\n [onClick, disabled],\n );\n\n const colSpan = useMemo(() => cells.filter((cell) => cell?.column?.visible !== false)?.length - (isCheckbox ? 1 : 0), [cells, isCheckbox]);\n const paddingLeft = useMemo(() => (level > 0 ? level * 16 : 0), [level]);\n\n if (uploadCell && tableConfig?.renderUploadAttachmentRow) {\n return <>{tableConfig.renderUploadAttachmentRow({ data: row, colSpan: colSpan + 2, totalWidth })}</>;\n }\n\n const nameContent =\n disabled && disabledTooltip ? (\n <Tooltip title={disabledTooltip} placement='top'>\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n </Tooltip>\n ) : (\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n );\n\n return (\n <div className='relative dark:bg-black-800'>\n {isCheckbox && <td className={`min-w-[40px] ${rowHovering === id ? 'bg-neutral-100 dark:bg-black-700' : ''}`} />}\n <td\n id={String(currentId) || String(id)}\n onClick={handleClick}\n className={`relative w-full h-
|
|
1
|
+
{"version":3,"file":"ActionCell.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/ActionCell.tsx"],"sourcesContent":["import Tooltip from '../../../../tooltip/Tooltip';\nimport React, { useCallback, useMemo } from 'react';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\n\ntype CellProps = {\n rowHovering: number | string;\n level: number;\n totalWidth: number;\n isCheckbox: boolean;\n id: number | string;\n onClick: (e?: React.MouseEvent<HTMLTableCellElement>) => void;\n cells: Array<{ column?: { visible?: boolean; [k: string]: unknown }; [k: string]: unknown }>;\n isRoot: boolean;\n name: string;\n uploadCell?: boolean;\n row?: Record<string, unknown>;\n disabled?: boolean;\n disabledTooltip?: string;\n};\n\nconst ActionCellInner: React.FC<CellProps> = ({\n rowHovering,\n level,\n totalWidth,\n isCheckbox,\n id,\n onClick,\n cells,\n isRoot,\n name,\n uploadCell,\n row,\n disabled,\n disabledTooltip,\n}) => {\n const tableConfig = useTableConfig();\n\n const rowNameProps = (row?.name as { props?: { text?: string } } | undefined)?.props;\n const generateId = useCallback(() => {\n if (rowNameProps?.text && rowNameProps.text === '+ New Line Item') {\n return 'new-line-item';\n } else {\n const formatted = Math.random().toString(36).substring(2, 15);\n return `id-${formatted}`;\n }\n }, [rowNameProps?.text]);\n const currentId = useMemo(() => generateId(), [generateId]);\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (disabled) return;\n if (onClick) onClick(e);\n },\n [onClick, disabled],\n );\n\n const colSpan = useMemo(() => cells.filter((cell) => cell?.column?.visible !== false)?.length - (isCheckbox ? 1 : 0), [cells, isCheckbox]);\n const paddingLeft = useMemo(() => (level > 0 ? level * 16 : 0), [level]);\n\n if (uploadCell && tableConfig?.renderUploadAttachmentRow) {\n return <>{tableConfig.renderUploadAttachmentRow({ data: row, colSpan: colSpan + 2, totalWidth })}</>;\n }\n\n const nameContent =\n disabled && disabledTooltip ? (\n <Tooltip title={disabledTooltip} placement='top'>\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n </Tooltip>\n ) : (\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n );\n\n return (\n <div className='relative dark:bg-black-800'>\n {isCheckbox && <td className={`min-w-[40px] ${rowHovering === id ? 'bg-neutral-100 dark:bg-black-700' : ''}`} />}\n <td\n id={String(currentId) || String(id)}\n onClick={handleClick}\n className={`relative w-full h-row overflow-x-hidden ${disabled ? 'cursor-not-allowed' : 'cursor-pointer'}`}\n colSpan={colSpan}\n style={{ paddingLeft, width: totalWidth }}\n >\n {!isRoot && (\n <>\n <div className='h-1/2 border-l border-neutral-300 ml-2 dark:border-black-700' />\n <div className='ml-2 w-2.5 h-px bg-neutral-300 dark:bg-black-700' />\n </>\n )}\n <div className='px-6 w-full absolute h-row top-0 flex items-center'>{nameContent}</div>\n </td>\n </div>\n );\n};\n\nexport const ActionCell = React.memo(ActionCellInner);\n"],"names":["ActionCellInner","rowHovering","level","totalWidth","isCheckbox","id","onClick","cells","isRoot","name","uploadCell","row","disabled","disabledTooltip","tableConfig","useTableConfig","rowNameProps","generateId","useCallback","currentId","useMemo","handleClick","e","colSpan","cell","paddingLeft","jsx","Fragment","nameContent","Tooltip","jsxs","ActionCell","React"],"mappings":"kQAoBMA,EAAuC,CAAC,CAC5C,YAAAC,EACA,MAAAC,EACA,WAAAC,EACA,WAAAC,EACA,GAAAC,EACA,QAAAC,EACA,MAAAC,EACA,OAAAC,EACA,KAAAC,EACA,WAAAC,EACA,IAAAC,EACA,SAAAC,EACA,gBAAAC,CACF,IAAM,CACJ,MAAMC,EAAcC,EAAAA,eAAA,EAEdC,EAAgBL,GAAK,MAAoD,MACzEM,EAAaC,EAAAA,YAAY,IACzBF,GAAc,MAAQA,EAAa,OAAS,kBACvC,gBAGA,MADW,KAAK,SAAS,SAAS,EAAE,EAAE,UAAU,EAAG,EAAE,CACtC,GAEvB,CAACA,GAAc,IAAI,CAAC,EACjBG,EAAYC,EAAAA,QAAQ,IAAMH,IAAc,CAACA,CAAU,CAAC,EACpDI,EAAcH,EAAAA,YACjBI,GAA8C,CACzCV,GACAN,KAAiBgB,CAAC,CACxB,EACA,CAAChB,EAASM,CAAQ,CAAA,EAGdW,EAAUH,EAAAA,QAAQ,IAAMb,EAAM,OAAQiB,GAASA,GAAM,QAAQ,UAAY,EAAK,GAAG,QAAUpB,EAAa,EAAI,GAAI,CAACG,EAAOH,CAAU,CAAC,EACnIqB,EAAcL,UAAQ,IAAOlB,EAAQ,EAAIA,EAAQ,GAAK,EAAI,CAACA,CAAK,CAAC,EAEvE,GAAIQ,GAAcI,GAAa,0BAC7B,OAAOY,EAAAA,IAAAC,EAAAA,SAAA,CAAG,SAAAb,EAAY,0BAA0B,CAAE,KAAMH,EAAK,QAASY,EAAU,EAAG,WAAApB,CAAA,CAAY,CAAA,CAAE,EAGnG,MAAMyB,EACJhB,GAAYC,EACVa,EAAAA,IAACG,EAAA,CAAQ,MAAOhB,EAAiB,UAAU,MACzC,SAAAa,EAAAA,IAAC,OAAA,CAAK,UAAWd,EAAW,mBAAqB,mBAAqB,SAAAH,CAAA,CAAK,CAAA,CAC7E,EAEAiB,EAAAA,IAAC,QAAK,UAAWd,EAAW,mBAAqB,mBAAqB,SAAAH,CAAA,CAAK,EAG/E,OACEqB,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACZ,SAAA,CAAA1B,GAAcsB,EAAAA,IAAC,MAAG,UAAW,gBAAgBzB,IAAgBI,EAAK,mCAAqC,EAAE,EAAA,CAAI,EAC9GyB,EAAAA,KAAC,KAAA,CACC,GAAI,OAAOX,CAAS,GAAK,OAAOd,CAAE,EAClC,QAASgB,EACT,UAAW,2CAA2CT,EAAW,qBAAuB,gBAAgB,GACxG,QAAAW,EACA,MAAO,CAAE,YAAAE,EAAa,MAAOtB,CAAA,EAE5B,SAAA,CAAA,CAACK,GACAsB,EAAAA,KAAAH,EAAAA,SAAA,CACE,SAAA,CAAAD,EAAAA,IAAC,MAAA,CAAI,UAAU,8DAAA,CAA+D,EAC9EA,EAAAA,IAAC,MAAA,CAAI,UAAU,kDAAA,CAAmD,CAAA,EACpE,EAEFA,EAAAA,IAAC,MAAA,CAAI,UAAU,qDAAsD,SAAAE,CAAA,CAAY,CAAA,CAAA,CAAA,CACnF,EACF,CAEJ,EAEaG,EAAaC,EAAM,KAAKhC,CAAe"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as t, Fragment as
|
|
1
|
+
import { jsx as t, Fragment as x, jsxs as c } from "react/jsx-runtime";
|
|
2
2
|
import y from "../../../../tooltip/Tooltip.es.js";
|
|
3
3
|
import R, { useCallback as b, useMemo as s } from "react";
|
|
4
4
|
import { useTableConfig as $ } from "../../../../../providers/design-system-provider/hooks.es.js";
|
|
@@ -8,7 +8,7 @@ const j = ({
|
|
|
8
8
|
totalWidth: i,
|
|
9
9
|
isCheckbox: a,
|
|
10
10
|
id: m,
|
|
11
|
-
onClick:
|
|
11
|
+
onClick: o,
|
|
12
12
|
cells: d,
|
|
13
13
|
isRoot: k,
|
|
14
14
|
name: p,
|
|
@@ -17,14 +17,14 @@ const j = ({
|
|
|
17
17
|
disabled: e,
|
|
18
18
|
disabledTooltip: f
|
|
19
19
|
}) => {
|
|
20
|
-
const h = $(),
|
|
20
|
+
const h = $(), l = u?.name?.props, g = b(() => l?.text && l.text === "+ New Line Item" ? "new-line-item" : `id-${Math.random().toString(36).substring(2, 15)}`, [l?.text]), S = s(() => g(), [g]), A = b(
|
|
21
21
|
(r) => {
|
|
22
|
-
e ||
|
|
22
|
+
e || o && o(r);
|
|
23
23
|
},
|
|
24
|
-
[
|
|
25
|
-
),
|
|
24
|
+
[o, e]
|
|
25
|
+
), w = s(() => d.filter((r) => r?.column?.visible !== !1)?.length - (a ? 1 : 0), [d, a]), C = s(() => n > 0 ? n * 16 : 0, [n]);
|
|
26
26
|
if (v && h?.renderUploadAttachmentRow)
|
|
27
|
-
return /* @__PURE__ */ t(
|
|
27
|
+
return /* @__PURE__ */ t(x, { children: h.renderUploadAttachmentRow({ data: u, colSpan: w + 2, totalWidth: i }) });
|
|
28
28
|
const I = e && f ? /* @__PURE__ */ t(y, { title: f, placement: "top", children: /* @__PURE__ */ t("span", { className: e ? "text-neutral-400" : "text-primary-600", children: p }) }) : /* @__PURE__ */ t("span", { className: e ? "text-neutral-400" : "text-primary-600", children: p });
|
|
29
29
|
return /* @__PURE__ */ c("div", { className: "relative dark:bg-black-800", children: [
|
|
30
30
|
a && /* @__PURE__ */ t("td", { className: `min-w-[40px] ${N === m ? "bg-neutral-100 dark:bg-black-700" : ""}` }),
|
|
@@ -33,15 +33,15 @@ const j = ({
|
|
|
33
33
|
{
|
|
34
34
|
id: String(S) || String(m),
|
|
35
35
|
onClick: A,
|
|
36
|
-
className: `relative w-full h-
|
|
37
|
-
colSpan:
|
|
36
|
+
className: `relative w-full h-row overflow-x-hidden ${e ? "cursor-not-allowed" : "cursor-pointer"}`,
|
|
37
|
+
colSpan: w,
|
|
38
38
|
style: { paddingLeft: C, width: i },
|
|
39
39
|
children: [
|
|
40
|
-
!k && /* @__PURE__ */ c(
|
|
40
|
+
!k && /* @__PURE__ */ c(x, { children: [
|
|
41
41
|
/* @__PURE__ */ t("div", { className: "h-1/2 border-l border-neutral-300 ml-2 dark:border-black-700" }),
|
|
42
42
|
/* @__PURE__ */ t("div", { className: "ml-2 w-2.5 h-px bg-neutral-300 dark:bg-black-700" })
|
|
43
43
|
] }),
|
|
44
|
-
/* @__PURE__ */ t("div", { className: "px-6 w-full absolute h-
|
|
44
|
+
/* @__PURE__ */ t("div", { className: "px-6 w-full absolute h-row top-0 flex items-center", children: I })
|
|
45
45
|
]
|
|
46
46
|
}
|
|
47
47
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionCell.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/ActionCell.tsx"],"sourcesContent":["import Tooltip from '../../../../tooltip/Tooltip';\nimport React, { useCallback, useMemo } from 'react';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\n\ntype CellProps = {\n rowHovering: number | string;\n level: number;\n totalWidth: number;\n isCheckbox: boolean;\n id: number | string;\n onClick: (e?: React.MouseEvent<HTMLTableCellElement>) => void;\n cells: Array<{ column?: { visible?: boolean; [k: string]: unknown }; [k: string]: unknown }>;\n isRoot: boolean;\n name: string;\n uploadCell?: boolean;\n row?: Record<string, unknown>;\n disabled?: boolean;\n disabledTooltip?: string;\n};\n\nconst ActionCellInner: React.FC<CellProps> = ({\n rowHovering,\n level,\n totalWidth,\n isCheckbox,\n id,\n onClick,\n cells,\n isRoot,\n name,\n uploadCell,\n row,\n disabled,\n disabledTooltip,\n}) => {\n const tableConfig = useTableConfig();\n\n const rowNameProps = (row?.name as { props?: { text?: string } } | undefined)?.props;\n const generateId = useCallback(() => {\n if (rowNameProps?.text && rowNameProps.text === '+ New Line Item') {\n return 'new-line-item';\n } else {\n const formatted = Math.random().toString(36).substring(2, 15);\n return `id-${formatted}`;\n }\n }, [rowNameProps?.text]);\n const currentId = useMemo(() => generateId(), [generateId]);\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (disabled) return;\n if (onClick) onClick(e);\n },\n [onClick, disabled],\n );\n\n const colSpan = useMemo(() => cells.filter((cell) => cell?.column?.visible !== false)?.length - (isCheckbox ? 1 : 0), [cells, isCheckbox]);\n const paddingLeft = useMemo(() => (level > 0 ? level * 16 : 0), [level]);\n\n if (uploadCell && tableConfig?.renderUploadAttachmentRow) {\n return <>{tableConfig.renderUploadAttachmentRow({ data: row, colSpan: colSpan + 2, totalWidth })}</>;\n }\n\n const nameContent =\n disabled && disabledTooltip ? (\n <Tooltip title={disabledTooltip} placement='top'>\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n </Tooltip>\n ) : (\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n );\n\n return (\n <div className='relative dark:bg-black-800'>\n {isCheckbox && <td className={`min-w-[40px] ${rowHovering === id ? 'bg-neutral-100 dark:bg-black-700' : ''}`} />}\n <td\n id={String(currentId) || String(id)}\n onClick={handleClick}\n className={`relative w-full h-
|
|
1
|
+
{"version":3,"file":"ActionCell.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/ActionCell.tsx"],"sourcesContent":["import Tooltip from '../../../../tooltip/Tooltip';\nimport React, { useCallback, useMemo } from 'react';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\n\ntype CellProps = {\n rowHovering: number | string;\n level: number;\n totalWidth: number;\n isCheckbox: boolean;\n id: number | string;\n onClick: (e?: React.MouseEvent<HTMLTableCellElement>) => void;\n cells: Array<{ column?: { visible?: boolean; [k: string]: unknown }; [k: string]: unknown }>;\n isRoot: boolean;\n name: string;\n uploadCell?: boolean;\n row?: Record<string, unknown>;\n disabled?: boolean;\n disabledTooltip?: string;\n};\n\nconst ActionCellInner: React.FC<CellProps> = ({\n rowHovering,\n level,\n totalWidth,\n isCheckbox,\n id,\n onClick,\n cells,\n isRoot,\n name,\n uploadCell,\n row,\n disabled,\n disabledTooltip,\n}) => {\n const tableConfig = useTableConfig();\n\n const rowNameProps = (row?.name as { props?: { text?: string } } | undefined)?.props;\n const generateId = useCallback(() => {\n if (rowNameProps?.text && rowNameProps.text === '+ New Line Item') {\n return 'new-line-item';\n } else {\n const formatted = Math.random().toString(36).substring(2, 15);\n return `id-${formatted}`;\n }\n }, [rowNameProps?.text]);\n const currentId = useMemo(() => generateId(), [generateId]);\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (disabled) return;\n if (onClick) onClick(e);\n },\n [onClick, disabled],\n );\n\n const colSpan = useMemo(() => cells.filter((cell) => cell?.column?.visible !== false)?.length - (isCheckbox ? 1 : 0), [cells, isCheckbox]);\n const paddingLeft = useMemo(() => (level > 0 ? level * 16 : 0), [level]);\n\n if (uploadCell && tableConfig?.renderUploadAttachmentRow) {\n return <>{tableConfig.renderUploadAttachmentRow({ data: row, colSpan: colSpan + 2, totalWidth })}</>;\n }\n\n const nameContent =\n disabled && disabledTooltip ? (\n <Tooltip title={disabledTooltip} placement='top'>\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n </Tooltip>\n ) : (\n <span className={disabled ? 'text-neutral-400' : 'text-primary-600'}>{name}</span>\n );\n\n return (\n <div className='relative dark:bg-black-800'>\n {isCheckbox && <td className={`min-w-[40px] ${rowHovering === id ? 'bg-neutral-100 dark:bg-black-700' : ''}`} />}\n <td\n id={String(currentId) || String(id)}\n onClick={handleClick}\n className={`relative w-full h-row overflow-x-hidden ${disabled ? 'cursor-not-allowed' : 'cursor-pointer'}`}\n colSpan={colSpan}\n style={{ paddingLeft, width: totalWidth }}\n >\n {!isRoot && (\n <>\n <div className='h-1/2 border-l border-neutral-300 ml-2 dark:border-black-700' />\n <div className='ml-2 w-2.5 h-px bg-neutral-300 dark:bg-black-700' />\n </>\n )}\n <div className='px-6 w-full absolute h-row top-0 flex items-center'>{nameContent}</div>\n </td>\n </div>\n );\n};\n\nexport const ActionCell = React.memo(ActionCellInner);\n"],"names":["ActionCellInner","rowHovering","level","totalWidth","isCheckbox","id","onClick","cells","isRoot","name","uploadCell","row","disabled","disabledTooltip","tableConfig","useTableConfig","rowNameProps","generateId","useCallback","currentId","useMemo","handleClick","e","colSpan","cell","paddingLeft","jsx","Fragment","nameContent","Tooltip","jsxs","ActionCell","React"],"mappings":";;;;AAoBA,MAAMA,IAAuC,CAAC;AAAA,EAC5C,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,IAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,KAAAC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAC;AACF,MAAM;AACJ,QAAMC,IAAcC,EAAA,GAEdC,IAAgBL,GAAK,MAAoD,OACzEM,IAAaC,EAAY,MACzBF,GAAc,QAAQA,EAAa,SAAS,oBACvC,kBAGA,MADW,KAAK,SAAS,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE,CACtC,IAEvB,CAACA,GAAc,IAAI,CAAC,GACjBG,IAAYC,EAAQ,MAAMH,KAAc,CAACA,CAAU,CAAC,GACpDI,IAAcH;AAAA,IAClB,CAACI,MAA8C;AAC7C,MAAIV,KACAN,OAAiBgB,CAAC;AAAA,IACxB;AAAA,IACA,CAAChB,GAASM,CAAQ;AAAA,EAAA,GAGdW,IAAUH,EAAQ,MAAMb,EAAM,OAAO,CAACiB,MAASA,GAAM,QAAQ,YAAY,EAAK,GAAG,UAAUpB,IAAa,IAAI,IAAI,CAACG,GAAOH,CAAU,CAAC,GACnIqB,IAAcL,EAAQ,MAAOlB,IAAQ,IAAIA,IAAQ,KAAK,GAAI,CAACA,CAAK,CAAC;AAEvE,MAAIQ,KAAcI,GAAa;AAC7B,WAAO,gBAAAY,EAAAC,GAAA,EAAG,UAAAb,EAAY,0BAA0B,EAAE,MAAMH,GAAK,SAASY,IAAU,GAAG,YAAApB,EAAA,CAAY,EAAA,CAAE;AAGnG,QAAMyB,IACJhB,KAAYC,IACV,gBAAAa,EAACG,GAAA,EAAQ,OAAOhB,GAAiB,WAAU,OACzC,UAAA,gBAAAa,EAAC,QAAA,EAAK,WAAWd,IAAW,qBAAqB,oBAAqB,UAAAH,EAAA,CAAK,EAAA,CAC7E,IAEA,gBAAAiB,EAAC,UAAK,WAAWd,IAAW,qBAAqB,oBAAqB,UAAAH,EAAA,CAAK;AAG/E,SACE,gBAAAqB,EAAC,OAAA,EAAI,WAAU,8BACZ,UAAA;AAAA,IAAA1B,KAAc,gBAAAsB,EAAC,QAAG,WAAW,gBAAgBzB,MAAgBI,IAAK,qCAAqC,EAAE,GAAA,CAAI;AAAA,IAC9G,gBAAAyB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI,OAAOX,CAAS,KAAK,OAAOd,CAAE;AAAA,QAClC,SAASgB;AAAA,QACT,WAAW,2CAA2CT,IAAW,uBAAuB,gBAAgB;AAAA,QACxG,SAAAW;AAAA,QACA,OAAO,EAAE,aAAAE,GAAa,OAAOtB,EAAA;AAAA,QAE5B,UAAA;AAAA,UAAA,CAACK,KACA,gBAAAsB,EAAAH,GAAA,EACE,UAAA;AAAA,YAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,+DAAA,CAA+D;AAAA,YAC9E,gBAAAA,EAAC,OAAA,EAAI,WAAU,mDAAA,CAAmD;AAAA,UAAA,GACpE;AAAA,UAEF,gBAAAA,EAAC,OAAA,EAAI,WAAU,sDAAsD,UAAAE,EAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACnF,GACF;AAEJ,GAEaG,IAAaC,EAAM,KAAKhC,CAAe;"}
|