@basic-ui/material 0.1.10 → 0.1.13

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 (102) hide show
  1. package/build/cjs/index.js +36 -31
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Alert/Alert.d.ts +1 -1
  4. package/build/esm/AppBar/AppBar.d.ts +1 -1
  5. package/build/esm/AppBar/AppBarButton.d.ts +1 -1
  6. package/build/esm/Badge/Badge.d.ts +1 -1
  7. package/build/esm/BottomSheet/BottomSheet.d.ts +1 -1
  8. package/build/esm/BottomSheet/BottomSheetSurface.d.ts +1 -1
  9. package/build/esm/Button/BaseButton.d.ts +1 -1
  10. package/build/esm/Button/Button.d.ts +1 -1
  11. package/build/esm/Button/FilledButton.d.ts +1 -1
  12. package/build/esm/Button/FloatingActionButton.d.ts +7 -0
  13. package/build/esm/Button/FloatingActionButton.js +8 -0
  14. package/build/esm/Button/FloatingActionButton.js.map +1 -0
  15. package/build/esm/Button/OutlinedButton.d.ts +1 -3
  16. package/build/esm/Button/TransparentButton.d.ts +1 -1
  17. package/build/esm/CheckBox/CheckBox.d.ts +1 -1
  18. package/build/esm/CheckBox/CheckBoxIcon.d.ts +1 -1
  19. package/build/esm/Chip/ButtonChip.d.ts +1 -1
  20. package/build/esm/Chip/ChipBase.d.ts +1 -1
  21. package/build/esm/Chip/ChoiceChip.d.ts +1 -1
  22. package/build/esm/ColorMode/ColorModeProvider.js +10 -3
  23. package/build/esm/ColorMode/ColorModeProvider.js.map +1 -1
  24. package/build/esm/Combobox/Combobox.d.ts +7 -7
  25. package/build/esm/Dialog/Dialog.d.ts +1 -1
  26. package/build/esm/Dialog/DialogBackdrop.d.ts +1 -1
  27. package/build/esm/Dialog/DialogContainer.d.ts +1 -1
  28. package/build/esm/Dialog/DialogSurface.d.ts +1 -1
  29. package/build/esm/Dialog/Scrim.d.ts +1 -1
  30. package/build/esm/Dialog/useDialogAnimation.js +1 -1
  31. package/build/esm/Dialog/useDialogAnimation.js.map +1 -1
  32. package/build/esm/Divider/Divider.d.ts +1 -1
  33. package/build/esm/LineRipple/LineRipple.d.ts +1 -1
  34. package/build/esm/Link/Link.d.ts +1 -1
  35. package/build/esm/List/List.d.ts +1 -1
  36. package/build/esm/ListItem/ListItem.d.ts +1 -1
  37. package/build/esm/Menu/Menu.d.ts +4 -4
  38. package/build/esm/Paper/Paper.d.ts +1 -1
  39. package/build/esm/ProgressSpinner/ProgressSpinner.d.ts +1 -1
  40. package/build/esm/RadioButton/RadioGroup.d.ts +1 -1
  41. package/build/esm/Ripple/keyframes.js +0 -2
  42. package/build/esm/Ripple/keyframes.js.map +1 -1
  43. package/build/esm/Ripple/useRipple.js +4 -4
  44. package/build/esm/Ripple/useRipple.js.map +1 -1
  45. package/build/esm/Select/SelectIcon.d.ts +1 -1
  46. package/build/esm/SelectItem/SelectItem.d.ts +1 -1
  47. package/build/esm/SelectionControl/SelectionControlLabel.d.ts +1 -1
  48. package/build/esm/SelectionControl/SelectionControlText.d.ts +1 -1
  49. package/build/esm/Skeleton/DelayAppearance.d.ts +1 -1
  50. package/build/esm/Skeleton/Skeleton.d.ts +1 -1
  51. package/build/esm/Snackbar/Snackbar.d.ts +1 -1
  52. package/build/esm/Snackbar/Stack.d.ts +2 -0
  53. package/build/esm/Snackbar/Stack.js.map +1 -1
  54. package/build/esm/Switch/Switch.d.ts +1 -1
  55. package/build/esm/Tab/Tab.d.ts +1 -1
  56. package/build/esm/Tab/TabList.d.ts +1 -1
  57. package/build/esm/Tab/TabPanel.d.ts +1 -1
  58. package/build/esm/TabIndicator/TabIndicator.d.ts +1 -1
  59. package/build/esm/Table/Table.d.ts +1 -1
  60. package/build/esm/Table/TableBody.d.ts +1 -1
  61. package/build/esm/Table/TableCell.d.ts +1 -1
  62. package/build/esm/Table/TableHead.d.ts +1 -1
  63. package/build/esm/Table/TableRow.d.ts +1 -1
  64. package/build/esm/Text/Text.d.ts +1 -1
  65. package/build/esm/TextField/FilledContainer.d.ts +1 -1
  66. package/build/esm/TextField/HelperText.d.ts +1 -1
  67. package/build/esm/TextField/Input.d.ts +1 -1
  68. package/build/esm/TextField/OutlinedContainer.d.ts +1 -1
  69. package/build/esm/TextField/TextField.d.ts +1 -1
  70. package/build/esm/ThemeExplorer/ColorPicker.d.ts +8 -0
  71. package/build/esm/ThemeExplorer/ColorPicker.js +76 -0
  72. package/build/esm/ThemeExplorer/ColorPicker.js.map +1 -0
  73. package/build/esm/ThemeExplorer/TextFieldColorPicker.d.ts +9 -0
  74. package/build/esm/ThemeExplorer/TextFieldColorPicker.js +100 -0
  75. package/build/esm/ThemeExplorer/TextFieldColorPicker.js.map +1 -0
  76. package/build/esm/ThemeExplorer/ThemeColors.d.ts +5 -0
  77. package/build/esm/ThemeExplorer/ThemeColors.js +80 -0
  78. package/build/esm/ThemeExplorer/ThemeColors.js.map +1 -0
  79. package/build/esm/ThemeExplorer/components.d.ts +31 -0
  80. package/build/esm/ThemeExplorer/components.js +184 -0
  81. package/build/esm/ThemeExplorer/components.js.map +1 -0
  82. package/build/esm/ThemeExplorer/makeColorScheme.d.ts +66 -0
  83. package/build/esm/ThemeExplorer/makeColorScheme.js +66 -0
  84. package/build/esm/ThemeExplorer/makeColorScheme.js.map +1 -0
  85. package/build/esm/ThemeExplorer/useDeferredColor.d.ts +3 -0
  86. package/build/esm/ThemeExplorer/useDeferredColor.js +11 -0
  87. package/build/esm/ThemeExplorer/useDeferredColor.js.map +1 -0
  88. package/build/esm/ThemeExplorer/useLocalStorageCachedState.d.ts +1 -0
  89. package/build/esm/ThemeExplorer/useLocalStorageCachedState.js +11 -0
  90. package/build/esm/ThemeExplorer/useLocalStorageCachedState.js.map +1 -0
  91. package/build/esm/Tooltip/Tooltip.d.ts +1 -1
  92. package/build/esm/hooks/useAnimation.js +22 -21
  93. package/build/esm/hooks/useAnimation.js.map +1 -1
  94. package/build/esm/theme/useTheme.d.ts +1 -425
  95. package/build/tsconfig.tsbuildinfo +102 -142
  96. package/package.json +10 -8
  97. package/src/ColorMode/ColorModeProvider.tsx +9 -3
  98. package/src/Dialog/useDialogAnimation.tsx +1 -1
  99. package/src/Ripple/keyframes.ts +0 -2
  100. package/src/Ripple/useRipple.ts +6 -4
  101. package/src/Snackbar/Stack.tsx +1 -0
  102. package/src/hooks/useAnimation.ts +42 -32
