@zydon/common 2.7.80 → 2.7.82

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.
Files changed (54) hide show
  1. package/dist/{chunk-I5R4OVA5.js → chunk-4HWP7ZLZ.js} +2 -2
  2. package/dist/{chunk-HYJEAKVR.js → chunk-CYWFK4OE.js} +2 -2
  3. package/dist/{chunk-PSWJSHGP.js → chunk-EDUNXVYV.js} +2 -2
  4. package/dist/chunk-I4PPSW36.js +8 -0
  5. package/dist/chunk-I4PPSW36.js.map +1 -0
  6. package/dist/{chunk-PJR4CLOE.js → chunk-IPPNUP2X.js} +2 -2
  7. package/dist/chunk-KKVRDMSE.js +8 -0
  8. package/dist/chunk-KKVRDMSE.js.map +1 -0
  9. package/dist/components/Actions/index.js +2 -2
  10. package/dist/components/Autocomplete/index.d.ts +1 -1
  11. package/dist/components/AutocompleteDetailed/index.d.ts +1 -1
  12. package/dist/components/Avatar/index.d.ts +4 -2
  13. package/dist/components/BulkEditModal/index.js +1 -1
  14. package/dist/components/CardBrand/index.d.ts +5 -2
  15. package/dist/components/CustomAvatar/index.d.ts +1 -1
  16. package/dist/components/CustomAvatarGroup/index.d.ts +1 -1
  17. package/dist/components/DataView/index.d.ts +21 -7
  18. package/dist/components/DataView/index.js +2 -2
  19. package/dist/components/DragButton/index.d.ts +3 -1
  20. package/dist/components/DragContainer/index.d.ts +3 -1
  21. package/dist/components/DrawerActions/index.js +2 -2
  22. package/dist/components/DynamicDataView/index.js +4 -4
  23. package/dist/components/FieldMentions/index.js +2 -2
  24. package/dist/components/FieldMentions/index.js.map +1 -1
  25. package/dist/components/FrameSkeleton/index.js +3 -3
  26. package/dist/components/Icon/index.d.ts +1 -1
  27. package/dist/components/IconButton/index.d.ts +1 -1
  28. package/dist/components/Label/index.d.ts +1 -1
  29. package/dist/components/MaskedInput/index.d.ts +2 -2
  30. package/dist/components/ModalActions/index.js +2 -2
  31. package/dist/components/NumberInput/index.d.ts +1 -1
  32. package/dist/components/Portal/index.d.ts +2 -3
  33. package/dist/components/Portal/index.js +1 -1
  34. package/dist/components/Result/index.d.ts +1 -1
  35. package/dist/components/Scrollbar/index.d.ts +2 -2
  36. package/dist/components/TextMaxLine/index.d.ts +1 -1
  37. package/dist/components/carousel/index.d.ts +9 -3
  38. package/dist/components/form/Codes/index.js +3 -1
  39. package/dist/components/form/Codes/index.js.map +1 -1
  40. package/dist/hooks/useCollapseSidebarOnMount.js +3 -3
  41. package/dist/hooks/useEventListener.js +3 -1
  42. package/dist/hooks/useLocalStorage.js +2 -2
  43. package/dist/hooks/useOnClickOutside.js +3 -1
  44. package/dist/hooks/useOnClickOutside.js.map +1 -1
  45. package/dist/hooks/useSnackbar.d.ts +7 -7
  46. package/package.json +11 -7
  47. package/dist/chunk-BLVCNBTJ.js +0 -7
  48. package/dist/chunk-BLVCNBTJ.js.map +0 -1
  49. package/dist/chunk-IN7SP2ND.js +0 -8
  50. package/dist/chunk-IN7SP2ND.js.map +0 -1
  51. /package/dist/{chunk-I5R4OVA5.js.map → chunk-4HWP7ZLZ.js.map} +0 -0
  52. /package/dist/{chunk-HYJEAKVR.js.map → chunk-CYWFK4OE.js.map} +0 -0
  53. /package/dist/{chunk-PSWJSHGP.js.map → chunk-EDUNXVYV.js.map} +0 -0
  54. /package/dist/{chunk-PJR4CLOE.js.map → chunk-IPPNUP2X.js.map} +0 -0
@@ -3,7 +3,7 @@ import { a as a$5 } from './chunk-IJZCVZ32.js';
3
3
  import { a as a$8 } from './chunk-IDFJFFIV.js';
4
4
  import { a as a$6 } from './chunk-6U5LS7MP.js';
5
5
  import { i, j, a as a$2, b as b$2, c, d, f, e, g, h } from './chunk-TB4Y7LXN.js';
6
- import { a as a$9 } from './chunk-IN7SP2ND.js';
6
+ import { a as a$9 } from './chunk-I4PPSW36.js';
7
7
  import { a as a$3 } from './chunk-CO2KQFUN.js';
8
8
  import { a } from './chunk-VPG46WNM.js';
9
9
  import { a as a$7 } from './chunk-F65ZXAGV.js';
