@sustaina/shared-ui 1.14.0 → 1.16.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
@@ -177,6 +177,45 @@ function stripNullishObject(value) {
177
177
  return {};
178
178
  }
179
179
  }
180
+
181
+ // src/utils/date.ts
182
+ var pad = (num) => String(num).padStart(2, "0");
183
+ function formatISODate(isoDate, format5 = "d/m/Y H:i") {
184
+ const date = new Date(isoDate);
185
+ if (isNaN(date.getTime())) {
186
+ return "Invalid Date";
187
+ }
188
+ const parts = {
189
+ d: pad(date.getDate()),
190
+ m: pad(date.getMonth() + 1),
191
+ Y: String(date.getFullYear()),
192
+ H: pad(date.getHours()),
193
+ i: pad(date.getMinutes()),
194
+ s: pad(date.getSeconds())
195
+ };
196
+ const tokenMap = {
197
+ // Day
198
+ d: "d",
199
+ DD: "d",
200
+ // Month
201
+ m: "m",
202
+ MM: "m",
203
+ // Year
204
+ Y: "Y",
205
+ // 'Y' and 'YYYY' will both map to the 4-digit year
206
+ YYYY: "Y",
207
+ // Hour
208
+ H: "H",
209
+ // Minute
210
+ i: "i",
211
+ // Second
212
+ s: "s"
213
+ };
214
+ return format5.replace(/YYYY|Y|MM|m|DD|d|H|i|s/g, (match) => {
215
+ const partKey = tokenMap[match];
216
+ return partKey ? parts[partKey] : match;
217
+ });
218
+ }
180
219
  function cn(...args) {
181
220
  return twMerge(clsx(args));
182
221
  }