@@ -0,0 +1,66 @@
1
+ import { hexFromArgb } from '@material/material-color-utilities';
2
+ export function makeColorScheme(opts) {
3
+ function c(palette, tone) {
4
+ return hexFromArgb(palette.tone(tone));
5
+ }
6
+
7
+ return {
8
+ primary: c(opts.primary, 40),
9
+ secondary: c(opts.secondary, 40),
10
+ tertiary: c(opts.tertiary, 40),
11
+ error: c(opts.error, 40),
12
+ 'primary-container': c(opts.primary, 90),
13
+ 'secondary-container': c(opts.secondary, 90),
14
+ 'tertiary-container': c(opts.tertiary, 90),
15
+ 'error-container': c(opts.error, 90),
16
+ background: c(opts.neutral, 99),
17
+ surface: c(opts.neutral, 99),
18
+ 'surface-variant': c(opts.neutralVariant, 90),
19
+ outline: c(opts.neutralVariant, 50),
20
+ on: {
21
+ primary: c(opts.primary, 100),
22
+ secondary: c(opts.secondary, 100),
23
+ tertiary: c(opts.tertiary, 100),
24
+ error: c(opts.error, 100),
25
+ 'primary-container': c(opts.primary, 10),
26
+ 'secondary-container': c(opts.secondary, 10),
27
+ 'tertiary-container': c(opts.tertiary, 10),
28
+ 'error-container': c(opts.error, 10),
29
+ background: c(opts.neutral, 10),
30
+ surface: c(opts.neutral, 10),
31
+ 'surface-variant': c(opts.neutralVariant, 30),
32
+ outline: c(opts.neutralVariant, 95)
33
+ },
34
+ modes: {
35
+ dark: {
36
+ primary: c(opts.primary, 80),
37
+ secondary: c(opts.secondary, 80),
38
+ tertiary: c(opts.tertiary, 80),
39
+ error: c(opts.error, 80),
40
+ 'primary-container': c(opts.primary, 30),
41
+ 'secondary-container': c(opts.secondary, 30),
42
+ 'tertiary-container': c(opts.tertiary, 30),
43
+ 'error-container': c(opts.error, 30),
44
+ background: c(opts.neutral, 10),
45
+ surface: c(opts.neutral, 10),
46
+ 'surface-variant': c(opts.neutralVariant, 30),
47
+ outline: c(opts.neutralVariant, 60),
48
+ on: {
49
+ primary: c(opts.primary, 20),
50
+ secondary: c(opts.secondary, 20),
51
+ tertiary: c(opts.tertiary, 20),
52
+ error: c(opts.error, 20),
53
+ 'primary-container': c(opts.primary, 90),
54
+ 'secondary-container': c(opts.secondary, 90),
55
+ 'tertiary-container': c(opts.tertiary, 90),
56
+ 'error-container': c(opts.error, 90),
57
+ background: c(opts.neutral, 90),
58
+ surface: c(opts.neutral, 90),
59
+ 'surface-variant': c(opts.neutralVariant, 80),
60
+ outline: c(opts.neutralVariant, 10)
61
+ }
62
+ }
63
+ }
64
+ };
65
+ }
66
+ //# sourceMappingURL=makeColorScheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ThemeExplorer/makeColorScheme.tsx"],"names":["hexFromArgb","makeColorScheme","opts","c","palette","tone","primary","secondary","tertiary","error","background","neutral","surface","neutralVariant","outline","on","modes","dark"],"mappings":"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","sourcesContent":["import { TonalPalette, hexFromArgb } from '@material/material-color-utilities';\n\nexport function makeColorScheme(opts: {\n primary: TonalPalette;\n secondary: TonalPalette;\n tertiary: TonalPalette;\n error: TonalPalette;\n neutral: TonalPalette;\n neutralVariant: TonalPalette;\n}) {\n function c(palette: TonalPalette, tone: number) {\n return hexFromArgb(palette.tone(tone));\n }\n\n return {\n primary: c(opts.primary, 40),\n secondary: c(opts.secondary, 40),\n tertiary: c(opts.tertiary, 40),\n error: c(opts.error, 40),\n 'primary-container': c(opts.primary, 90),\n 'secondary-container': c(opts.secondary, 90),\n 'tertiary-container': c(opts.tertiary, 90),\n 'error-container': c(opts.error, 90),\n background: c(opts.neutral, 99),\n surface: c(opts.neutral, 99),\n 'surface-variant': c(opts.neutralVariant, 90),\n outline: c(opts.neutralVariant, 50),\n on: {\n primary: c(opts.primary, 100),\n secondary: c(opts.secondary, 100),\n tertiary: c(opts.tertiary, 100),\n error: c(opts.error, 100),\n 'primary-container': c(opts.primary, 10),\n 'secondary-container': c(opts.secondary, 10),\n 'tertiary-container': c(opts.tertiary, 10),\n 'error-container': c(opts.error, 10),\n background: c(opts.neutral, 10),\n surface: c(opts.neutral, 10),\n 'surface-variant': c(opts.neutralVariant, 30),\n outline: c(opts.neutralVariant, 95),\n },\n modes: {\n dark: {\n primary: c(opts.primary, 80),\n secondary: c(opts.secondary, 80),\n tertiary: c(opts.tertiary, 80),\n error: c(opts.error, 80),\n 'primary-container': c(opts.primary, 30),\n 'secondary-container': c(opts.secondary, 30),\n 'tertiary-container': c(opts.tertiary, 30),\n 'error-container': c(opts.error, 30),\n background: c(opts.neutral, 10),\n surface: c(opts.neutral, 10),\n 'surface-variant': c(opts.neutralVariant, 30),\n outline: c(opts.neutralVariant, 60),\n on: {\n primary: c(opts.primary, 20),\n secondary: c(opts.secondary, 20),\n tertiary: c(opts.tertiary, 20),\n error: c(opts.error, 20),\n 'primary-container': c(opts.primary, 90),\n 'secondary-container': c(opts.secondary, 90),\n 'tertiary-container': c(opts.tertiary, 90),\n 'error-container': c(opts.error, 90),\n background: c(opts.neutral, 90),\n surface: c(opts.neutral, 90),\n 'surface-variant': c(opts.neutralVariant, 80),\n outline: c(opts.neutralVariant, 10),\n },\n },\n },\n };\n}\n"],"file":"makeColorScheme.js"}
@@ -0,0 +1,3 @@
1
+ import { TonalPalette } from '@material/material-color-utilities';
2
+ import { Color } from '@basic-ui/color-picker';
3
+ export declare function useDeferredColor(key: string, fallbackValue: TonalPalette): [Color | null, TonalPalette, (c: Color | null) => void];
@@ -0,0 +1,11 @@
1
+ import { useMemo, useDeferredValue } from 'react';
2
+ import { TonalPalette, argbFromHex } from '@material/material-color-utilities';
3
+ import { useLocalStorageCachedState } from './useLocalStorageCachedState'; // import './styles.css';
4
+
5
+ export function useDeferredColor(key, fallbackValue) {
6
+ const [color, setColor] = useLocalStorageCachedState('theme-builder.' + key, null);
7
+ const deferredColor = useDeferredValue(color);
8
+ const colorTonal = useMemo(() => deferredColor != null && deferredColor.hex ? TonalPalette.fromInt(argbFromHex(deferredColor.hex)) : fallbackValue, [deferredColor == null ? void 0 : deferredColor.hex, fallbackValue]);
9
+ return [color, colorTonal, setColor];
10
+ }
11
+ //# sourceMappingURL=useDeferredColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ThemeExplorer/useDeferredColor.tsx"],"names":["useMemo","useDeferredValue","TonalPalette","argbFromHex","useLocalStorageCachedState","useDeferredColor","key","fallbackValue","color","setColor","deferredColor","colorTonal","hex","fromInt"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,gBAAlB,QAA0C,OAA1C;AACA,SAASC,YAAT,EAAuBC,WAAvB,QAA0C,oCAA1C;AAEA,SAASC,0BAAT,QAA2C,8BAA3C,C,CAEA;;AACA,OAAO,SAASC,gBAAT,CACLC,GADK,EAELC,aAFK,EAGoD;AACzD,QAAM,CAACC,KAAD,EAAQC,QAAR,IAAoBL,0BAA0B,CAClD,mBAAmBE,GAD+B,EAElD,IAFkD,CAApD;AAIA,QAAMI,aAAa,GAAGT,gBAAgB,CAACO,KAAD,CAAtC;AACA,QAAMG,UAAU,GAAGX,OAAO,CACxB,MACEU,aAAa,QAAb,IAAAA,aAAa,CAAEE,GAAf,GACIV,YAAY,CAACW,OAAb,CAAqBV,WAAW,CAACO,aAAa,CAACE,GAAf,CAAhC,CADJ,GAEIL,aAJkB,EAKxB,CAACG,aAAD,oBAACA,aAAa,CAAEE,GAAhB,EAAqBL,aAArB,CALwB,CAA1B;AAOA,SAAO,CAACC,KAAD,EAAQG,UAAR,EAAoBF,QAApB,CAAP;AACD","sourcesContent":["import { useMemo, useDeferredValue } from 'react';\nimport { TonalPalette, argbFromHex } from '@material/material-color-utilities';\nimport { Color } from '@basic-ui/color-picker';\nimport { useLocalStorageCachedState } from './useLocalStorageCachedState';\n\n// import './styles.css';\nexport function useDeferredColor(\n key: string,\n fallbackValue: TonalPalette\n): [Color | null, TonalPalette, (c: Color | null) => void] {\n const [color, setColor] = useLocalStorageCachedState<Color | null>(\n 'theme-builder.' + key,\n null\n );\n const deferredColor = useDeferredValue(color);\n const colorTonal = useMemo(\n () =>\n deferredColor?.hex\n ? TonalPalette.fromInt(argbFromHex(deferredColor.hex))\n : fallbackValue,\n [deferredColor?.hex, fallbackValue]\n );\n return [color, colorTonal, setColor];\n}\n"],"file":"useDeferredColor.js"}
@@ -0,0 +1 @@
1
+ export declare function useLocalStorageCachedState<T>(key: string, initialValue: T): [T, (c: T) => void];
@@ -0,0 +1,11 @@
1
+ import { useCallback, useState } from 'react';
2
+ export function useLocalStorageCachedState(key, initialValue) {
3
+ const [state, _setState] = useState(() => JSON.parse(localStorage.getItem(key) || 'null') || initialValue);
4
+ const setState = useCallback(c => {
5
+ _setState(c);
6
+
7
+ localStorage.setItem(key, JSON.stringify(c));
8
+ }, [key]);
9
+ return [state, setState];
10
+ }
11
+ //# sourceMappingURL=useLocalStorageCachedState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ThemeExplorer/useLocalStorageCachedState.ts"],"names":["useCallback","useState","useLocalStorageCachedState","key","initialValue","state","_setState","JSON","parse","localStorage","getItem","setState","c","setItem","stringify"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,QAAtB,QAAsC,OAAtC;AAEA,OAAO,SAASC,0BAAT,CACLC,GADK,EAELC,YAFK,EAGgB;AACrB,QAAM,CAACC,KAAD,EAAQC,SAAR,IAAqBL,QAAQ,CACjC,MAAMM,IAAI,CAACC,KAAL,CAAWC,YAAY,CAACC,OAAb,CAAqBP,GAArB,KAA6B,MAAxC,KAAmDC,YADxB,CAAnC;AAGA,QAAMO,QAAQ,GAAGX,WAAW,CACzBY,CAAD,IAAgB;AACdN,IAAAA,SAAS,CAACM,CAAD,CAAT;;AACAH,IAAAA,YAAY,CAACI,OAAb,CAAqBV,GAArB,EAA0BI,IAAI,CAACO,SAAL,CAAeF,CAAf,CAA1B;AACD,GAJyB,EAK1B,CAACT,GAAD,CAL0B,CAA5B;AAOA,SAAO,CAACE,KAAD,EAAQM,QAAR,CAAP;AACD","sourcesContent":["import { useCallback, useState } from 'react';\n\nexport function useLocalStorageCachedState<T>(\n key: string,\n initialValue: T\n): [T, (c: T) => void] {\n const [state, _setState] = useState<T>(\n () => JSON.parse(localStorage.getItem(key) || 'null') || initialValue\n );\n const setState = useCallback(\n (c: T): void => {\n _setState(c);\n localStorage.setItem(key, JSON.stringify(c));\n },\n [key]\n );\n return [state, setState];\n}\n"],"file":"useLocalStorageCachedState.js"}
@@ -5,4 +5,4 @@ export interface TooltipProps extends BoxProps, Omit<PopperProps, 'color' | 'anc
5
5
  label: React.ReactNode;