@@ -23,4 +23,4 @@ var b="datagrid-actions";var Ao=({rowCount:t,page:e,rowsPerPage:r,onPaginationCh
23
23
 
24
24
  export { ao as a, so as b, co as c, xr as d };
25
25
  //# sourceMappingURL=out.js.map
26
- //# sourceMappingURL=chunk-I5R4OVA5.js.map
26
+ //# sourceMappingURL=chunk-4HWP7ZLZ.js.map
@@ -1,9 +1,9 @@
1
+ import { a as a$1 } from './chunk-KKVRDMSE.js';
1
2
  import { a } from './chunk-POTVACYB.js';
2
- import { a as a$1 } from './chunk-BLVCNBTJ.js';
3
3
  import { useCallback, useState, useEffect } from 'react';
4
4
 
5
5
  var h=typeof window>"u",p=(r,t,o={})=>{let{initializeWithValue:l=!0}=o,S=useCallback(e=>o.serializer?o.serializer(e):JSON.stringify(e),[o]),d=useCallback(e=>{if(o.deserializer)return o.deserializer(e);if(e==="undefined")return;let n=t instanceof Function?t():t,g;try{g=JSON.parse(e);}catch{return n}return g},[o,t]),a$2=useCallback(()=>{let e=t instanceof Function?t():t;if(h)return e;try{let n=window.localStorage.getItem(r);return n?d(n):e}catch{return e}},[t,r,d]),[w,s]=useState(()=>l?a$2():t instanceof Function?t():t),T=a(e=>{try{let n=e instanceof Function?e(a$2()):e;window.localStorage.setItem(r,S(n)),s(n),window.dispatchEvent(new StorageEvent("local-storage",{key:r}));}catch{}}),m=a(()=>{let e=t instanceof Function?t():t;window.localStorage.removeItem(r),s(e),window.dispatchEvent(new StorageEvent("local-storage",{key:r}));});useEffect(()=>{s(a$2());},[r]);let f=useCallback(e=>{e.key&&e.key!==r||s(a$2());},[r,a$2]);return a$1("storage",f),a$1("local-storage",f),[w,T,m]},I=p;
6
6
 
7
7
  export { I as a };
8
8
  //# sourceMappingURL=out.js.map
9
- //# sourceMappingURL=chunk-HYJEAKVR.js.map
9
+ //# sourceMappingURL=chunk-CYWFK4OE.js.map
@@ -1,8 +1,8 @@
1
1
  import { a as a$1 } from './chunk-XNKYJHNL.js';
2
- import { a } from './chunk-HYJEAKVR.js';
2
+ import { a } from './chunk-CYWFK4OE.js';
3
3
 
4
4
  var s=(t=!0)=>{let[,a$2]=a("isNavMini",!1);a$1(()=>{a$2(t);});},r=s;
5
5
 
6
6
  export { r as a };
7
7
  //# sourceMappingURL=out.js.map
8
- //# sourceMappingURL=chunk-PSWJSHGP.js.map
8
+ //# sourceMappingURL=chunk-EDUNXVYV.js.map
@@ -0,0 +1,8 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { createPortal } from 'react-dom';
3
+
4
+ var c=({children:e,container:o,waitBeforeShow:t=50})=>{let[l,m]=useState(!1);return useEffect(()=>{let n=setTimeout(()=>m(!0),t);return ()=>clearTimeout(n)},[t]),t?l?createPortal(e,document.getElementById(o)||document.body):null:createPortal(e,document.getElementById(o)||document.body)},p=c;
5
+
6
+ export { p as a };
7
+ //# sourceMappingURL=out.js.map
8
+ //# sourceMappingURL=chunk-I4PPSW36.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Portal/index.tsx"],"names":["useEffect","useState","createPortal","Portal","children","container","waitBeforeShow","isShown","setIsShown","timer","Portal_default"],"mappings":"AAAA,OAAmC,aAAAA,EAAW,YAAAC,MAAgB,QAC9D,OAAS,gBAAAC,MAAoB,YAI7B,IAAMC,EAAS,CAAC,CACd,SAAAC,EACA,UAAAC,EACA,eAAAC,EAAiB,EACnB,IAAgE,CAC9D,GAAM,CAACC,EAASC,CAAU,EAAIP,EAAS,EAAK,EAO5C,OALAD,EAAU,IAAM,CACd,IAAMS,EAAQ,WAAW,IAAMD,EAAW,EAAI,EAAGF,CAAc,EAC/D,MAAO,IAAM,aAAaG,CAAK,CACjC,EAAG,CAACH,CAAc,CAAC,EAEdA,EAOEC,EACHL,EACEE,EACA,SAAS,eAAeC,CAAS,GAAK,SAAS,IACjD,EACA,KAXKH,EACLE,EACA,SAAS,eAAeC,CAAS,GAAK,SAAS,IACjD,CASJ,EAEOK,EAAQP","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { PortalProps } from './props';\n\nconst Portal = ({\n children,\n container,\n waitBeforeShow = 50,\n}: PropsWithChildren<PortalProps>): React.ReactPortal | null => {\n const [isShown, setIsShown] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => setIsShown(true), waitBeforeShow);\n return () => clearTimeout(timer);\n }, [waitBeforeShow]);\n\n if (!waitBeforeShow) {\n return createPortal(\n children,\n document.getElementById(container) || document.body,\n );\n }\n\n return isShown\n ? createPortal(\n children,\n document.getElementById(container) || document.body,\n )\n : null;\n};\n\nexport default Portal;\n"]}
@@ -1,8 +1,8 @@
1
- import { a } from './chunk-IN7SP2ND.js';
1
+ import { a } from './chunk-I4PPSW36.js';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
4
  var i=({children:r,id:t="actions"})=>jsx(a,{container:t,children:r}),s=i;
5
5
 
6
6
  export { s as a };
7
7
  //# sourceMappingURL=out.js.map
8
- //# sourceMappingURL=chunk-PJR4CLOE.js.map
8
+ //# sourceMappingURL=chunk-IPPNUP2X.js.map
@@ -0,0 +1,8 @@
1
+ import { a } from './chunk-POTVACYB.js';
2
+ import { useEffect } from 'react';
3
+
4
+ function l(n,s,t,o){let d=a(s);useEffect(()=>{let e=t?.current||window;if(!(e&&e.addEventListener))return;let i=E=>d(E);return e.addEventListener(n,i,o),()=>{e.removeEventListener(n,i);}},[t,n,o,d]);}var p=l;
5
+
6
+ export { p as a };
7
+ //# sourceMappingURL=out.js.map
8
+ //# sourceMappingURL=chunk-KKVRDMSE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useEventListener.ts"],"names":["useEffect","useEventListener","eventName","handler","element","options","stableHandler","useEventCallback_default","targetElement","eventListener","event","useEventListener_default"],"mappings":"wCAAA,OAAoB,aAAAA,MAAiB,QA+BrC,SAASC,EAKPC,EACAC,EAGAC,EACAC,EACA,CACA,IAAMC,EAAgBC,EAAiBJ,CAAO,EAE9CH,EAAU,IAAM,CACd,IAAMQ,EAA4BJ,GAAS,SAAW,OACtD,GAAI,EAAEI,GAAiBA,EAAc,kBACnC,OAGF,IAAMC,EAAgCC,GAASJ,EAAcI,CAAK,EAElE,OAAAF,EAAc,iBAAiBN,EAAWO,EAAeJ,CAAO,EAEzD,IAAM,CACXG,EAAc,oBAAoBN,EAAWO,CAAa,CAC5D,CACF,EAAG,CAACL,EAASF,EAAWG,EAASC,CAAa,CAAC,CACjD,CAEA,IAAOK,EAAQV","sourcesContent":["import { RefObject, useEffect } from 'react';\n\nimport useEventCallback from './useEventCallback';\n\n// Window Event based useEventListener interface\nfunction useEventListener<K extends keyof WindowEventMap>(\n eventName: K,\n handler: (event: WindowEventMap[K]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\n// Element Event based useEventListener interface\nfunction useEventListener<\n K extends keyof HTMLElementEventMap,\n T extends HTMLElement = HTMLDivElement,\n>(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n element: RefObject<T | null>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\n// Document Event based useEventListener interface\nfunction useEventListener<K extends keyof DocumentEventMap>(\n eventName: K,\n handler: (event: DocumentEventMap[K]) => void,\n element: RefObject<Document | null>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n KW extends keyof WindowEventMap,\n KH extends keyof HTMLElementEventMap,\n T extends HTMLElement | void = void,\n>(\n eventName: KW | KH,\n handler: (\n event: WindowEventMap[KW] | HTMLElementEventMap[KH] | Event,\n ) => void,\n element?: RefObject<T | null>,\n options?: boolean | AddEventListenerOptions,\n) {\n const stableHandler = useEventCallback(handler);\n\n useEffect(() => {\n const targetElement: T | Window = element?.current || window;\n if (!(targetElement && targetElement.addEventListener)) {\n return;\n }\n\n const eventListener: typeof handler = event => stableHandler(event);\n\n targetElement.addEventListener(eventName, eventListener, options);\n\n return () => {\n targetElement.removeEventListener(eventName, eventListener);\n };\n }, [element, eventName, options, stableHandler]);\n}\n\nexport default useEventListener;\n"]}
@@ -1,4 +1,4 @@
1
- export { a as default } from '../../chunk-PJR4CLOE.js';
2
- import '../../chunk-IN7SP2ND.js';
1
+ export { a as default } from '../../chunk-IPPNUP2X.js';
2
+ import '../../chunk-I4PPSW36.js';
3
3
  //# sourceMappingURL=out.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -6,6 +6,6 @@ import '@mui/material/Autocomplete';
6
6
  import '../../types/option.js';
7
7
  import '../../types/icon.js';
8
8
 
9
- declare const Autocomplete: react.NamedExoticComponent<Omit<AutocompleteProps, "ref"> & react.RefAttributes<unknown>>;
9
+ declare const Autocomplete: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AutocompleteProps, "ref"> & react.RefAttributes<unknown>>>;
10
10
 
11
11
  export { Autocomplete as default };
@@ -13,6 +13,6 @@ type AutocompleteDetailedProps = BaseAutoComplete & {
13
13
  showValueInLabel?: boolean;
14
14
  };
15
15
 
16
- declare const AutocompleteDetailed: react.NamedExoticComponent<Omit<AutocompleteDetailedProps, "ref"> & react.RefAttributes<unknown>>;
16
+ declare const AutocompleteDetailed: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<AutocompleteDetailedProps, "ref"> & react.RefAttributes<unknown>>>;
17
17
 
18
18
  export { AutocompleteDetailed as default };
@@ -9,8 +9,10 @@ interface ImageContainerProps {
9
9
  height?: string | number;
10
10
  }
11
11
 
12
- declare const Avatar: react.NamedExoticComponent<Omit<PropsWithChildren<ImageContainerProps & _mui_material_Avatar.AvatarOwnProps & _mui_material_Avatar.AvatarSlotsAndSlotProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "children" | "className" | "style" | "classes" | "sx" | "variant" | "slots" | "slotProps" | "alt" | "imgProps" | "sizes" | "src" | "srcSet"> & {
12
+ declare const Avatar: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<PropsWithChildren<ImageContainerProps & _mui_material_Avatar.AvatarOwnProps & _mui_material_Avatar.AvatarSlotsAndSlotProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
13
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
14
+ }, "children" | "className" | "style" | "classes" | "sx" | "variant" | "slots" | "slotProps" | "sizes" | "alt" | "src" | "srcSet" | "imgProps"> & {
13
15
  component?: react.ElementType<any, keyof react.JSX.IntrinsicElements> | undefined;
14
- }>, "ref"> & react.RefAttributes<HTMLDivElement>>;
16
+ }>, "ref"> & react.RefAttributes<HTMLDivElement>>>;
15
17
 
16
18
  export { Avatar as default };
@@ -2,7 +2,7 @@ import { a } from '../../chunk-LFZJKAV6.js';
2
2
  import { j as j$1 } from '../../chunk-TB4Y7LXN.js';
3
3
  import '../../chunk-UVPQR2Q2.js';
4
4
  import { a as a$1 } from '../../chunk-RBTYTONM.js';
5
- import { a as a$3 } from '../../chunk-IN7SP2ND.js';
5
+ import { a as a$3 } from '../../chunk-I4PPSW36.js';
6
6
  import '../../chunk-JWIITCIZ.js';
7
7
  import { a as a$2 } from '../../chunk-VPG46WNM.js';
8
8
  import '../../chunk-CIGSMWKF.js';
@@ -1,8 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { IconProps } from '../../types/iconProps.js';
3
+ import '@mui/material/Box';
4
+ import '../../types/icon.js';
2
5
 
3
- type CardBrandProps = {
6
+ interface CardBrandProps extends Omit<IconProps, 'icon' | 'ref'> {
4
7
  cardNumber: string;
5
- };
8
+ }
6
9
 
7
10
  declare const CardBrand: ({ cardNumber, ...props }: CardBrandProps) => react_jsx_runtime.JSX.Element;
8
11
 
@@ -8,6 +8,6 @@ interface CustomAvatarProps extends AvatarProps {
8
8
  BadgeProps?: BadgeProps;
9
9
  }
10
10
 
11
- declare const CustomAvatar: react.NamedExoticComponent<Omit<CustomAvatarProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
11
+ declare const CustomAvatar: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<CustomAvatarProps, "ref"> & react.RefAttributes<HTMLDivElement>>>;
12
12
 
13
13
  export { CustomAvatar as default };
@@ -6,6 +6,6 @@ interface CustomAvatarGroupProps extends AvatarGroupProps {
6
6
  compact?: boolean;
7
7
  }
8
8
 
9
- declare const CustomAvatarGroup: react.NamedExoticComponent<Omit<CustomAvatarGroupProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
9
+ declare const CustomAvatarGroup: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<CustomAvatarGroupProps, "ref"> & react.RefAttributes<HTMLDivElement>>>;
10
10
 
11
11
  export { CustomAvatarGroup as default };
@@ -53,13 +53,27 @@ interface ContainerProps extends StackProps {
53
53
  breakpoint: Breakpoint | number;
54
54
  }
55
55
  declare const Container: _emotion_styled.StyledComponent<PanelProps & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & ContainerProps, {}, {}>;
56
- declare const Header: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
57
- declare const ActionsContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
58
- declare const ActionsDivider: _emotion_styled.StyledComponent<_mui_material_Divider.DividerOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "light" | "children" | "className" | "style" | "classes" | "sx" | "variant" | "textAlign" | "absolute" | "orientation" | "flexItem"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
59
- declare const ToolbarActionsDivider: _emotion_styled.StyledComponent<_mui_material_Divider.DividerOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "light" | "children" | "className" | "style" | "classes" | "sx" | "variant" | "textAlign" | "absolute" | "orientation" | "flexItem"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
60
- declare const Topbar: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
61
- declare const SearchContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
62
- declare const MobilePaginationContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
56
+ declare const Header: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
57
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
58
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
59
+ declare const ActionsContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
60
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
61
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
62
+ declare const ActionsDivider: _emotion_styled.StyledComponent<_mui_material_Divider.DividerOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "ref"> & {
63
+ ref?: ((instance: HTMLHRElement | null) => void) | react.RefObject<HTMLHRElement> | null | undefined;
64
+ }, "light" | "children" | "className" | "style" | "classes" | "sx" | "variant" | "textAlign" | "absolute" | "orientation" | "flexItem"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
65
+ declare const ToolbarActionsDivider: _emotion_styled.StyledComponent<_mui_material_Divider.DividerOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "ref"> & {
66
+ ref?: ((instance: HTMLHRElement | null) => void) | react.RefObject<HTMLHRElement> | null | undefined;
67
+ }, "light" | "children" | "className" | "style" | "classes" | "sx" | "variant" | "textAlign" | "absolute" | "orientation" | "flexItem"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
68
+ declare const Topbar: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
69
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
70
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
71
+ declare const SearchContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
72
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
73
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & DefaultProps, {}, {}>;
74
+ declare const MobilePaginationContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
75
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
76
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
63
77
 
64
78
  declare const Toolbar: ({ setFilterButtonEl }: ToolbarProps) => react_jsx_runtime.JSX.Element;
65
79
 
@@ -1,4 +1,4 @@
1
- export { a as DesktopFooter, b as EnhancedMoreActions, c as Toolbar, d as default } from '../../chunk-I5R4OVA5.js';
1
+ export { a as DesktopFooter, b as EnhancedMoreActions, c as Toolbar, d as default } from '../../chunk-4HWP7ZLZ.js';
2
2
  import '../../chunk-SHJKJLBQ.js';
3
3
  import '../../chunk-IJZCVZ32.js';
4
4
  import '../../chunk-IDFJFFIV.js';
@@ -8,7 +8,7 @@ import '../../chunk-NIQW2J3M.js';
8
8
  export { c as ActionsContainer, d as ActionsDivider, a as Container, b as Header, h as MobilePaginationContainer, g as SearchContainer, e as ToolbarActionsDivider, f as Topbar } from '../../chunk-TB4Y7LXN.js';
9
9
  import '../../chunk-UVPQR2Q2.js';
10
10
  import '../../chunk-RBTYTONM.js';
11
- import '../../chunk-IN7SP2ND.js';
11
+ import '../../chunk-I4PPSW36.js';
12
12
  import '../../chunk-CO2KQFUN.js';
13
13
  import '../../chunk-VPG46WNM.js';
14
14
  import '../../chunk-CIGSMWKF.js';
@@ -4,7 +4,9 @@ import * as _mui_material_OverridableComponent from '@mui/material/OverridableCo
4
4
  import * as _mui_material from '@mui/material';
5
5
  import * as _mui_material_IconButton from '@mui/material/IconButton';
6
6
 
7
- declare const DragButton: ({ disableDrag, ...props }: _mui_material_IconButton.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "children" | "disabled" | "className" | "style" | "classes" | "sx" | "color" | "tabIndex" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "size" | "disableFocusRipple" | "edge"> & {
7
+ declare const DragButton: ({ disableDrag, ...props }: _mui_material_IconButton.IconButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
8
+ ref?: ((instance: HTMLButtonElement | null) => void) | react.RefObject<HTMLButtonElement> | null | undefined;
9
+ }, "children" | "disabled" | "className" | "style" | "classes" | "sx" | "color" | "tabIndex" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "size" | "disableFocusRipple" | "edge"> & {
8
10
  component?: react.ElementType<any, keyof react.JSX.IntrinsicElements> | undefined;
9
11
  } & {
10
12
  disableDrag?: boolean | undefined;
@@ -18,6 +18,8 @@ interface SortableStyleProps extends BoxProps {
18
18
  'aria-roledescription'?: string;
19
19
  }
20
20
 
21
- declare const DragContainer: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & SortableStyleProps & Partial<DraggableAttributes>, {}, {}>;
21
+ declare const DragContainer: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
22
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
23
+ }, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & SortableStyleProps & Partial<DraggableAttributes>, {}, {}>;
22
24
 
23
25
  export { DragContainer as default };
@@ -1,4 +1,4 @@
1
- export { a as default } from '../../chunk-PJR4CLOE.js';
2
- import '../../chunk-IN7SP2ND.js';
1
+ export { a as default } from '../../chunk-IPPNUP2X.js';
2
+ import '../../chunk-I4PPSW36.js';
3
3
  //# sourceMappingURL=out.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  import { d, c as c$1 } from '../../chunk-N7IK5EUP.js';
2
2
  import { a } from '../../chunk-AVPFUSEB.js';
3
3
  import { h, a as a$3 } from '../../chunk-OF6623HG.js';
4
- import { d as d$1 } from '../../chunk-I5R4OVA5.js';
4
+ import { d as d$1 } from '../../chunk-4HWP7ZLZ.js';
5
5
  import '../../chunk-SHJKJLBQ.js';
6
6
  import '../../chunk-IJZCVZ32.js';
7
7
  import { a as a$2 } from '../../chunk-6RC5O2YL.js';
@@ -13,7 +13,7 @@ import '../../chunk-NIQW2J3M.js';
13
13
  import '../../chunk-TB4Y7LXN.js';
14
14
  import '../../chunk-UVPQR2Q2.js';
15
15
  import '../../chunk-RBTYTONM.js';
16
- import '../../chunk-IN7SP2ND.js';
16
+ import '../../chunk-I4PPSW36.js';
17
17
  import '../../chunk-CO2KQFUN.js';
18
18
  import { a as a$1 } from '../../chunk-VPG46WNM.js';
19
19
  import '../../chunk-CIGSMWKF.js';
@@ -22,9 +22,9 @@ import '../../chunk-LQRRMVFN.js';
22
22
  import '../../chunk-RPO7AI5K.js';
23
23
  import '../../chunk-IAOMC4C4.js';
24
24
  import '../../chunk-GLRLKFPS.js';
25
- import { a as a$4 } from '../../chunk-HYJEAKVR.js';
25
+ import { a as a$4 } from '../../chunk-CYWFK4OE.js';
26
+ import '../../chunk-KKVRDMSE.js';
26
27
  import '../../chunk-POTVACYB.js';
27
- import '../../chunk-BLVCNBTJ.js';
28
28
  import '../../chunk-ET3WPQIO.js';
29
29
  import '../../chunk-CFNATBO2.js';
30
30
  import { memo, useMemo, useCallback } from 'react';
@@ -13,8 +13,8 @@ import Qe from '@mui/material/Popper';
13
13
  import ze from '@mui/material/Stack';
14
14
  import _e from '@mui/material/ListItemButton';
15
15
 
16
- var Pe=({display:e,color:t,backgroundColor:n})=>jsx(A,{component:"span",sx:{color:t||"inherit",bgcolor:n},children:e}),ae=Pe;function G(e){return typeof e=="number"}function Le(e){let t=/^\/(.+)\/(\w+)?$/;return new RegExp(e.map(n=>{let[,o,s]=t.exec(n.toString())||[];return z(!s,`RegExp flags are not supported. Change /${o}/${s} into /${o}/`),`(${o})`}).join("|"),"g")}function ce(e){let t=0;return e.indexOf("__id__")>=0&&t++,e.indexOf("__display__")>=0&&t++,t}function le(e,t){z(t==="id"||t==="display",`Second arg must be either "id" or "display", got: "${t}"`);let n=e.indexOf("__display__"),o=e.indexOf("__id__");return z(n>=0||o>=0,`The markup '${e}' does not contain at least one of the placeholders '__id__' or '__display__'`),n>=0&&o>=0?t==="id"&&o<=n||t==="display"&&n<=o?0:1:0}function H(e,t,n,o,s){let l=Le(t.map(i=>i.regex?Ie(i.regex,i.markup||b):ke(i.markup||b))),f=2,u=t.map(({markup:i})=>{let p=f;return f+=ce(i||b)+1,p}),a,g=0,c$1=0;for(;(a=l.exec(e))!==null;){let i=u.find(O=>!!a?.[O]);if(i===void 0)continue;let p=u.indexOf(i),{markup:T,displayTransform:d}=t[p],b$1=i+le(T||b,"id"),y=i+le(T||b,"display"),S=a[b$1],R=d?d(S,a[y]):c(S,a[y],s),E=e.substring(g,a.index);o?.(E,g,c$1),c$1+=E.length,n(a[0],a.index,c$1,S,R,p,g),c$1+=R.length,g=l.lastIndex;}g<e.length&&o?.(e.substring(g),g,c$1);}function $(e,t,n){let o="";return H(e,t,(s,l,f,u,a)=>{o+=a;},s=>{o+=s;},n),o}var Ie=(e,t)=>{let n=(new RegExp(e.toString()+"|").exec("")?.length||0)-1,o=ce(t);return z(n===o,`Number of capturing groups in RegExp ${e.toString()} (${n}) does not match the number of placeholders in the markup '${t}' (${o})`),e},ke=e=>{let t=Q(e),n=e[e.indexOf("__display__")+11],o=e[e.indexOf("__id__")+6];return new RegExp(t.replace("__display__",`([^${Q(n||"")}]+?)`).replace("__id__",`([^${Q(o||"")}]+?)`))},Q=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");function ge(e,t,n,o,s,l,f){let u=$(e,l,f),a=u.length-t.length;n===null&&(n=s+a),o===null&&(o=n),n===o&&o===s&&u.length===t.length&&(n=n-1);let g=t.slice(n,s),c=Math.min(n,s),i=o;n===s&&(i=Math.max(o,n+a));let p=I(e,l,c,"START"),T=I(e,l,i,"END"),d=I(e,l,c,"NULL"),b=I(e,l,i,"NULL"),y=d===null||b===null,S=V(e,p||0,T||0,g);if(!y){let R=$(S,l,f);if(R!==t){for(c=0;t[c]===R[c];)c++;g=t.slice(c,s),i=u.lastIndexOf(t.substring(s)),p=I(e,l,c,"START"),T=I(e,l,i,"END"),S=V(e,p||0,T||0,g);}}return S}function I(e,t,n,o="START"){if(typeof n!="number")return n;let s;return H(e,t,(u,a,g,c,i)=>{s===void 0&&g+i.length>n&&(o==="NULL"?s=null:s=a+(o==="END"?u.length:0));},(u,a,g)=>{s===void 0&&g+u.length>=n&&(s=a+n-g);}),s===void 0?e.length:s}function V(e,t,n,o){return e.substring(0,t)+o+e.substring(n)}function pe(e,t,n){let o;return H(e,t,(l,f,u,a,g)=>{u<=n&&u+g.length>n&&(o=u);}),o}function J(e,t){let n=[];return H(e,t,(o,s,l,f,u,a)=>{n.push({id:f,display:u,dataSourceIndex:a,index:s,plainTextIndex:l});}),n}function de(e){return Object.values(e).reduce((t,{results:n})=>t+n.length,0)}function fe(e,t){let n=J(e,t),o=n[n.length-1];return o?o.plainTextIndex+o.display.length:0}function me(e,t){if(e instanceof RegExp)return e;{let n=Q(e);return new RegExp(`(?:^|\\s)(${n}([^${t?"":"\\s"}${n}]*))$`)}}function he(e,t){return e instanceof Array?async function(n){let o=[];for(let s=0,l=e.length;s<l;++s){let f=e[s].display||e[s].id;Ce(f,n,t)>=0&&o.push(e[s]);}return o}:e}var Ce=(e,t,n)=>n?ue(e).indexOf(ue(t)):e.toLowerCase().indexOf(t.toLowerCase()),Oe=e=>{let t=e;return a$1.forEach(n=>{t=t.replace(n.letters,n.base);}),t},ue=e=>Oe(e).toLowerCase(),Se=(e,t,n)=>e.replace("__id__",t).replace("__display__",n||t);function ve(e){let t={x:0,y:0,width:0,height:0};if(!e)return t;let n=getComputedStyle(e);return t.width=e.clientWidth,t.width-=parseFloat(n.paddingLeft),t.width-=parseFloat(n.paddingRight),t.height=e.clientHeight,t.height-=parseFloat(n.paddingTop),t.height-=parseFloat(n.paddingBottom),t.x=e.offsetLeft,t.x+=parseFloat(n.paddingLeft),t.x+=parseFloat(n.borderLeft),t.y=e.offsetTop,t.y+=parseFloat(n.paddingTop),t.y+=parseFloat(n.borderTop),t}var Be=e=>{let{highlighterRef:t,cursorRef:n,selectionEnd:o,selectionStart:s,value:l,dataSources:f,multiline:u}=e,a=[];H(l,f,(p,T,d,b,y,S)=>{let R=f[S];a.push(jsx(ae,{display:y,color:R?.color,backgroundColor:R?.backgroundColor},`${b}-${T}`));},(p,T,d)=>{if(u||(p=p.replaceAll(`
17
- `,"")),!(s&&s===o&&s>=d&&s<=d+p.length))a.push(jsx(A,{component:"span",sx:{color:y=>y.palette.text.primary},children:p},`${T}-${d}`));else {let y=s-d,S=p.substring(0,y),R=p.substring(y);S&&a.push(jsx(A,{component:"span",sx:{color:E=>E.palette.text.primary},children:S},`${T}-${d}-precursor`)),a.push(jsx(A,{ref:n,component:"span",visibility:"hidden"},"cursor")),R&&a.push(jsx(A,{component:"span",sx:{color:E=>E.palette.text.primary},children:R},`${T}-${d}-postcursor`));}},u);let i=ve(e.inputRef);return jsx($e,{container:()=>e.inputRef?.parentElement||null,children:jsxs(A,{ref:t,sx:{position:"absolute",top:`${i.y}px`,left:`${i.x}px`,width:`${i.width}px`,height:`${i.height}px`,whiteSpace:u?"pre-wrap":"pre",overflow:"hidden",overscrollBehavior:"none",zIndex:1,pointerEvents:"none"},children:[a,jsx(A,{component:"span",visibility:"hidden",children:" "})]})})},xe=Be;var He=e=>{let{renderSuggestion:t,suggestion:n,focused:o,onClick:s,onMouseEnter:l}=e;if(t)return t(e);let f=c(n.id,n.display);return jsx(_e,{role:"option","aria-selected":o,selected:o,onClick:s,onMouseEnter:l,children:f})},Te=He;var Ge=e=>{let{value:t,dataSources:n,selectionStart:o,selectionEnd:s,cursorRef:l,onSelect:f,onMouseDown:u}=e,a$1=useRef(null),[g,c]=useState({}),[i,p]=useState(0),[T,d]=useState(!1),[b,y]=useState(!1);useEffect(()=>{let m=a$1.current;if(!T||!m||m.children.length===0)return;let r=m.scrollTop,{top:h,bottom:x}=m.children[i].getBoundingClientRect(),{top:D}=m.getBoundingClientRect();h=h-D+r,x=x-D+r,h<r?m.scrollTop=h:x>m.offsetHeight+r&&(m.scrollTop=x-m.offsetHeight),d(!1);},[T,a$1,i,d]);let S=useCallback(async(m,r,h,x,D,P)=>{try{let w=he(m.data,m.ignoreAccents);y(!0);let L=await w(r);c(M=>({...M,[h]:{queryInfo:{childIndex:h,query:r,querySequenceStart:x,querySequenceEnd:D,plainTextValue:P},results:L}}));}catch(w){console.error(w);}finally{y(!1);}},[]),R=useRef(n);useEffect(()=>{R.current=n;},[n]),useEffect(()=>{if(c({}),!o||o!==s)return;let m=R.current,r=$(t,m),h=I(r,m,o,"NULL");if(!h)return;let x=fe(r.substring(0,h),m),D=r.substring(x,o);m.forEach((P,w)=>{if(!P)return;let L=me(P.trigger||a,P.allowSpaceInQuery),M=D.match(L);if(M){let F=x+D.indexOf(M[1],M.index);S(P,M[2],w,F,F+M[1].length,r);}});},[o,s,t,S]);let E=useCallback(()=>{c({}),p(0);},[c,p]),O=useCallback((m,r)=>{f(m,r),E();},[f,E]),U=useCallback(m=>{p(m);},[p]),N=useMemo(()=>Object.values(g).reduce((m,{results:r,queryInfo:h})=>[...m,...r.map((x,D)=>jsx(Te,{id:x.id,query:h.query,index:D,suggestion:x,focused:D===i,onClick:()=>O(x,h),onMouseEnter:()=>U(D)},x.id))],[]),[g,O,U,i]);return o===null||o!==s||!b&&N.length===0?null:jsxs(Fragment,{children:[jsx(Je,{suggestions:g,clearSuggestions:E,onSelect:O,focusIndex:i,setFocusIndex:p,setScrollFocusedIntoView:d,loading:b}),jsx(Qe,{placement:"bottom-start",...e.slotProps?.popper,sx:{zIndex:2,...e.slotProps?.popper?.sx},open:!0,anchorEl:l.current,children:jsx(Ke,{elevation:8,onMouseDown:u,children:jsx(Ue,{ref:a$1,sx:{width:"300px",maxHeight:"40vh",overflow:"auto"},children:N.length>0?N:b&&jsx(ze,{justifyContent:"center",alignItems:"center",height:"40vh",children:jsx(Ve,{})})})})})]})},ye=Ge;var Je=e=>{let{suggestions:t,clearSuggestions:n,focusIndex:o,setFocusIndex:s,setScrollFocusedIntoView:l,onSelect:f,loading:u}=e;return useEffect(()=>{let a=i=>{if(u)return;let p=de(t);s((p+o+i)%p),l(!0);},g=()=>{if(u)return;let{result:i,queryInfo:p}=Object.values(t).reduce((T,{results:d,queryInfo:b})=>[...T,...d.map(y=>({result:y,queryInfo:b}))],[])[o];f(i,p);},c=i=>{switch(i.key){case"Escape":{n();break}case"ArrowDown":{a(1);break}case"ArrowUp":{a(-1);break}case"Enter":case"Tab":{g();break}default:return}i.preventDefault(),i.stopPropagation();};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[t,n,o,s,f,l,u]),null};var qe=e=>{let[t,n]=useState(e.defaultValue||""),[o,s]=useState(null),l=useRef(null),f=useRef(null),u=useRef(!1),[a,g]=useState(null),[c$1,i]=useState(null),p=r=>{if(s(r),b$1){if(typeof b$1=="function")b$1(r);else if(b$1&&"current"in b$1&&typeof b$1!="function"){let h=b$1;h.current=r;}}};useEffect(()=>{let r=o,h=()=>{!l.current||!r||(l.current.scrollLeft=r.scrollLeft,l.current.scrollTop=r.scrollTop);};return r?.addEventListener("scroll",h),()=>r?.removeEventListener("scroll",h)},[o,l]),useEffect(()=>{let r=o;!r||r.selectionStart===a&&r.selectionEnd===c$1||r.setSelectionRange(a,c$1);},[a,c$1,o]);let{value:T,dataSources:d,inputRef:b$1,...y}=e,S=T!==void 0?T:t,R=()=>{u.current||(g(null),i(null)),u.current=!1;},E=()=>{u.current=!0;},O=(r,{childIndex:h,querySequenceStart:x,querySequenceEnd:D,plainTextValue:P})=>{let w=d[h],{markup:L,displayTransform:M,appendSpaceOnAdd:F,onAdd:te}=w,k=I(S,d,x,"START");if(!G(k))return;let K=k+D-x,ne=Se(L||b,r.id,r.display),Y=(M||c)(r.id,r.display);F&&(ne+=" ",Y+=" ");let oe=x+Y.length;g(oe),i(oe);let re=V(S,k,K,ne),Re=J(re,d),Me=V(P,x,D,Y);(e.onChange||n)(re,Me,Re),te?.(r,k,K);},U=r=>{let h=r.target.value,x=a;G(x)||(x=r.target.selectionStart);let D=c$1;G(D)||(D=r.target.selectionEnd);let P=ge(S,h,x,D,r.target.selectionEnd||0,d,e.multiline);h=$(P,d);let w=r.target.selectionStart,L=r.target.selectionEnd,M=pe(S,d,r.target.selectionStart||0);if(M!==void 0&&L!==null&&L>M){let k=r.nativeEvent,K="data"in k&&typeof k.data=="string"?k.data.length:0;w=M+K,L=w;}g(w),i(L);let F=J(P,d);(e.onChange||n)(P,h,F);},N=r=>{g(r.target.selectionStart),i(r.target.selectionEnd),e.onSelect?.(r);},m={...y,value:$(S,d,e.multiline),onChange:U,onSelect:N,onBlur:R,InputProps:{sx:{overscrollBehavior:"none",color:"transparent",caretColor:r=>r.palette.text.primary}}};return jsxs(Fragment,{children:[jsx(xe,{highlighterRef:l,cursorRef:f,selectionStart:a,selectionEnd:c$1,value:S,dataSources:d,inputRef:o,multiline:m.multiline}),jsx(We,{inputRef:p,...m}),jsx(ye,{value:S,dataSources:d,selectionStart:a,selectionEnd:c$1,cursorRef:f,loading:!1,onSelect:O,onMouseDown:E,slotProps:e.slotProps?.suggestionsOverlay})]})},en=qe;
16
+ var Pe=({display:e,color:t,backgroundColor:n})=>jsx(A,{component:"span",sx:{color:t||"inherit",bgcolor:n},children:e}),ae=Pe;function G(e){return typeof e=="number"}function Le(e){let t=/^\/(.+)\/(\w+)?$/;return new RegExp(e.map(n=>{let[,o,s]=t.exec(n.toString())||[];return z(!s,`RegExp flags are not supported. Change /${o}/${s} into /${o}/`),`(${o})`}).join("|"),"g")}function ce(e){let t=0;return e.indexOf("__id__")>=0&&t++,e.indexOf("__display__")>=0&&t++,t}function le(e,t){z(t==="id"||t==="display",`Second arg must be either "id" or "display", got: "${t}"`);let n=e.indexOf("__display__"),o=e.indexOf("__id__");return z(n>=0||o>=0,`The markup '${e}' does not contain at least one of the placeholders '__id__' or '__display__'`),n>=0&&o>=0?t==="id"&&o<=n||t==="display"&&n<=o?0:1:0}function H(e,t,n,o,s){let l=Le(t.map(i=>i.regex?Ie(i.regex,i.markup||b):ke(i.markup||b))),f=2,u=t.map(({markup:i})=>{let p=f;return f+=ce(i||b)+1,p}),a,g=0,c$1=0;for(;(a=l.exec(e))!==null;){let i=u.find(O=>!!a?.[O]);if(i===void 0)continue;let p=u.indexOf(i),{markup:T,displayTransform:d}=t[p],b$1=i+le(T||b,"id"),y=i+le(T||b,"display"),S=a[b$1],M=d?d(S,a[y]):c(S,a[y],s),E=e.substring(g,a.index);o?.(E,g,c$1),c$1+=E.length,n(a[0],a.index,c$1,S,M,p,g),c$1+=M.length,g=l.lastIndex;}g<e.length&&o?.(e.substring(g),g,c$1);}function $(e,t,n){let o="";return H(e,t,(s,l,f,u,a)=>{o+=a;},s=>{o+=s;},n),o}var Ie=(e,t)=>{let n=(new RegExp(e.toString()+"|").exec("")?.length||0)-1,o=ce(t);return z(n===o,`Number of capturing groups in RegExp ${e.toString()} (${n}) does not match the number of placeholders in the markup '${t}' (${o})`),e},ke=e=>{let t=Q(e),n=e[e.indexOf("__display__")+11],o=e[e.indexOf("__id__")+6];return new RegExp(t.replace("__display__",`([^${Q(n||"")}]+?)`).replace("__id__",`([^${Q(o||"")}]+?)`))},Q=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");function ge(e,t,n,o,s,l,f){let u=$(e,l,f),a=u.length-t.length;n===null&&(n=s+a),o===null&&(o=n),n===o&&o===s&&u.length===t.length&&(n=n-1);let g=t.slice(n,s),c=Math.min(n,s),i=o;n===s&&(i=Math.max(o,n+a));let p=I(e,l,c,"START"),T=I(e,l,i,"END"),d=I(e,l,c,"NULL"),b=I(e,l,i,"NULL"),y=d===null||b===null,S=V(e,p||0,T||0,g);if(!y){let M=$(S,l,f);if(M!==t){for(c=0;t[c]===M[c];)c++;g=t.slice(c,s),i=u.lastIndexOf(t.substring(s)),p=I(e,l,c,"START"),T=I(e,l,i,"END"),S=V(e,p||0,T||0,g);}}return S}function I(e,t,n,o="START"){if(typeof n!="number")return n;let s;return H(e,t,(u,a,g,c,i)=>{s===void 0&&g+i.length>n&&(o==="NULL"?s=null:s=a+(o==="END"?u.length:0));},(u,a,g)=>{s===void 0&&g+u.length>=n&&(s=a+n-g);}),s===void 0?e.length:s}function V(e,t,n,o){return e.substring(0,t)+o+e.substring(n)}function pe(e,t,n){let o;return H(e,t,(l,f,u,a,g)=>{u<=n&&u+g.length>n&&(o=u);}),o}function J(e,t){let n=[];return H(e,t,(o,s,l,f,u,a)=>{n.push({id:f,display:u,dataSourceIndex:a,index:s,plainTextIndex:l});}),n}function de(e){return Object.values(e).reduce((t,{results:n})=>t+n.length,0)}function fe(e,t){let n=J(e,t),o=n[n.length-1];return o?o.plainTextIndex+o.display.length:0}function me(e,t){if(e instanceof RegExp)return e;{let n=Q(e);return new RegExp(`(?:^|\\s)(${n}([^${t?"":"\\s"}${n}]*))$`)}}function he(e,t){return e instanceof Array?async function(n){let o=[];for(let s=0,l=e.length;s<l;++s){let f=e[s].display||e[s].id;Ce(f,n,t)>=0&&o.push(e[s]);}return o}:e}var Ce=(e,t,n)=>n?ue(e).indexOf(ue(t)):e.toLowerCase().indexOf(t.toLowerCase()),Oe=e=>{let t=e;return a$1.forEach(n=>{t=t.replace(n.letters,n.base);}),t},ue=e=>Oe(e).toLowerCase(),Se=(e,t,n)=>e.replace("__id__",t).replace("__display__",n||t);function ve(e){let t={x:0,y:0,width:0,height:0};if(!e)return t;let n=getComputedStyle(e);return t.width=e.clientWidth,t.width-=parseFloat(n.paddingLeft),t.width-=parseFloat(n.paddingRight),t.height=e.clientHeight,t.height-=parseFloat(n.paddingTop),t.height-=parseFloat(n.paddingBottom),t.x=e.offsetLeft,t.x+=parseFloat(n.paddingLeft),t.x+=parseFloat(n.borderLeft),t.y=e.offsetTop,t.y+=parseFloat(n.paddingTop),t.y+=parseFloat(n.borderTop),t}var Be=e=>{let{highlighterRef:t,cursorRef:n,selectionEnd:o,selectionStart:s,value:l,dataSources:f,multiline:u}=e,a=[];H(l,f,(p,T,d,b,y,S)=>{let M=f[S];a.push(jsx(ae,{display:y,color:M?.color,backgroundColor:M?.backgroundColor},`${b}-${T}`));},(p,T,d)=>{if(u||(p=p.replaceAll(`
17
+ `,"")),!(s&&s===o&&s>=d&&s<=d+p.length))a.push(jsx(A,{component:"span",sx:{color:y=>y.palette.text.primary},children:p},`${T}-${d}`));else {let y=s-d,S=p.substring(0,y),M=p.substring(y);S&&a.push(jsx(A,{component:"span",sx:{color:E=>E.palette.text.primary},children:S},`${T}-${d}-precursor`)),a.push(jsx(A,{ref:n,component:"span",visibility:"hidden"},"cursor")),M&&a.push(jsx(A,{component:"span",sx:{color:E=>E.palette.text.primary},children:M},`${T}-${d}-postcursor`));}},u);let i=ve(e.inputRef);return jsx($e,{container:()=>e.inputRef?.parentElement||null,children:jsxs(A,{ref:t,sx:{position:"absolute",top:`${i.y}px`,left:`${i.x}px`,width:`${i.width}px`,height:`${i.height}px`,whiteSpace:u?"pre-wrap":"pre",overflow:"hidden",overscrollBehavior:"none",zIndex:1,pointerEvents:"none"},children:[a,jsx(A,{component:"span",visibility:"hidden",children:" "})]})})},xe=Be;var He=e=>{let{renderSuggestion:t,suggestion:n,focused:o,onClick:s,onMouseEnter:l}=e;if(t)return t(e);let f=c(n.id,n.display);return jsx(_e,{role:"option","aria-selected":o,selected:o,onClick:s,onMouseEnter:l,children:f})},Te=He;var Ge=e=>{let{value:t,dataSources:n,selectionStart:o,selectionEnd:s,cursorRef:l,onSelect:f,onMouseDown:u}=e,a$1=useRef(null),[g,c]=useState({}),[i,p]=useState(0),[T,d]=useState(!1),[b,y]=useState(!1);useEffect(()=>{let m=a$1.current;if(!T||!m||m.children.length===0)return;let r=m.scrollTop,{top:h,bottom:x}=m.children[i].getBoundingClientRect(),{top:D}=m.getBoundingClientRect();h=h-D+r,x=x-D+r,h<r?m.scrollTop=h:x>m.offsetHeight+r&&(m.scrollTop=x-m.offsetHeight),d(!1);},[T,a$1,i,d]);let S=useCallback(async(m,r,h,x,D,P)=>{try{let w=he(m.data,m.ignoreAccents);y(!0);let L=await w(r);c(R=>({...R,[h]:{queryInfo:{childIndex:h,query:r,querySequenceStart:x,querySequenceEnd:D,plainTextValue:P},results:L}}));}catch(w){console.error(w);}finally{y(!1);}},[]),M=useRef(n);useEffect(()=>{M.current=n;},[n]),useEffect(()=>{if(c({}),!o||o!==s)return;let m=M.current,r=$(t,m),h=I(r,m,o,"NULL");if(!h)return;let x=fe(r.substring(0,h),m),D=r.substring(x,o);m.forEach((P,w)=>{if(!P)return;let L=me(P.trigger||a,P.allowSpaceInQuery),R=D.match(L);if(R){let F=x+D.indexOf(R[1],R.index);S(P,R[2],w,F,F+R[1].length,r);}});},[o,s,t,S]);let E=useCallback(()=>{c({}),p(0);},[c,p]),O=useCallback((m,r)=>{f(m,r),E();},[f,E]),U=useCallback(m=>{p(m);},[p]),N=useMemo(()=>Object.values(g).reduce((m,{results:r,queryInfo:h})=>[...m,...r.map((x,D)=>jsx(Te,{id:x.id,query:h.query,index:D,suggestion:x,focused:D===i,onClick:()=>O(x,h),onMouseEnter:()=>U(D)},x.id))],[]),[g,O,U,i]);return o===null||o!==s||!b&&N.length===0?null:jsxs(Fragment,{children:[jsx(Je,{suggestions:g,clearSuggestions:E,onSelect:O,focusIndex:i,setFocusIndex:p,setScrollFocusedIntoView:d,loading:b}),jsx(Qe,{placement:"bottom-start",...e.slotProps?.popper,sx:{zIndex:2,...e.slotProps?.popper?.sx},open:!0,anchorEl:l.current,children:jsx(Ke,{elevation:8,onMouseDown:u,children:jsx(Ue,{ref:a$1,sx:{width:"300px",maxHeight:"40vh",overflow:"auto"},children:N.length>0?N:b&&jsx(ze,{justifyContent:"center",alignItems:"center",height:"40vh",children:jsx(Ve,{})})})})})]})},ye=Ge;var Je=e=>{let{suggestions:t,clearSuggestions:n,focusIndex:o,setFocusIndex:s,setScrollFocusedIntoView:l,onSelect:f,loading:u}=e;return useEffect(()=>{let a=i=>{if(u)return;let p=de(t);s((p+o+i)%p),l(!0);},g=()=>{if(u)return;let{result:i,queryInfo:p}=Object.values(t).reduce((T,{results:d,queryInfo:b})=>[...T,...d.map(y=>({result:y,queryInfo:b}))],[])[o];f(i,p);},c=i=>{switch(i.key){case"Escape":{n();break}case"ArrowDown":{a(1);break}case"ArrowUp":{a(-1);break}case"Enter":case"Tab":{g();break}default:return}i.preventDefault(),i.stopPropagation();};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[t,n,o,s,f,l,u]),null};var qe=e=>{let[t,n]=useState(e.defaultValue||""),[o,s]=useState(null),l=useRef(null),f=useRef(null),u=useRef(!1),[a,g]=useState(null),[c$1,i]=useState(null),p=r=>{if(s(r),b$1){if(typeof b$1=="function")b$1(r);else if(b$1&&"current"in b$1&&typeof b$1!="function"){let h=b$1;h.current=r;}}};useEffect(()=>{let r=o,h=()=>{!l.current||!r||(l.current.scrollLeft=r.scrollLeft,l.current.scrollTop=r.scrollTop);};return r?.addEventListener("scroll",h),()=>r?.removeEventListener("scroll",h)},[o,l]),useEffect(()=>{let r=o;!r||r.selectionStart===a&&r.selectionEnd===c$1||r.setSelectionRange(a,c$1);},[a,c$1,o]);let{value:T,dataSources:d,inputRef:b$1,...y}=e,S=T!==void 0?T:t,M=()=>{u.current||(g(null),i(null)),u.current=!1;},E=()=>{u.current=!0;},O=(r,{childIndex:h,querySequenceStart:x,querySequenceEnd:D,plainTextValue:P})=>{let w=d[h],{markup:L,displayTransform:R,appendSpaceOnAdd:F,onAdd:te}=w,k=I(S,d,x,"START");if(!G(k))return;let K=k+D-x,ne=Se(L||b,r.id,r.display),Y=(R||c)(r.id,r.display);F&&(ne+=" ",Y+=" ");let oe=x+Y.length;g(oe),i(oe);let re=V(S,k,K,ne),Me=J(re,d),Re=V(P,x,D,Y);(e.onChange||n)(re,Re,Me),te?.(r,k,K);},U=r=>{let h=r.target.value,x=a;G(x)||(x=r.target.selectionStart);let D=c$1;G(D)||(D=r.target.selectionEnd);let P=ge(S,h,x,D,r.target.selectionEnd||0,d,e.multiline);h=$(P,d);let w=r.target.selectionStart,L=r.target.selectionEnd,R=pe(S,d,r.target.selectionStart||0);if(R!==void 0&&L!==null&&L>R){let k=r.nativeEvent,K="data"in k&&typeof k.data=="string"?k.data.length:0;w=R+K,L=w;}g(w),i(L);let F=J(P,d);(e.onChange||n)(P,h,F);},N=r=>{g(r.target.selectionStart),i(r.target.selectionEnd),e.onSelect?.(r);},m={...y,value:$(S,d,e.multiline),onChange:U,onSelect:N,onBlur:M,InputProps:{sx:{overscrollBehavior:"none",color:"transparent",caretColor:r=>r.palette.text.primary}}};return jsxs(Fragment,{children:[jsx(xe,{highlighterRef:l,cursorRef:f,selectionStart:a,selectionEnd:c$1,value:S,dataSources:d,inputRef:o,multiline:m.multiline}),jsx(We,{inputRef:p,...m}),jsx(ye,{value:S,dataSources:d,selectionStart:a,selectionEnd:c$1,cursorRef:f,loading:!1,onSelect:O,onMouseDown:E,slotProps:e.slotProps?.suggestionsOverlay})]})},en=qe;
18
18
 
19
19
  export { en as default };
20
20
  //# sourceMappingURL=out.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/FieldMentions/index.tsx","../../../src/components/FieldMentions/Highlighter/index.tsx","../../../src/components/FieldMentions/Mention/index.tsx","../../../src/components/FieldMentions/utils.ts","../../../src/components/FieldMentions/SuggestionOverlay/index.tsx","../../../src/components/FieldMentions/SuggestionOverlay/Suggestion/index.tsx"],"names":["useEffect","useRef","useState","TextField","Box","Portal","jsx","Mention","display","color","backgroundColor","Mention_default","invariant","isNumber","val","combineRegExps","regExps","serializedRegexParser","regex","regexString","regexFlags","countPlaceholders","markup","count","findIndexOfCapturingGroup","parameterName","indexDisplay","indexId","iterateMentionsMarkup","value","dataSources","markupProcessor","plainTextProcessor","multiline","ds","verifyCapturingGroups","DefaultMarkupTemplate","markupToRegex","accOffset","captureGroupOffsets","result","match","start","currentPlainTextIndex","offset","o","mentionChildIndex","displayTransform","idPos","displayPos","id","DefaultDisplayTransform","substr","getPlainText","_match","_index","_plainTextIndex","_id","plainText","numberOfGroups","numberOfPlaceholders","escapedMarkup","escapeRegex","charAfterDisplay","charAfterId","str","applyChangeToValue","plainTextValue","selectionStartBefore","selectionEndBefore","selectionEndAfter","oldPlainTextValue","lengthDelta","insert","spliceStart","spliceEnd","mappedSpliceStart","mapPlainTextIndex","mappedSpliceEnd","controlSpliceStart","controlSpliceEnd","willRemoveMention","newValue","spliceString","controlPlainTextValue","indexInPlainText","inMarkupCorrection","index","mentionPlainTextIndex","substrPlainTextIndex","end","findStartOfMentionInPlainText","_markup","getMentions","mentions","plainTextIndex","childIndex","countSuggestions","suggestions","acc","results","getEndOfLastMention","lastMention","makeTriggerRegex","trigger","allowSpaceInQuery","escapedTriggerChar","getDataProvider","data","ignoreAccents","query","i","getSubstringIndex","normalizeString","removeAccents","formattedStr","diacritics_default","letterDiacritics","makeMentionsMarkup","jsxs","getHighlighterRect","input","rec","computedStyle","Highlighter","props","highlighterRef","cursorRef","selectionEnd","selectionStart","components","dataSourceIndex","dataSource","text","indexInPlaintext","theme","splitIndex","startText","endText","rect","Highlighter_default","useCallback","useMemo","CircularProgress","List","Paper","Popper","Stack","ListItemButton","Suggestion","renderSuggestion","suggestion","focused","onClick","onMouseEnter","Suggestion_default","Fragment","SuggestionsOverlay","onSelect","onMouseDown","ulElement","setSuggestions","focusIndex","setFocusIndex","scrollFocusedIntoView","setScrollFocusedIntoView","loading","setLoading","current","scrollTop","top","bottom","topContainer","queryDataSource","source","sourceIndex","querySequenceStart","querySequenceEnd","fullText","dataProvider","s","err","dataSourcesRef","currentDataSources","positionInValue","substringStartIndex","substring","DefaultTrigger","clearSuggestions","handleSelect","queryInfo","handleMouseEnter","renderedSuggestions","accResults","KeyboardListener","SuggestionOverlay_default","shiftFocus","delta","suggestionsCount","selectFocused","handleKeyDown","ev","FieldMentions","stateValue","setStateValue","inputRef","setInputRef","suggestionsMouseDown","setSelectionStart","setSelectionEnd","handleInputRef","ref","externalInputRef","typedRef","onScroll","others","finalValue","handleBlur","handleSuggestionsMouseDown","addMention","appendSpaceOnAdd","onAdd","displayValue","newCaretPosition","newPlainTextValue","handleChange","selectionStartAfter","startOfMention","nativeEvent","dataLength","inputProps","FieldMentions_default"],"mappings":"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","sourcesContent":["import React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { Theme } from '@mui/material/styles';\nimport TextField, { TextFieldProps } from '@mui/material/TextField';\n\nimport {\n BaseSuggestionData,\n DefaultDisplayTransform,\n DefaultMarkupTemplate,\n SuggestionData,\n SuggestionsQueryInfo,\n} from 'types/fieldMentions';\n\nimport Highlighter from './Highlighter';\nimport { FieldMentionsBaseProps, FieldMentionsProps } from './props';\nimport SuggestionsOverlay from './SuggestionOverlay';\nimport {\n applyChangeToValue,\n findStartOfMentionInPlainText,\n getMentions,\n getPlainText,\n isNumber,\n makeMentionsMarkup,\n mapPlainTextIndex,\n spliceString,\n} from './utils';\n\nconst FieldMentions = <T extends BaseSuggestionData>(\n props: FieldMentionsProps<T>,\n): ReactNode => {\n const [stateValue, setStateValue] = useState<string>(\n props.defaultValue || '',\n );\n\n const [inputRef, setInputRef] = useState<\n HTMLInputElement | HTMLTextAreaElement | null\n >(null);\n const highlighterRef = useRef<HTMLDivElement>(null);\n const cursorRef = useRef<HTMLSpanElement>(null);\n const suggestionsMouseDown = useRef(false);\n\n const [selectionStart, setSelectionStart] = useState<number | null>(null);\n const [selectionEnd, setSelectionEnd] = useState<number | null>(null);\n\n const handleInputRef = (\n ref: HTMLInputElement | HTMLTextAreaElement | null,\n ) => {\n setInputRef(ref);\n\n if (externalInputRef) {\n if (typeof externalInputRef === 'function') {\n externalInputRef(ref);\n } else if (\n externalInputRef &&\n 'current' in externalInputRef &&\n typeof externalInputRef !== 'function'\n ) {\n const typedRef = externalInputRef as React.RefObject<\n HTMLInputElement | HTMLTextAreaElement | null\n >;\n typedRef.current = ref;\n }\n }\n };\n\n useEffect(() => {\n const input = inputRef;\n const onScroll = () => {\n if (!highlighterRef.current || !input) {\n return;\n }\n highlighterRef.current.scrollLeft = input.scrollLeft;\n highlighterRef.current.scrollTop = input.scrollTop;\n };\n\n input?.addEventListener('scroll', onScroll);\n return () => input?.removeEventListener('scroll', onScroll);\n }, [inputRef, highlighterRef]);\n\n useEffect(() => {\n const input = inputRef;\n if (\n !input ||\n (input.selectionStart === selectionStart &&\n input.selectionEnd === selectionEnd)\n ) {\n return;\n }\n input.setSelectionRange(selectionStart, selectionEnd);\n }, [selectionStart, selectionEnd, inputRef]);\n\n const { value, dataSources, inputRef: externalInputRef, ...others } = props;\n const finalValue = value !== undefined ? value : stateValue;\n\n const handleBlur = () => {\n if (!suggestionsMouseDown.current) {\n setSelectionStart(null);\n setSelectionEnd(null);\n }\n suggestionsMouseDown.current = false;\n };\n\n const handleSuggestionsMouseDown = () => {\n suggestionsMouseDown.current = true;\n };\n\n const addMention = (\n suggestion: SuggestionData<T>,\n {\n childIndex,\n querySequenceStart,\n querySequenceEnd,\n plainTextValue,\n }: SuggestionsQueryInfo,\n ) => {\n const dataSource = dataSources[childIndex];\n\n const { markup, displayTransform, appendSpaceOnAdd, onAdd } = dataSource;\n\n const start = mapPlainTextIndex(\n finalValue,\n dataSources,\n querySequenceStart,\n 'START',\n );\n if (!isNumber(start)) {\n return;\n }\n\n const end = start + querySequenceEnd - querySequenceStart;\n\n let insert = makeMentionsMarkup(\n markup || DefaultMarkupTemplate,\n suggestion.id,\n suggestion.display,\n );\n let displayValue = (displayTransform || DefaultDisplayTransform)(\n suggestion.id,\n suggestion.display,\n );\n\n if (appendSpaceOnAdd) {\n insert += ' ';\n displayValue += ' ';\n }\n\n const newCaretPosition = querySequenceStart + displayValue.length;\n setSelectionStart(newCaretPosition);\n setSelectionEnd(newCaretPosition);\n\n const newValue = spliceString(finalValue, start, end, insert);\n const mentions = getMentions(newValue, dataSources);\n const newPlainTextValue = spliceString(\n plainTextValue,\n querySequenceStart,\n querySequenceEnd,\n displayValue,\n );\n\n const onChange = props.onChange || setStateValue;\n onChange(newValue, newPlainTextValue, mentions);\n onAdd?.(suggestion, start, end);\n };\n\n const handleChange = (ev: React.ChangeEvent<HTMLInputElement>) => {\n let newPlainTextValue = ev.target.value;\n\n let selectionStartBefore = selectionStart;\n if (!isNumber(selectionStartBefore)) {\n selectionStartBefore = ev.target.selectionStart;\n }\n\n let selectionEndBefore = selectionEnd;\n if (!isNumber(selectionEndBefore)) {\n selectionEndBefore = ev.target.selectionEnd;\n }\n\n const newValue = applyChangeToValue(\n finalValue,\n newPlainTextValue,\n selectionStartBefore,\n selectionEndBefore,\n ev.target.selectionEnd || 0,\n dataSources,\n props.multiline,\n );\n\n newPlainTextValue = getPlainText(newValue, dataSources);\n\n let selectionStartAfter = ev.target.selectionStart;\n let selectionEndAfter = ev.target.selectionEnd;\n\n const startOfMention = findStartOfMentionInPlainText(\n finalValue,\n dataSources,\n ev.target.selectionStart || 0,\n );\n if (\n startOfMention !== undefined &&\n selectionEndAfter !== null &&\n selectionEndAfter > startOfMention\n ) {\n const nativeEvent = ev.nativeEvent;\n const dataLength =\n 'data' in nativeEvent && typeof nativeEvent.data === 'string'\n ? nativeEvent.data.length\n : 0;\n selectionStartAfter = startOfMention + dataLength;\n selectionEndAfter = selectionStartAfter;\n }\n\n setSelectionStart(selectionStartAfter);\n setSelectionEnd(selectionEndAfter);\n\n const mentions = getMentions(newValue, dataSources);\n\n const onChange = props.onChange || setStateValue;\n onChange(newValue, newPlainTextValue, mentions);\n };\n\n const handleSelect = (ev: React.ChangeEvent<HTMLInputElement>) => {\n setSelectionStart(ev.target.selectionStart);\n setSelectionEnd(ev.target.selectionEnd);\n props.onSelect?.(ev);\n };\n\n const inputProps: TextFieldProps = {\n ...others,\n value: getPlainText(finalValue, dataSources, props.multiline),\n onChange: handleChange,\n onSelect: handleSelect,\n onBlur: handleBlur,\n InputProps: {\n sx: {\n overscrollBehavior: 'none',\n color: 'transparent',\n caretColor: (theme: Theme) => theme.palette.text.primary,\n },\n },\n };\n\n return (\n <>\n <Highlighter\n highlighterRef={highlighterRef}\n cursorRef={cursorRef}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n value={finalValue}\n dataSources={dataSources}\n inputRef={inputRef}\n multiline={inputProps.multiline}\n />\n <TextField inputRef={handleInputRef} {...inputProps} />\n <SuggestionsOverlay\n value={finalValue}\n dataSources={dataSources}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n cursorRef={cursorRef}\n loading={false}\n onSelect={addMention}\n onMouseDown={handleSuggestionsMouseDown}\n slotProps={props.slotProps?.suggestionsOverlay}\n />\n </>\n );\n};\n\nexport default FieldMentions;\nexport type { FieldMentionsBaseProps, FieldMentionsProps };\n","import { type JSX, ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Portal from '@mui/material/Portal';\n\nimport { BaseSuggestionData } from 'types/fieldMentions';\n\nimport Mention from '../Mention';\nimport { iterateMentionsMarkup } from '../utils';\n\nimport { HighlighterProps } from './props';\n\nfunction getHighlighterRect(\n input?: HTMLInputElement | HTMLTextAreaElement | null,\n) {\n const rec = { x: 0, y: 0, width: 0, height: 0 };\n if (!input) {\n return rec;\n }\n\n const computedStyle = getComputedStyle(input);\n rec.width = input.clientWidth;\n rec.width -= parseFloat(computedStyle.paddingLeft);\n rec.width -= parseFloat(computedStyle.paddingRight);\n rec.height = input.clientHeight;\n rec.height -= parseFloat(computedStyle.paddingTop);\n rec.height -= parseFloat(computedStyle.paddingBottom);\n\n rec.x = input.offsetLeft;\n rec.x += parseFloat(computedStyle.paddingLeft);\n rec.x += parseFloat(computedStyle.borderLeft);\n rec.y = input.offsetTop;\n rec.y += parseFloat(computedStyle.paddingTop);\n rec.y += parseFloat(computedStyle.borderTop);\n\n return rec;\n}\n\nconst Highlighter = <T extends BaseSuggestionData>(\n props: HighlighterProps<T>,\n): ReactNode => {\n const {\n highlighterRef,\n cursorRef,\n selectionEnd,\n selectionStart,\n value,\n dataSources,\n multiline,\n } = props;\n const components: JSX.Element[] = [];\n\n const handleMention = (\n _markup: string,\n index: number,\n _plainTextIndex: number,\n id: string,\n display: string,\n dataSourceIndex: number,\n ) => {\n const dataSource = dataSources[dataSourceIndex];\n components.push(\n <Mention\n key={`${id}-${index}`}\n display={display}\n color={dataSource?.color}\n backgroundColor={dataSource?.backgroundColor}\n />,\n );\n };\n\n const handlePlainText = (\n text: string,\n index: number,\n indexInPlaintext: number,\n ) => {\n if (!multiline) {\n text = text.replaceAll('\\n', '');\n }\n\n const renderCursor =\n selectionStart &&\n selectionStart === selectionEnd &&\n selectionStart >= indexInPlaintext &&\n selectionStart <= indexInPlaintext + text.length;\n\n if (!renderCursor) {\n components.push(\n <Box\n key={`${index}-${indexInPlaintext}`}\n component=\"span\"\n sx={{ color: theme => theme.palette.text.primary }}\n >\n {text}\n </Box>,\n );\n } else {\n const splitIndex = selectionStart - indexInPlaintext;\n const startText = text.substring(0, splitIndex);\n const endText = text.substring(splitIndex);\n\n if (startText) {\n components.push(\n <Box\n key={`${index}-${indexInPlaintext}-precursor`}\n component=\"span\"\n sx={{ color: theme => theme.palette.text.primary }}\n >\n {startText}\n </Box>,\n );\n }\n\n components.push(\n <Box\n key=\"cursor\"\n ref={cursorRef}\n component=\"span\"\n visibility=\"hidden\"\n ></Box>,\n );\n\n if (endText) {\n components.push(\n <Box\n key={`${index}-${indexInPlaintext}-postcursor`}\n component=\"span\"\n sx={{ color: theme => theme.palette.text.primary }}\n >\n {endText}\n </Box>,\n );\n }\n }\n };\n\n iterateMentionsMarkup(\n value,\n dataSources,\n handleMention,\n handlePlainText,\n multiline,\n );\n\n const rect = getHighlighterRect(props.inputRef);\n\n return (\n <Portal container={() => props.inputRef?.parentElement || null}>\n <Box\n ref={highlighterRef}\n sx={{\n position: 'absolute',\n top: `${rect.y}px`,\n left: `${rect.x}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n whiteSpace: multiline ? 'pre-wrap' : 'pre',\n overflow: 'hidden',\n overscrollBehavior: 'none',\n zIndex: 1,\n pointerEvents: 'none',\n }}\n >\n {components}\n <Box component=\"span\" visibility=\"hidden\">\n {' '}\n </Box>\n </Box>\n </Portal>\n );\n};\n\nexport default Highlighter;\n","import Box from '@mui/material/Box';\n\nimport { MentionProps } from './props';\n\nconst Mention = ({ display, color, backgroundColor }: MentionProps) => {\n return (\n <Box\n component=\"span\"\n sx={{\n color: color || 'inherit',\n bgcolor: backgroundColor,\n }}\n >\n {display}\n </Box>\n );\n};\n\nexport default Mention;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport invariant from 'invariant';\n\nimport {\n BaseSuggestionData,\n DefaultDisplayTransform,\n DefaultMarkupTemplate,\n MentionData,\n SuggestionData,\n SuggestionDataSource,\n SuggestionsMap,\n} from 'types/fieldMentions';\nimport lettersDiacritics from 'utils/diacritics';\n\nenum Placeholders {\n id = '__id__',\n display = '__display__',\n}\n\nexport function isNumber(val: any): val is number {\n return typeof val === 'number';\n}\n\nfunction combineRegExps(regExps: RegExp[]): RegExp {\n const serializedRegexParser = /^\\/(.+)\\/(\\w+)?$/;\n return new RegExp(\n regExps\n .map(regex => {\n const [, regexString, regexFlags] =\n serializedRegexParser.exec(regex.toString()) || [];\n\n invariant(\n !regexFlags,\n `RegExp flags are not supported. Change /${regexString}/${regexFlags} into /${regexString}/`,\n );\n\n return `(${regexString})`;\n })\n .join('|'),\n 'g',\n );\n}\n\nfunction countPlaceholders(markup: string): number {\n let count = 0;\n if (markup.indexOf(Placeholders.id) >= 0) count++;\n if (markup.indexOf(Placeholders.display) >= 0) count++;\n return count;\n}\n\nfunction findIndexOfCapturingGroup(\n markup: string,\n parameterName: 'id' | 'display',\n): number {\n invariant(\n parameterName === 'id' || parameterName === 'display',\n `Second arg must be either \"id\" or \"display\", got: \"${parameterName}\"`,\n );\n\n const indexDisplay = markup.indexOf(Placeholders.display);\n const indexId = markup.indexOf(Placeholders.id);\n\n invariant(\n indexDisplay >= 0 || indexId >= 0,\n `The markup '${markup}' does not contain at least one of the placeholders '__id__' or '__display__'`,\n );\n\n if (indexDisplay >= 0 && indexId >= 0) {\n return (parameterName === 'id' && indexId <= indexDisplay) ||\n (parameterName === 'display' && indexDisplay <= indexId)\n ? 0\n : 1;\n }\n\n return 0;\n}\n\nexport function iterateMentionsMarkup<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n markupProcessor: (\n match: string,\n matchIndex: number,\n plainTextIndex: number,\n id: string,\n display: string,\n mentionIndex: number,\n start: number,\n ) => void,\n plainTextProcessor?: (\n value: string,\n start: number,\n currentIndex: number,\n ) => void,\n multiline?: boolean,\n) {\n const regex = combineRegExps(\n dataSources.map(ds =>\n ds.regex\n ? verifyCapturingGroups(ds.regex, ds.markup || DefaultMarkupTemplate)\n : markupToRegex(ds.markup || DefaultMarkupTemplate),\n ),\n );\n\n let accOffset = 2;\n const captureGroupOffsets = dataSources.map(({ markup }) => {\n const result = accOffset;\n accOffset += countPlaceholders(markup || DefaultMarkupTemplate) + 1;\n return result;\n });\n\n let match: RegExpExecArray | null;\n let start = 0;\n let currentPlainTextIndex = 0;\n\n while ((match = regex.exec(value)) !== null) {\n const offset = captureGroupOffsets.find(o => !!match?.[o]);\n if (offset === undefined) {\n continue;\n }\n\n const mentionChildIndex = captureGroupOffsets.indexOf(offset);\n const { markup, displayTransform } = dataSources[mentionChildIndex];\n const idPos =\n offset + findIndexOfCapturingGroup(markup || DefaultMarkupTemplate, 'id');\n const displayPos =\n offset +\n findIndexOfCapturingGroup(markup || DefaultMarkupTemplate, 'display');\n\n const id = match[idPos];\n const display = displayTransform\n ? displayTransform(id, match[displayPos])\n : DefaultDisplayTransform(id, match[displayPos], multiline);\n\n const substr = value.substring(start, match.index);\n plainTextProcessor?.(substr, start, currentPlainTextIndex);\n currentPlainTextIndex += substr.length;\n\n markupProcessor(\n match[0],\n match.index,\n currentPlainTextIndex,\n id,\n display,\n mentionChildIndex,\n start,\n );\n currentPlainTextIndex += display.length;\n start = regex.lastIndex;\n }\n\n if (start < value.length) {\n plainTextProcessor?.(value.substring(start), start, currentPlainTextIndex);\n }\n}\n\nexport function getPlainText<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n multiline?: boolean,\n): string {\n let result = '';\n iterateMentionsMarkup(\n value,\n dataSources,\n (_match, _index, _plainTextIndex, _id, display) => {\n result += display;\n },\n plainText => {\n result += plainText;\n },\n multiline,\n );\n return result;\n}\n\nconst verifyCapturingGroups = (regex: RegExp, markup: string) => {\n const numberOfGroups =\n (new RegExp(regex.toString() + '|').exec('')?.length || 0) - 1;\n const numberOfPlaceholders = countPlaceholders(markup);\n\n invariant(\n numberOfGroups === numberOfPlaceholders,\n `Number of capturing groups in RegExp ${regex.toString()} (${numberOfGroups}) does not match the number of placeholders in the markup '${markup}' (${numberOfPlaceholders})`,\n );\n\n return regex;\n};\n\nconst markupToRegex = (markup: string) => {\n const escapedMarkup = escapeRegex(markup);\n\n const charAfterDisplay =\n markup[markup.indexOf(Placeholders.display) + Placeholders.display.length];\n const charAfterId =\n markup[markup.indexOf(Placeholders.id) + Placeholders.id.length];\n\n return new RegExp(\n escapedMarkup\n .replace(\n Placeholders.display,\n `([^${escapeRegex(charAfterDisplay || '')}]+?)`,\n )\n .replace(Placeholders.id, `([^${escapeRegex(charAfterId || '')}]+?)`),\n );\n};\n\nconst escapeRegex = (str: string) =>\n str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n\nexport function applyChangeToValue<T extends BaseSuggestionData>(\n value: string,\n plainTextValue: string,\n selectionStartBefore: number | null,\n selectionEndBefore: number | null,\n selectionEndAfter: number,\n dataSources: SuggestionDataSource<T>[],\n multiline?: boolean,\n) {\n const oldPlainTextValue = getPlainText(value, dataSources, multiline);\n\n const lengthDelta = oldPlainTextValue.length - plainTextValue.length;\n if (selectionStartBefore === null) {\n selectionStartBefore = selectionEndAfter + lengthDelta;\n }\n\n if (selectionEndBefore === null) {\n selectionEndBefore = selectionStartBefore;\n }\n\n if (\n selectionStartBefore === selectionEndBefore &&\n selectionEndBefore === selectionEndAfter &&\n oldPlainTextValue.length === plainTextValue.length\n ) {\n selectionStartBefore = selectionStartBefore - 1;\n }\n\n let insert = plainTextValue.slice(selectionStartBefore, selectionEndAfter);\n\n let spliceStart = Math.min(selectionStartBefore, selectionEndAfter);\n\n let spliceEnd = selectionEndBefore;\n if (selectionStartBefore === selectionEndAfter) {\n spliceEnd = Math.max(\n selectionEndBefore,\n selectionStartBefore + lengthDelta,\n );\n }\n\n let mappedSpliceStart = mapPlainTextIndex(\n value,\n dataSources,\n spliceStart,\n 'START',\n );\n let mappedSpliceEnd = mapPlainTextIndex(value, dataSources, spliceEnd, 'END');\n\n const controlSpliceStart = mapPlainTextIndex(\n value,\n dataSources,\n spliceStart,\n 'NULL',\n );\n const controlSpliceEnd = mapPlainTextIndex(\n value,\n dataSources,\n spliceEnd,\n 'NULL',\n );\n const willRemoveMention =\n controlSpliceStart === null || controlSpliceEnd === null;\n\n let newValue = spliceString(\n value,\n mappedSpliceStart || 0,\n mappedSpliceEnd || 0,\n insert,\n );\n\n if (!willRemoveMention) {\n const controlPlainTextValue = getPlainText(\n newValue,\n dataSources,\n multiline,\n );\n if (controlPlainTextValue !== plainTextValue) {\n spliceStart = 0;\n while (plainTextValue[spliceStart] === controlPlainTextValue[spliceStart])\n spliceStart++;\n\n insert = plainTextValue.slice(spliceStart, selectionEndAfter);\n\n spliceEnd = oldPlainTextValue.lastIndexOf(\n plainTextValue.substring(selectionEndAfter),\n );\n\n mappedSpliceStart = mapPlainTextIndex(\n value,\n dataSources,\n spliceStart,\n 'START',\n );\n mappedSpliceEnd = mapPlainTextIndex(value, dataSources, spliceEnd, 'END');\n newValue = spliceString(\n value,\n mappedSpliceStart || 0,\n mappedSpliceEnd || 0,\n insert,\n );\n }\n }\n\n return newValue;\n}\n\nexport function mapPlainTextIndex<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n indexInPlainText: number,\n inMarkupCorrection: 'START' | 'END' | 'NULL' = 'START',\n): number | null | undefined {\n if (typeof indexInPlainText !== 'number') {\n return indexInPlainText;\n }\n\n let result: number | undefined | null = undefined;\n\n const plainTextProcessor = (\n substr: string,\n index: number,\n substrPlainTextIndex: number,\n ) => {\n if (result !== undefined) return;\n\n if (substrPlainTextIndex + substr.length >= indexInPlainText) {\n result = index + indexInPlainText - substrPlainTextIndex;\n }\n };\n\n const markupProcessor = (\n markup: string,\n index: number,\n mentionPlainTextIndex: number,\n _id: string,\n display: string,\n ) => {\n if (result !== undefined) return;\n\n if (mentionPlainTextIndex + display.length > indexInPlainText) {\n if (inMarkupCorrection === 'NULL') {\n result = null;\n } else {\n result = index + (inMarkupCorrection === 'END' ? markup.length : 0);\n }\n }\n };\n\n iterateMentionsMarkup(\n value,\n dataSources,\n markupProcessor,\n plainTextProcessor,\n );\n\n return result === undefined ? value.length : result;\n}\n\nexport function spliceString(\n str: string,\n start: number,\n end: number,\n insert: string,\n): string {\n return str.substring(0, start) + insert + str.substring(end);\n}\n\nexport function findStartOfMentionInPlainText<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n indexInPlainText: number,\n): number | undefined {\n let result: number | undefined = undefined;\n\n const markupProcessor = (\n _markup: string,\n _index: number,\n mentionPlainTextIndex: number,\n _id: string,\n display: string,\n ) => {\n if (\n mentionPlainTextIndex <= indexInPlainText &&\n mentionPlainTextIndex + display.length > indexInPlainText\n ) {\n result = mentionPlainTextIndex;\n }\n };\n\n iterateMentionsMarkup(value, dataSources, markupProcessor);\n return result;\n}\n\nexport function getMentions<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n): MentionData[] {\n const mentions: MentionData[] = [];\n iterateMentionsMarkup(\n value,\n dataSources,\n (_match, index, plainTextIndex, id, display, childIndex) => {\n mentions.push({\n id,\n display,\n dataSourceIndex: childIndex,\n index,\n plainTextIndex,\n });\n },\n );\n return mentions;\n}\n\nexport function countSuggestions<T extends BaseSuggestionData>(\n suggestions: SuggestionsMap<T>,\n) {\n return Object.values(suggestions).reduce(\n (acc, { results }) => acc + results.length,\n 0,\n );\n}\n\nexport function getEndOfLastMention<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n) {\n const mentions = getMentions(value, dataSources);\n const lastMention = mentions[mentions.length - 1];\n return lastMention\n ? lastMention.plainTextIndex + lastMention.display.length\n : 0;\n}\n\nexport function makeTriggerRegex(\n trigger: string | RegExp,\n allowSpaceInQuery?: boolean,\n) {\n if (trigger instanceof RegExp) {\n return trigger;\n } else {\n const escapedTriggerChar = escapeRegex(trigger);\n\n return new RegExp(\n `(?:^|\\\\s)(${escapedTriggerChar}([^${allowSpaceInQuery ? '' : '\\\\s'}${escapedTriggerChar}]*))$`,\n );\n }\n}\n\nexport function getDataProvider<T extends BaseSuggestionData>(\n data: SuggestionData<T>[] | ((query: string) => Promise<SuggestionData<T>[]>),\n ignoreAccents?: boolean,\n): (query: string) => Promise<SuggestionData<T>[]> {\n if (data instanceof Array) {\n return async function (query: string) {\n const results = [];\n for (let i = 0, l = data.length; i < l; ++i) {\n const display = data[i].display || data[i].id;\n if (getSubstringIndex(display, query, ignoreAccents) >= 0) {\n results.push(data[i]);\n }\n }\n return results;\n };\n }\n return data;\n}\n\nconst getSubstringIndex = (\n str: string,\n substr: string,\n ignoreAccents?: boolean,\n) => {\n if (!ignoreAccents) {\n return str.toLowerCase().indexOf(substr.toLowerCase());\n }\n\n return normalizeString(str).indexOf(normalizeString(substr));\n};\n\nconst removeAccents = (str: string) => {\n let formattedStr = str;\n\n lettersDiacritics.forEach(letterDiacritics => {\n formattedStr = formattedStr.replace(\n letterDiacritics.letters,\n letterDiacritics.base,\n );\n });\n\n return formattedStr;\n};\n\nconst normalizeString = (str: string) => removeAccents(str).toLowerCase();\n\nexport const makeMentionsMarkup = (\n markup: string,\n id: string,\n display?: string,\n) => {\n return markup\n .replace(Placeholders.id, id)\n .replace(Placeholders.display, display || id);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\nimport {\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport List from '@mui/material/List';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport Stack from '@mui/material/Stack';\n\nimport {\n BaseSuggestionData,\n DefaultTrigger,\n SuggestionData,\n SuggestionDataSource,\n Suggestions,\n SuggestionsMap,\n SuggestionsQueryInfo,\n} from 'types/fieldMentions';\n\nimport {\n countSuggestions,\n getDataProvider,\n getEndOfLastMention,\n getPlainText,\n makeTriggerRegex,\n mapPlainTextIndex,\n} from '../utils';\n\nimport { KeyboardListenerProps, SuggestionsOverlayProps } from './props';\nimport Suggestion from './Suggestion';\n\nconst SuggestionsOverlay = <T extends BaseSuggestionData>(\n props: SuggestionsOverlayProps<T>,\n) => {\n const {\n value,\n dataSources,\n selectionStart,\n selectionEnd,\n cursorRef,\n onSelect,\n onMouseDown,\n } = props;\n const ulElement = useRef<HTMLUListElement>(null);\n const [suggestions, setSuggestions] = useState<SuggestionsMap<T>>({});\n const [focusIndex, setFocusIndex] = useState(0);\n const [scrollFocusedIntoView, setScrollFocusedIntoView] = useState(false);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const current = ulElement.current;\n if (!scrollFocusedIntoView || !current || current.children.length === 0) {\n return;\n }\n\n const scrollTop = current.scrollTop;\n\n let { top, bottom } = current.children[focusIndex].getBoundingClientRect();\n const { top: topContainer } = current.getBoundingClientRect();\n top = top - topContainer + scrollTop;\n bottom = bottom - topContainer + scrollTop;\n\n if (top < scrollTop) {\n current.scrollTop = top;\n } else if (bottom > current.offsetHeight + scrollTop) {\n current.scrollTop = bottom - current.offsetHeight;\n }\n\n setScrollFocusedIntoView(false);\n }, [scrollFocusedIntoView, ulElement, focusIndex, setScrollFocusedIntoView]);\n\n const queryDataSource = useCallback(\n async (\n source: SuggestionDataSource<T>,\n query: string,\n sourceIndex: number,\n querySequenceStart: number,\n querySequenceEnd: number,\n fullText: string,\n ) => {\n try {\n const dataProvider = getDataProvider(source.data, source.ignoreAccents);\n setLoading(true);\n const results = await dataProvider(query);\n setSuggestions(s => {\n return {\n ...s,\n [sourceIndex]: {\n queryInfo: {\n childIndex: sourceIndex,\n query,\n querySequenceStart,\n querySequenceEnd,\n plainTextValue: fullText,\n },\n results,\n },\n };\n });\n } catch (err) {\n console.error(err);\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n const dataSourcesRef = useRef(dataSources);\n useEffect(() => {\n dataSourcesRef.current = dataSources;\n }, [dataSources]);\n\n useEffect(() => {\n setSuggestions({});\n\n if (!selectionStart || selectionStart !== selectionEnd) {\n return;\n }\n\n const currentDataSources = dataSourcesRef.current;\n const plainText = getPlainText(value, currentDataSources);\n\n const positionInValue = mapPlainTextIndex(\n plainText,\n currentDataSources,\n selectionStart,\n 'NULL',\n );\n if (!positionInValue) {\n return;\n }\n\n const substringStartIndex = getEndOfLastMention(\n plainText.substring(0, positionInValue),\n currentDataSources,\n );\n const substring = plainText.substring(substringStartIndex, selectionStart);\n\n currentDataSources.forEach((source, sourceIndex) => {\n if (!source) {\n return;\n }\n\n const regex = makeTriggerRegex(\n source.trigger || DefaultTrigger,\n source.allowSpaceInQuery,\n );\n const match = substring.match(regex);\n if (match) {\n const querySequenceStart =\n substringStartIndex + substring.indexOf(match[1], match.index);\n queryDataSource(\n source,\n match[2],\n sourceIndex,\n querySequenceStart,\n querySequenceStart + match[1].length,\n plainText,\n );\n }\n });\n }, [selectionStart, selectionEnd, value, queryDataSource]);\n\n const clearSuggestions = useCallback(() => {\n setSuggestions({});\n setFocusIndex(0);\n }, [setSuggestions, setFocusIndex]);\n\n const handleSelect = useCallback(\n (result: SuggestionData<T>, queryInfo: any) => {\n onSelect(result, queryInfo);\n clearSuggestions();\n },\n [onSelect, clearSuggestions],\n );\n\n const handleMouseEnter = useCallback(\n (focusIndex: number) => {\n setFocusIndex(focusIndex);\n },\n [setFocusIndex],\n );\n\n const renderedSuggestions = useMemo(() => {\n return Object.values(suggestions).reduce(\n (accResults, { results, queryInfo }) => [\n ...accResults,\n ...results.map((result: SuggestionData<T>, index: number) => (\n <Suggestion\n key={result.id}\n id={result.id}\n query={queryInfo.query}\n index={index}\n suggestion={result}\n focused={index === focusIndex}\n onClick={() => handleSelect(result, queryInfo)}\n onMouseEnter={() => handleMouseEnter(index)}\n />\n )),\n ],\n [],\n );\n }, [suggestions, handleSelect, handleMouseEnter, focusIndex]);\n\n if (selectionStart === null || selectionStart !== selectionEnd) {\n return null;\n }\n\n if (!loading && renderedSuggestions.length === 0) {\n return null;\n }\n\n return (\n <>\n <KeyboardListener\n suggestions={suggestions}\n clearSuggestions={clearSuggestions}\n onSelect={handleSelect}\n focusIndex={focusIndex}\n setFocusIndex={setFocusIndex}\n setScrollFocusedIntoView={setScrollFocusedIntoView}\n loading={loading}\n />\n <Popper\n placement=\"bottom-start\"\n {...props.slotProps?.popper}\n sx={{ zIndex: 2, ...props.slotProps?.popper?.sx }}\n open={true}\n anchorEl={cursorRef.current}\n >\n <Paper elevation={8} onMouseDown={onMouseDown}>\n <List\n ref={ulElement}\n sx={{ width: '300px', maxHeight: '40vh', overflow: 'auto' }}\n >\n {renderedSuggestions.length > 0\n ? renderedSuggestions\n : loading && (\n <Stack\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"40vh\"\n >\n <CircularProgress />\n </Stack>\n )}\n </List>\n </Paper>\n </Popper>\n </>\n );\n};\n\nexport default SuggestionsOverlay;\n\nenum Key {\n Tab = 'Tab',\n Return = 'Enter',\n Escape = 'Escape',\n Up = 'ArrowUp',\n Down = 'ArrowDown',\n}\n\nconst KeyboardListener = <T extends BaseSuggestionData>(\n props: KeyboardListenerProps<T>,\n): ReactNode => {\n const {\n suggestions,\n clearSuggestions,\n focusIndex,\n setFocusIndex,\n setScrollFocusedIntoView,\n onSelect,\n loading,\n } = props;\n\n useEffect(() => {\n const shiftFocus = (delta: number) => {\n if (loading) return;\n\n const suggestionsCount = countSuggestions(suggestions);\n setFocusIndex((suggestionsCount + focusIndex + delta) % suggestionsCount);\n setScrollFocusedIntoView(true);\n };\n\n const selectFocused = () => {\n if (loading) return;\n\n const {\n result,\n queryInfo,\n }: { result: SuggestionData<T>; queryInfo: SuggestionsQueryInfo } =\n Object.values(suggestions).reduce(\n (acc: Suggestions<T>[], { results, queryInfo }: Suggestions<T>) => [\n ...acc,\n ...results.map((result: SuggestionData<T>) => ({\n result,\n queryInfo,\n })),\n ],\n [],\n )[focusIndex];\n onSelect(result, queryInfo);\n };\n\n const handleKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case Key.Escape: {\n clearSuggestions();\n break;\n }\n case Key.Down: {\n shiftFocus(+1);\n break;\n }\n case Key.Up: {\n shiftFocus(-1);\n break;\n }\n\n case Key.Return:\n case Key.Tab: {\n selectFocused();\n break;\n }\n default: {\n return;\n }\n }\n\n ev.preventDefault();\n ev.stopPropagation();\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [\n suggestions,\n clearSuggestions,\n focusIndex,\n setFocusIndex,\n onSelect,\n setScrollFocusedIntoView,\n loading,\n ]);\n\n return null;\n};\n","import { ReactNode } from 'react';\nimport ListItemButton from '@mui/material/ListItemButton';\n\nimport {\n BaseSuggestionData,\n DefaultDisplayTransform,\n} from 'types/fieldMentions';\n\nimport { SuggestionProps } from './props';\n\nconst Suggestion = <T extends BaseSuggestionData>(\n props: SuggestionProps<T>,\n): ReactNode => {\n const { renderSuggestion, suggestion, focused, onClick, onMouseEnter } =\n props;\n\n if (renderSuggestion) {\n return renderSuggestion(props);\n }\n\n const display = DefaultDisplayTransform(suggestion.id, suggestion.display);\n return (\n <ListItemButton\n role=\"option\"\n aria-selected={focused}\n selected={focused}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n >\n {display}\n </ListItemButton>\n );\n};\n\nexport default Suggestion;\n"]}
