@undefine-ui/design-system 2.5.0 → 2.7.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/README.md CHANGED
@@ -173,10 +173,10 @@ Everything is re-exported from `src/index.ts`. Key groups:
173
173
  | Group | Exports |
174
174
  | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
175
175
  | Components | `CopyButton`, `HookForm` helpers (`Form`, `Field`, `RHFSwitch`, etc.), `Icon`, `Logo`, `LoadingScreen`, `Table`, `Upload` |
176
- | Hooks | `useBoolean`, `useCopyToClipboard`, `useEventListener`, `useLocalStorage`, `useResponsive`, `useSettings`, `useSetState`, `useScrollOffsetTop` |
176
+ | Hooks | `useBoolean`, `useCopyToClipboard`, `useEventListener`, `useLocalStorage`, `useResponsive`, `useSettings`, `useSetState`, `useScrollOffsetTop`, `usePopover` |
177
177
  | Contexts | `SettingsProvider`, `SettingsContext`, `defaultSettings`, `SettingsValueProps` |
178
178
  | Theme | `ThemeProvider`, `createTheme`, `colorSchemes`, `components`, `palette`, `radius`, `shadows`, `customSpacing`, utilities such as `varAlpha`, `bgGradient`, `hideScrollX/Y` |
179
- | Utilities | `changeCase` helpers, `formatNumber`, generic `helpers` |
179
+ | Utilities | `changeCase` helpers, `formatNumber`, `fullname-utils`, generic `helpers` |
180
180
 
181
181
  You can also import the theme pieces directly to compose your own MUI theme or to extend tokens in Storybook.
182
182
 