6
6
  disabled?: boolean;
7
7
  }
8
- export declare const Tooltip: React.ForwardRefExoticComponent<Pick<TooltipProps, "onKeyDown" | "onPointerDown" | "style" | "disabled" | "left" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "backgroundColor" | "backgroundImage" | "backgroundPosition" | "backgroundRepeat" | "backgroundSize" | "borderBottomColor" | "borderBottomLeftRadius" | "borderBottomRightRadius" | "borderBottomStyle" | "borderBottomWidth" | "borderLeftColor" | "borderLeftStyle" | "borderLeftWidth" | "borderRightColor" | "borderRightStyle" | "borderRightWidth" | "borderTopColor" | "borderTopLeftRadius" | "borderTopRightRadius" | "borderTopStyle" | "borderTopWidth" | "bottom" | "color" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "letterSpacing" | "lineHeight" | "marginBottom" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "opacity" | "order" | "overflowX" | "overflowY" | "paddingBottom" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "textAlign" | "textShadow" | "top" | "translate" | "verticalAlign" | "width" | "background" | "border" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderStyle" | "borderTop" | "borderWidth" | "flex" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "overflow" | "padding" | "bg" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "hidden" | "gridColumnGap" | "gridGap" | "gridRowGap" | "size" | "as" | "sx" | "__css" | "variant" | "tx" | "theme" | "borderX" | "borderY" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "slot" | "spellCheck" | "tabIndex" | "title" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "label" | "innerAs" | "placement" | "strategy" | "modifiers" | "usePortal" | "portalSelector" | "skidding" | "distance" | "offsetFn" | "arrowPadding"> & React.RefAttributes<HTMLDivElement>>;
8
+ export declare const Tooltip: React.ForwardRefExoticComponent<Pick<TooltipProps, "children" | "label" | "p" | "slot" | "style" | "title" | "alignContent" | "alignItems" | "alignSelf" | "backgroundColor" | "backgroundImage" | "backgroundPosition" | "backgroundRepeat" | "backgroundSize" | "borderBottomColor" | "borderBottomLeftRadius" | "borderBottomRightRadius" | "borderBottomStyle" | "borderBottomWidth" | "borderLeftColor" | "borderLeftStyle" | "borderLeftWidth" | "borderRightColor" | "borderRightStyle" | "borderRightWidth" | "borderTopColor" | "borderTopLeftRadius" | "borderTopRightRadius" | "borderTopStyle" | "borderTopWidth" | "bottom" | "boxShadow" | "color" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "fontWeight" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBottom" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "opacity" | "order" | "overflowX" | "overflowY" | "paddingBottom" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "textAlign" | "textShadow" | "top" | "translate" | "verticalAlign" | "width" | "zIndex" | "background" | "border" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderStyle" | "borderTop" | "borderWidth" | "flex" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "overflow" | "padding" | "gridColumnGap" | "gridGap" | "gridRowGap" | "hidden" | "as" | "sx" | "__css" | "variant" | "tx" | "theme" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "size" | "bg" | "borderX" | "borderY" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "disabled" | "innerAs" | "placement" | "strategy" | "modifiers" | "usePortal" | "portalSelector" | "skidding" | "distance" | "offsetFn" | "arrowPadding"> & React.RefAttributes<HTMLDivElement>>;
@@ -21,45 +21,46 @@ export function useAnimation(opts) {
21
21
  open: openProp
22
22
  });