1
+ {"version":3,"sources":["../../../src/components/FieldMentions/index.tsx","../../../src/components/FieldMentions/Highlighter/index.tsx","../../../src/components/FieldMentions/Mention/index.tsx","../../../src/components/FieldMentions/utils.ts","../../../src/components/FieldMentions/SuggestionOverlay/index.tsx","../../../src/components/FieldMentions/SuggestionOverlay/Suggestion/index.tsx"],"names":["useEffect","useRef","useState","TextField","Box","Portal","jsx","Mention","display","color","backgroundColor","Mention_default","invariant","isNumber","val","combineRegExps","regExps","serializedRegexParser","regex","regexString","regexFlags","countPlaceholders","markup","count","findIndexOfCapturingGroup","parameterName","indexDisplay","indexId","iterateMentionsMarkup","value","dataSources","markupProcessor","plainTextProcessor","multiline","ds","verifyCapturingGroups","DefaultMarkupTemplate","markupToRegex","accOffset","captureGroupOffsets","result","match","start","currentPlainTextIndex","offset","o","mentionChildIndex","displayTransform","idPos","displayPos","id","DefaultDisplayTransform","substr","getPlainText","_match","_index","_plainTextIndex","_id","plainText","numberOfGroups","numberOfPlaceholders","escapedMarkup","escapeRegex","charAfterDisplay","charAfterId","str","applyChangeToValue","plainTextValue","selectionStartBefore","selectionEndBefore","selectionEndAfter","oldPlainTextValue","lengthDelta","insert","spliceStart","spliceEnd","mappedSpliceStart","mapPlainTextIndex","mappedSpliceEnd","controlSpliceStart","controlSpliceEnd","willRemoveMention","newValue","spliceString","controlPlainTextValue","indexInPlainText","inMarkupCorrection","index","mentionPlainTextIndex","substrPlainTextIndex","end","findStartOfMentionInPlainText","_markup","getMentions","mentions","plainTextIndex","childIndex","countSuggestions","suggestions","acc","results","getEndOfLastMention","lastMention","makeTriggerRegex","trigger","allowSpaceInQuery","escapedTriggerChar","getDataProvider","data","ignoreAccents","query","i","getSubstringIndex","normalizeString","removeAccents","formattedStr","diacritics_default","letterDiacritics","makeMentionsMarkup","jsxs","getHighlighterRect","input","rec","computedStyle","Highlighter","props","highlighterRef","cursorRef","selectionEnd","selectionStart","components","dataSourceIndex","dataSource","text","indexInPlaintext","theme","splitIndex","startText","endText","rect","Highlighter_default","useCallback","useMemo","CircularProgress","List","Paper","Popper","Stack","ListItemButton","Suggestion","renderSuggestion","suggestion","focused","onClick","onMouseEnter","Suggestion_default","Fragment","SuggestionsOverlay","onSelect","onMouseDown","ulElement","setSuggestions","focusIndex","setFocusIndex","scrollFocusedIntoView","setScrollFocusedIntoView","loading","setLoading","current","scrollTop","top","bottom","topContainer","queryDataSource","source","sourceIndex","querySequenceStart","querySequenceEnd","fullText","dataProvider","s","err","dataSourcesRef","currentDataSources","positionInValue","substringStartIndex","substring","DefaultTrigger","clearSuggestions","handleSelect","queryInfo","handleMouseEnter","renderedSuggestions","accResults","KeyboardListener","SuggestionOverlay_default","shiftFocus","delta","suggestionsCount","selectFocused","handleKeyDown","ev","FieldMentions","stateValue","setStateValue","inputRef","setInputRef","suggestionsMouseDown","setSelectionStart","setSelectionEnd","handleInputRef","ref","externalInputRef","typedRef","onScroll","others","finalValue","handleBlur","handleSuggestionsMouseDown","addMention","appendSpaceOnAdd","onAdd","displayValue","newCaretPosition","newPlainTextValue","handleChange","selectionStartAfter","startOfMention","nativeEvent","dataLength","inputProps","FieldMentions_default"],"mappings":"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","sourcesContent":["import React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { Theme } from '@mui/material/styles';\nimport TextField, { TextFieldProps } from '@mui/material/TextField';\n\nimport {\n BaseSuggestionData,\n DefaultDisplayTransform,\n DefaultMarkupTemplate,\n SuggestionData,\n SuggestionsQueryInfo,\n} from 'types/fieldMentions';\n\nimport Highlighter from './Highlighter';\nimport { FieldMentionsBaseProps, FieldMentionsProps } from './props';\nimport SuggestionsOverlay from './SuggestionOverlay';\nimport {\n applyChangeToValue,\n findStartOfMentionInPlainText,\n getMentions,\n getPlainText,\n isNumber,\n makeMentionsMarkup,\n mapPlainTextIndex,\n spliceString,\n} from './utils';\n\nconst FieldMentions = <T extends BaseSuggestionData>(\n props: FieldMentionsProps<T>,\n): ReactNode => {\n const [stateValue, setStateValue] = useState<string>(\n props.defaultValue || '',\n );\n\n const [inputRef, setInputRef] = useState<\n HTMLInputElement | HTMLTextAreaElement | null\n >(null);\n const highlighterRef = useRef<HTMLDivElement>(null);\n const cursorRef = useRef<HTMLSpanElement>(null);\n const suggestionsMouseDown = useRef(false);\n\n const [selectionStart, setSelectionStart] = useState<number | null>(null);\n const [selectionEnd, setSelectionEnd] = useState<number | null>(null);\n\n const handleInputRef = (\n ref: HTMLInputElement | HTMLTextAreaElement | null,\n ) => {\n setInputRef(ref);\n\n if (externalInputRef) {\n if (typeof externalInputRef === 'function') {\n externalInputRef(ref);\n } else if (\n externalInputRef &&\n 'current' in externalInputRef &&\n typeof externalInputRef !== 'function'\n ) {\n const typedRef = externalInputRef as React.MutableRefObject<\n HTMLInputElement | HTMLTextAreaElement | null\n >;\n typedRef.current = ref;\n }\n }\n };\n\n useEffect(() => {\n const input = inputRef;\n const onScroll = () => {\n if (!highlighterRef.current || !input) {\n return;\n }\n highlighterRef.current.scrollLeft = input.scrollLeft;\n highlighterRef.current.scrollTop = input.scrollTop;\n };\n\n input?.addEventListener('scroll', onScroll);\n return () => input?.removeEventListener('scroll', onScroll);\n }, [inputRef, highlighterRef]);\n\n useEffect(() => {\n const input = inputRef;\n if (\n !input ||\n (input.selectionStart === selectionStart &&\n input.selectionEnd === selectionEnd)\n ) {\n return;\n }\n input.setSelectionRange(selectionStart, selectionEnd);\n }, [selectionStart, selectionEnd, inputRef]);\n\n const { value, dataSources, inputRef: externalInputRef, ...others } = props;\n const finalValue = value !== undefined ? value : stateValue;\n\n const handleBlur = () => {\n if (!suggestionsMouseDown.current) {\n setSelectionStart(null);\n setSelectionEnd(null);\n }\n suggestionsMouseDown.current = false;\n };\n\n const handleSuggestionsMouseDown = () => {\n suggestionsMouseDown.current = true;\n };\n\n const addMention = (\n suggestion: SuggestionData<T>,\n {\n childIndex,\n querySequenceStart,\n querySequenceEnd,\n plainTextValue,\n }: SuggestionsQueryInfo,\n ) => {\n const dataSource = dataSources[childIndex];\n\n const { markup, displayTransform, appendSpaceOnAdd, onAdd } = dataSource;\n\n const start = mapPlainTextIndex(\n finalValue,\n dataSources,\n querySequenceStart,\n 'START',\n );\n if (!isNumber(start)) {\n return;\n }\n\n const end = start + querySequenceEnd - querySequenceStart;\n\n let insert = makeMentionsMarkup(\n markup || DefaultMarkupTemplate,\n suggestion.id,\n suggestion.display,\n );\n let displayValue = (displayTransform || DefaultDisplayTransform)(\n suggestion.id,\n suggestion.display,\n );\n\n if (appendSpaceOnAdd) {\n insert += ' ';\n displayValue += ' ';\n }\n\n const newCaretPosition = querySequenceStart + displayValue.length;\n setSelectionStart(newCaretPosition);\n setSelectionEnd(newCaretPosition);\n\n const newValue = spliceString(finalValue, start, end, insert);\n const mentions = getMentions(newValue, dataSources);\n const newPlainTextValue = spliceString(\n plainTextValue,\n querySequenceStart,\n querySequenceEnd,\n displayValue,\n );\n\n const onChange = props.onChange || setStateValue;\n onChange(newValue, newPlainTextValue, mentions);\n onAdd?.(suggestion, start, end);\n };\n\n const handleChange = (ev: React.ChangeEvent<HTMLInputElement>) => {\n let newPlainTextValue = ev.target.value;\n\n let selectionStartBefore = selectionStart;\n if (!isNumber(selectionStartBefore)) {\n selectionStartBefore = ev.target.selectionStart;\n }\n\n let selectionEndBefore = selectionEnd;\n if (!isNumber(selectionEndBefore)) {\n selectionEndBefore = ev.target.selectionEnd;\n }\n\n const newValue = applyChangeToValue(\n finalValue,\n newPlainTextValue,\n selectionStartBefore,\n selectionEndBefore,\n ev.target.selectionEnd || 0,\n dataSources,\n props.multiline,\n );\n\n newPlainTextValue = getPlainText(newValue, dataSources);\n\n let selectionStartAfter = ev.target.selectionStart;\n let selectionEndAfter = ev.target.selectionEnd;\n\n const startOfMention = findStartOfMentionInPlainText(\n finalValue,\n dataSources,\n ev.target.selectionStart || 0,\n );\n if (\n startOfMention !== undefined &&\n selectionEndAfter !== null &&\n selectionEndAfter > startOfMention\n ) {\n const nativeEvent = ev.nativeEvent;\n const dataLength =\n 'data' in nativeEvent && typeof nativeEvent.data === 'string'\n ? nativeEvent.data.length\n : 0;\n selectionStartAfter = startOfMention + dataLength;\n selectionEndAfter = selectionStartAfter;\n }\n\n setSelectionStart(selectionStartAfter);\n setSelectionEnd(selectionEndAfter);\n\n const mentions = getMentions(newValue, dataSources);\n\n const onChange = props.onChange || setStateValue;\n onChange(newValue, newPlainTextValue, mentions);\n };\n\n const handleSelect = (ev: React.ChangeEvent<HTMLInputElement>) => {\n setSelectionStart(ev.target.selectionStart);\n setSelectionEnd(ev.target.selectionEnd);\n props.onSelect?.(ev);\n };\n\n const inputProps: TextFieldProps = {\n ...others,\n value: getPlainText(finalValue, dataSources, props.multiline),\n onChange: handleChange,\n onSelect: handleSelect,\n onBlur: handleBlur,\n InputProps: {\n sx: {\n overscrollBehavior: 'none',\n color: 'transparent',\n caretColor: (theme: Theme) => theme.palette.text.primary,\n },\n },\n };\n\n return (\n <>\n <Highlighter\n highlighterRef={highlighterRef}\n cursorRef={cursorRef}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n value={finalValue}\n dataSources={dataSources}\n inputRef={inputRef}\n multiline={inputProps.multiline}\n />\n <TextField inputRef={handleInputRef} {...inputProps} />\n <SuggestionsOverlay\n value={finalValue}\n dataSources={dataSources}\n selectionStart={selectionStart}\n selectionEnd={selectionEnd}\n cursorRef={cursorRef}\n loading={false}\n onSelect={addMention}\n onMouseDown={handleSuggestionsMouseDown}\n slotProps={props.slotProps?.suggestionsOverlay}\n />\n </>\n );\n};\n\nexport default FieldMentions;\nexport type { FieldMentionsBaseProps, FieldMentionsProps };\n","import { type JSX, ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Portal from '@mui/material/Portal';\n\nimport { BaseSuggestionData } from 'types/fieldMentions';\n\nimport Mention from '../Mention';\nimport { iterateMentionsMarkup } from '../utils';\n\nimport { HighlighterProps } from './props';\n\nfunction getHighlighterRect(\n input?: HTMLInputElement | HTMLTextAreaElement | null,\n) {\n const rec = { x: 0, y: 0, width: 0, height: 0 };\n if (!input) {\n return rec;\n }\n\n const computedStyle = getComputedStyle(input);\n rec.width = input.clientWidth;\n rec.width -= parseFloat(computedStyle.paddingLeft);\n rec.width -= parseFloat(computedStyle.paddingRight);\n rec.height = input.clientHeight;\n rec.height -= parseFloat(computedStyle.paddingTop);\n rec.height -= parseFloat(computedStyle.paddingBottom);\n\n rec.x = input.offsetLeft;\n rec.x += parseFloat(computedStyle.paddingLeft);\n rec.x += parseFloat(computedStyle.borderLeft);\n rec.y = input.offsetTop;\n rec.y += parseFloat(computedStyle.paddingTop);\n rec.y += parseFloat(computedStyle.borderTop);\n\n return rec;\n}\n\nconst Highlighter = <T extends BaseSuggestionData>(\n props: HighlighterProps<T>,\n): ReactNode => {\n const {\n highlighterRef,\n cursorRef,\n selectionEnd,\n selectionStart,\n value,\n dataSources,\n multiline,\n } = props;\n const components: JSX.Element[] = [];\n\n const handleMention = (\n _markup: string,\n index: number,\n _plainTextIndex: number,\n id: string,\n display: string,\n dataSourceIndex: number,\n ) => {\n const dataSource = dataSources[dataSourceIndex];\n components.push(\n <Mention\n key={`${id}-${index}`}\n display={display}\n color={dataSource?.color}\n backgroundColor={dataSource?.backgroundColor}\n />,\n );\n };\n\n const handlePlainText = (\n text: string,\n index: number,\n indexInPlaintext: number,\n ) => {\n if (!multiline) {\n text = text.replaceAll('\\n', '');\n }\n\n const renderCursor =\n selectionStart &&\n selectionStart === selectionEnd &&\n selectionStart >= indexInPlaintext &&\n selectionStart <= indexInPlaintext + text.length;\n\n if (!renderCursor) {\n components.push(\n <Box\n key={`${index}-${indexInPlaintext}`}\n component=\"span\"\n sx={{ color: theme => theme.palette.text.primary }}\n >\n {text}\n </Box>,\n );\n } else {\n const splitIndex = selectionStart - indexInPlaintext;\n const startText = text.substring(0, splitIndex);\n const endText = text.substring(splitIndex);\n\n if (startText) {\n components.push(\n <Box\n key={`${index}-${indexInPlaintext}-precursor`}\n component=\"span\"\n sx={{ color: theme => theme.palette.text.primary }}\n >\n {startText}\n </Box>,\n );\n }\n\n components.push(\n <Box\n key=\"cursor\"\n ref={cursorRef}\n component=\"span\"\n visibility=\"hidden\"\n ></Box>,\n );\n\n if (endText) {\n components.push(\n <Box\n key={`${index}-${indexInPlaintext}-postcursor`}\n component=\"span\"\n sx={{ color: theme => theme.palette.text.primary }}\n >\n {endText}\n </Box>,\n );\n }\n }\n };\n\n iterateMentionsMarkup(\n value,\n dataSources,\n handleMention,\n handlePlainText,\n multiline,\n );\n\n const rect = getHighlighterRect(props.inputRef);\n\n return (\n <Portal container={() => props.inputRef?.parentElement || null}>\n <Box\n ref={highlighterRef}\n sx={{\n position: 'absolute',\n top: `${rect.y}px`,\n left: `${rect.x}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n whiteSpace: multiline ? 'pre-wrap' : 'pre',\n overflow: 'hidden',\n overscrollBehavior: 'none',\n zIndex: 1,\n pointerEvents: 'none',\n }}\n >\n {components}\n <Box component=\"span\" visibility=\"hidden\">\n {' '}\n </Box>\n </Box>\n </Portal>\n );\n};\n\nexport default Highlighter;\n","import Box from '@mui/material/Box';\n\nimport { MentionProps } from './props';\n\nconst Mention = ({ display, color, backgroundColor }: MentionProps) => {\n return (\n <Box\n component=\"span\"\n sx={{\n color: color || 'inherit',\n bgcolor: backgroundColor,\n }}\n >\n {display}\n </Box>\n );\n};\n\nexport default Mention;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport invariant from 'invariant';\n\nimport {\n BaseSuggestionData,\n DefaultDisplayTransform,\n DefaultMarkupTemplate,\n MentionData,\n SuggestionData,\n SuggestionDataSource,\n SuggestionsMap,\n} from 'types/fieldMentions';\nimport lettersDiacritics from 'utils/diacritics';\n\nenum Placeholders {\n id = '__id__',\n display = '__display__',\n}\n\nexport function isNumber(val: any): val is number {\n return typeof val === 'number';\n}\n\nfunction combineRegExps(regExps: RegExp[]): RegExp {\n const serializedRegexParser = /^\\/(.+)\\/(\\w+)?$/;\n return new RegExp(\n regExps\n .map(regex => {\n const [, regexString, regexFlags] =\n serializedRegexParser.exec(regex.toString()) || [];\n\n invariant(\n !regexFlags,\n `RegExp flags are not supported. Change /${regexString}/${regexFlags} into /${regexString}/`,\n );\n\n return `(${regexString})`;\n })\n .join('|'),\n 'g',\n );\n}\n\nfunction countPlaceholders(markup: string): number {\n let count = 0;\n if (markup.indexOf(Placeholders.id) >= 0) count++;\n if (markup.indexOf(Placeholders.display) >= 0) count++;\n return count;\n}\n\nfunction findIndexOfCapturingGroup(\n markup: string,\n parameterName: 'id' | 'display',\n): number {\n invariant(\n parameterName === 'id' || parameterName === 'display',\n `Second arg must be either \"id\" or \"display\", got: \"${parameterName}\"`,\n );\n\n const indexDisplay = markup.indexOf(Placeholders.display);\n const indexId = markup.indexOf(Placeholders.id);\n\n invariant(\n indexDisplay >= 0 || indexId >= 0,\n `The markup '${markup}' does not contain at least one of the placeholders '__id__' or '__display__'`,\n );\n\n if (indexDisplay >= 0 && indexId >= 0) {\n return (parameterName === 'id' && indexId <= indexDisplay) ||\n (parameterName === 'display' && indexDisplay <= indexId)\n ? 0\n : 1;\n }\n\n return 0;\n}\n\nexport function iterateMentionsMarkup<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n markupProcessor: (\n match: string,\n matchIndex: number,\n plainTextIndex: number,\n id: string,\n display: string,\n mentionIndex: number,\n start: number,\n ) => void,\n plainTextProcessor?: (\n value: string,\n start: number,\n currentIndex: number,\n ) => void,\n multiline?: boolean,\n) {\n const regex = combineRegExps(\n dataSources.map(ds =>\n ds.regex\n ? verifyCapturingGroups(ds.regex, ds.markup || DefaultMarkupTemplate)\n : markupToRegex(ds.markup || DefaultMarkupTemplate),\n ),\n );\n\n let accOffset = 2;\n const captureGroupOffsets = dataSources.map(({ markup }) => {\n const result = accOffset;\n accOffset += countPlaceholders(markup || DefaultMarkupTemplate) + 1;\n return result;\n });\n\n let match: RegExpExecArray | null;\n let start = 0;\n let currentPlainTextIndex = 0;\n\n while ((match = regex.exec(value)) !== null) {\n const offset = captureGroupOffsets.find(o => !!match?.[o]);\n if (offset === undefined) {\n continue;\n }\n\n const mentionChildIndex = captureGroupOffsets.indexOf(offset);\n const { markup, displayTransform } = dataSources[mentionChildIndex];\n const idPos =\n offset + findIndexOfCapturingGroup(markup || DefaultMarkupTemplate, 'id');\n const displayPos =\n offset +\n findIndexOfCapturingGroup(markup || DefaultMarkupTemplate, 'display');\n\n const id = match[idPos];\n const display = displayTransform\n ? displayTransform(id, match[displayPos])\n : DefaultDisplayTransform(id, match[displayPos], multiline);\n\n const substr = value.substring(start, match.index);\n plainTextProcessor?.(substr, start, currentPlainTextIndex);\n currentPlainTextIndex += substr.length;\n\n markupProcessor(\n match[0],\n match.index,\n currentPlainTextIndex,\n id,\n display,\n mentionChildIndex,\n start,\n );\n currentPlainTextIndex += display.length;\n start = regex.lastIndex;\n }\n\n if (start < value.length) {\n plainTextProcessor?.(value.substring(start), start, currentPlainTextIndex);\n }\n}\n\nexport function getPlainText<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n multiline?: boolean,\n): string {\n let result = '';\n iterateMentionsMarkup(\n value,\n dataSources,\n (_match, _index, _plainTextIndex, _id, display) => {\n result += display;\n },\n plainText => {\n result += plainText;\n },\n multiline,\n );\n return result;\n}\n\nconst verifyCapturingGroups = (regex: RegExp, markup: string) => {\n const numberOfGroups =\n (new RegExp(regex.toString() + '|').exec('')?.length || 0) - 1;\n const numberOfPlaceholders = countPlaceholders(markup);\n\n invariant(\n numberOfGroups === numberOfPlaceholders,\n `Number of capturing groups in RegExp ${regex.toString()} (${numberOfGroups}) does not match the number of placeholders in the markup '${markup}' (${numberOfPlaceholders})`,\n );\n\n return regex;\n};\n\nconst markupToRegex = (markup: string) => {\n const escapedMarkup = escapeRegex(markup);\n\n const charAfterDisplay =\n markup[markup.indexOf(Placeholders.display) + Placeholders.display.length];\n const charAfterId =\n markup[markup.indexOf(Placeholders.id) + Placeholders.id.length];\n\n return new RegExp(\n escapedMarkup\n .replace(\n Placeholders.display,\n `([^${escapeRegex(charAfterDisplay || '')}]+?)`,\n )\n .replace(Placeholders.id, `([^${escapeRegex(charAfterId || '')}]+?)`),\n );\n};\n\nconst escapeRegex = (str: string) =>\n str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n\nexport function applyChangeToValue<T extends BaseSuggestionData>(\n value: string,\n plainTextValue: string,\n selectionStartBefore: number | null,\n selectionEndBefore: number | null,\n selectionEndAfter: number,\n dataSources: SuggestionDataSource<T>[],\n multiline?: boolean,\n) {\n const oldPlainTextValue = getPlainText(value, dataSources, multiline);\n\n const lengthDelta = oldPlainTextValue.length - plainTextValue.length;\n if (selectionStartBefore === null) {\n selectionStartBefore = selectionEndAfter + lengthDelta;\n }\n\n if (selectionEndBefore === null) {\n selectionEndBefore = selectionStartBefore;\n }\n\n if (\n selectionStartBefore === selectionEndBefore &&\n selectionEndBefore === selectionEndAfter &&\n oldPlainTextValue.length === plainTextValue.length\n ) {\n selectionStartBefore = selectionStartBefore - 1;\n }\n\n let insert = plainTextValue.slice(selectionStartBefore, selectionEndAfter);\n\n let spliceStart = Math.min(selectionStartBefore, selectionEndAfter);\n\n let spliceEnd = selectionEndBefore;\n if (selectionStartBefore === selectionEndAfter) {\n spliceEnd = Math.max(\n selectionEndBefore,\n selectionStartBefore + lengthDelta,\n );\n }\n\n let mappedSpliceStart = mapPlainTextIndex(\n value,\n dataSources,\n spliceStart,\n 'START',\n );\n let mappedSpliceEnd = mapPlainTextIndex(value, dataSources, spliceEnd, 'END');\n\n const controlSpliceStart = mapPlainTextIndex(\n value,\n dataSources,\n spliceStart,\n 'NULL',\n );\n const controlSpliceEnd = mapPlainTextIndex(\n value,\n dataSources,\n spliceEnd,\n 'NULL',\n );\n const willRemoveMention =\n controlSpliceStart === null || controlSpliceEnd === null;\n\n let newValue = spliceString(\n value,\n mappedSpliceStart || 0,\n mappedSpliceEnd || 0,\n insert,\n );\n\n if (!willRemoveMention) {\n const controlPlainTextValue = getPlainText(\n newValue,\n dataSources,\n multiline,\n );\n if (controlPlainTextValue !== plainTextValue) {\n spliceStart = 0;\n while (plainTextValue[spliceStart] === controlPlainTextValue[spliceStart])\n spliceStart++;\n\n insert = plainTextValue.slice(spliceStart, selectionEndAfter);\n\n spliceEnd = oldPlainTextValue.lastIndexOf(\n plainTextValue.substring(selectionEndAfter),\n );\n\n mappedSpliceStart = mapPlainTextIndex(\n value,\n dataSources,\n spliceStart,\n 'START',\n );\n mappedSpliceEnd = mapPlainTextIndex(value, dataSources, spliceEnd, 'END');\n newValue = spliceString(\n value,\n mappedSpliceStart || 0,\n mappedSpliceEnd || 0,\n insert,\n );\n }\n }\n\n return newValue;\n}\n\nexport function mapPlainTextIndex<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n indexInPlainText: number,\n inMarkupCorrection: 'START' | 'END' | 'NULL' = 'START',\n): number | null | undefined {\n if (typeof indexInPlainText !== 'number') {\n return indexInPlainText;\n }\n\n let result: number | undefined | null = undefined;\n\n const plainTextProcessor = (\n substr: string,\n index: number,\n substrPlainTextIndex: number,\n ) => {\n if (result !== undefined) return;\n\n if (substrPlainTextIndex + substr.length >= indexInPlainText) {\n result = index + indexInPlainText - substrPlainTextIndex;\n }\n };\n\n const markupProcessor = (\n markup: string,\n index: number,\n mentionPlainTextIndex: number,\n _id: string,\n display: string,\n ) => {\n if (result !== undefined) return;\n\n if (mentionPlainTextIndex + display.length > indexInPlainText) {\n if (inMarkupCorrection === 'NULL') {\n result = null;\n } else {\n result = index + (inMarkupCorrection === 'END' ? markup.length : 0);\n }\n }\n };\n\n iterateMentionsMarkup(\n value,\n dataSources,\n markupProcessor,\n plainTextProcessor,\n );\n\n return result === undefined ? value.length : result;\n}\n\nexport function spliceString(\n str: string,\n start: number,\n end: number,\n insert: string,\n): string {\n return str.substring(0, start) + insert + str.substring(end);\n}\n\nexport function findStartOfMentionInPlainText<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n indexInPlainText: number,\n): number | undefined {\n let result: number | undefined = undefined;\n\n const markupProcessor = (\n _markup: string,\n _index: number,\n mentionPlainTextIndex: number,\n _id: string,\n display: string,\n ) => {\n if (\n mentionPlainTextIndex <= indexInPlainText &&\n mentionPlainTextIndex + display.length > indexInPlainText\n ) {\n result = mentionPlainTextIndex;\n }\n };\n\n iterateMentionsMarkup(value, dataSources, markupProcessor);\n return result;\n}\n\nexport function getMentions<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n): MentionData[] {\n const mentions: MentionData[] = [];\n iterateMentionsMarkup(\n value,\n dataSources,\n (_match, index, plainTextIndex, id, display, childIndex) => {\n mentions.push({\n id,\n display,\n dataSourceIndex: childIndex,\n index,\n plainTextIndex,\n });\n },\n );\n return mentions;\n}\n\nexport function countSuggestions<T extends BaseSuggestionData>(\n suggestions: SuggestionsMap<T>,\n) {\n return Object.values(suggestions).reduce(\n (acc, { results }) => acc + results.length,\n 0,\n );\n}\n\nexport function getEndOfLastMention<T extends BaseSuggestionData>(\n value: string,\n dataSources: SuggestionDataSource<T>[],\n) {\n const mentions = getMentions(value, dataSources);\n const lastMention = mentions[mentions.length - 1];\n return lastMention\n ? lastMention.plainTextIndex + lastMention.display.length\n : 0;\n}\n\nexport function makeTriggerRegex(\n trigger: string | RegExp,\n allowSpaceInQuery?: boolean,\n) {\n if (trigger instanceof RegExp) {\n return trigger;\n } else {\n const escapedTriggerChar = escapeRegex(trigger);\n\n return new RegExp(\n `(?:^|\\\\s)(${escapedTriggerChar}([^${allowSpaceInQuery ? '' : '\\\\s'}${escapedTriggerChar}]*))$`,\n );\n }\n}\n\nexport function getDataProvider<T extends BaseSuggestionData>(\n data: SuggestionData<T>[] | ((query: string) => Promise<SuggestionData<T>[]>),\n ignoreAccents?: boolean,\n): (query: string) => Promise<SuggestionData<T>[]> {\n if (data instanceof Array) {\n return async function (query: string) {\n const results = [];\n for (let i = 0, l = data.length; i < l; ++i) {\n const display = data[i].display || data[i].id;\n if (getSubstringIndex(display, query, ignoreAccents) >= 0) {\n results.push(data[i]);\n }\n }\n return results;\n };\n }\n return data;\n}\n\nconst getSubstringIndex = (\n str: string,\n substr: string,\n ignoreAccents?: boolean,\n) => {\n if (!ignoreAccents) {\n return str.toLowerCase().indexOf(substr.toLowerCase());\n }\n\n return normalizeString(str).indexOf(normalizeString(substr));\n};\n\nconst removeAccents = (str: string) => {\n let formattedStr = str;\n\n lettersDiacritics.forEach(letterDiacritics => {\n formattedStr = formattedStr.replace(\n letterDiacritics.letters,\n letterDiacritics.base,\n );\n });\n\n return formattedStr;\n};\n\nconst normalizeString = (str: string) => removeAccents(str).toLowerCase();\n\nexport const makeMentionsMarkup = (\n markup: string,\n id: string,\n display?: string,\n) => {\n return markup\n .replace(Placeholders.id, id)\n .replace(Placeholders.display, display || id);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\nimport {\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport List from '@mui/material/List';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport Stack from '@mui/material/Stack';\n\nimport {\n BaseSuggestionData,\n DefaultTrigger,\n SuggestionData,\n SuggestionDataSource,\n Suggestions,\n SuggestionsMap,\n SuggestionsQueryInfo,\n} from 'types/fieldMentions';\n\nimport {\n countSuggestions,\n getDataProvider,\n getEndOfLastMention,\n getPlainText,\n makeTriggerRegex,\n mapPlainTextIndex,\n} from '../utils';\n\nimport { KeyboardListenerProps, SuggestionsOverlayProps } from './props';\nimport Suggestion from './Suggestion';\n\nconst SuggestionsOverlay = <T extends BaseSuggestionData>(\n props: SuggestionsOverlayProps<T>,\n) => {\n const {\n value,\n dataSources,\n selectionStart,\n selectionEnd,\n cursorRef,\n onSelect,\n onMouseDown,\n } = props;\n const ulElement = useRef<HTMLUListElement>(null);\n const [suggestions, setSuggestions] = useState<SuggestionsMap<T>>({});\n const [focusIndex, setFocusIndex] = useState(0);\n const [scrollFocusedIntoView, setScrollFocusedIntoView] = useState(false);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const current = ulElement.current;\n if (!scrollFocusedIntoView || !current || current.children.length === 0) {\n return;\n }\n\n const scrollTop = current.scrollTop;\n\n let { top, bottom } = current.children[focusIndex].getBoundingClientRect();\n const { top: topContainer } = current.getBoundingClientRect();\n top = top - topContainer + scrollTop;\n bottom = bottom - topContainer + scrollTop;\n\n if (top < scrollTop) {\n current.scrollTop = top;\n } else if (bottom > current.offsetHeight + scrollTop) {\n current.scrollTop = bottom - current.offsetHeight;\n }\n\n setScrollFocusedIntoView(false);\n }, [scrollFocusedIntoView, ulElement, focusIndex, setScrollFocusedIntoView]);\n\n const queryDataSource = useCallback(\n async (\n source: SuggestionDataSource<T>,\n query: string,\n sourceIndex: number,\n querySequenceStart: number,\n querySequenceEnd: number,\n fullText: string,\n ) => {\n try {\n const dataProvider = getDataProvider(source.data, source.ignoreAccents);\n setLoading(true);\n const results = await dataProvider(query);\n setSuggestions(s => {\n return {\n ...s,\n [sourceIndex]: {\n queryInfo: {\n childIndex: sourceIndex,\n query,\n querySequenceStart,\n querySequenceEnd,\n plainTextValue: fullText,\n },\n results,\n },\n };\n });\n } catch (err) {\n console.error(err);\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n const dataSourcesRef = useRef(dataSources);\n useEffect(() => {\n dataSourcesRef.current = dataSources;\n }, [dataSources]);\n\n useEffect(() => {\n setSuggestions({});\n\n if (!selectionStart || selectionStart !== selectionEnd) {\n return;\n }\n\n const currentDataSources = dataSourcesRef.current;\n const plainText = getPlainText(value, currentDataSources);\n\n const positionInValue = mapPlainTextIndex(\n plainText,\n currentDataSources,\n selectionStart,\n 'NULL',\n );\n if (!positionInValue) {\n return;\n }\n\n const substringStartIndex = getEndOfLastMention(\n plainText.substring(0, positionInValue),\n currentDataSources,\n );\n const substring = plainText.substring(substringStartIndex, selectionStart);\n\n currentDataSources.forEach((source, sourceIndex) => {\n if (!source) {\n return;\n }\n\n const regex = makeTriggerRegex(\n source.trigger || DefaultTrigger,\n source.allowSpaceInQuery,\n );\n const match = substring.match(regex);\n if (match) {\n const querySequenceStart =\n substringStartIndex + substring.indexOf(match[1], match.index);\n queryDataSource(\n source,\n match[2],\n sourceIndex,\n querySequenceStart,\n querySequenceStart + match[1].length,\n plainText,\n );\n }\n });\n }, [selectionStart, selectionEnd, value, queryDataSource]);\n\n const clearSuggestions = useCallback(() => {\n setSuggestions({});\n setFocusIndex(0);\n }, [setSuggestions, setFocusIndex]);\n\n const handleSelect = useCallback(\n (result: SuggestionData<T>, queryInfo: any) => {\n onSelect(result, queryInfo);\n clearSuggestions();\n },\n [onSelect, clearSuggestions],\n );\n\n const handleMouseEnter = useCallback(\n (focusIndex: number) => {\n setFocusIndex(focusIndex);\n },\n [setFocusIndex],\n );\n\n const renderedSuggestions = useMemo(() => {\n return Object.values(suggestions).reduce(\n (accResults, { results, queryInfo }) => [\n ...accResults,\n ...results.map((result: SuggestionData<T>, index: number) => (\n <Suggestion\n key={result.id}\n id={result.id}\n query={queryInfo.query}\n index={index}\n suggestion={result}\n focused={index === focusIndex}\n onClick={() => handleSelect(result, queryInfo)}\n onMouseEnter={() => handleMouseEnter(index)}\n />\n )),\n ],\n [],\n );\n }, [suggestions, handleSelect, handleMouseEnter, focusIndex]);\n\n if (selectionStart === null || selectionStart !== selectionEnd) {\n return null;\n }\n\n if (!loading && renderedSuggestions.length === 0) {\n return null;\n }\n\n return (\n <>\n <KeyboardListener\n suggestions={suggestions}\n clearSuggestions={clearSuggestions}\n onSelect={handleSelect}\n focusIndex={focusIndex}\n setFocusIndex={setFocusIndex}\n setScrollFocusedIntoView={setScrollFocusedIntoView}\n loading={loading}\n />\n <Popper\n placement=\"bottom-start\"\n {...props.slotProps?.popper}\n sx={{ zIndex: 2, ...props.slotProps?.popper?.sx }}\n open={true}\n anchorEl={cursorRef.current}\n >\n <Paper elevation={8} onMouseDown={onMouseDown}>\n <List\n ref={ulElement}\n sx={{ width: '300px', maxHeight: '40vh', overflow: 'auto' }}\n >\n {renderedSuggestions.length > 0\n ? renderedSuggestions\n : loading && (\n <Stack\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"40vh\"\n >\n <CircularProgress />\n </Stack>\n )}\n </List>\n </Paper>\n </Popper>\n </>\n );\n};\n\nexport default SuggestionsOverlay;\n\nenum Key {\n Tab = 'Tab',\n Return = 'Enter',\n Escape = 'Escape',\n Up = 'ArrowUp',\n Down = 'ArrowDown',\n}\n\nconst KeyboardListener = <T extends BaseSuggestionData>(\n props: KeyboardListenerProps<T>,\n): ReactNode => {\n const {\n suggestions,\n clearSuggestions,\n focusIndex,\n setFocusIndex,\n setScrollFocusedIntoView,\n onSelect,\n loading,\n } = props;\n\n useEffect(() => {\n const shiftFocus = (delta: number) => {\n if (loading) return;\n\n const suggestionsCount = countSuggestions(suggestions);\n setFocusIndex((suggestionsCount + focusIndex + delta) % suggestionsCount);\n setScrollFocusedIntoView(true);\n };\n\n const selectFocused = () => {\n if (loading) return;\n\n const {\n result,\n queryInfo,\n }: { result: SuggestionData<T>; queryInfo: SuggestionsQueryInfo } =\n Object.values(suggestions).reduce(\n (acc: Suggestions<T>[], { results, queryInfo }: Suggestions<T>) => [\n ...acc,\n ...results.map((result: SuggestionData<T>) => ({\n result,\n queryInfo,\n })),\n ],\n [],\n )[focusIndex];\n onSelect(result, queryInfo);\n };\n\n const handleKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case Key.Escape: {\n clearSuggestions();\n break;\n }\n case Key.Down: {\n shiftFocus(+1);\n break;\n }\n case Key.Up: {\n shiftFocus(-1);\n break;\n }\n\n case Key.Return:\n case Key.Tab: {\n selectFocused();\n break;\n }\n default: {\n return;\n }\n }\n\n ev.preventDefault();\n ev.stopPropagation();\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [\n suggestions,\n clearSuggestions,\n focusIndex,\n setFocusIndex,\n onSelect,\n setScrollFocusedIntoView,\n loading,\n ]);\n\n return null;\n};\n","import { ReactNode } from 'react';\nimport ListItemButton from '@mui/material/ListItemButton';\n\nimport {\n BaseSuggestionData,\n DefaultDisplayTransform,\n} from 'types/fieldMentions';\n\nimport { SuggestionProps } from './props';\n\nconst Suggestion = <T extends BaseSuggestionData>(\n props: SuggestionProps<T>,\n): ReactNode => {\n const { renderSuggestion, suggestion, focused, onClick, onMouseEnter } =\n props;\n\n if (renderSuggestion) {\n return renderSuggestion(props);\n }\n\n const display = DefaultDisplayTransform(suggestion.id, suggestion.display);\n return (\n <ListItemButton\n role=\"option\"\n aria-selected={focused}\n selected={focused}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n >\n {display}\n </ListItemButton>\n );\n};\n\nexport default Suggestion;\n"]}
@@ -2,11 +2,11 @@ import { a } from '../../chunk-UVPQR2Q2.js';
2
2
  import { a as a$3 } from '../../chunk-VPG46WNM.js';