@@ -811,7 +850,7 @@ function SelectTrigger({
811
850
  "data-slot": "select-trigger",
812
851
  "data-size": size,
813
852
  className: cn(
814
- "border-input data-[placeholder]:text-gray-00 [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[state=open]:border-ring data-[state=open]:[&_svg]:text-foreground",
853
+ "border-input data-placeholder:text-gray-00 [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[state=open]:border-ring data-[state=open]:[&_svg]:text-foreground",
815
854
  className
816
855
  ),
817
856
  ...props,
@@ -833,7 +872,7 @@ function SelectContent({
833
872
  {
834
873
  "data-slot": "select-content",
835
874
  className: cn(
836
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
875
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
837
876
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
838
877
  className
839
878
  ),
@@ -846,7 +885,7 @@ function SelectContent({
846
885
  {
847
886
  className: cn(
848
887
  "m-1",
849
- position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
888
+ position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"
850
889
  ),
851
890
  children
852
891
  }
@@ -876,7 +915,7 @@ function SelectItem({
876
915
  {
877
916
  "data-slot": "select-item",
878
917
  className: cn(
879
- "hover:bg-[#EAF5EE] hover:text-[#379A2A] [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 ",
918
+ "hover:bg-[#EAF5EE] hover:text-[#379A2A] [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 ",
880
919
  className
881
920
  ),
882
921
  ...props,
@@ -1769,7 +1808,7 @@ var DatePicker2 = ({
1769
1808
  value,
1770
1809
  onChange,
1771
1810
  onValueChange,
1772
- placeholder: placeholder3 = "DD/MM/YYYY",
1811
+ placeholder: placeholder2 = "DD/MM/YYYY",
1773
1812
  allowClear = true,
1774
1813
  displayFormatter,
1775
1814
  valueFormatter,
@@ -1798,7 +1837,7 @@ var DatePicker2 = ({
1798
1837
  const parsed = parser(value);
1799
1838
  return parsed && isValid(parsed) ? parsed : void 0;
1800
1839
  }, [parser, value]);
1801
- const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder3;
1840
+ const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder2;
1802
1841
  const buttonAriaLabel = ariaLabel ?? (parsedValue ? `Change date, current selection ${labelFormatter(parsedValue)}` : "Open date picker");
1803
1842
  const shouldShowClear = allowClear && !disabled && !!parsedValue;
1804
1843
  const handleClose = React4__default.useCallback(() => setOpen(false), []);
@@ -1872,8 +1911,15 @@ var DatePicker2 = ({
1872
1911
  )
1873
1912
  ] }) });
1874
1913
  };
1875
- var placeholder = "DD/MM/YYYY";
1876
- var ConditionDateInput = ({ row, control, onClear }) => {
1914
+
1915
+ // src/components/advanceSearch/components/constants/index.ts
1916
+ var fallbackShortDateFormat = "DD/MM/YYYY";
1917
+ var ConditionDateInput = ({
1918
+ row,
1919
+ control,
1920
+ onClear,
1921
+ shortDateFormat = fallbackShortDateFormat
1922
+ }) => {
1877
1923
  const isBetween = row.operator === "between";
1878
1924
  const buildAriaLabel = (isEnd) => {
1879
1925
  if (isEnd) return "Select end date";
@@ -1905,10 +1951,11 @@ var ConditionDateInput = ({ row, control, onClear }) => {
1905
1951
  ...field,
1906
1952
  value: field.value || void 0,
1907
1953
  onValueChange: handleValueChange,
1908
- placeholder,
1954
+ placeholder: shortDateFormat,
1909
1955
  ariaLabel: buildAriaLabel(options?.isEnd),
1910
1956
  clearAriaLabel: buildClearLabel(options?.isEnd),
1911
1957
  invalid: Boolean(fieldState.error),
1958
+ displayFormatter: (d) => formatISODate(d, shortDateFormat),
1912
1959
  wrapperClassName: "min-w-0"
1913
1960
  }
1914
1961
  ) }),
@@ -2192,7 +2239,7 @@ var MonthPicker2 = ({
2192
2239
  value,
2193
2240
  onChange,
2194
2241
  onValueChange,
2195
- placeholder: placeholder3 = "MM/YYYY",
2242
+ placeholder: placeholder2 = "MM/YYYY",
2196
2243
  allowClear = true,
2197
2244
  displayFormatter,
2198
2245
  valueFormatter,
@@ -2224,7 +2271,7 @@ var MonthPicker2 = ({
2224
2271
  }
2225
2272
  return void 0;
2226
2273
  }, [parser, value]);
2227
- const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder3;
2274
+ const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder2;
2228
2275
  const buttonAriaLabel = ariaLabel ?? (parsedValue ? `Change month, current selection ${labelFormatter(parsedValue)}` : "Open month picker");
2229
2276
  const shouldShowClear = allowClear && !disabled && !!parsedValue;
2230
2277
  const handleClose = React4__default.useCallback(() => setOpen(false), []);
@@ -2299,7 +2346,7 @@ var MonthPicker2 = ({
2299
2346
  )
2300
2347
  ] }) });
2301
2348
  };
2302
- var placeholder2 = "MM/YYYY";
2349
+ var placeholder = "MM/YYYY";
2303
2350
  var ConditionMonthInput = ({ row, control, onClear }) => {
2304
2351
  const isBetween = row.operator === "between";
2305
2352
  const buildAriaLabel = (isEnd) => {
@@ -2333,7 +2380,7 @@ var ConditionMonthInput = ({ row, control, onClear }) => {
2333
2380
  ...field,
2334
2381
  value,
2335
2382
  onValueChange: handleValueChange,
2336
- placeholder: placeholder2,
2383
+ placeholder,
2337
2384
  ariaLabel: buildAriaLabel(options?.isEnd),
2338
2385
  clearAriaLabel: buildClearLabel(options?.isEnd),
2339
2386
  displayFormatter: (month) => format(month, "MM/yyyy"),
@@ -2445,7 +2492,7 @@ var LookupSelect = ({
2445
2492
  onChange,
2446
2493
  onClear,
2447
2494
  error,
2448
- placeholder: placeholder3,
2495
+ placeholder: placeholder2,
2449
2496
  maxTags = 10,
2450
2497
  fetchSuggestions,
2451
2498
  suggestionDebounce = 250,
@@ -2619,7 +2666,7 @@ var LookupSelect = ({
2619
2666
  window.removeEventListener("scroll", handleReposition, true);
2620
2667
  };
2621
2668
  }, [dropdownPortalElement, isDropdownOpen, updateDropdownPosition]);
2622
- const resolvedPlaceholder = placeholder3 ?? "Select";
2669
+ const resolvedPlaceholder = placeholder2 ?? "Select";
2623
2670
  const showDropdown = isDropdownOpen && !fetchError;
2624
2671
  const dropdownContent = /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-md border border-gray-200 bg-white shadow-lg", children: loading ? /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm text-inherit", children: loadingMessage }) : suggestions.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center px-3 py-4 text-sm text-inherit text-center", children: [
2625
2672
  /* @__PURE__ */ jsx(not_found_default, { className: "w-full max-w-[80px] h-auto" }),
@@ -2812,7 +2859,13 @@ var ConditionJSONInput = ({
2812
2859
  }
2813
2860
  }
2814
2861
  );
2815
- var ConditionValue = ({ row, fields, onClearValue, dropdownPortalId }) => {
2862
+ var ConditionValue = ({
2863
+ row,
2864
+ fields,
2865
+ onClearValue,
2866
+ dropdownPortalId,
2867
+ shortDateFormat
2868
+ }) => {
2816
2869
  const { control } = useFormContext();
2817
2870
  const fieldSchema = fields.find((f) => f.name === row.fieldName);
2818
2871
  const fieldType = fieldSchema?.type ?? "text";
@@ -2821,7 +2874,15 @@ var ConditionValue = ({ row, fields, onClearValue, dropdownPortalId }) => {
2821
2874
  return /* @__PURE__ */ jsx(ConditionNumberInput, { row, control, onClear: onClearValue });
2822
2875
  case "date":
2823
2876
  case "datetime":
2824
- return /* @__PURE__ */ jsx(ConditionDateInput, { row, control, onClear: onClearValue });
2877
+ return /* @__PURE__ */ jsx(
2878
+ ConditionDateInput,
2879
+ {
2880
+ row,
2881
+ control,
2882
+ onClear: onClearValue,
2883
+ shortDateFormat
2884
+ }
2885
+ );
2825
2886
  case "datemonth":
2826
2887
  return /* @__PURE__ */ jsx(ConditionMonthInput, { row, control, onClear: onClearValue });
2827
2888
  case "dropdown":
@@ -2900,7 +2961,8 @@ var AdvanceSearchRow = ({
2900
2961
  onRemove,
2901
2962
  onClearValue,
2902
2963
  disableAdd,
2903
- dropdownPortalId
2964
+ dropdownPortalId,
2965
+ shortDateFormat
2904
2966
  }) => {
2905
2967
  return /* @__PURE__ */ jsxs("div", { className: "grid gap-3 rounded-lg bg-white md:grid-cols-[minmax(150px,0.85fr)_minmax(140px,0.75fr)_minmax(260px,1fr)_auto] md:items-start", children: [
2906
2968
  /* @__PURE__ */ jsx(FieldSelect, { row, fieldOptions, onChangeField }),
@@ -2919,7 +2981,8 @@ var AdvanceSearchRow = ({
2919
2981
  row,
2920
2982
  fields,
2921
2983
  onClearValue,
2922
- dropdownPortalId
2984
+ dropdownPortalId,
2985
+ shortDateFormat
2923
2986
  }
2924
2987
  ),
2925
2988
  /* @__PURE__ */ jsx("div", { className: "flex h-full", children: /* @__PURE__ */ jsx(AddRemoveButtons, { isFirst, onAdd, onRemove, disableAdd }) })
@@ -3341,7 +3404,8 @@ var AdvanceSearch = ({
3341
3404
  iconColor = "#ffffff",
3342
3405
  limitRows = 4,
3343
3406
  onSearch,
3344
- onClear
3407
+ onClear,
3408
+ shortDateFormat
3345
3409
  }) => {
3346
3410
  const fieldsData = useMemo(() => {
3347
3411
  if (fields.length === 0) throw new Error("fields cannot be an empty array");
@@ -3471,6 +3535,7 @@ var AdvanceSearch = ({
3471
3535
  AdvanceSearchRow,
3472
3536
  {
3473
3537
  row,
3538
+ shortDateFormat,
3474
3539
  isFirst: idx === 0,
3475
3540
  fields: fieldsData,
3476
3541
  fieldOptions,
@@ -5673,6 +5738,233 @@ var useGridSettingsStore = create(
5673
5738
  })
5674
5739
  );
5675
5740
  var useGridSettingsStore_default = useGridSettingsStore;
5741
+ function LoadingOverlay({
5742
+ className,
5743
+ fullscreen = true,
5744
+ spinnerClassName,
5745
+ ...props
5746
+ }) {
5747
+ return /* @__PURE__ */ jsx(
5748
+ "div",
5749
+ {
5750
+ "data-slot": "loading-overlay",
5751
+ className: cn(
5752
+ fullscreen ? "fixed z-100" : "absolute z-10",
5753
+ "inset-0 flex items-center justify-center transition-opacity duration-300",
5754
+ className
5755
+ ),
5756
+ ...props,
5757
+ children: /* @__PURE__ */ jsx(Spinner, { className: cn("size-50", spinnerClassName) })
5758
+ }
5759
+ );
5760
+ }
5761
+ var DEVICE_SIZES = [320, 420, 640, 768, 1024, 1280, 1536, 1920];
5762
+ var IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384];
5763
+ var defaultLoader = ({ src }) => src;
5764
+ function toNumber(value) {
5765
+ if (typeof value === "number") {
5766
+ return Number.isFinite(value) ? value : void 0;
5767
+ }
5768
+ if (typeof value === "string") {
5769
+ const parsed = parseInt(value, 10);
5770
+ return Number.isFinite(parsed) ? parsed : void 0;
5771
+ }
5772
+ return void 0;
5773
+ }
5774
+ function formatDimension(value) {
5775
+ if (typeof value === "number") {
5776
+ return `${value}px`;
5777
+ }
5778
+ return value;
5779
+ }
5780
+ function matchClosestSize(target) {
5781
+ for (const size of IMAGE_SIZES) {
5782
+ if (size >= target) {
5783
+ return size;
5784
+ }
5785
+ }
5786
+ return DEVICE_SIZES[DEVICE_SIZES.length - 1];
5787
+ }
5788
+ function getCandidateWidths({
5789
+ width,
5790
+ sizes,
5791
+ fill
5792
+ }) {
5793
+ if (fill || sizes) {
5794
+ return DEVICE_SIZES;
5795
+ }
5796
+ if (typeof width === "number" && width > 0) {
5797
+ const targets = /* @__PURE__ */ new Set([width, width * 2]);
5798
+ return Array.from(targets).map((target) => matchClosestSize(target)).sort((a, b) => a - b);
5799
+ }
5800
+ return DEVICE_SIZES;
5801
+ }
5802
+ var Image2 = React4.forwardRef(function Image3({
5803
+ src,
5804
+ alt,
5805
+ width,
5806
+ height,
5807
+ fill = false,
5808
+ sizes,
5809
+ quality = 75,
5810
+ priority = false,
5811
+ placeholder: placeholder2 = "empty",
5812
+ blurDataURL,
5813
+ loader = defaultLoader,
5814
+ unoptimized = false,
5815
+ wrapperClassName,
5816
+ className,
5817
+ objectFit,
5818
+ objectPosition,
5819
+ onLoadingComplete,
5820
+ style,
5821
+ ...imgProps
5822
+ }, ref) {
5823
+ const {
5824
+ loading: loadingProp,
5825
+ fetchPriority: fetchPriorityProp,
5826
+ decoding: decodingProp,
5827
+ onLoad: onLoadProp,
5828
+ ...restImgProps
5829
+ } = imgProps;
5830
+ const widthNumber = toNumber(width);
5831
+ const heightNumber = toNumber(height);
5832
+ React4.useEffect(() => {
5833
+ if (!fill && (!widthNumber || !heightNumber)) {
5834
+ console.warn(
5835
+ "[Image] When `fill` is false you should provide both `width` and `height` to prevent layout shifts."
5836
+ );
5837
+ }
5838
+ }, [fill, heightNumber, widthNumber]);
5839
+ const candidateWidths = React4.useMemo(
5840
+ () => getCandidateWidths({ width: widthNumber, sizes, fill }),
5841
+ [fill, sizes, widthNumber]
5842
+ );
5843
+ const largestWidth = candidateWidths[candidateWidths.length - 1] ?? widthNumber ?? DEVICE_SIZES[DEVICE_SIZES.length - 1];
5844
+ const computedSrc = React4.useMemo(() => {
5845
+ if (unoptimized) {
5846
+ return src;
5847
+ }
5848
+ return loader({ src, width: largestWidth, quality });
5849
+ }, [largestWidth, loader, quality, src, unoptimized]);
5850
+ const computedSrcSet = React4.useMemo(() => {
5851
+ if (unoptimized) {
5852
+ return void 0;
5853
+ }
5854
+ return candidateWidths.map((currentWidth) => `${loader({ src, width: currentWidth, quality })} ${currentWidth}w`).join(", ");
5855
+ }, [candidateWidths, loader, quality, src, unoptimized]);
5856
+ const sizesValue = sizes ?? (fill ? "100vw" : widthNumber ? `${widthNumber}px` : void 0);
5857
+ const [isLoaded, setIsLoaded] = React4.useState(false);
5858
+ const internalRef = React4.useRef(null);
5859
+ const setRefs = React4.useCallback(
5860
+ (node) => {
5861
+ internalRef.current = node;
5862
+ if (!ref) {
5863
+ return;
5864
+ }
5865
+ if (typeof ref === "function") {
5866
+ ref(node);
5867
+ } else {
5868
+ ref.current = node;
5869
+ }
5870
+ },
5871
+ [ref]
5872
+ );
5873
+ React4.useEffect(() => {
5874
+ const image = internalRef.current;
5875
+ if (!image) {
5876
+ return;
5877
+ }
5878
+ if (image.complete && image.naturalWidth > 0) {
5879
+ setIsLoaded(true);
5880
+ onLoadingComplete?.(image);
5881
+ } else {
5882
+ setIsLoaded(false);
5883
+ }
5884
+ }, [onLoadingComplete, src]);
5885
+ const handleLoad = React4.useCallback(
5886
+ (event) => {
5887
+ setIsLoaded(true);
5888
+ onLoadProp?.(event);
5889
+ onLoadingComplete?.(event.currentTarget);
5890
+ },
5891
+ [onLoadProp, onLoadingComplete]
5892
+ );
5893
+ const loading = priority ? "eager" : loadingProp ?? "lazy";
5894
+ const fetchPriority = priority ? "high" : fetchPriorityProp;
5895
+ const decoding = decodingProp ?? "async";
5896
+ const resolvedObjectFit = objectFit ?? (fill ? "cover" : void 0);
5897
+ const wrapperStyle = React4.useMemo(
5898
+ () => ({
5899
+ position: "relative",
5900
+ display: fill ? "block" : "inline-block",
5901
+ overflow: "hidden",
5902
+ width: fill ? "100%" : formatDimension(width) ?? void 0,
5903
+ height: fill ? "100%" : formatDimension(height) ?? void 0
5904
+ }),
5905
+ [fill, height, width]
5906
+ );
5907
+ const imageStyle = React4.useMemo(
5908
+ () => ({
5909
+ width: fill ? "100%" : formatDimension(width) ?? void 0,
5910
+ height: fill ? "100%" : formatDimension(height) ?? void 0,
5911
+ position: fill ? "absolute" : void 0,
5912
+ inset: fill ? 0 : void 0,
5913
+ objectFit: resolvedObjectFit,
5914
+ objectPosition,
5915
+ ...style
5916
+ }),
5917
+ [fill, height, objectPosition, resolvedObjectFit, style, width]
5918
+ );
5919
+ const shouldShowLoadingOverlay = placeholder2 === "blur";
5920
+ return /* @__PURE__ */ jsxs(
5921
+ "span",
5922
+ {
5923
+ "data-slot": "image",
5924
+ className: cn("relative overflow-hidden", fill ? "block" : "inline-block", wrapperClassName),
5925
+ style: wrapperStyle,
5926
+ children: [
5927
+ shouldShowLoadingOverlay && /* @__PURE__ */ jsx(
5928
+ LoadingOverlay,
5929
+ {
5930
+ "aria-hidden": true,
5931
+ fullscreen: false,
5932
+ spinnerClassName: "size-6",
5933
+ className: cn(
5934
+ // "bg-white/75!",
5935
+ isLoaded ? "opacity-0 pointer-events-none" : "opacity-100"
5936
+ )
5937
+ }
5938
+ ),
5939
+ /* @__PURE__ */ jsx(
5940
+ "img",
5941
+ {
5942
+ ref: setRefs,
5943
+ className: cn(
5944
+ "block transition-opacity duration-300",
5945
+ fill && "absolute inset-0 size-full",
5946
+ shouldShowLoadingOverlay && !isLoaded ? "opacity-0" : "opacity-100",
5947
+ className
5948
+ ),
5949
+ src: computedSrc,
5950
+ srcSet: computedSrcSet,
5951
+ sizes: sizesValue,
5952
+ width: fill ? void 0 : widthNumber,
5953
+ height: fill ? void 0 : heightNumber,
5954
+ alt,
5955
+ loading,
5956
+ fetchPriority,
5957
+ decoding,
5958
+ onLoad: handleLoad,
5959
+ style: imageStyle,
5960
+ ...restImgProps
5961
+ }
5962
+ )
5963
+ ]
5964
+ }
5965
+ );
5966
+ });
5967
+ Image2.displayName = "Image";
5676
5968
  var ListTable = ({ onTableReady, children }) => {
5677
5969
  React4.useEffect(() => {
5678
5970
  if (onTableReady) {
@@ -6294,8 +6586,8 @@ function parseSerializedEditorState(raw) {
6294
6586
  return void 0;
6295
6587
  }
6296
6588
  }
6297
- function Placeholder({ placeholder: placeholder3 }) {
6298
- return /* @__PURE__ */ jsx("div", { className: theme.placeholder, children: placeholder3 });
6589
+ function Placeholder({ placeholder: placeholder2 }) {
6590
+ return /* @__PURE__ */ jsx("div", { className: theme.placeholder, children: placeholder2 });
6299
6591
  }
6300
6592
  var initialToolbarState = {
6301
6593
  isBold: false,
@@ -7196,7 +7488,7 @@ var RichText = forwardRef(function RichText2({
7196
7488
  defaultValue,
7197
7489
  onChange,
7198
7490
  onHtmlChange,
7199
- placeholder: placeholder3,
7491
+ placeholder: placeholder2,
7200
7492
  readOnly,
7201
7493
  disabled,
7202
7494
  editorClassName,
@@ -7284,7 +7576,7 @@ var RichText = forwardRef(function RichText2({
7284
7576
  )
7285
7577
  }
7286
7578
  ),
7287
- placeholder: /* @__PURE__ */ jsx(Placeholder, { placeholder: placeholder3 || "" }),
7579
+ placeholder: /* @__PURE__ */ jsx(Placeholder, { placeholder: placeholder2 || "" }),
7288
7580
  ErrorBoundary: LexicalErrorBoundary
7289
7581
  }
7290
7582
  ),
@@ -8381,6 +8673,6 @@ var CropperModal = ({
8381
8673
  );
8382
8674
  };
8383
8675
 
8384
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AdvanceSearch_default as AdvanceSearch, arrow_default as ArrowIcon, Button, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, CropperModal, CropperModalError, DIALOG_ALERT_I18N_NAMESPACE, DataTable_default as DataTable, DatePicker2 as DatePicker, Dialog, DialogAlert, DialogAlertProvider, DialogContent, DialogDescription, DialogFooter, DialogTitle, DialogTrigger, ErrorCompression, ErrorCreateCanvas, ErrorGeneratingBlob, ErrorInvalidSVG, ErrorSVGExceedSize, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GridSettingsModal_default as GridSettingsModal, HeaderCell_default as HeaderCell, Input, Label2 as Label, List_default as List, container_default as ListContainer, header_default as ListHeader, table_default as ListTable, LookupSelect, MonthPicker2 as MonthPicker, navbar_default as Navbar, not_found_default as NotFoundIcon, Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger, PreventPageLeave_default as PreventPageLeave, RadioGroupItem, RadioGroupRoot, RadioLabel, RichText, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Spinner, calendar_default as SuiCalendarIcon, check_default as SuiCheckIcon, dots_vertical_default as SuiDotsVerticalIcon, empty_data_default as SuiEmptyDataIcon, expand_default as SuiExpandIcon, filter_default as SuiFilterIcon, setting_default as SuiSettingIcon, triangle_down_default as SuiTriangleDownIcon, warning_default as SuiWarningIcon, Switch, Textarea, Tooltip, TooltipArrow, TooltipContent, TooltipProvider, TooltipTrigger, ui_exports as UI, booleanToSelectValue, buttonVariants, cn, compareAlphanumeric, debounce, getDialogAlertControls, getDialogTemplates, inputVariants, isDefined, isEmptyObject, selectValueToBoolean, spinnerVariants, stripNullishObject, throttle, useFormField, useGridSettingsStore_default as 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, useSidebar, useTruncated_default as useTruncated };
8676
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AdvanceSearch_default as AdvanceSearch, arrow_default as ArrowIcon, Button, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, CropperModal, CropperModalError, DIALOG_ALERT_I18N_NAMESPACE, DataTable_default as DataTable, DatePicker2 as DatePicker, Dialog, DialogAlert, DialogAlertProvider, DialogContent, DialogDescription, DialogFooter, DialogTitle, DialogTrigger, ErrorCompression, ErrorCreateCanvas, ErrorGeneratingBlob, ErrorInvalidSVG, ErrorSVGExceedSize, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GridSettingsModal_default as GridSettingsModal, HeaderCell_default as HeaderCell, Image2 as Image, Input, Label2 as Label, List_default as List, container_default as ListContainer, header_default as ListHeader, table_default as ListTable, LookupSelect, MonthPicker2 as MonthPicker, navbar_default as Navbar, not_found_default as NotFoundIcon, Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger, PreventPageLeave_default as PreventPageLeave, RadioGroupItem, RadioGroupRoot, RadioLabel, RichText, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Spinner, calendar_default as SuiCalendarIcon, check_default as SuiCheckIcon, dots_vertical_default as SuiDotsVerticalIcon, empty_data_default as SuiEmptyDataIcon, expand_default as SuiExpandIcon, filter_default as SuiFilterIcon, setting_default as SuiSettingIcon, triangle_down_default as SuiTriangleDownIcon, warning_default as SuiWarningIcon, Switch, Textarea, Tooltip, TooltipArrow, TooltipContent, TooltipProvider, TooltipTrigger, ui_exports as UI, booleanToSelectValue, buttonVariants, cn, compareAlphanumeric, debounce, formatISODate, getDialogAlertControls, getDialogTemplates, inputVariants, isDefined, isEmptyObject, selectValueToBoolean, spinnerVariants, stripNullishObject, throttle, useFormField, useGridSettingsStore_default as 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, useSidebar, useTruncated_default as useTruncated };
8385
8677
  //# sourceMappingURL=index.mjs.map
8386
8678
  //# sourceMappingURL=index.mjs.map