@sustaina/shared-ui 1.6.0 → 1.6.2
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/index.d.mts +21 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.js +73 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +72 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/index.mjs
CHANGED
|
@@ -16,6 +16,7 @@ import { CSS } from '@dnd-kit/utilities';
|
|
|
16
16
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
17
17
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
18
18
|
import { useSensors, useSensor, PointerSensor, DndContext, closestCenter } from '@dnd-kit/core';
|
|
19
|
+
import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers';
|
|
19
20
|
import { z } from 'zod';
|
|
20
21
|
import { createPortal } from 'react-dom';
|
|
21
22
|
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
@@ -130,6 +131,15 @@ function isDefined(value) {
|
|
|
130
131
|
function isEmptyObject(value) {
|
|
131
132
|
return !!value && Object.keys(value).length === 0 && value.constructor === Object;
|
|
132
133
|
}
|
|
134
|
+
function debounce(fn, delay = 150) {
|
|
135
|
+
let timeout = null;
|
|
136
|
+
return (...args) => {
|
|
137
|
+
if (timeout) clearTimeout(timeout);
|
|
138
|
+
timeout = setTimeout(() => {
|
|
139
|
+
fn(...args);
|
|
140
|
+
}, delay);
|
|
141
|
+
};
|
|
142
|
+
}
|
|
133
143
|
|
|
134
144
|
// src/utils/filters.ts
|
|
135
145
|
function stripNullishObject(value) {
|
|
@@ -356,6 +366,36 @@ var useScreenSize = (breakpoints) => {
|
|
|
356
366
|
return { isMobile, isTablet, isDesktop };
|
|
357
367
|
};
|
|
358
368
|
var useScreenSize_default = useScreenSize;
|
|
369
|
+
var useTruncated = ({
|
|
370
|
+
elementRef,
|
|
371
|
+
onChange,
|
|
372
|
+
resizeDetectDelay = 150
|
|
373
|
+
}) => {
|
|
374
|
+
const [isTruncated, setIsTruncated] = useState(false);
|
|
375
|
+
useEffect(() => {
|
|
376
|
+
const element = elementRef.current;
|
|
377
|
+
if (!element) return;
|
|
378
|
+
const checkTruncate = debounce(() => {
|
|
379
|
+
const truncated = element.scrollWidth > element.clientWidth;
|
|
380
|
+
setIsTruncated((prev) => {
|
|
381
|
+
if (prev !== truncated) {
|
|
382
|
+
onChange?.(truncated);
|
|
383
|
+
}
|
|
384
|
+
return truncated;
|
|
385
|
+
});
|
|
386
|
+
}, resizeDetectDelay);
|
|
387
|
+
checkTruncate();
|
|
388
|
+
const observer = new ResizeObserver(checkTruncate);
|
|
389
|
+
observer.observe(element);
|
|
390
|
+
window.addEventListener("resize", checkTruncate);
|
|
391
|
+
return () => {
|
|
392
|
+
observer.disconnect();
|
|
393
|
+
window.removeEventListener("resize", checkTruncate);
|
|
394
|
+
};
|
|
395
|
+
}, [elementRef, onChange, resizeDetectDelay]);
|
|
396
|
+
return isTruncated;
|
|
397
|
+
};
|
|
398
|
+
var useTruncated_default = useTruncated;
|
|
359
399
|
var HeaderCell = ({ rootClassName, labelClassName, context, label, sorterProps }) => {
|
|
360
400
|
const { ref, hovering } = useHover_default();
|
|
361
401
|
const showSorter = sorterProps?.show ?? context.column.getCanSort();
|
|
@@ -829,15 +869,33 @@ var DataTable = ({
|
|
|
829
869
|
}, [centerVisibleLeafColumns, leftVisibleLeftColumns, rightVisibleLeafColumns]);
|
|
830
870
|
const fetchMoreOnScrollReached = useCallback(
|
|
831
871
|
(containerRefElement) => {
|
|
832
|
-
if (!scrollFetch?.enabled) {
|
|
872
|
+
if (!scrollFetch?.enabled || !containerRefElement || scrollFetch?.isFetchingMore || !scrollFetch?.hasMore || !scrollFetch?.fetchMore) {
|
|
833
873
|
return;
|
|
834
874
|
}
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
875
|
+
const { scrollHeight, scrollTop, clientHeight } = containerRefElement;
|
|
876
|
+
const scrollableHeight = scrollHeight - clientHeight;
|
|
877
|
+
const distanceToBottom = scrollHeight - clientHeight - scrollTop;
|
|
878
|
+
const ratioToBottom = scrollableHeight > 0 ? scrollTop / scrollableHeight : 1;
|
|
879
|
+
const info = {
|
|
880
|
+
scrollTop,
|
|
881
|
+
scrollHeight,
|
|
882
|
+
clientHeight,
|
|
883
|
+
scrollableHeight,
|
|
884
|
+
distanceToBottom,
|
|
885
|
+
ratioToBottom,
|
|
886
|
+
isTopReached: scrollTop === 0,
|
|
887
|
+
isBottomReached: distanceToBottom <= 0
|
|
888
|
+
};
|
|
889
|
+
let shouldTrigger = false;
|
|
890
|
+
if (typeof scrollFetch.scrollThreshold === "number") {
|
|
891
|
+
shouldTrigger = info.ratioToBottom >= scrollFetch.scrollThreshold;
|
|
892
|
+
} else if (typeof scrollFetch.scrollThreshold === "function") {
|
|
893
|
+
shouldTrigger = scrollFetch.scrollThreshold(info);
|
|
894
|
+
} else {
|
|
895
|
+
shouldTrigger = info.ratioToBottom >= 0.7;
|
|
896
|
+
}
|
|
897
|
+
if (shouldTrigger) {
|
|
898
|
+
scrollFetch.fetchMore();
|
|
841
899
|
}
|
|
842
900
|
},
|
|
843
901
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1374,6 +1432,7 @@ function SelectContent({
|
|
|
1374
1432
|
function SelectItem({
|
|
1375
1433
|
className,
|
|
1376
1434
|
children,
|
|
1435
|
+
hideCheckIcon,
|
|
1377
1436
|
...props
|
|
1378
1437
|
}) {
|
|
1379
1438
|
return /* @__PURE__ */ jsxs(
|
|
@@ -1386,6 +1445,7 @@ function SelectItem({
|
|
|
1386
1445
|
),
|
|
1387
1446
|
...props,
|
|
1388
1447
|
children: [
|
|
1448
|
+
!hideCheckIcon && //
|
|
1389
1449
|
/* @__PURE__ */ jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
|
|
1390
1450
|
/* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
|
|
1391
1451
|
]
|
|
@@ -1525,6 +1585,7 @@ function SortableRow({
|
|
|
1525
1585
|
SelectItem,
|
|
1526
1586
|
{
|
|
1527
1587
|
value: opt.id,
|
|
1588
|
+
hideCheckIcon: true,
|
|
1528
1589
|
className: cn(
|
|
1529
1590
|
"focus:bg-[#e8edea]",
|
|
1530
1591
|
opt.id === field.value ? "font-bold bg-[#dae5de] focus:bg-[#dae5de]" : ""
|
|
@@ -1718,11 +1779,12 @@ var GridSettingsModal = ({
|
|
|
1718
1779
|
},
|
|
1719
1780
|
fields[0]?.fieldId
|
|
1720
1781
|
),
|
|
1721
|
-
/* @__PURE__ */ jsx(
|
|
1782
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-3", children: /* @__PURE__ */ jsx(
|
|
1722
1783
|
DndContext,
|
|
1723
1784
|
{
|
|
1724
1785
|
sensors,
|
|
1725
1786
|
collisionDetection: closestCenter,
|
|
1787
|
+
modifiers: [restrictToParentElement, restrictToVerticalAxis],
|
|
1726
1788
|
onDragStart: () => setIsDragging(true),
|
|
1727
1789
|
onDragEnd: (event) => {
|
|
1728
1790
|
setIsDragging(false);
|
|
@@ -1748,7 +1810,7 @@ var GridSettingsModal = ({
|
|
|
1748
1810
|
}
|
|
1749
1811
|
)
|
|
1750
1812
|
}
|
|
1751
|
-
),
|
|
1813
|
+
) }),
|
|
1752
1814
|
/* @__PURE__ */ jsx("div", { className: "px-6", children: /* @__PURE__ */ jsxs(
|
|
1753
1815
|
Button2,
|
|
1754
1816
|
{
|
|
@@ -5072,6 +5134,6 @@ function variantClass(variant) {
|
|
|
5072
5134
|
}
|
|
5073
5135
|
}
|
|
5074
5136
|
|
|
5075
|
-
export { AdvanceSearch_default as AdvanceSearch, Button, DataTable_default as DataTable, DialogAlert, FormErrorMessage, FormField, FormFieldContext, FormItem, FormItemContext, FormLabel, GridSettingsModal_default as GridSettingsModal, HeaderCell_default as HeaderCell, navbar_default as Navbar, NumberInput, PreventPageLeave_default as PreventPageLeave, TextInput, booleanToSelectValue, buttonVariants, cn, compareAlphanumeric, getColumnIdFromTable, isDefined, isEmptyObject, renderContentSlot, selectValueToBoolean, stripNullishObject, useFormField, useGridSettingsStore, useHover_default as useHover, useIntersectionObserver_default as useIntersectionObserver, useMediaQuery_default as useMediaQuery, usePreventPageLeave_default as usePreventPageLeave, usePreventPageLeaveStore_default as usePreventPageLeaveStore, useScreenSize_default as useScreenSize };
|
|
5137
|
+
export { AdvanceSearch_default as AdvanceSearch, Button, DataTable_default as DataTable, DialogAlert, FormErrorMessage, FormField, FormFieldContext, FormItem, FormItemContext, FormLabel, GridSettingsModal_default as GridSettingsModal, HeaderCell_default as HeaderCell, navbar_default as Navbar, NumberInput, PreventPageLeave_default as PreventPageLeave, TextInput, booleanToSelectValue, buttonVariants, cn, compareAlphanumeric, debounce, getColumnIdFromTable, isDefined, isEmptyObject, renderContentSlot, selectValueToBoolean, stripNullishObject, useFormField, useGridSettingsStore, useHover_default as useHover, useIntersectionObserver_default as useIntersectionObserver, useMediaQuery_default as useMediaQuery, usePreventPageLeave_default as usePreventPageLeave, usePreventPageLeaveStore_default as usePreventPageLeaveStore, useScreenSize_default as useScreenSize, useTruncated_default as useTruncated };
|
|
5076
5138
|
//# sourceMappingURL=index.mjs.map
|
|
5077
5139
|
//# sourceMappingURL=index.mjs.map
|