package/dist/index.cjs CHANGED
@@ -107,8 +107,10 @@ __export(index_exports, {
107
107
  fNumber: () => fNumber,
108
108
  fPercent: () => fPercent,
109
109
  fShortenNumber: () => fShortenNumber,
110
+ formatFullname: () => formatFullname,
110
111
  getCurrencySymbol: () => getCurrencySymbol,
111
112
  getInitColorSchemeScript: () => getInitColorSchemeScript,
113
+ getInitials: () => getInitials,
112
114
  getStorage: () => getStorage,
113
115
  grey: () => grey,
114
116
  hexToRgbChannel: () => hexToRgbChannel,
@@ -141,6 +143,7 @@ __export(index_exports, {
141
143
  setStorage: () => setStorage,
142
144
  shadows: () => shadows,
143
145
  snakeCase: () => snakeCase,
146
+ splitFullname: () => splitFullname,
144
147
  stylesMode: () => stylesMode,
145
148
  success: () => success,
146
149
  surface: () => surface,
@@ -154,6 +157,7 @@ __export(index_exports, {
154
157
  useCopyToClipboard: () => useCopyToClipboard,
155
158
  useEventListener: () => useEventListener,
156
159
  useLocalStorage: () => useLocalStorage,
160
+ usePopover: () => usePopover,
157
161
  useResponsive: () => useResponsive,
158
162
  useScrollOffSetTop: () => useScrollOffSetTop,
159
163
  useSetState: () => useSetState,
@@ -293,6 +297,25 @@ var fData = (inputValue) => {
293
297
  return fm;
294
298
  };
295
299
 
300
+ // src/libs/fullname-utils.ts
301
+ var getInitials = (name) => {
302
+ const names = name?.split(" ");
303
+ const initials = names?.map((n) => n.charAt(0)?.toUpperCase())?.join("");
304
+ return initials;
305
+ };
306
+ var splitFullname = (name) => {
307
+ if (!name) {
308
+ return { firstname: "", lastname: "" };
309
+ }
310
+ const names = name.split(" ");
311
+ const firstname = names[0];
312
+ const lastname = names[names.length - 1];
313
+ return { firstname, lastname };
314
+ };
315
+ var formatFullname = (firstname, lastname) => {
316
+ return `${firstname} ${lastname}`;
317
+ };
318
+
296
319
  // src/hooks/useBoolean.ts
297
320
  var import_react = require("react");
298
321
  var useBoolean = (defaultValue) => {
@@ -319,8 +342,27 @@ var useBoolean = (defaultValue) => {
319
342
  return memoizedValue;
320
343
  };
321
344
 
345
+ // src/hooks/usePopover.ts
346
+ var import_react2 = require("react");
347
+ var usePopover = () => {
348
+ const [anchorEl, setAnchorEl] = (0, import_react2.useState)(null);
349
+ const onOpen = (0, import_react2.useCallback)((event) => {
350
+ setAnchorEl(event.currentTarget);
351
+ }, []);
352
+ const onClose = (0, import_react2.useCallback)(() => {
353
+ setAnchorEl(null);
354
+ }, []);
355
+ return {
356
+ open: !!anchorEl,
357
+ anchorEl,
358
+ onOpen,
359
+ onClose,
360
+ setAnchorEl
361
+ };
362
+ };
363
+
322
364
  // src/hooks/useSettings.ts
323
- var import_react4 = require("react");
365
+ var import_react5 = require("react");
324
366
 
325
367
  // src/theme/styles/utils.ts
326
368
  var stylesMode = {
@@ -566,15 +608,15 @@ var defaultSettings = {
566
608
  };
567
609
 
568
610
  // src/contexts/settings/context.tsx
569
- var import_react3 = require("react");
611
+ var import_react4 = require("react");
570
612
 
571
613
  // src/hooks/useLocalStorage.ts
572
- var import_react2 = require("react");
614
+ var import_react3 = require("react");
573
615
  var useLocalStorage = (key, initialState) => {
574
- const [state, set] = (0, import_react2.useState)(initialState);
616
+ const [state, set] = (0, import_react3.useState)(initialState);
575
617
  const multiValue = initialState && typeof initialState === "object";
576
618
  const canReset = !isEqual(state, initialState);
577
- (0, import_react2.useEffect)(() => {
619
+ (0, import_react3.useEffect)(() => {
578
620
  const restoredValue = getStorage(key);
579
621
  if (restoredValue) {
580
622
  if (multiValue) {
@@ -584,7 +626,7 @@ var useLocalStorage = (key, initialState) => {
584
626
  }
585
627
  }
586
628
  }, [key, multiValue]);
587
- const setState = (0, import_react2.useCallback)(
629
+ const setState = (0, import_react3.useCallback)(
588
630
  (updateState) => {
589
631
  if (multiValue) {
590
632
  set((prevValue) => {
@@ -598,7 +640,7 @@ var useLocalStorage = (key, initialState) => {
598
640
  },
599
641
  [key, multiValue]
600
642
  );
601
- const setField = (0, import_react2.useCallback)(
643
+ const setField = (0, import_react3.useCallback)(
602
644
  (name, updateValue) => {
603
645
  if (multiValue) {
604
646
  setState({ [name]: updateValue });
@@ -606,11 +648,11 @@ var useLocalStorage = (key, initialState) => {
606
648
  },
607
649
  [multiValue, setState]
608
650
  );
609
- const resetState = (0, import_react2.useCallback)(() => {
651
+ const resetState = (0, import_react3.useCallback)(() => {
610
652
  set(initialState);
611
653
  removeStorage(key);
612
654
  }, [initialState, key]);
613
- const memoizedValue = (0, import_react2.useMemo)(
655
+ const memoizedValue = (0, import_react3.useMemo)(
614
656
  () => ({
615
657
  state,
616
658
  setState,
@@ -670,19 +712,19 @@ var LocalStorageGetItem = (key, defaultValue = "") => {
670
712
 
671
713
  // src/contexts/settings/context.tsx
672
714
  var import_jsx_runtime = require("react/jsx-runtime");
673
- var SettingsContext = (0, import_react3.createContext)({});
715
+ var SettingsContext = (0, import_react4.createContext)({});
674
716
  var SettingsConsumer = SettingsContext.Consumer;
675
717
  var SettingsProvider = ({ children, settings }) => {
676
718
  const localStorage2 = useLocalStorage(STORAGE_KEY, settings);
677
719
  const values = localStorage2;
678
- const [openDrawer, setOpenDrawer] = (0, import_react3.useState)(false);
679
- const onToggleDrawer = (0, import_react3.useCallback)(() => {
720
+ const [openDrawer, setOpenDrawer] = (0, import_react4.useState)(false);
721
+ const onToggleDrawer = (0, import_react4.useCallback)(() => {
680
722
  setOpenDrawer((prev) => !prev);
681
723
  }, []);
682
- const onCloseDrawer = (0, import_react3.useCallback)(() => {
724
+ const onCloseDrawer = (0, import_react4.useCallback)(() => {
683
725
  setOpenDrawer(false);
684
726
  }, []);
685
- const memoizedValue = (0, import_react3.useMemo)(
727
+ const memoizedValue = (0, import_react4.useMemo)(
686
728
  () => ({
687
729
  ...values.state,
688
730
  canReset: values.canReset,
@@ -709,29 +751,29 @@ var SettingsProvider = ({ children, settings }) => {
709
751
 
710
752
  // src/hooks/useSettings.ts
711
753
  var useSettings = () => {
712
- const context = (0, import_react4.useContext)(SettingsContext);
754
+ const context = (0, import_react5.useContext)(SettingsContext);
713
755
  if (!context) throw new Error("useSettings must be use inside SettingsProvider");
714
756
  return context;
715
757
  };
716
758
 
717
759
  // src/hooks/useSetState.ts
718
- var import_react5 = require("react");
760
+ var import_react6 = require("react");
719
761
  var useSetState = (initialState) => {
720
- const [state, set] = (0, import_react5.useState)(initialState);
762
+ const [state, set] = (0, import_react6.useState)(initialState);
721
763
  const canReset = !isEqual(state, initialState);
722
- const setState = (0, import_react5.useCallback)((updateState) => {
764
+ const setState = (0, import_react6.useCallback)((updateState) => {
723
765
  set((prevValue) => ({ ...prevValue, ...updateState }));
724
766
  }, []);
725
- const setField = (0, import_react5.useCallback)(
767
+ const setField = (0, import_react6.useCallback)(
726
768
  (name, updateValue) => {
727
769
  setState({ [name]: updateValue });
728
770
  },
729
771
  [setState]
730
772
  );
731
- const onResetState = (0, import_react5.useCallback)(() => {
773
+ const onResetState = (0, import_react6.useCallback)(() => {
732
774
  set(initialState);
733
775
  }, [initialState]);
734
- const memoizedValue = (0, import_react5.useMemo)(
776
+ const memoizedValue = (0, import_react6.useMemo)(
735
777
  () => ({
736
778
  state,
737
779
  setState,
@@ -745,12 +787,12 @@ var useSetState = (initialState) => {
745
787
  };
746
788
 
747
789
  // src/hooks/useResponsive.ts
748
- var import_react6 = require("react");
790
+ var import_react7 = require("react");
749
791
  var import_useMediaQuery = __toESM(require("@mui/material/useMediaQuery"), 1);
750
792
  var import_styles = require("@mui/material/styles");
751
793
  var useResponsive = (query, start, end) => {
752
794
  const theme = (0, import_styles.useTheme)();
753
- const getQuery = (0, import_react6.useMemo)(() => {
795
+ const getQuery = (0, import_react7.useMemo)(() => {
754
796
  switch (query) {
755
797
  case "up":
756
798
  return theme.breakpoints.up(start);
@@ -769,7 +811,7 @@ var useResponsive = (query, start, end) => {
769
811
  };
770
812
  var useWidth = () => {
771
813
  const theme = (0, import_styles.useTheme)();
772
- const keys = (0, import_react6.useMemo)(() => [...theme.breakpoints.keys].reverse(), [theme]);
814
+ const keys = (0, import_react7.useMemo)(() => [...theme.breakpoints.keys].reverse(), [theme]);
773
815
  const width = keys.reduce((output, key) => {
774
816
  const matches = (0, import_useMediaQuery.default)(theme.breakpoints.up(key));
775
817
  return !output && matches ? key : output;
@@ -778,19 +820,19 @@ var useWidth = () => {
778
820
  };
779
821
 
780
822
  // src/hooks/useEventListener.ts
781
- var import_react7 = require("react");
782
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react7.useLayoutEffect : import_react7.useEffect;
823
+ var import_react8 = require("react");
824
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react8.useLayoutEffect : import_react8.useEffect;
783
825
  var useEventListener = ({
784
826
  eventName,
785
827
  handler,
786
828
  element,
787
829
  options
788
830
  }) => {
789
- const savedHandler = (0, import_react7.useRef)(handler);
831
+ const savedHandler = (0, import_react8.useRef)(handler);
790
832
  useIsomorphicLayoutEffect(() => {
791
833
  savedHandler.current = handler;
792
834
  }, [handler]);
793
- (0, import_react7.useEffect)(() => {
835
+ (0, import_react8.useEffect)(() => {
794
836
  const targetElement = element?.current || window;
795
837
  if (!(targetElement && targetElement.addEventListener)) {
796
838
  return;
@@ -804,11 +846,11 @@ var useEventListener = ({
804
846
  };
805
847
 
806
848
  // src/hooks/useCopyToClipboard.ts
807
- var import_react8 = require("react");
849
+ var import_react9 = require("react");
808
850
  var useCopyToClipboard = () => {
809
- const [copiedText, setCopiedText] = (0, import_react8.useState)("");
810
- const [isCopied, setIsCopied] = (0, import_react8.useState)(false);
811
- const copy = (0, import_react8.useCallback)(
851
+ const [copiedText, setCopiedText] = (0, import_react9.useState)("");
852
+ const [isCopied, setIsCopied] = (0, import_react9.useState)(false);
853
+ const copy = (0, import_react9.useCallback)(
812
854
  async (text2) => {
813
855
  if (!navigator?.clipboard) {
814
856
  console.warn("Clipboard not supported");
@@ -828,7 +870,7 @@ var useCopyToClipboard = () => {
828
870
  },
829
871
  [setCopiedText]
830
872
  );
831
- const memoizedValue = (0, import_react8.useMemo)(
873
+ const memoizedValue = (0, import_react9.useMemo)(
832
874
  () => ({ copy, copiedText, isCopied }),
833
875
  [copy, copiedText, isCopied]
834
876
  );
@@ -836,11 +878,11 @@ var useCopyToClipboard = () => {
836
878
  };
837
879
 
838
880
  // src/hooks/useScrollOffsetTop.ts
839
- var import_react9 = require("react");
881
+ var import_react10 = require("react");
840
882
  var useScrollOffSetTop = (top = 0) => {
841
- const elementRef = (0, import_react9.useRef)(null);
842
- const [offsetTop, setOffsetTop] = (0, import_react9.useState)(false);
843
- const handleScrollChange = (0, import_react9.useCallback)(() => {
883
+ const elementRef = (0, import_react10.useRef)(null);
884
+ const [offsetTop, setOffsetTop] = (0, import_react10.useState)(false);
885
+ const handleScrollChange = (0, import_react10.useCallback)(() => {
844
886
  const scrollHeight = Math.round(window.scrollY);
845
887
  if (elementRef?.current) {
846
888
  const rect = elementRef.current.getBoundingClientRect();
@@ -850,14 +892,14 @@ var useScrollOffSetTop = (top = 0) => {
850
892
  setOffsetTop(scrollHeight > top);
851
893
  }
852
894
  }, [top]);
853
- (0, import_react9.useEffect)(() => {
895
+ (0, import_react10.useEffect)(() => {
854
896
  handleScrollChange();
855
897
  window.addEventListener("scroll", handleScrollChange, { passive: true });
856
898
  return () => {
857
899
  window.removeEventListener("scroll", handleScrollChange);
858
900
  };
859
901
  }, [handleScrollChange]);
860
- const memoizedValue = (0, import_react9.useMemo)(() => ({ elementRef, offsetTop }), [offsetTop]);
902
+ const memoizedValue = (0, import_react10.useMemo)(() => ({ elementRef, offsetTop }), [offsetTop]);
861
903
  return memoizedValue;
862
904
  };
863
905
 
@@ -6285,7 +6327,7 @@ var UploadProgress = ({ progress: progress2 = 20 }) => {
6285
6327
  };
6286
6328
 
6287
6329
  // src/components/Upload/components/MultiFilePreview.tsx
6288
- var import_react10 = require("react");
6330
+ var import_react11 = require("react");
6289
6331
  var import_Box9 = __toESM(require("@mui/material/Box"), 1);
6290
6332
  var import_IconButton3 = __toESM(require("@mui/material/IconButton"), 1);
6291
6333
 
@@ -6353,7 +6395,7 @@ var DeleteButton = ({ sx, ...rest }) => {
6353
6395
  // src/components/Upload/components/MultiFilePreview.tsx
6354
6396
  var import_jsx_runtime48 = require("react/jsx-runtime");
6355
6397
  var MultiFilePreview = ({ files, onRemove }) => {
6356
- const scrollRef = (0, import_react10.useRef)(null);
6398
+ const scrollRef = (0, import_react11.useRef)(null);
6357
6399
  const handleScroll = (direction) => {
6358
6400
  if (scrollRef.current) {
6359
6401
  const scrollAmount = 300;
@@ -7279,8 +7321,10 @@ var SplashScreen = ({ portal, sx, ...rest }) => {
7279
7321
  fNumber,
7280
7322
  fPercent,
7281
7323
  fShortenNumber,
7324
+ formatFullname,
7282
7325
  getCurrencySymbol,
7283
7326
  getInitColorSchemeScript,
7327
+ getInitials,
7284
7328
  getStorage,
7285
7329
  grey,
7286
7330
  hexToRgbChannel,
@@ -7313,6 +7357,7 @@ var SplashScreen = ({ portal, sx, ...rest }) => {
7313
7357
  setStorage,
7314
7358
  shadows,
7315
7359
  snakeCase,
7360
+ splitFullname,
7316
7361
  stylesMode,
7317
7362
  success,
7318
7363
  surface,
@@ -7326,6 +7371,7 @@ var SplashScreen = ({ portal, sx, ...rest }) => {
7326
7371
  useCopyToClipboard,
7327
7372
  useEventListener,
7328
7373
  useLocalStorage,
7374
+ usePopover,
7329
7375
  useResponsive,
7330
7376
  useScrollOffSetTop,
7331
7377
  useSetState,