@sustaina/shared-ui 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +18 -3
- package/dist/index.d.ts +18 -3
- package/dist/index.js +131 -85
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +80 -37
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
1
|
+
import * as React4 from 'react';
|
|
2
|
+
import React4__default, { createContext, isValidElement, useState, useEffect, useId, useContext, useRef, useCallback, useMemo, createElement } from 'react';
|
|
3
3
|
import { Controller, useFormContext, useForm, useFieldArray, FormProvider, get, set, appendErrors, useFormState } from 'react-hook-form';
|
|
4
4
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import clsx3, { clsx } from 'clsx';
|
|
@@ -980,6 +980,38 @@ var DataTable = ({
|
|
|
980
980
|
);
|
|
981
981
|
};
|
|
982
982
|
var DataTable_default = DataTable;
|
|
983
|
+
var usePreventPageLeaveStore = create((set) => ({
|
|
984
|
+
isPreventing: false,
|
|
985
|
+
setPreventing: (value) => set({ isPreventing: value })
|
|
986
|
+
}));
|
|
987
|
+
var usePreventPageLeaveStore_default = usePreventPageLeaveStore;
|
|
988
|
+
|
|
989
|
+
// src/components/prevent-page-leave/PreventPageLeave.tsx
|
|
990
|
+
var PreventPageLeave = ({ children }) => {
|
|
991
|
+
const { isPreventing } = usePreventPageLeaveStore();
|
|
992
|
+
useEffect(() => {
|
|
993
|
+
if (!isPreventing || typeof window === "undefined") {
|
|
994
|
+
return;
|
|
995
|
+
}
|
|
996
|
+
function beforeUnload(event) {
|
|
997
|
+
event.preventDefault();
|
|
998
|
+
event.returnValue = true;
|
|
999
|
+
}
|
|
1000
|
+
window.addEventListener("beforeunload", beforeUnload);
|
|
1001
|
+
return () => {
|
|
1002
|
+
window.removeEventListener("beforeunload", beforeUnload);
|
|
1003
|
+
};
|
|
1004
|
+
}, [isPreventing]);
|
|
1005
|
+
return children;
|
|
1006
|
+
};
|
|
1007
|
+
var PreventPageLeave_default = PreventPageLeave;
|
|
1008
|
+
var usePreventPageLeave = ({ isPrevening }) => {
|
|
1009
|
+
const setPreventing = usePreventPageLeaveStore_default((state) => state.setPreventing);
|
|
1010
|
+
useEffect(() => {
|
|
1011
|
+
setPreventing(isPrevening);
|
|
1012
|
+
}, [isPrevening, setPreventing]);
|
|
1013
|
+
};
|
|
1014
|
+
var usePreventPageLeave_default = usePreventPageLeave;
|
|
983
1015
|
var buttonVariants = cva(
|
|
984
1016
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer",
|
|
985
1017
|
{
|
|
@@ -1103,15 +1135,15 @@ var t2 = function(o3, t3, s2) {
|
|
|
1103
1135
|
};
|
|
1104
1136
|
};
|
|
1105
1137
|
var Form = FormProvider;
|
|
1106
|
-
var FormFieldContext2 =
|
|
1138
|
+
var FormFieldContext2 = React4.createContext({});
|
|
1107
1139
|
var FormField2 = ({
|
|
1108
1140
|
...props
|
|
1109
1141
|
}) => {
|
|
1110
1142
|
return /* @__PURE__ */ jsx(FormFieldContext2.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
|
|
1111
1143
|
};
|
|
1112
1144
|
var useFormField2 = () => {
|
|
1113
|
-
const fieldContext =
|
|
1114
|
-
const itemContext =
|
|
1145
|
+
const fieldContext = React4.useContext(FormFieldContext2);
|
|
1146
|
+
const itemContext = React4.useContext(FormItemContext2);
|
|
1115
1147
|
const { getFieldState } = useFormContext();
|
|
1116
1148
|
const formState = useFormState({ name: fieldContext.name });
|
|
1117
1149
|
const fieldState = getFieldState(fieldContext.name, formState);
|
|
@@ -1128,9 +1160,9 @@ var useFormField2 = () => {
|
|
|
1128
1160
|
...fieldState
|
|
1129
1161
|
};
|
|
1130
1162
|
};
|
|
1131
|
-
var FormItemContext2 =
|
|
1163
|
+
var FormItemContext2 = React4.createContext({});
|
|
1132
1164
|
function FormItem2({ className, ...props }) {
|
|
1133
|
-
const id =
|
|
1165
|
+
const id = React4.useId();
|
|
1134
1166
|
return /* @__PURE__ */ jsx(FormItemContext2.Provider, { value: { id }, children: /* @__PURE__ */ jsx("div", { "data-slot": "form-item", className: cn("grid gap-2", className), ...props }) });
|
|
1135
1167
|
}
|
|
1136
1168
|
function FormControl({ ...props }) {
|
|
@@ -1476,7 +1508,9 @@ function SortableRow({
|
|
|
1476
1508
|
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Choose column..." })
|
|
1477
1509
|
}
|
|
1478
1510
|
) }),
|
|
1479
|
-
/* @__PURE__ */ jsx(SelectContent, { children: options.filter(
|
|
1511
|
+
/* @__PURE__ */ jsx(SelectContent, { children: options.filter(
|
|
1512
|
+
(i2) => i2.id === field.value || !currentColumns?.some((c, idx) => c.id === i2.id && idx !== index)
|
|
1513
|
+
).sort(
|
|
1480
1514
|
(a, b) => a.id === field.value ? -1 : b.id === field.value ? 1 : 0
|
|
1481
1515
|
).map((opt) => /* @__PURE__ */ jsx(
|
|
1482
1516
|
SelectItem,
|
|
@@ -1690,16 +1724,16 @@ var GridSettingsModal = ({
|
|
|
1690
1724
|
{
|
|
1691
1725
|
items: fields?.slice(1).map((c) => c?.fieldId),
|
|
1692
1726
|
strategy: verticalListSortingStrategy,
|
|
1693
|
-
children: fields?.slice(1).map((col,
|
|
1727
|
+
children: fields?.slice(1).map((col, index2) => /* @__PURE__ */ jsx(
|
|
1694
1728
|
SortableRow,
|
|
1695
1729
|
{
|
|
1696
1730
|
value: col?.fieldId,
|
|
1697
1731
|
control,
|
|
1698
|
-
name: `columns.${
|
|
1732
|
+
name: `columns.${index2 + 1}.id`,
|
|
1699
1733
|
isDragging,
|
|
1700
1734
|
availableColumns,
|
|
1701
1735
|
currentColumns: fields,
|
|
1702
|
-
onRemove: () => remove(
|
|
1736
|
+
onRemove: () => remove(index2 + 1)
|
|
1703
1737
|
},
|
|
1704
1738
|
col?.fieldId
|
|
1705
1739
|
))
|
|
@@ -1768,7 +1802,7 @@ var InfoIcon = (props) => {
|
|
|
1768
1802
|
}
|
|
1769
1803
|
);
|
|
1770
1804
|
};
|
|
1771
|
-
var InfoIcon_default =
|
|
1805
|
+
var InfoIcon_default = React4__default.memo(InfoIcon);
|
|
1772
1806
|
function TooltipProvider2({
|
|
1773
1807
|
delayDuration = 0,
|
|
1774
1808
|
...props
|
|
@@ -1832,10 +1866,12 @@ var Navbar = ({
|
|
|
1832
1866
|
subButtonDisable = false,
|
|
1833
1867
|
onMainButtonClick,
|
|
1834
1868
|
onSubButtonClick,
|
|
1869
|
+
separatorDisable = false,
|
|
1835
1870
|
searchButton
|
|
1836
1871
|
}) => {
|
|
1837
1872
|
const { isMobile, isTablet, isDesktop } = useScreenSize_default();
|
|
1838
1873
|
const Icon3 = CircleHelp;
|
|
1874
|
+
const shouldShowSeparator = !separatorDisable && isValidElement(searchButton);
|
|
1839
1875
|
return /* @__PURE__ */ jsxs(
|
|
1840
1876
|
"nav",
|
|
1841
1877
|
{
|
|
@@ -1931,14 +1967,14 @@ var Navbar = ({
|
|
|
1931
1967
|
children: subButtonText
|
|
1932
1968
|
}
|
|
1933
1969
|
),
|
|
1934
|
-
|
|
1970
|
+
shouldShowSeparator && /* @__PURE__ */ jsx("div", { role: "separator", className: "ml-1 w-[1px] h-10 bg-white" }),
|
|
1935
1971
|
isValidElement(searchButton) ? searchButton : ""
|
|
1936
1972
|
] })
|
|
1937
1973
|
]
|
|
1938
1974
|
}
|
|
1939
1975
|
);
|
|
1940
1976
|
};
|
|
1941
|
-
var navbar_default =
|
|
1977
|
+
var navbar_default = React4__default.memo(Navbar);
|
|
1942
1978
|
var ExpandCollapse = ({ title, children, portalId }) => {
|
|
1943
1979
|
const [isOpen, setIsOpen] = useState(false);
|
|
1944
1980
|
const Panel = /* @__PURE__ */ jsx(
|
|
@@ -2473,13 +2509,13 @@ function DatePicker({
|
|
|
2473
2509
|
className,
|
|
2474
2510
|
...props
|
|
2475
2511
|
}) {
|
|
2476
|
-
const today =
|
|
2477
|
-
const [displayed, setDisplayed] =
|
|
2512
|
+
const today = React4.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
|
|
2513
|
+
const [displayed, setDisplayed] = React4.useState(
|
|
2478
2514
|
selectedDate ? new Date(selectedDate) : /* @__PURE__ */ new Date()
|
|
2479
2515
|
);
|
|
2480
2516
|
minDate = clampToDay(minDate);
|
|
2481
2517
|
maxDate = clampToDay(maxDate);
|
|
2482
|
-
const disabledSet =
|
|
2518
|
+
const disabledSet = React4.useMemo(() => {
|
|
2483
2519
|
const s2 = /* @__PURE__ */ new Set();
|
|
2484
2520
|
disabledDates?.forEach((d) => s2.add(startOfDay(d).toISOString()));
|
|
2485
2521
|
return s2;
|
|
@@ -2488,7 +2524,7 @@ function DatePicker({
|
|
|
2488
2524
|
const displayMonth = displayed.getMonth();
|
|
2489
2525
|
const monthLabel = callbacks?.monthLabel?.(displayYear, displayMonth) ?? new Intl.DateTimeFormat(void 0, { month: "short" }).format(displayed);
|
|
2490
2526
|
const yearLabel = callbacks?.yearLabel?.(displayYear) ?? String(displayYear);
|
|
2491
|
-
const weekdays =
|
|
2527
|
+
const weekdays = React4.useMemo(() => {
|
|
2492
2528
|
const labels = [];
|
|
2493
2529
|
for (let i2 = 0; i2 < 7; i2++) {
|
|
2494
2530
|
const idx = i2;
|
|
@@ -2497,7 +2533,7 @@ function DatePicker({
|
|
|
2497
2533
|
}
|
|
2498
2534
|
return labels;
|
|
2499
2535
|
}, [callbacks]);
|
|
2500
|
-
const grid =
|
|
2536
|
+
const grid = React4.useMemo(() => buildCalendarGrid(displayed, true), [displayed]);
|
|
2501
2537
|
const isDateDisabled = (date) => {
|
|
2502
2538
|
const d = startOfDay(date);
|
|
2503
2539
|
if (minDate && d < minDate) return true;
|
|
@@ -2584,8 +2620,8 @@ var TagsInput = ({ value = [], onChange, onClear, error }) => {
|
|
|
2584
2620
|
onChange([...value, trimmed]);
|
|
2585
2621
|
setInputValue("");
|
|
2586
2622
|
};
|
|
2587
|
-
const removeTag = (
|
|
2588
|
-
const newTags = value.filter((_, i2) => i2 !==
|
|
2623
|
+
const removeTag = (index2) => {
|
|
2624
|
+
const newTags = value.filter((_, i2) => i2 !== index2);
|
|
2589
2625
|
onChange(newTags);
|
|
2590
2626
|
};
|
|
2591
2627
|
const handleKeyDown = (e2) => {
|
|
@@ -2924,8 +2960,8 @@ function buildLocalizeFn(args) {
|
|
|
2924
2960
|
const width = options?.width ? String(options.width) : args.defaultWidth;
|
|
2925
2961
|
valuesArray = args.values[width] || args.values[defaultWidth];
|
|
2926
2962
|
}
|
|
2927
|
-
const
|
|
2928
|
-
return valuesArray[
|
|
2963
|
+
const index2 = args.argumentCallback ? args.argumentCallback(value) : value;
|
|
2964
|
+
return valuesArray[index2];
|
|
2929
2965
|
};
|
|
2930
2966
|
}
|
|
2931
2967
|
|
|
@@ -3245,7 +3281,7 @@ var match = {
|
|
|
3245
3281
|
defaultMatchWidth: "wide",
|
|
3246
3282
|
parsePatterns: parseQuarterPatterns,
|
|
3247
3283
|
defaultParseWidth: "any",
|
|
3248
|
-
valueCallback: (
|
|
3284
|
+
valueCallback: (index2) => index2 + 1
|
|
3249
3285
|
}),
|
|
3250
3286
|
month: buildMatchFn({
|
|
3251
3287
|
matchPatterns: matchMonthPatterns,
|
|
@@ -4380,15 +4416,15 @@ function Label4({ className, ...props }) {
|
|
|
4380
4416
|
);
|
|
4381
4417
|
}
|
|
4382
4418
|
var Form2 = FormProvider;
|
|
4383
|
-
var FormFieldContext3 =
|
|
4419
|
+
var FormFieldContext3 = React4.createContext({});
|
|
4384
4420
|
var FormField3 = ({
|
|
4385
4421
|
...props
|
|
4386
4422
|
}) => {
|
|
4387
4423
|
return /* @__PURE__ */ jsx(FormFieldContext3.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
|
|
4388
4424
|
};
|
|
4389
4425
|
var useFormField3 = () => {
|
|
4390
|
-
const fieldContext =
|
|
4391
|
-
const itemContext =
|
|
4426
|
+
const fieldContext = React4.useContext(FormFieldContext3);
|
|
4427
|
+
const itemContext = React4.useContext(FormItemContext3);
|
|
4392
4428
|
const { getFieldState } = useFormContext();
|
|
4393
4429
|
const formState = useFormState({ name: fieldContext.name });
|
|
4394
4430
|
const fieldState = getFieldState(fieldContext.name, formState);
|
|
@@ -4405,9 +4441,9 @@ var useFormField3 = () => {
|
|
|
4405
4441
|
...fieldState
|
|
4406
4442
|
};
|
|
4407
4443
|
};
|
|
4408
|
-
var FormItemContext3 =
|
|
4444
|
+
var FormItemContext3 = React4.createContext({});
|
|
4409
4445
|
function FormItem3({ className, ...props }) {
|
|
4410
|
-
const id =
|
|
4446
|
+
const id = React4.useId();
|
|
4411
4447
|
return /* @__PURE__ */ jsx(FormItemContext3.Provider, { value: { id }, children: /* @__PURE__ */ jsx("div", { "data-slot": "form-item", className: cn2("grid gap-2", className), ...props }) });
|
|
4412
4448
|
}
|
|
4413
4449
|
function FormControl2({ ...props }) {
|
|
@@ -4439,7 +4475,7 @@ var AdvanceSearchRow = ({
|
|
|
4439
4475
|
const { control } = form;
|
|
4440
4476
|
const fieldSchema = fields.find((f) => f.name === row.fieldName);
|
|
4441
4477
|
const fieldType = fieldSchema?.type ?? "text";
|
|
4442
|
-
|
|
4478
|
+
React4__default.useEffect(() => {
|
|
4443
4479
|
if (operators && operators.length > 0 && !operators.includes(row.operator)) {
|
|
4444
4480
|
onChangeOperator(operators[0]);
|
|
4445
4481
|
}
|
|
@@ -4450,8 +4486,8 @@ var AdvanceSearchRow = ({
|
|
|
4450
4486
|
const isLookup = fieldType === "lookup";
|
|
4451
4487
|
const isNumber = fieldType === "number";
|
|
4452
4488
|
const isDate2 = fieldType === "date" || fieldType === "datetime";
|
|
4453
|
-
const [openDateValue1, setOpenDateValue1] =
|
|
4454
|
-
const [openDateValue2, setOpenDateValue2] =
|
|
4489
|
+
const [openDateValue1, setOpenDateValue1] = React4__default.useState(false);
|
|
4490
|
+
const [openDateValue2, setOpenDateValue2] = React4__default.useState(false);
|
|
4455
4491
|
const toDateFromISO = (v) => {
|
|
4456
4492
|
if (!v) return void 0;
|
|
4457
4493
|
try {
|
|
@@ -4687,7 +4723,8 @@ var AdvanceSearch = ({
|
|
|
4687
4723
|
portalId,
|
|
4688
4724
|
iconColor = "#ffffff",
|
|
4689
4725
|
limitRows = 4,
|
|
4690
|
-
onSearch
|
|
4726
|
+
onSearch,
|
|
4727
|
+
onClear
|
|
4691
4728
|
}) => {
|
|
4692
4729
|
const fieldsData = useMemo(() => fields || [], [fields]);
|
|
4693
4730
|
const {
|
|
@@ -4730,6 +4767,8 @@ var AdvanceSearch = ({
|
|
|
4730
4767
|
return { [r2.fieldName]: { startsWith: val1 } };
|
|
4731
4768
|
case "endsWith":
|
|
4732
4769
|
return { [r2.fieldName]: { endsWith: val1 } };
|
|
4770
|
+
case "equals":
|
|
4771
|
+
return { [r2.fieldName]: { equals: val1 } };
|
|
4733
4772
|
case "notEquals":
|
|
4734
4773
|
return { [r2.fieldName]: { not: val1 } };
|
|
4735
4774
|
case "gt":
|
|
@@ -4756,8 +4795,12 @@ var AdvanceSearch = ({
|
|
|
4756
4795
|
return { [r2.fieldName]: { hasEvery: String(val1).split(",") } };
|
|
4757
4796
|
case "containsOnly":
|
|
4758
4797
|
return { [r2.fieldName]: { equals: String(val1).split(",") } };
|
|
4759
|
-
|
|
4760
|
-
return { [r2.fieldName]: val1 };
|
|
4798
|
+
case "on":
|
|
4799
|
+
return { [r2.fieldName]: { on: val1 } };
|
|
4800
|
+
case "after":
|
|
4801
|
+
return { [r2.fieldName]: { after: val1 } };
|
|
4802
|
+
case "before":
|
|
4803
|
+
return { [r2.fieldName]: { before: val1 } };
|
|
4761
4804
|
}
|
|
4762
4805
|
}).filter(Boolean)
|
|
4763
4806
|
};
|
|
@@ -4813,7 +4856,7 @@ var AdvanceSearch = ({
|
|
|
4813
4856
|
onClick: () => {
|
|
4814
4857
|
clearAllRow();
|
|
4815
4858
|
Object.keys(getValues()).forEach((k) => resetField(k));
|
|
4816
|
-
|
|
4859
|
+
if (onClear) onClear();
|
|
4817
4860
|
},
|
|
4818
4861
|
children: "Clear Search"
|
|
4819
4862
|
}
|
|
@@ -5003,6 +5046,6 @@ function ConfirmDialog({ dialogData, setDialog, onClose }) {
|
|
|
5003
5046
|
] }) });
|
|
5004
5047
|
}
|
|
5005
5048
|
|
|
5006
|
-
export { AdvanceSearch_default as AdvanceSearch, Button, DataTable_default as DataTable, ConfirmDialog as Dialog, FormErrorMessage, FormField, FormFieldContext, FormItem, FormItemContext, FormLabel, GridSettingsModal_default as GridSettingsModal, HeaderCell_default as HeaderCell, navbar_default as Navbar, NumberInput, TextInput, booleanToSelectValue, buttonVariants, cn, compareAlphanumeric, getColumnIdFromTable, renderContentSlot, selectValueToBoolean, useFormField, useGridSettingsStore, useHover_default as useHover, useIntersectionObserver_default as useIntersectionObserver, useMediaQuery_default as useMediaQuery, useScreenSize_default as useScreenSize };
|
|
5049
|
+
export { AdvanceSearch_default as AdvanceSearch, Button, DataTable_default as DataTable, ConfirmDialog as Dialog, 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, renderContentSlot, selectValueToBoolean, 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 };
|
|
5007
5050
|
//# sourceMappingURL=index.mjs.map
|
|
5008
5051
|
//# sourceMappingURL=index.mjs.map
|