@sustaina/shared-ui 1.3.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.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import * as React3 from 'react';
2
- import React3__default, { createContext, isValidElement, useState, useEffect, useId, useContext, useRef, useCallback, useMemo, createElement } from 'react';
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 = React3.createContext({});
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 = React3.useContext(FormFieldContext2);
1114
- const itemContext = React3.useContext(FormItemContext2);
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 = React3.createContext({});
1163
+ var FormItemContext2 = React4.createContext({});
1132
1164
  function FormItem2({ className, ...props }) {
1133
- const id = React3.useId();
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 }) {
@@ -1770,7 +1802,7 @@ var InfoIcon = (props) => {
1770
1802
  }
1771
1803
  );
1772
1804
  };
1773
- var InfoIcon_default = React3__default.memo(InfoIcon);
1805
+ var InfoIcon_default = React4__default.memo(InfoIcon);
1774
1806
  function TooltipProvider2({
1775
1807
  delayDuration = 0,
1776
1808
  ...props
@@ -1942,7 +1974,7 @@ var Navbar = ({
1942
1974
  }
1943
1975
  );
1944
1976
  };
1945
- var navbar_default = React3__default.memo(Navbar);
1977
+ var navbar_default = React4__default.memo(Navbar);
1946
1978
  var ExpandCollapse = ({ title, children, portalId }) => {
1947
1979
  const [isOpen, setIsOpen] = useState(false);
1948
1980
  const Panel = /* @__PURE__ */ jsx(
@@ -2477,13 +2509,13 @@ function DatePicker({
2477
2509
  className,
2478
2510
  ...props
2479
2511
  }) {
2480
- const today = React3.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
2481
- const [displayed, setDisplayed] = React3.useState(
2512
+ const today = React4.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
2513
+ const [displayed, setDisplayed] = React4.useState(
2482
2514
  selectedDate ? new Date(selectedDate) : /* @__PURE__ */ new Date()
2483
2515
  );
2484
2516
  minDate = clampToDay(minDate);
2485
2517
  maxDate = clampToDay(maxDate);
2486
- const disabledSet = React3.useMemo(() => {
2518
+ const disabledSet = React4.useMemo(() => {
2487
2519
  const s2 = /* @__PURE__ */ new Set();
2488
2520
  disabledDates?.forEach((d) => s2.add(startOfDay(d).toISOString()));
2489
2521
  return s2;
@@ -2492,7 +2524,7 @@ function DatePicker({
2492
2524
  const displayMonth = displayed.getMonth();
2493
2525
  const monthLabel = callbacks?.monthLabel?.(displayYear, displayMonth) ?? new Intl.DateTimeFormat(void 0, { month: "short" }).format(displayed);
2494
2526
  const yearLabel = callbacks?.yearLabel?.(displayYear) ?? String(displayYear);
2495
- const weekdays = React3.useMemo(() => {
2527
+ const weekdays = React4.useMemo(() => {
2496
2528
  const labels = [];
2497
2529
  for (let i2 = 0; i2 < 7; i2++) {
2498
2530
  const idx = i2;
@@ -2501,7 +2533,7 @@ function DatePicker({
2501
2533
  }
2502
2534
  return labels;
2503
2535
  }, [callbacks]);
2504
- const grid = React3.useMemo(() => buildCalendarGrid(displayed, true), [displayed]);
2536
+ const grid = React4.useMemo(() => buildCalendarGrid(displayed, true), [displayed]);
2505
2537
  const isDateDisabled = (date) => {
2506
2538
  const d = startOfDay(date);
2507
2539
  if (minDate && d < minDate) return true;
@@ -4384,15 +4416,15 @@ function Label4({ className, ...props }) {
4384
4416
  );
4385
4417
  }
4386
4418
  var Form2 = FormProvider;
4387
- var FormFieldContext3 = React3.createContext({});
4419
+ var FormFieldContext3 = React4.createContext({});
4388
4420
  var FormField3 = ({
4389
4421
  ...props
4390
4422
  }) => {
4391
4423
  return /* @__PURE__ */ jsx(FormFieldContext3.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
4392
4424
  };
4393
4425
  var useFormField3 = () => {
4394
- const fieldContext = React3.useContext(FormFieldContext3);
4395
- const itemContext = React3.useContext(FormItemContext3);
4426
+ const fieldContext = React4.useContext(FormFieldContext3);
4427
+ const itemContext = React4.useContext(FormItemContext3);
4396
4428
  const { getFieldState } = useFormContext();
4397
4429
  const formState = useFormState({ name: fieldContext.name });
4398
4430
  const fieldState = getFieldState(fieldContext.name, formState);
@@ -4409,9 +4441,9 @@ var useFormField3 = () => {
4409
4441
  ...fieldState
4410
4442
  };
4411
4443
  };
4412
- var FormItemContext3 = React3.createContext({});
4444
+ var FormItemContext3 = React4.createContext({});
4413
4445
  function FormItem3({ className, ...props }) {
4414
- const id = React3.useId();
4446
+ const id = React4.useId();
4415
4447
  return /* @__PURE__ */ jsx(FormItemContext3.Provider, { value: { id }, children: /* @__PURE__ */ jsx("div", { "data-slot": "form-item", className: cn2("grid gap-2", className), ...props }) });
4416
4448
  }
4417
4449
  function FormControl2({ ...props }) {
@@ -4443,7 +4475,7 @@ var AdvanceSearchRow = ({
4443
4475
  const { control } = form;
4444
4476
  const fieldSchema = fields.find((f) => f.name === row.fieldName);
4445
4477
  const fieldType = fieldSchema?.type ?? "text";
4446
- React3__default.useEffect(() => {
4478
+ React4__default.useEffect(() => {
4447
4479
  if (operators && operators.length > 0 && !operators.includes(row.operator)) {
4448
4480
  onChangeOperator(operators[0]);
4449
4481
  }
@@ -4454,8 +4486,8 @@ var AdvanceSearchRow = ({
4454
4486
  const isLookup = fieldType === "lookup";
4455
4487
  const isNumber = fieldType === "number";
4456
4488
  const isDate2 = fieldType === "date" || fieldType === "datetime";
4457
- const [openDateValue1, setOpenDateValue1] = React3__default.useState(false);
4458
- const [openDateValue2, setOpenDateValue2] = React3__default.useState(false);
4489
+ const [openDateValue1, setOpenDateValue1] = React4__default.useState(false);
4490
+ const [openDateValue2, setOpenDateValue2] = React4__default.useState(false);
4459
4491
  const toDateFromISO = (v) => {
4460
4492
  if (!v) return void 0;
4461
4493
  try {
@@ -5014,6 +5046,6 @@ function ConfirmDialog({ dialogData, setDialog, onClose }) {
5014
5046
  ] }) });
5015
5047
  }
5016
5048
 
5017
- 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 };
5018
5050
  //# sourceMappingURL=index.mjs.map
5019
5051
  //# sourceMappingURL=index.mjs.map