3
3
  import '../../chunk-CIGSMWKF.js';
4
4
  import { a as a$2 } from '../../chunk-F65ZXAGV.js';
5
- import { a as a$1 } from '../../chunk-PSWJSHGP.js';
5
+ import { a as a$1 } from '../../chunk-EDUNXVYV.js';
6
6
  import '../../chunk-XNKYJHNL.js';
7
- import '../../chunk-HYJEAKVR.js';
7
+ import '../../chunk-CYWFK4OE.js';
8
+ import '../../chunk-KKVRDMSE.js';
8
9
  import '../../chunk-POTVACYB.js';
9
- import '../../chunk-BLVCNBTJ.js';
10
10
  import '../../chunk-ET3WPQIO.js';
11
11
  import O from '@mui/material/IconButton';
12
12
  import i from '@mui/material/Stack';
@@ -3,6 +3,6 @@ export { Icon as IconEnum } from '../../types/icon.js';
3
3
  import { IconProps } from '../../types/iconProps.js';
4
4
  import '@mui/material/Box';
5
5
 
6
- declare const Icon: react.NamedExoticComponent<Omit<IconProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
6
+ declare const Icon: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<IconProps, "ref"> & react.RefAttributes<SVGSVGElement>>>;
7
7
 
8
8
  export { IconProps, Icon as default };