23
23
  const handleClose = useCallback(() => {
24
- setAnimation(animation => _extends({}, animation, {
24
+ setAnimation(animation => animation.state === 'closed' ? animation : _extends({}, animation, {
25
25
  state: 'close',
26
26
  style: animationStyle.close || animationStyle.closed,
27
27
  timing: closeTimeoutInMilliseconds
28
28
  }));
29
- return setTimeout(() => {
30
- setAnimation({
31
- state: 'closed',
32
- style: animationStyle.closed,
33
- open: false,
34
- timing: closeTimeoutInMilliseconds
35
- });
36
- }, closeTimeoutInMilliseconds);
37
29
  }, [animationStyle, closeTimeoutInMilliseconds]);
38
30
  const handleOpen = useCallback(() => {
39
- setAnimation(animation => _extends({}, animation, {
31
+ setAnimation(animation => animation.state === 'open' ? animation : _extends({}, animation, {
40
32
  open: true,
41
33
  state: 'opening',
42
34
  style: animationStyle.opening || animationStyle.closed
43
35
  }));
44
- return requestAnimationFrame(() => {
36
+ }, [animationStyle]);
37
+ useEffect(() => {
38
+ if (state === 'opening') {
45
39
  setAnimation(animation => _extends({}, animation, {
46
40
  state: 'open',
47
41
  style: animationStyle.open,
48
42
  timing: openTimeoutInMilliseconds
49
43
  }));
50
- });
51
- }, [animationStyle, openTimeoutInMilliseconds]);
44
+ }
45
+ }, [animationStyle.open, openTimeoutInMilliseconds, state]);
46
+ useEffect(() => {
47
+ if (state === 'close') {
48
+ const timeout = setTimeout(() => {
49
+ setAnimation({
50
+ state: 'closed',
51
+ style: animationStyle.closed,
52
+ open: false,
53
+ timing: closeTimeoutInMilliseconds
54
+ });
55
+ }, closeTimeoutInMilliseconds);
56
+ return () => clearTimeout(timeout);
57
+ }
58
+ }, [animationStyle.closed, closeTimeoutInMilliseconds, state]);
52
59
  useEffect(() => {
53
60
  if (openProp) {
54
- const frameHandler = handleOpen();
55
- return () => {
56
- cancelAnimationFrame(frameHandler);
57
- };
61
+ handleOpen();
58
62
  } else {
59
- const timeoutHandler = handleClose();
60
- return () => {
61
- clearTimeout(timeoutHandler);
62
- };
63
+ handleClose();
63
64
  }
64
65
  }, [handleClose, handleOpen, openProp]);
65
66
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/useAnimation.ts"],"names":["useState","useEffect","useCallback","useAnimation","opts","styles","mode","open","openProp","openTimeoutInMilliseconds","closeTimeoutInMilliseconds","animationStyle","timing","state","style","setAnimation","closed","handleClose","animation","close","setTimeout","handleOpen","opening","requestAnimationFrame","frameHandler","cancelAnimationFrame","timeoutHandler","clearTimeout"],"mappings":";AAAA,SAASA,QAAT,EAAmBC,SAAnB,EAA8BC,WAA9B,QAAgE,OAAhE;AAcA,OAAO,SAASC,YAAT,CAGLC,IAHK,EASJ;AACD,QAAM;AACJC,IAAAA,MADI;AAEJC,IAAAA,IAFI;AAGJC,IAAAA,IAAI,EAAEC,QAHF;AAIJC,IAAAA,yBAAyB,GAAG,GAJxB;AAKJC,IAAAA,0BAA0B,GAAG;AALzB,MAMFN,IANJ;AAOA,QAAMO,cAAc,GAAGN,MAAM,CAACC,IAAD,CAA7B;AACA,QAAM,CAAC;AAAEM,IAAAA,MAAF;AAAUL,IAAAA,IAAV;AAAgBM,IAAAA,KAAhB;AAAuBC,IAAAA;AAAvB,GAAD,EAAiCC,YAAjC,IAAiDf,QAAQ,CAK5D;AACDa,IAAAA,KAAK,EAAE,QADN;AAEDC,IAAAA,KAAK,EAAEH,cAAc,CAACK,MAFrB;AAGDJ,IAAAA,MAAM,EAAEF,0BAHP;AAIDH,IAAAA,IAAI,EAAEC;AAJL,GAL4D,CAA/D;AAYA,QAAMS,WAAW,GAAGf,WAAW,CAAC,MAAM;AACpCa,IAAAA,YAAY,CAAEG,SAAD,iBACRA,SADQ;AAEXL,MAAAA,KAAK,EAAE,OAFI;AAGXC,MAAAA,KAAK,EAAEH,cAAc,CAACQ,KAAf,IAAwBR,cAAc,CAACK,MAHnC;AAIXJ,MAAAA,MAAM,EAAEF;AAJG,MAAD,CAAZ;AAOA,WAAOU,UAAU,CAAC,MAAM;AACtBL,MAAAA,YAAY,CAAC;AACXF,QAAAA,KAAK,EAAE,QADI;AAEXC,QAAAA,KAAK,EAAEH,cAAc,CAACK,MAFX;AAGXT,QAAAA,IAAI,EAAE,KAHK;AAIXK,QAAAA,MAAM,EAAEF;AAJG,OAAD,CAAZ;AAMD,KAPgB,EAOdA,0BAPc,CAAjB;AAQD,GAhB8B,EAgB5B,CAACC,cAAD,EAAiBD,0BAAjB,CAhB4B,CAA/B;AAkBA,QAAMW,UAAU,GAAGnB,WAAW,CAAC,MAAM;AACnCa,IAAAA,YAAY,CAAEG,SAAD,iBACRA,SADQ;AAEXX,MAAAA,IAAI,EAAE,IAFK;AAGXM,MAAAA,KAAK,EAAE,SAHI;AAIXC,MAAAA,KAAK,EAAEH,cAAc,CAACW,OAAf,IAA0BX,cAAc,CAACK;AAJrC,MAAD,CAAZ;AAMA,WAAOO,qBAAqB,CAAC,MAAM;AACjCR,MAAAA,YAAY,CAAEG,SAAD,iBACRA,SADQ;AAEXL,QAAAA,KAAK,EAAE,MAFI;AAGXC,QAAAA,KAAK,EAAEH,cAAc,CAACJ,IAHX;AAIXK,QAAAA,MAAM,EAAEH;AAJG,QAAD,CAAZ;AAMD,KAP2B,CAA5B;AAQD,GAf6B,EAe3B,CAACE,cAAD,EAAiBF,yBAAjB,CAf2B,CAA9B;AAiBAR,EAAAA,SAAS,CAAC,MAAM;AACd,QAAIO,QAAJ,EAAc;AACZ,YAAMgB,YAAY,GAAGH,UAAU,EAA/B;AACA,aAAO,MAAM;AACXI,QAAAA,oBAAoB,CAACD,YAAD,CAApB;AACD,OAFD;AAGD,KALD,MAKO;AACL,YAAME,cAAc,GAAGT,WAAW,EAAlC;AACA,aAAO,MAAM;AACXU,QAAAA,YAAY,CAACD,cAAD,CAAZ;AACD,OAFD;AAGD;AACF,GAZQ,EAYN,CAACT,WAAD,EAAcI,UAAd,EAA0Bb,QAA1B,CAZM,CAAT;AAcA,SAAO;AACLK,IAAAA,KADK;AAELC,IAAAA,KAFK;AAGLF,IAAAA,MAHK;AAILL,IAAAA;AAJK,GAAP;AAMD","sourcesContent":["import { useState, useEffect, useCallback, CSSProperties } from 'react';\n\nexport type AnimationStateStyles<TStyleProps extends CSSProperties> = {\n closed: TStyleProps;\n opening?: TStyleProps;\n open: TStyleProps;\n close?: TStyleProps;\n};\n\nexport type AnimationStyles<TStyleProps extends CSSProperties> = Record<\n string,\n AnimationStateStyles<TStyleProps>\n>;\n\nexport function useAnimation<\n TStyles extends AnimationStyles<TStyleProps>,\n TStyleProps extends CSSProperties\n>(opts: {\n open: boolean;\n styles: TStyles;\n mode: keyof TStyles;\n openTimeoutInMilliseconds?: number;\n closeTimeoutInMilliseconds?: number;\n}) {\n const {\n styles,\n mode,\n open: openProp,\n openTimeoutInMilliseconds = 225,\n closeTimeoutInMilliseconds = 110,\n } = opts;\n const animationStyle = styles[mode];\n const [{ timing, open, state, style }, setAnimation] = useState<{\n state: keyof AnimationStateStyles<TStyleProps>;\n timing: number;\n open: boolean;\n style: CSSProperties;\n }>({\n state: 'closed',\n style: animationStyle.closed,\n timing: closeTimeoutInMilliseconds,\n open: openProp,\n });\n\n const handleClose = useCallback(() => {\n setAnimation((animation) => ({\n ...animation,\n state: 'close',\n style: animationStyle.close || animationStyle.closed,\n timing: closeTimeoutInMilliseconds,\n }));\n\n return setTimeout(() => {\n setAnimation({\n state: 'closed',\n style: animationStyle.closed,\n open: false,\n timing: closeTimeoutInMilliseconds,\n });\n }, closeTimeoutInMilliseconds);\n }, [animationStyle, closeTimeoutInMilliseconds]);\n\n const handleOpen = useCallback(() => {\n setAnimation((animation) => ({\n ...animation,\n open: true,\n state: 'opening',\n style: animationStyle.opening || animationStyle.closed,\n }));\n return requestAnimationFrame(() => {\n setAnimation((animation) => ({\n ...animation,\n state: 'open',\n style: animationStyle.open,\n timing: openTimeoutInMilliseconds,\n }));\n });\n }, [animationStyle, openTimeoutInMilliseconds]);\n\n useEffect(() => {\n if (openProp) {\n const frameHandler = handleOpen();\n return () => {\n cancelAnimationFrame(frameHandler);\n };\n } else {\n const timeoutHandler = handleClose();\n return () => {\n clearTimeout(timeoutHandler);\n };\n }\n }, [handleClose, handleOpen, openProp]);\n\n return {\n state,\n style,\n timing,\n open,\n };\n}\n"],"file":"useAnimation.js"}
1
+ {"version":3,"sources":["../../../src/hooks/useAnimation.ts"],"names":["useState","useEffect","useCallback","useAnimation","opts","styles","mode","open","openProp","openTimeoutInMilliseconds","closeTimeoutInMilliseconds","animationStyle","timing","state","style","setAnimation","closed","handleClose","animation","close","handleOpen","opening","timeout","setTimeout","clearTimeout"],"mappings":"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","sourcesContent":["import { useState, useEffect, useCallback, CSSProperties } from 'react';\n\nexport type AnimationStateStyles<TStyleProps extends CSSProperties> = {\n closed: TStyleProps;\n opening?: TStyleProps;\n open: TStyleProps;\n close?: TStyleProps;\n};\n\nexport type AnimationStyles<TStyleProps extends CSSProperties> = Record<\n string,\n AnimationStateStyles<TStyleProps>\n>;\n\nexport function useAnimation<\n TStyles extends AnimationStyles<TStyleProps>,\n TStyleProps extends CSSProperties\n>(opts: {\n open: boolean;\n styles: TStyles;\n mode: keyof TStyles;\n openTimeoutInMilliseconds?: number;\n closeTimeoutInMilliseconds?: number;\n}) {\n const {\n styles,\n mode,\n open: openProp,\n openTimeoutInMilliseconds = 225,\n closeTimeoutInMilliseconds = 110,\n } = opts;\n const animationStyle = styles[mode];\n const [{ timing, open, state, style }, setAnimation] = useState<{\n state: keyof AnimationStateStyles<TStyleProps>;\n timing: number;\n open: boolean;\n style: CSSProperties;\n }>({\n state: 'closed',\n style: animationStyle.closed,\n timing: closeTimeoutInMilliseconds,\n open: openProp,\n });\n\n const handleClose = useCallback(() => {\n setAnimation((animation) =>\n animation.state === 'closed'\n ? animation\n : {\n ...animation,\n state: 'close',\n style: animationStyle.close || animationStyle.closed,\n timing: closeTimeoutInMilliseconds,\n }\n );\n }, [animationStyle, closeTimeoutInMilliseconds]);\n\n const handleOpen = useCallback(() => {\n setAnimation((animation) =>\n animation.state === 'open'\n ? animation\n : {\n ...animation,\n open: true,\n state: 'opening',\n style: animationStyle.opening || animationStyle.closed,\n }\n );\n }, [animationStyle]);\n\n useEffect(() => {\n if (state === 'opening') {\n setAnimation((animation) => ({\n ...animation,\n state: 'open',\n style: animationStyle.open,\n timing: openTimeoutInMilliseconds,\n }));\n }\n }, [animationStyle.open, openTimeoutInMilliseconds, state]);\n\n useEffect(() => {\n if (state === 'close') {\n const timeout = setTimeout(() => {\n setAnimation({\n state: 'closed',\n style: animationStyle.closed,\n open: false,\n timing: closeTimeoutInMilliseconds,\n });\n }, closeTimeoutInMilliseconds);\n return () => clearTimeout(timeout);\n }\n }, [animationStyle.closed, closeTimeoutInMilliseconds, state]);\n\n useEffect(() => {\n if (openProp) {\n handleOpen();\n } else {\n handleClose();\n }\n }, [handleClose, handleOpen, openProp]);\n\n return {\n state,\n style,\n timing,\n open,\n };\n}\n"],"file":"useAnimation.js"}