@@ -19,6 +19,6 @@ interface IconButtonProps extends Omit<IconButtonProps$1, 'color'> {
19
19
  to?: string;
20
20
  }
21
21
 
22
- declare const IconButton: react.NamedExoticComponent<Omit<IconButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
22
+ declare const IconButton: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<IconButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>>;
23
23
 
24
24
  export { IconButton as default };
@@ -10,6 +10,6 @@ interface LabelProps extends BoxProps {
10
10
  startIcon?: React.ReactElement | null;
11
11
  }
12
12
 
13
- declare const Label: react.NamedExoticComponent<Omit<LabelProps, "ref"> & react.RefAttributes<HTMLSpanElement>>;
13
+ declare const Label: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<LabelProps, "ref"> & react.RefAttributes<HTMLSpanElement>>>;
14
14
 
15
15
  export { Label as default };
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import * as _mui_material_TextField from '@mui/material/TextField';
3
3
 
4
- declare const MaskedInput: react.NamedExoticComponent<(Omit<{
4
+ declare const MaskedInput: react.MemoExoticComponent<react.ForwardRefExoticComponent<(Omit<{
5
5
  name: string;
6
6
  mask: {
7
7
  mask: string;
@@ -34,6 +34,6 @@ declare const MaskedInput: react.NamedExoticComponent<(Omit<{
34
34
  value: string;
35
35
  };
36
36
  }) => void;
37
- } & _mui_material_TextField.StandardTextFieldProps, "ref">) & react.RefAttributes<HTMLDivElement>>;
37
+ } & _mui_material_TextField.StandardTextFieldProps, "ref">) & react.RefAttributes<HTMLDivElement>>>;
38
38
 
39
39
  export { MaskedInput as default };
@@ -1,4 +1,4 @@
1
- export { a as default } from '../../chunk-PJR4CLOE.js';
2
- import '../../chunk-IN7SP2ND.js';
1
+ export { a as default } from '../../chunk-IPPNUP2X.js';
2
+ import '../../chunk-I4PPSW36.js';
3
3
  //# sourceMappingURL=out.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -3,6 +3,6 @@ import { NumberInputProps } from '../../types/numberInputProps.js';
3
3
  import 'react-number-format';
4
4
  import '@mui/material/TextField';
5
5
 
6
- declare const NumberInput: react.NamedExoticComponent<Omit<NumberInputProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
6
+ declare const NumberInput: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<NumberInputProps, "ref"> & react.RefAttributes<HTMLDivElement>>>;
7
7
 
8
8
  export { NumberInput as default };
@@ -1,11 +1,10 @@
1
- import * as react from 'react';
2
- import { PropsWithChildren } from 'react';
1
+ import react__default, { PropsWithChildren } from 'react';
3
2
 
4
3
  interface PortalProps {
5
4
  container: string;
6
5
  waitBeforeShow?: number;
7
6
  }
8
7
 
9
- declare const Portal: ({ children, container, waitBeforeShow, }: PropsWithChildren<PortalProps>) => react.ReactPortal | null;
8
+ declare const Portal: ({ children, container, waitBeforeShow, }: PropsWithChildren<PortalProps>) => react__default.ReactPortal | null;
10
9
 
11
10
  export { Portal as default };
@@ -1,3 +1,3 @@
1
- export { a as default } from '../../chunk-IN7SP2ND.js';
1
+ export { a as default } from '../../chunk-I4PPSW36.js';
2
2
  //# sourceMappingURL=out.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -15,6 +15,6 @@ interface ResultProps<TData = unknown> {
15
15
  children?: ReactNode | ((data: TData) => ReactNode);
16
16
  }
17
17
 
18
- declare const Result: <TData>({ isFetching, fetching, isLoading, loading, anError, error, isEmpty, empty, data, children, }: ResultProps<TData>) => string | number | bigint | true | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element;
18
+ declare const Result: <TData>({ isFetching, fetching, isLoading, loading, anError, error, isEmpty, empty, data, children, }: ResultProps<TData>) => string | number | true | Iterable<react.ReactNode> | react_jsx_runtime.JSX.Element;
19
19
 
20
20
  export { Result as default };
@@ -3,7 +3,7 @@ import * as _mui_system from '@mui/system';
3
3
  import * as _mui_material from '@mui/material';
4
4
  import * as simplebar_react from 'simplebar-react';
5
5
 
6
- declare const Scrollbar: react.NamedExoticComponent<simplebar_react.Props & {
6
+ declare const Scrollbar: react.MemoExoticComponent<react.ForwardRefExoticComponent<simplebar_react.Props & {
7
7
  sx?: _mui_system.SxProps<_mui_material.Theme> | undefined;
8
8
  children?: react.ReactNode;
9
9
  fillContent?: boolean | undefined;
@@ -13,6 +13,6 @@ declare const Scrollbar: react.NamedExoticComponent<simplebar_react.Props & {
13
13
  contentWrapper?: _mui_system.SxProps<_mui_material.Theme> | undefined;
14
14
  content?: Partial<_mui_system.SxProps<_mui_material.Theme>> | undefined;
15
15
  } | undefined;
16
- } & react.RefAttributes<HTMLDivElement>>;
16
+ } & react.RefAttributes<HTMLDivElement>>>;
17
17
 
18
18
  export { Scrollbar as default };
@@ -12,6 +12,6 @@ interface TextMaxLineProps extends IProps {
12
12
  variant?: Variant;
13
13
  }
14
14
 
15
- declare const TextMaxLine: react.NamedExoticComponent<Omit<TextMaxLineProps, "ref"> & react.RefAttributes<HTMLAnchorElement>>;
15
+ declare const TextMaxLine: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<TextMaxLineProps, "ref"> & react.RefAttributes<HTMLAnchorElement>>>;
16
16
 
17
17
  export { TextMaxLine as default };
@@ -137,8 +137,12 @@ type CarouselProps = {
137
137
  };
138
138
 
139
139
  type StyledProps = Pick<CarouselOptions, 'axis' | 'slideSpacing'>;
140
- declare const StyledRoot: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & StyledProps, {}, {}>;
141
- declare const StyledContainer: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & StyledProps, {}, {}>;
140
+ declare const StyledRoot: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
141
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
142
+ }, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & StyledProps, {}, {}>;
143
+ declare const StyledContainer: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
144
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
145
+ }, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & StyledProps, {}, {}>;
142
146
  declare function Carousel({ carousel, children, sx, slotProps, ...props }: CarouselProps): react_jsx_runtime.JSX.Element;
143
147
 
144
148
  declare const carouselClasses: {
@@ -176,7 +180,9 @@ declare function CarouselProgressBar({ value, sx, ...other }: BoxProps & Carouse
176
180
 
177
181
  declare function CarouselSlide({ sx, options, children, ...other }: BoxProps & CarouselSlideProps): react_jsx_runtime.JSX.Element;
178
182
 
179
- declare const CarouselThumbs: react.ForwardRefExoticComponent<Omit<_mui_system.BoxOwnProps<Theme> & _mui_material_OverridableComponent.CommonProps & Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_system.BoxOwnProps<Theme>> & CarouselThumbsProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
183
+ declare const CarouselThumbs: react.ForwardRefExoticComponent<Omit<_mui_system.BoxOwnProps<Theme> & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
184
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
185
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_system.BoxOwnProps<Theme>> & CarouselThumbsProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
180
186
  declare function CarouselThumb({ thumbType, sx, src, index, selected, imageRender, thumbAlt, ...other }: ButtonBaseProps & CarouselThumbProps): react_jsx_runtime.JSX.Element | null;
181
187
 
182
188
  declare const useCarousel: (options?: CarouselOptions, plugins?: EmblaPluginType[]) => UseCarouselReturn;
@@ -1,4 +1,6 @@
1
- import { a } from '../../../chunk-BLVCNBTJ.js';
1
+ import { a } from '../../../chunk-KKVRDMSE.js';
2
+ import '../../../chunk-POTVACYB.js';
3
+ import '../../../chunk-ET3WPQIO.js';
2
4
  import { useRef } from 'react';
3
5
  import { useFormContext, Controller } from 'react-hook-form';
4
6
  import M from '@mui/material/FormHelperText';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/form/Codes/index.tsx"],"names":["useRef","Controller","useFormContext","FormHelperText","Stack","TextField","jsx","jsxs","Codes","keyName","inputs","rules","tabIndex","autoFocusFirst","other","codesRef","control","setValue","errors","handlePaste","event","data","input","index","handleChangeWithNextField","handleChange","maxLength","value","name","fieldIndex","fieldIntIndex","nextfield","useEventListener_default","hasCodeNotFilled","field","error","Codes_default"],"mappings":"+CAAA,OAAsC,UAAAA,MAAc,QACpD,OAAS,cAAAC,EAAY,kBAAAC,MAAsB,kBAC3C,OAAOC,MAAoB,+BAC3B,OAAOC,MAAW,sBAClB,OAAOC,MAAe,0BA6DlB,OASU,OAAAC,EATV,QAAAC,MAAA,oBAvDJ,IAAMC,EAAQ,CAAC,CACb,QAAAC,EACA,OAAAC,EAAS,CAAC,EACV,MAAAC,EACA,SAAAC,EACA,eAAAC,EAAiB,GACjB,GAAGC,CACL,IAAkB,CAChB,IAAMC,EAAWf,EAAuB,IAAI,EAEtC,CACJ,QAAAgB,EACA,SAAAC,EACA,UAAW,CAAE,OAAAC,CAAO,CACtB,EAAIhB,EAAe,EAEbiB,EAAeC,GAA0B,CAC7C,IAAMC,EAAOD,EAAM,cAAc,QAAQ,MAAM,EAAE,MAAM,EAAE,EAEzDV,EAAO,IAAI,CAACY,EAAOC,IAAUN,EAASK,EAAOD,EAAKE,CAAK,CAAC,CAAC,EAEzDH,EAAM,eAAe,CACvB,EAEMI,EAA4B,CAChCJ,EACAK,IACG,CACH,GAAM,CAAE,UAAAC,EAAW,MAAAC,EAAO,KAAAC,CAAK,EAAIR,EAAM,OAEnCS,EAAaD,EAAK,QAAQnB,EAAS,EAAE,EAErCqB,EAAgB,OAAOD,CAAU,EAEjCE,EAAgC,SAAS,cAC7C,cAActB,IAAUqB,EAAgB,IAC1C,EAEIH,EAAM,OAASD,IACjBN,EAAM,OAAO,MAAQO,EAAM,CAAC,GAG1BA,EAAM,QAAUD,GAAaI,EAAgB,GAAKC,IAAc,MACjEA,EAA0B,MAAM,EAGnCN,EAAaL,CAAK,CACpB,EAGAY,EAAiB,QAASb,EAAoBJ,CAAQ,EAEtD,IAAMkB,EAAmBvB,EAAO,KAAKY,GAASJ,EAAOI,CAAK,CAAC,EAE3D,OACEf,EAACH,EAAA,CACC,UAAAE,EAACF,EAAA,CAAM,UAAU,MAAM,QAAS,EAAG,eAAe,SAAS,IAAKW,EAC7D,SAAAL,EAAO,IAAI,CAACkB,EAAML,IACjBjB,EAACL,EAAA,CAEC,KAAM,GAAGQ,IAAUc,EAAQ,IAC3B,QAASP,EACT,MAAOL,EACP,OAAQ,CAAC,CAAE,MAAAuB,EAAO,WAAY,CAAE,MAAAC,CAAM,CAAE,IACtC7B,EAACD,EAAA,CACE,GAAGS,EACH,GAAGoB,EACJ,aAAa,OACb,MAAO,CAAC,CAACC,EACT,UAAWtB,GAAkBU,IAAU,EACvC,YAAY,IACZ,SAAWH,GAAyC,CAClDI,EAA0BJ,EAAOc,EAAM,QAAQ,CACjD,EACA,QAASd,GAASA,EAAM,cAAc,OAAO,EAC7C,WAAY,CACV,GAAI,CACF,MAAO,CAAE,GAAI,GAAI,GAAI,EAAG,EACxB,OAAQ,CAAE,GAAI,GAAI,GAAI,EAAG,EACzB,UAAW,CAAE,EAAG,EAAG,UAAW,QAAS,CACzC,CACF,EACA,WAAY,CACV,UAAW,EACX,KAAM,SACN,KAAM,GAAGX,IAAUc,EAAQ,IAC3B,SAAAX,CACF,EACF,GA7BGgB,CA+BP,CACD,EACH,EAECK,GACC3B,EAACH,EAAA,CAAe,MAAK,GAAC,GAAI,CAAE,GAAI,CAAE,EAAG,yCAErC,GAEJ,CAEJ,EAEOiC,EAAQ5B","sourcesContent":["import { ChangeEvent, ClipboardEvent, useRef } from 'react';\nimport { Controller, useFormContext } from 'react-hook-form';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\n\nimport useEventListener from 'hooks/useEventListener';\n\nimport { CodesProps } from './props';\n\nconst Codes = ({\n keyName,\n inputs = [],\n rules,\n tabIndex,\n autoFocusFirst = false,\n ...other\n}: CodesProps) => {\n const codesRef = useRef<HTMLDivElement>(null);\n\n const {\n control,\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const handlePaste = (event: ClipboardEvent) => {\n const data = event.clipboardData.getData('text').split('');\n\n inputs.map((input, index) => setValue(input, data[index]));\n\n event.preventDefault();\n };\n\n const handleChangeWithNextField = (\n event: ChangeEvent<HTMLInputElement>,\n handleChange: (event: ChangeEvent<HTMLInputElement>) => void,\n ) => {\n const { maxLength, value, name } = event.target;\n\n const fieldIndex = name.replace(keyName, '');\n\n const fieldIntIndex = Number(fieldIndex);\n\n const nextfield: HTMLElement | null = document.querySelector(\n `input[name=${keyName}${fieldIntIndex + 1}]`,\n );\n\n if (value.length > maxLength) {\n event.target.value = value[0];\n }\n\n if (value.length >= maxLength && fieldIntIndex < 6 && nextfield !== null) {\n (nextfield as HTMLElement).focus();\n }\n\n handleChange(event);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useEventListener('paste', handlePaste as any, codesRef);\n\n const hasCodeNotFilled = inputs.some(input => errors[input]);\n\n return (\n <Stack>\n <Stack direction=\"row\" spacing={2} justifyContent=\"center\" ref={codesRef}>\n {inputs.map((name, index) => (\n <Controller\n key={name}\n name={`${keyName}${index + 1}`}\n control={control}\n rules={rules}\n render={({ field, fieldState: { error } }) => (\n <TextField\n {...other}\n {...field}\n autoComplete=\"none\"\n error={!!error}\n autoFocus={autoFocusFirst && index === 0}\n placeholder=\"-\"\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n handleChangeWithNextField(event, field.onChange);\n }}\n onFocus={event => event.currentTarget.select()}\n InputProps={{\n sx: {\n width: { xs: 36, sm: 56 },\n height: { xs: 36, sm: 56 },\n '& input': { p: 0, textAlign: 'center' },\n },\n }}\n inputProps={{\n maxLength: 1,\n type: 'number',\n name: `${keyName}${index + 1}`,\n tabIndex,\n }}\n />\n )}\n />\n ))}\n </Stack>\n\n {hasCodeNotFilled && (\n <FormHelperText error sx={{ px: 2 }}>\n Código é obrigatório\n </FormHelperText>\n )}\n </Stack>\n );\n};\n\nexport default Codes;\n"]}
1
+ {"version":3,"sources":["../../../../src/components/form/Codes/index.tsx"],"names":["useRef","Controller","useFormContext","FormHelperText","Stack","TextField","jsx","jsxs","Codes","keyName","inputs","rules","tabIndex","autoFocusFirst","other","codesRef","control","setValue","errors","handlePaste","event","data","input","index","handleChangeWithNextField","handleChange","maxLength","value","name","fieldIndex","fieldIntIndex","nextfield","useEventListener_default","hasCodeNotFilled","field","error","Codes_default"],"mappings":"qHAAA,OAAsC,UAAAA,MAAc,QACpD,OAAS,cAAAC,EAAY,kBAAAC,MAAsB,kBAC3C,OAAOC,MAAoB,+BAC3B,OAAOC,MAAW,sBAClB,OAAOC,MAAe,0BA6DlB,OASU,OAAAC,EATV,QAAAC,MAAA,oBAvDJ,IAAMC,EAAQ,CAAC,CACb,QAAAC,EACA,OAAAC,EAAS,CAAC,EACV,MAAAC,EACA,SAAAC,EACA,eAAAC,EAAiB,GACjB,GAAGC,CACL,IAAkB,CAChB,IAAMC,EAAWf,EAAuB,IAAI,EAEtC,CACJ,QAAAgB,EACA,SAAAC,EACA,UAAW,CAAE,OAAAC,CAAO,CACtB,EAAIhB,EAAe,EAEbiB,EAAeC,GAA0B,CAC7C,IAAMC,EAAOD,EAAM,cAAc,QAAQ,MAAM,EAAE,MAAM,EAAE,EAEzDV,EAAO,IAAI,CAACY,EAAOC,IAAUN,EAASK,EAAOD,EAAKE,CAAK,CAAC,CAAC,EAEzDH,EAAM,eAAe,CACvB,EAEMI,EAA4B,CAChCJ,EACAK,IACG,CACH,GAAM,CAAE,UAAAC,EAAW,MAAAC,EAAO,KAAAC,CAAK,EAAIR,EAAM,OAEnCS,EAAaD,EAAK,QAAQnB,EAAS,EAAE,EAErCqB,EAAgB,OAAOD,CAAU,EAEjCE,EAAgC,SAAS,cAC7C,cAActB,IAAUqB,EAAgB,IAC1C,EAEIH,EAAM,OAASD,IACjBN,EAAM,OAAO,MAAQO,EAAM,CAAC,GAG1BA,EAAM,QAAUD,GAAaI,EAAgB,GAAKC,IAAc,MACjEA,EAA0B,MAAM,EAGnCN,EAAaL,CAAK,CACpB,EAGAY,EAAiB,QAASb,EAAoBJ,CAAQ,EAEtD,IAAMkB,EAAmBvB,EAAO,KAAKY,GAASJ,EAAOI,CAAK,CAAC,EAE3D,OACEf,EAACH,EAAA,CACC,UAAAE,EAACF,EAAA,CAAM,UAAU,MAAM,QAAS,EAAG,eAAe,SAAS,IAAKW,EAC7D,SAAAL,EAAO,IAAI,CAACkB,EAAML,IACjBjB,EAACL,EAAA,CAEC,KAAM,GAAGQ,IAAUc,EAAQ,IAC3B,QAASP,EACT,MAAOL,EACP,OAAQ,CAAC,CAAE,MAAAuB,EAAO,WAAY,CAAE,MAAAC,CAAM,CAAE,IACtC7B,EAACD,EAAA,CACE,GAAGS,EACH,GAAGoB,EACJ,aAAa,OACb,MAAO,CAAC,CAACC,EACT,UAAWtB,GAAkBU,IAAU,EACvC,YAAY,IACZ,SAAWH,GAAyC,CAClDI,EAA0BJ,EAAOc,EAAM,QAAQ,CACjD,EACA,QAASd,GAASA,EAAM,cAAc,OAAO,EAC7C,WAAY,CACV,GAAI,CACF,MAAO,CAAE,GAAI,GAAI,GAAI,EAAG,EACxB,OAAQ,CAAE,GAAI,GAAI,GAAI,EAAG,EACzB,UAAW,CAAE,EAAG,EAAG,UAAW,QAAS,CACzC,CACF,EACA,WAAY,CACV,UAAW,EACX,KAAM,SACN,KAAM,GAAGX,IAAUc,EAAQ,IAC3B,SAAAX,CACF,EACF,GA7BGgB,CA+BP,CACD,EACH,EAECK,GACC3B,EAACH,EAAA,CAAe,MAAK,GAAC,GAAI,CAAE,GAAI,CAAE,EAAG,yCAErC,GAEJ,CAEJ,EAEOiC,EAAQ5B","sourcesContent":["import { ChangeEvent, ClipboardEvent, useRef } from 'react';\nimport { Controller, useFormContext } from 'react-hook-form';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\n\nimport useEventListener from 'hooks/useEventListener';\n\nimport { CodesProps } from './props';\n\nconst Codes = ({\n keyName,\n inputs = [],\n rules,\n tabIndex,\n autoFocusFirst = false,\n ...other\n}: CodesProps) => {\n const codesRef = useRef<HTMLDivElement>(null);\n\n const {\n control,\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const handlePaste = (event: ClipboardEvent) => {\n const data = event.clipboardData.getData('text').split('');\n\n inputs.map((input, index) => setValue(input, data[index]));\n\n event.preventDefault();\n };\n\n const handleChangeWithNextField = (\n event: ChangeEvent<HTMLInputElement>,\n handleChange: (event: ChangeEvent<HTMLInputElement>) => void,\n ) => {\n const { maxLength, value, name } = event.target;\n\n const fieldIndex = name.replace(keyName, '');\n\n const fieldIntIndex = Number(fieldIndex);\n\n const nextfield: HTMLElement | null = document.querySelector(\n `input[name=${keyName}${fieldIntIndex + 1}]`,\n );\n\n if (value.length > maxLength) {\n event.target.value = value[0];\n }\n\n if (value.length >= maxLength && fieldIntIndex < 6 && nextfield !== null) {\n (nextfield as HTMLElement).focus();\n }\n\n handleChange(event);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useEventListener('paste', handlePaste as any, codesRef);\n\n const hasCodeNotFilled = inputs.some(input => errors[input]);\n\n return (\n <Stack>\n <Stack direction=\"row\" spacing={2} justifyContent=\"center\" ref={codesRef}>\n {inputs.map((name, index) => (\n <Controller\n key={name}\n name={`${keyName}${index + 1}`}\n control={control}\n rules={rules}\n render={({ field, fieldState: { error } }) => (\n <TextField\n {...other}\n {...field}\n autoComplete=\"none\"\n error={!!error}\n autoFocus={autoFocusFirst && index === 0}\n placeholder=\"-\"\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n handleChangeWithNextField(event, field.onChange);\n }}\n onFocus={event => event.currentTarget.select()}\n InputProps={{\n sx: {\n width: { xs: 36, sm: 56 },\n height: { xs: 36, sm: 56 },\n '& input': { p: 0, textAlign: 'center' },\n },\n }}\n inputProps={{\n maxLength: 1,\n type: 'number',\n name: `${keyName}${index + 1}`,\n tabIndex,\n }}\n />\n )}\n />\n ))}\n </Stack>\n\n {hasCodeNotFilled && (\n <FormHelperText error sx={{ px: 2 }}>\n Código é obrigatório\n </FormHelperText>\n )}\n </Stack>\n );\n};\n\nexport default Codes;\n"]}
@@ -1,8 +1,8 @@
1
- export { a as default } from '../chunk-PSWJSHGP.js';
1
+ export { a as default } from '../chunk-EDUNXVYV.js';
2
2
  import '../chunk-XNKYJHNL.js';
3
- import '../chunk-HYJEAKVR.js';
3
+ import '../chunk-CYWFK4OE.js';
4
+ import '../chunk-KKVRDMSE.js';
4
5
  import '../chunk-POTVACYB.js';
5
- import '../chunk-BLVCNBTJ.js';
6
6
  import '../chunk-ET3WPQIO.js';
7
7
  //# sourceMappingURL=out.js.map
8
8
  //# sourceMappingURL=useCollapseSidebarOnMount.js.map
@@ -1,3 +1,5 @@
1
- export { a as default } from '../chunk-BLVCNBTJ.js';
1
+ export { a as default } from '../chunk-KKVRDMSE.js';
2
+ import '../chunk-POTVACYB.js';
3
+ import '../chunk-ET3WPQIO.js';
2
4
  //# sourceMappingURL=out.js.map
3
5
  //# sourceMappingURL=useEventListener.js.map
@@ -1,6 +1,6 @@
1
- export { a as default } from '../chunk-HYJEAKVR.js';
1
+ export { a as default } from '../chunk-CYWFK4OE.js';
2
+ import '../chunk-KKVRDMSE.js';
2
3
  import '../chunk-POTVACYB.js';
3
- import '../chunk-BLVCNBTJ.js';
4
4
  import '../chunk-ET3WPQIO.js';
5
5
  //# sourceMappingURL=out.js.map
6
6
  //# sourceMappingURL=useLocalStorage.js.map
@@ -1,4 +1,6 @@
1
- import { a } from '../chunk-BLVCNBTJ.js';
1
+ import { a } from '../chunk-KKVRDMSE.js';
2
+ import '../chunk-POTVACYB.js';
3
+ import '../chunk-ET3WPQIO.js';
2
4
 
3
5
  var u=(o,r,s="mousedown")=>{a(s,e=>{let t=o?.current;!t||t.contains(e.target)||r(e);});},m=u;
4
6
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useOnClickOutside.ts"],"names":["useOnClickOutside","ref","handler","mouseEvent","useEventListener_default","event","el","useOnClickOutside_default"],"mappings":"yCAMA,IAAMA,EAAoB,CACxBC,EACAC,EACAC,EAAsC,cACnC,CACHC,EAAiBD,EAAYE,GAAS,CACpC,IAAMC,EAAKL,GAAK,QAGZ,CAACK,GAAMA,EAAG,SAASD,EAAM,MAAc,GAI3CH,EAAQG,CAAK,CACf,CAAC,CACH,EAEOE,EAAQP","sourcesContent":["import { RefObject } from 'react';\n\nimport useEventListener from './useEventListener';\n\ntype Handler = (event: MouseEvent) => void;\n\nconst useOnClickOutside = <T extends HTMLElement = HTMLElement>(\n ref: RefObject<T>,\n handler: Handler,\n mouseEvent: 'mousedown' | 'mouseup' = 'mousedown',\n) => {\n useEventListener(mouseEvent, event => {\n const el = ref?.current;\n\n // Do nothing if clicking ref's element or descendent elements\n if (!el || el.contains(event.target as Node)) {\n return;\n }\n\n handler(event);\n });\n};\n\nexport default useOnClickOutside;\n"]}
1
+ {"version":3,"sources":["../../src/hooks/useOnClickOutside.ts"],"names":["useOnClickOutside","ref","handler","mouseEvent","useEventListener_default","event","el","useOnClickOutside_default"],"mappings":"mGAMA,IAAMA,EAAoB,CACxBC,EACAC,EACAC,EAAsC,cACnC,CACHC,EAAiBD,EAAYE,GAAS,CACpC,IAAMC,EAAKL,GAAK,QAGZ,CAACK,GAAMA,EAAG,SAASD,EAAM,MAAc,GAI3CH,EAAQG,CAAK,CACf,CAAC,CACH,EAEOE,EAAQP","sourcesContent":["import { RefObject } from 'react';\n\nimport useEventListener from './useEventListener';\n\ntype Handler = (event: MouseEvent) => void;\n\nconst useOnClickOutside = <T extends HTMLElement = HTMLElement>(\n ref: RefObject<T>,\n handler: Handler,\n mouseEvent: 'mousedown' | 'mouseup' = 'mousedown',\n) => {\n useEventListener(mouseEvent, event => {\n const el = ref?.current;\n\n // Do nothing if clicking ref's element or descendent elements\n if (!el || el.contains(event.target as Node)) {\n return;\n }\n\n handler(event);\n });\n};\n\nexport default useOnClickOutside;\n"]}
@@ -5,12 +5,12 @@ import { ReactNode } from 'react';
5
5
 
6
6
  declare const useSnackbar: () => {
7
7
  toast: ((message: ReactNode | (() => ReactNode), data?: ExternalToast | undefined) => string | number) & {
8
- success: (message: string | number | bigint | boolean | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
9
- info: (message: string | number | bigint | boolean | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
10
- warning: (message: string | number | bigint | boolean | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
11
- error: (message: string | number | bigint | boolean | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
12
- custom: (jsx: (id: string | number) => react.ReactElement<unknown, string | react.JSXElementConstructor<any>>, data?: ExternalToast | undefined) => string | number;
13
- message: (message: string | number | bigint | boolean | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
8
+ success: (message: string | number | boolean | react.ReactElement<any, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
9
+ info: (message: string | number | boolean | react.ReactElement<any, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
10
+ warning: (message: string | number | boolean | react.ReactElement<any, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
11
+ error: (message: string | number | boolean | react.ReactElement<any, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
12
+ custom: (jsx: (id: string | number) => react.ReactElement<any, string | react.JSXElementConstructor<any>>, data?: ExternalToast | undefined) => string | number;
13
+ message: (message: string | number | boolean | react.ReactElement<any, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
14
14
  promise: <ToastData>(promise: Promise<ToastData> | (() => Promise<ToastData>), data?: ({
15
15
  className?: string | undefined;
16
16
  style?: react.CSSProperties | undefined;
@@ -45,7 +45,7 @@ declare const useSnackbar: () => {
45
45
  unwrap: () => Promise<ToastData>;
46
46
  };
47
47
  dismiss: (id?: string | number | undefined) => string | number;
48
- loading: (message: string | number | bigint | boolean | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
48
+ loading: (message: string | number | boolean | react.ReactElement<any, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | react.ReactPortal | (() => ReactNode) | null | undefined, data?: ExternalToast | undefined) => string | number;
49
49
  } & {
50
50
  getHistory: () => (sonner.ToastT | sonner.ToastToDismiss)[];
51
51
  getToasts: () => (sonner.ToastT | sonner.ToastToDismiss)[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zydon/common",
3
- "version": "2.7.80",
3
+ "version": "2.7.82",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -14,6 +14,10 @@
14
14
  "url": "https://github.com/zydontecnologia/common-react"
15
15
  },
16
16
  "homepage": "https://github.com/zydontecnologia/common-react",
17
+ "resolutions": {
18
+ "@types/react": "18.3.27",
19
+ "@types/react-dom": "18.3.7"
20
+ },
17
21
  "scripts": {
18
22
  "dev": "vite",
19
23
  "test": "jest --ci --collectCoverage=false",
@@ -108,9 +112,9 @@
108
112
  "@types/jest-axe": "^3.5.9",
109
113
  "@types/lodash": "^4.17.20",
110
114
  "@types/node": "^20.0.0",
111
- "@types/react": "^19.2.7",
115
+ "@types/react": "18.3.27",
112
116
  "@types/react-color": "^3.0.13",
113
- "@types/react-dom": "^19.2.3",
117
+ "@types/react-dom": "18.3.7",
114
118
  "@types/react-window": "^1.8.8",
115
119
  "@typescript-eslint/eslint-plugin": "^6.4.1",
116
120
  "@typescript-eslint/parser": "^6.4.1",
@@ -133,8 +137,8 @@
133
137
  "postcss": "^8.4.41",
134
138
  "postcss-import": "^16.1.0",
135
139
  "prettier": "^3.0.2",
136
- "react": "^19.2.1",
137
- "react-dom": "^19.2.1",
140
+ "react": "^18.3.1",
141
+ "react-dom": "^18.3.1",
138
142
  "react-hook-form": "^7.53.0",
139
143
  "ts-jest": "^29.2.5",
140
144
  "tsup": "6.6.0",
@@ -177,8 +181,8 @@
177
181
  "@mui/system": "^5.15.14 || ^5.16.0 || ^5.17.0 || ^5.18.0",
178
182
  "@mui/x-data-grid-premium": "^7.29.12",
179
183
  "@mui/x-date-pickers-pro": "^7.29.4",
180
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
181
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
184
+ "react": "^18.3.1",
185
+ "react-dom": "^18.3.1",
182
186
  "react-hook-form": "^7.53.0"
183
187
  },
184
188
  "jest-junit": {
@@ -1,7 +0,0 @@
1
- import { useEffectEvent, useEffect } from 'react';
2
-
3
- function l(n,v,t,o){let d=useEffectEvent(v);useEffect(()=>{let e=t?.current||window;if(!(e&&e.addEventListener))return;let i=s=>d(s);return e.addEventListener(n,i,o),()=>{e.removeEventListener(n,i);}},[t,n,o,d]);}var u=l;
4
-
5
- export { u as a };
6
- //# sourceMappingURL=out.js.map
7
- //# sourceMappingURL=chunk-BLVCNBTJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/useEventListener.ts"],"names":["useEffect","useEffectEvent","useEventListener","eventName","handler","element","options","stableHandler","targetElement","eventListener","event","useEventListener_default"],"mappings":"AAAA,OAAoB,aAAAA,EAAW,kBAAAC,MAAsB,QA6BrD,SAASC,EAKPC,EACAC,EAGAC,EACAC,EACA,CACA,IAAMC,EAAgBN,EAAeG,CAAO,EAE5CJ,EAAU,IAAM,CACd,IAAMQ,EAA4BH,GAAS,SAAW,OACtD,GAAI,EAAEG,GAAiBA,EAAc,kBACnC,OAGF,IAAMC,EAAgCC,GAASH,EAAcG,CAAK,EAElE,OAAAF,EAAc,iBAAiBL,EAAWM,EAAeH,CAAO,EAEzD,IAAM,CACXE,EAAc,oBAAoBL,EAAWM,CAAa,CAC5D,CACF,EAAG,CAACJ,EAASF,EAAWG,EAASC,CAAa,CAAC,CACjD,CAEA,IAAOI,EAAQT","sourcesContent":["import { RefObject, useEffect, useEffectEvent } from 'react';\n\n// Window Event based useEventListener interface\nfunction useEventListener<K extends keyof WindowEventMap>(\n eventName: K,\n handler: (event: WindowEventMap[K]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\n// Element Event based useEventListener interface\nfunction useEventListener<\n K extends keyof HTMLElementEventMap,\n T extends HTMLElement = HTMLDivElement,\n>(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n element: RefObject<T | null>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\n// Document Event based useEventListener interface\nfunction useEventListener<K extends keyof DocumentEventMap>(\n eventName: K,\n handler: (event: DocumentEventMap[K]) => void,\n element: RefObject<Document | null>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n KW extends keyof WindowEventMap,\n KH extends keyof HTMLElementEventMap,\n T extends HTMLElement | void = void,\n>(\n eventName: KW | KH,\n handler: (\n event: WindowEventMap[KW] | HTMLElementEventMap[KH] | Event,\n ) => void,\n element?: RefObject<T | null>,\n options?: boolean | AddEventListenerOptions,\n) {\n const stableHandler = useEffectEvent(handler);\n\n useEffect(() => {\n const targetElement: T | Window = element?.current || window;\n if (!(targetElement && targetElement.addEventListener)) {\n return;\n }\n\n const eventListener: typeof handler = event => stableHandler(event);\n\n targetElement.addEventListener(eventName, eventListener, options);\n\n return () => {\n targetElement.removeEventListener(eventName, eventListener);\n };\n }, [element, eventName, options, stableHandler]);\n}\n\nexport default useEventListener;\n"]}
@@ -1,8 +0,0 @@
1
- import { useState, useEffect } from 'react';
2
- import { createPortal } from 'react-dom';
3
-
4
- var d=({children:e,container:o,waitBeforeShow:t=50})=>{let[m,n]=useState(!1);return useEffect(()=>{let s=setTimeout(()=>n(!0),t);return ()=>clearTimeout(s)},[t]),t?m?createPortal(e,document.getElementById(o)||document.body):null:createPortal(e,document.getElementById(o)||document.body)},P=d;
5
-
6
- export { P as a };
7
- //# sourceMappingURL=out.js.map
8
- //# sourceMappingURL=chunk-IN7SP2ND.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Portal/index.tsx"],"names":["useEffect","useState","createPortal","Portal","children","container","waitBeforeShow","isShown","setIsShown","timer","Portal_default"],"mappings":"AAAA,OAA4B,aAAAA,EAAW,YAAAC,MAAgB,QACvD,OAAS,gBAAAC,MAAoB,YAI7B,IAAMC,EAAS,CAAC,CACd,SAAAC,EACA,UAAAC,EACA,eAAAC,EAAiB,EACnB,IAAsC,CACpC,GAAM,CAACC,EAASC,CAAU,EAAIP,EAAS,EAAK,EAO5C,OALAD,EAAU,IAAM,CACd,IAAMS,EAAQ,WAAW,IAAMD,EAAW,EAAI,EAAGF,CAAc,EAC/D,MAAO,IAAM,aAAaG,CAAK,CACjC,EAAG,CAACH,CAAc,CAAC,EAEdA,EAOEC,EACHL,EACEE,EACA,SAAS,eAAeC,CAAS,GAAK,SAAS,IACjD,EACA,KAXKH,EACLE,EACA,SAAS,eAAeC,CAAS,GAAK,SAAS,IACjD,CASJ,EAEOK,EAAQP","sourcesContent":["import { PropsWithChildren, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { PortalProps } from './props';\n\nconst Portal = ({\n children,\n container,\n waitBeforeShow = 50,\n}: PropsWithChildren<PortalProps>) => {\n const [isShown, setIsShown] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => setIsShown(true), waitBeforeShow);\n return () => clearTimeout(timer);\n }, [waitBeforeShow]);\n\n if (!waitBeforeShow) {\n return createPortal(\n children,\n document.getElementById(container) || document.body,\n );\n }\n\n return isShown\n ? createPortal(\n children,\n document.getElementById(container) || document.body,\n )\n : null;\n};\n\nexport default Portal;\n"]}