@fountain-ui/core 1.15.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/build/commonjs/Modal/Modal.js +10 -1
  3. package/build/commonjs/Modal/Modal.js.map +1 -1
  4. package/build/commonjs/Modal/index.js +10 -2
  5. package/build/commonjs/Modal/index.js.map +1 -1
  6. package/build/commonjs/Tabs/Tabs.js +12 -1
  7. package/build/commonjs/Tabs/Tabs.js.map +1 -1
  8. package/build/commonjs/hooks/useCollapsibleAppBar.js +7 -1
  9. package/build/commonjs/hooks/useCollapsibleAppBar.js.map +1 -1
  10. package/build/commonjs/hooks/useFadeInAppBar.js +7 -0
  11. package/build/commonjs/hooks/useFadeInAppBar.js.map +1 -1
  12. package/build/commonjs/index.js +7 -0
  13. package/build/commonjs/index.js.map +1 -1
  14. package/build/module/Modal/Modal.js +6 -1
  15. package/build/module/Modal/Modal.js.map +1 -1
  16. package/build/module/Modal/index.js +1 -1
  17. package/build/module/Modal/index.js.map +1 -1
  18. package/build/module/Tabs/Tabs.js +12 -1
  19. package/build/module/Tabs/Tabs.js.map +1 -1
  20. package/build/module/hooks/useCollapsibleAppBar.js +8 -2
  21. package/build/module/hooks/useCollapsibleAppBar.js.map +1 -1
  22. package/build/module/hooks/useFadeInAppBar.js +8 -1
  23. package/build/module/hooks/useFadeInAppBar.js.map +1 -1
  24. package/build/module/index.js +1 -1
  25. package/build/module/index.js.map +1 -1
  26. package/build/typescript/Modal/Modal.d.ts +11 -0
  27. package/build/typescript/Modal/ModalProps.d.ts +2 -1
  28. package/build/typescript/Modal/index.d.ts +2 -1
  29. package/build/typescript/Tabs/TabsProps.d.ts +12 -0
  30. package/build/typescript/hooks/useCollapsibleAppBar.d.ts +1 -0
  31. package/build/typescript/hooks/useFadeInAppBar.d.ts +1 -0
  32. package/build/typescript/index.d.ts +2 -1
  33. package/package.json +2 -2
  34. package/src/Modal/Modal.tsx +15 -1
  35. package/src/Modal/ModalProps.ts +2 -1
  36. package/src/Modal/index.ts +3 -2
  37. package/src/Tabs/Tabs.tsx +12 -1
  38. package/src/Tabs/TabsProps.ts +23 -0
  39. package/src/hooks/useCollapsibleAppBar.ts +7 -2
  40. package/src/hooks/useFadeInAppBar.ts +9 -1
  41. package/src/index.ts +2 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.18.0](https://github.com/tappytoon/tappytoon/compare/@fountain-ui/core@1.11.0...@fountain-ui/core@1.18.0) (2022-03-25)
7
+
8
+ **Note:** Version bump only for package @fountain-ui/core
9
+
10
+
11
+
12
+
13
+
14
+ # [1.17.0](https://github.com/tappytoon/tappytoon/compare/@fountain-ui/core@1.11.0...@fountain-ui/core@1.17.0) (2022-03-21)
15
+
16
+ **Note:** Version bump only for package @fountain-ui/core
17
+
18
+
19
+
20
+
21
+
22
+ # [1.16.0](https://github.com/tappytoon/tappytoon/compare/@fountain-ui/core@1.11.0...@fountain-ui/core@1.16.0) (2022-03-07)
23
+
24
+ **Note:** Version bump only for package @fountain-ui/core
25
+
26
+
27
+
28
+
29
+
6
30
  # [1.15.0](https://github.com/tappytoon/tappytoon/compare/@fountain-ui/core@1.11.0...@fountain-ui/core@1.15.0) (2022-01-25)
7
31
 
8
32
  **Note:** Version bump only for package @fountain-ui/core
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = Modal;
7
+ exports.createModalCloseEvent = void 0;
7
8
 
8
9
  var _react = _interopRequireDefault(require("react"));
9
10
 
@@ -21,6 +22,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
21
22
 
22
23
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
24
 
25
+ const createModalCloseEvent = reason => ({
26
+ metadata: {
27
+ reason
28
+ }
29
+ });
30
+
31
+ exports.createModalCloseEvent = createModalCloseEvent;
32
+
24
33
  function Modal(props) {
25
34
  const {
26
35
  animationStyle,
@@ -36,7 +45,7 @@ function Modal(props) {
36
45
 
37
46
  const handleBackdropPress = () => {
38
47
  if (onClose) {
39
- onClose();
48
+ onClose(createModalCloseEvent('OUTSIDE_PRESS'));
40
49
  }
41
50
  };
42
51
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Modal.tsx"],"names":["Modal","props","animationStyle","backdropOpacity","children","disableAnimation","hideBackdrop","onClose","style","visible","otherProps","handleBackdropPress","exited","setExited","React","useState","elevationStyle","StyleSheet","absoluteFill"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAGe,SAASA,KAAT,CAAeC,KAAf,EAAkC;AAC7C,QAAM;AACFC,IAAAA,cADE;AAEFC,IAAAA,eAAe,GAAG,GAFhB;AAGFC,IAAAA,QAHE;AAIFC,IAAAA,gBAAgB,GAAG,KAJjB;AAKFC,IAAAA,YAAY,GAAG,KALb;AAMFC,IAAAA,OANE;AAOFC,IAAAA,KAPE;AAQFC,IAAAA,OARE;AASF,OAAGC;AATD,MAUFT,KAVJ;;AAYA,QAAMU,mBAAmB,GAAG,MAAM;AAC9B,QAAIJ,OAAJ,EAAa;AACTA,MAAAA,OAAO;AACV;AACJ,GAJD;;AAMA,QAAM,CAACK,MAAD,EAASC,SAAT,IAAsBC,eAAMC,QAAN,CAAe,IAAf,CAA5B;;AAEA,QAAMC,cAAc,GAAG,8BAAkB,CAAlB,CAAvB;;AAEA,MAAI,CAACP,OAAL,EAAc;AACV,QAAIJ,gBAAgB,IAAIO,MAAxB,EAAgC;AAC5B,aAAO,IAAP;AACH;AACJ;;AAED,sBACI,6BAAC,iBAAD;AACI,IAAA,KAAK,EAAE,iBAAI,CACPK,mBAAWC,YADJ,EAEPF,cAFO,EAGPR,KAHO,CAAJ;AADX,KAMQE,UANR,GAQMJ,YAAY,IAAI,CAACG,OAAlB,GAA6B,IAA7B,gBACG,6BAAC,uBAAD;AACI,IAAA,OAAO,EAAEE,mBADb;AAEI,IAAA,OAAO,EAAER;AAFb,IATR,EAeK,CAACE,gBAAD,gBACG,6BAAC,cAAD;AACI,IAAA,MAAM,EAAEI,OADZ;AAEI,IAAA,YAAY,EAAE,GAFlB;AAGI,IAAA,OAAO,EAAE,MAAMI,SAAS,CAAC,KAAD,CAH5B;AAII,IAAA,QAAQ,EAAE,MAAMA,SAAS,CAAC,IAAD,CAJ7B;AAKI,IAAA,KAAK,EAAEX;AALX,KAOKE,QAPL,CADH,GAUGA,QAzBR,CADJ;AA6BH;;AAAA","sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\nimport { css, StyleSheet } from '../styles';\nimport { useElevationStyle } from '../hooks';\nimport Slide from '../Slide';\nimport SimpleBackdrop from './SimpleBackdrop';\nimport type ModalProps from './ModalProps';\n\nexport default function Modal(props: ModalProps) {\n const {\n animationStyle,\n backdropOpacity = 0.5,\n children,\n disableAnimation = false,\n hideBackdrop = false,\n onClose,\n style,\n visible,\n ...otherProps\n } = props;\n\n const handleBackdropPress = () => {\n if (onClose) {\n onClose();\n }\n };\n\n const [exited, setExited] = React.useState(true);\n\n const elevationStyle = useElevationStyle(6);\n\n if (!visible) {\n if (disableAnimation || exited) {\n return null;\n }\n }\n\n return (\n <View\n style={css([\n StyleSheet.absoluteFill,\n elevationStyle,\n style,\n ])}\n {...otherProps}\n >\n {(hideBackdrop || !visible) ? null : (\n <SimpleBackdrop\n onPress={handleBackdropPress}\n opacity={backdropOpacity}\n />\n )}\n\n {!disableAnimation ? (\n <Slide\n appear={visible}\n exitDuration={150}\n onEnter={() => setExited(false)}\n onExited={() => setExited(true)}\n style={animationStyle}\n >\n {children}\n </Slide>\n ) : children}\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["Modal.tsx"],"names":["createModalCloseEvent","reason","metadata","Modal","props","animationStyle","backdropOpacity","children","disableAnimation","hideBackdrop","onClose","style","visible","otherProps","handleBackdropPress","exited","setExited","React","useState","elevationStyle","StyleSheet","absoluteFill"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAWO,MAAMA,qBAAqB,GAAIC,MAAD,KAAmC;AACpEC,EAAAA,QAAQ,EAAE;AACND,IAAAA;AADM;AAD0D,CAAnC,CAA9B;;;;AAMQ,SAASE,KAAT,CAAeC,KAAf,EAAkC;AAC7C,QAAM;AACFC,IAAAA,cADE;AAEFC,IAAAA,eAAe,GAAG,GAFhB;AAGFC,IAAAA,QAHE;AAIFC,IAAAA,gBAAgB,GAAG,KAJjB;AAKFC,IAAAA,YAAY,GAAG,KALb;AAMFC,IAAAA,OANE;AAOFC,IAAAA,KAPE;AAQFC,IAAAA,OARE;AASF,OAAGC;AATD,MAUFT,KAVJ;;AAYA,QAAMU,mBAAmB,GAAG,MAAM;AAC9B,QAAIJ,OAAJ,EAAa;AACTA,MAAAA,OAAO,CAACV,qBAAqB,CAAC,eAAD,CAAtB,CAAP;AACH;AACJ,GAJD;;AAMA,QAAM,CAACe,MAAD,EAASC,SAAT,IAAsBC,eAAMC,QAAN,CAAe,IAAf,CAA5B;;AAEA,QAAMC,cAAc,GAAG,8BAAkB,CAAlB,CAAvB;;AAEA,MAAI,CAACP,OAAL,EAAc;AACV,QAAIJ,gBAAgB,IAAIO,MAAxB,EAAgC;AAC5B,aAAO,IAAP;AACH;AACJ;;AAED,sBACI,6BAAC,iBAAD;AACI,IAAA,KAAK,EAAE,iBAAI,CACPK,mBAAWC,YADJ,EAEPF,cAFO,EAGPR,KAHO,CAAJ;AADX,KAMQE,UANR,GAQMJ,YAAY,IAAI,CAACG,OAAlB,GAA6B,IAA7B,gBACG,6BAAC,uBAAD;AACI,IAAA,OAAO,EAAEE,mBADb;AAEI,IAAA,OAAO,EAAER;AAFb,IATR,EAeK,CAACE,gBAAD,gBACG,6BAAC,cAAD;AACI,IAAA,MAAM,EAAEI,OADZ;AAEI,IAAA,YAAY,EAAE,GAFlB;AAGI,IAAA,OAAO,EAAE,MAAMI,SAAS,CAAC,KAAD,CAH5B;AAII,IAAA,QAAQ,EAAE,MAAMA,SAAS,CAAC,IAAD,CAJ7B;AAKI,IAAA,KAAK,EAAEX;AALX,KAOKE,QAPL,CADH,GAUGA,QAzBR,CADJ;AA6BH;;AAAA","sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\nimport { css, StyleSheet } from '../styles';\nimport { useElevationStyle } from '../hooks';\nimport Slide from '../Slide';\nimport SimpleBackdrop from './SimpleBackdrop';\nimport type ModalProps from './ModalProps';\n\nexport type ModalCloseReasonType = 'OUTSIDE_PRESS' | 'HARDWARE_BACK_PRESS' | 'CLOSE_BUTTON_PRESS' | 'UNKNOWN';\n\nexport interface ModalCloseEvent {\n metadata: {\n reason: ModalCloseReasonType\n };\n}\n\nexport const createModalCloseEvent = (reason: ModalCloseReasonType) => ({\n metadata: {\n reason,\n },\n});\n\nexport default function Modal(props: ModalProps) {\n const {\n animationStyle,\n backdropOpacity = 0.5,\n children,\n disableAnimation = false,\n hideBackdrop = false,\n onClose,\n style,\n visible,\n ...otherProps\n } = props;\n\n const handleBackdropPress = () => {\n if (onClose) {\n onClose(createModalCloseEvent('OUTSIDE_PRESS'));\n }\n };\n\n const [exited, setExited] = React.useState(true);\n\n const elevationStyle = useElevationStyle(6);\n\n if (!visible) {\n if (disableAnimation || exited) {\n return null;\n }\n }\n\n return (\n <View\n style={css([\n StyleSheet.absoluteFill,\n elevationStyle,\n style,\n ])}\n {...otherProps}\n >\n {(hideBackdrop || !visible) ? null : (\n <SimpleBackdrop\n onPress={handleBackdropPress}\n opacity={backdropOpacity}\n />\n )}\n\n {!disableAnimation ? (\n <Slide\n appear={visible}\n exitDuration={150}\n onEnter={() => setExited(false)}\n onExited={() => setExited(true)}\n style={animationStyle}\n >\n {children}\n </Slide>\n ) : children}\n </View>\n );\n};\n"]}
@@ -9,8 +9,16 @@ Object.defineProperty(exports, "default", {
9
9
  return _Modal.default;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "createModalCloseEvent", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _Modal.createModalCloseEvent;
16
+ }
17
+ });
18
+
19
+ var _Modal = _interopRequireWildcard(require("./Modal"));
12
20
 
13
- var _Modal = _interopRequireDefault(require("./Modal"));
21
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
22
 
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export { default } from './Modal';\nexport type { default as ModalProps } from './ModalProps';"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA","sourcesContent":["export { default, createModalCloseEvent } from './Modal';\nexport type { ModalCloseEvent } from './Modal';\nexport type { default as ModalProps } from './ModalProps';\n"]}
@@ -50,6 +50,8 @@ function Tabs(props) {
50
50
  children,
51
51
  index: indexProp,
52
52
  disableIndicator = false,
53
+ keyboardDismissMode = 'none',
54
+ keyboardShouldPersistTaps = 'never',
53
55
  onChange,
54
56
  scrollable = false,
55
57
  scrollValue: scrollValueProp,
@@ -115,6 +117,12 @@ function Tabs(props) {
115
117
  }, ...prev.slice(index + 1)]);
116
118
  };
117
119
 
120
+ const onMouseDown = e => {
121
+ if (keyboardShouldPersistTaps === 'always') {
122
+ e.preventDefault();
123
+ }
124
+ };
125
+
118
126
  const onPress = () => {
119
127
  var _child$props$onPress, _child$props;
120
128
 
@@ -130,6 +138,7 @@ function Tabs(props) {
130
138
  enableIndicator: enableIndicatorPlaceholder,
131
139
  onLayout,
132
140
  onPress,
141
+ onMouseDown,
133
142
  variant,
134
143
  selected,
135
144
  style: scrollable ? undefined : styles.fixedTab
@@ -155,7 +164,9 @@ function Tabs(props) {
155
164
  ref: scrollViewRef,
156
165
  scrollsToTop: false,
157
166
  showsHorizontalScrollIndicator: false,
158
- showsVerticalScrollIndicator: false
167
+ showsVerticalScrollIndicator: false,
168
+ keyboardDismissMode: keyboardDismissMode,
169
+ keyboardShouldPersistTaps: keyboardShouldPersistTaps
159
170
  }, tabElements, indicator) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, tabElements, indicator));
160
171
  }
161
172
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Tabs.tsx"],"names":["useStyles","theme","root","fixedRoot","flexDirection","fixedTab","flex","scrollableContainer","paddingHorizontal","spacing","Tabs","props","children","index","indexProp","disableIndicator","onChange","scrollable","scrollValue","scrollValueProp","style","variant","otherProps","styles","containerWidth","handleLayout","scrollViewRef","React","useRef","tabCount","Children","count","coordinates","setCoordinates","useState","Array","internalScrollValue","Animated","useSharedValue","isReadyToRenderIndicator","useEffect","animateTab","value","withTiming","duration","easing","Easing","out","exp","undefined","snapTab","scrollView","current","coordinate","defaultCoordinate","tabWidth","x2","x1","x","scrollTo","y","animated","tabElements","map","child","onLayout","event","width","nativeEvent","layout","prev","slice","onPress","selected","enableIndicatorPlaceholder","cloneElement","enableIndicator","indicator"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;AAUA,MAAMA,SAAgC,GAAG,YAAwB;AAC7D,QAAMC,KAAK,GAAG,uBAAd;AAEA,SAAO;AACHC,IAAAA,IAAI,EAAE,EADH;AAEHC,IAAAA,SAAS,EAAE;AACPC,MAAAA,aAAa,EAAE;AADR,KAFR;AAKHC,IAAAA,QAAQ,EAAE;AACNC,MAAAA,IAAI,EAAE;AADA,KALP;AAQHC,IAAAA,mBAAmB,EAAE;AACjBC,MAAAA,iBAAiB,EAAEP,KAAK,CAACQ,OAAN,CAAc,CAAd;AADF;AARlB,GAAP;AAYH,CAfD;;AAiBe,SAASC,IAAT,CAAcC,KAAd,EAAgC;AAC3C,QAAM;AACFC,IAAAA,QADE;AAEFC,IAAAA,KAAK,EAAEC,SAFL;AAGFC,IAAAA,gBAAgB,GAAG,KAHjB;AAIFC,IAAAA,QAJE;AAKFC,IAAAA,UAAU,GAAG,KALX;AAMFC,IAAAA,WAAW,EAAEC,eANX;AAOFC,IAAAA,KAPE;AAQFC,IAAAA,OAAO,GAAG,SARR;AASF,OAAGC;AATD,MAUFX,KAVJ;AAYA,QAAMY,MAAM,GAAGvB,SAAS,EAAxB;AAEA,QAAM,CAACwB,cAAD,EAAiBC,YAAjB,IAAiC,sBAAvC;;AAEA,QAAMC,aAAa,GAAGC,eAAMC,MAAN,CAAgC,IAAhC,CAAtB;;AAEA,QAAMC,QAAQ,GAAGF,eAAMG,QAAN,CAAeC,KAAf,CAAqBnB,QAArB,CAAjB;;AACA,QAAM,CAACoB,WAAD,EAAcC,cAAd,IAAgCN,eAAMO,QAAN,CAAgC,MAAM,IAAIC,KAAJ,CAAUN,QAAV,CAAtC,CAAtC;;AAEA,QAAMO,mBAAmB,GAAGC,+BAASC,cAAT,CAAwB,CAAxB,CAA5B;;AACA,QAAMpB,WAAW,GAAGC,eAAe,IAAIiB,mBAAvC;AAEA,QAAMG,wBAAwB,GAAG,2BAAeP,WAAf,CAAjC;;AAEAL,iBAAMa,SAAN,CAAgB,MAAM;AAClB,UAAMC,UAAU,GAAI5B,KAAD,IAAmB;AAClCuB,MAAAA,mBAAmB,CAACM,KAApB,GAA4BL,+BAASM,UAAT,CAAoB9B,KAApB,EAA2B;AACnD+B,QAAAA,QAAQ,EAAE,GADyC;AAEnDC,QAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,GAAlB;AAF2C,OAA3B,CAA5B;AAIH,KALD;;AAOA,QAAI7B,eAAe,KAAK8B,SAAxB,EAAmC;AAC/BR,MAAAA,UAAU,CAAC3B,SAAD,CAAV;AACH;AACJ,GAXD,EAWG,CAACA,SAAD,EAAYK,eAAZ,EAA6BiB,mBAA7B,CAXH;;AAaAT,iBAAMa,SAAN,CAAgB,MAAM;AAClB,UAAMU,OAAO,GAAIrC,KAAD,IAAmB;AAC/B,YAAMsC,UAAU,GAAGzB,aAAa,CAAC0B,OAAjC;AACA,YAAMC,UAAyB,GAAGrB,WAAW,CAACnB,KAAK,GAAG,CAAT,CAAX,IAA0ByC,gCAA5D;;AAEA,UAAIH,UAAJ,EAAgB;AACZ,cAAMI,QAAQ,GAAGF,UAAU,CAACG,EAAX,GAAgBH,UAAU,CAACI,EAA5C;AACA,cAAMC,CAAC,GAAGL,UAAU,CAACI,EAAX,GAAgBF,QAAQ,GAAG,CAArC;AAEAJ,QAAAA,UAAU,CAACQ,QAAX,CAAoB;AAAED,UAAAA,CAAF;AAAKE,UAAAA,CAAC,EAAE,CAAR;AAAWC,UAAAA,QAAQ,EAAE;AAArB,SAApB;AACH;AACJ,KAVD;;AAYAX,IAAAA,OAAO,CAACpC,SAAD,CAAP;AACH,GAdD,EAcG,CAACA,SAAD,EAAYU,cAAZ,EAA4BQ,WAA5B,CAdH;;AAgBA,QAAM8B,WAAW,GAAGnC,eAAMG,QAAN,CAAeiC,GAAf,CAAmBnD,QAAnB,EAA6B,CAACoD,KAAD,EAAQnD,KAAR,KAAkB;AAC/D,UAAMoD,QAAQ,GAAIC,KAAD,IAA8B;AAC3C,YAAM;AAAER,QAAAA,CAAF;AAAKS,QAAAA;AAAL,UAAeD,KAAK,CAACE,WAAN,CAAkBC,MAAvC;AAEApC,MAAAA,cAAc,CAACqC,IAAI,IAAK,CACpB,GAAGA,IAAI,CAACC,KAAL,CAAW,CAAX,EAAc1D,KAAd,CADiB,EAEpB;AAAE4C,QAAAA,EAAE,EAAEC,CAAN;AAASF,QAAAA,EAAE,EAAEE,CAAC,GAAGS;AAAjB,OAFoB,EAGpB,GAAGG,IAAI,CAACC,KAAL,CAAW1D,KAAK,GAAG,CAAnB,CAHiB,CAAV,CAAd;AAKH,KARD;;AAUA,UAAM2D,OAAO,GAAG,MAAM;AAAA;;AAClBxD,MAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAGH,KAAH,CAAR,CADkB,CAElB;;AACA,8CAAAmD,KAAK,CAACrD,KAAN,EAAY6D,OAAZ;AACH,KAJD;;AAMA,UAAMC,QAAQ,GAAG5D,KAAK,KAAKC,SAA3B;AACA,UAAM4D,0BAA0B,GAAG3D,gBAAgB,GAC7C,KAD6C,GAE5CwB,wBAAwB,GAAG,KAAH,GAAWkC,QAF1C,CAlB+D,CAsB/D;;AACA,wBAAO9C,eAAMgD,YAAN,CAAmBX,KAAnB,EAA0B;AAC7BY,MAAAA,eAAe,EAAEF,0BADY;AAE7BT,MAAAA,QAF6B;AAG7BO,MAAAA,OAH6B;AAI7BnD,MAAAA,OAJ6B;AAK7BoD,MAAAA,QAL6B;AAM7BrD,MAAAA,KAAK,EAAEH,UAAU,GAAGgC,SAAH,GAAe1B,MAAM,CAAClB;AANV,KAA1B,CAAP;AAQH,GA/BmB,CAApB;;AAiCA,QAAMwE,SAAS,gBACX,6BAAC,qBAAD;AACI,IAAA,WAAW,EAAE7C,WADjB;AAEI,IAAA,QAAQ,EAAEjB,gBAFd;AAGI,IAAA,UAAU,EAAEE,UAHhB;AAII,IAAA,WAAW,EAAEC;AAJjB,IADJ;;AASA,sBACI,6BAAC,iBAAD;AACI,IAAA,QAAQ,EAAEO,YADd;AAEI,IAAA,KAAK,EAAE,iBAAI,CACPF,MAAM,CAACrB,IADA,EAEPe,UAAU,GAAGgC,SAAH,GAAe1B,MAAM,CAACpB,SAFzB,EAGPiB,KAHO,CAAJ;AAFX,KAOQE,UAPR,GASKL,UAAU,gBACP,6BAAC,uBAAD;AACI,IAAA,gCAAgC,EAAE,KADtC;AAEI,IAAA,OAAO,EAAE,KAFb;AAGI,IAAA,qBAAqB,EAAEM,MAAM,CAAChB,mBAHlC;AAII,IAAA,sBAAsB,EAAE,IAJ5B;AAKI,IAAA,UAAU,EAAE,IALhB;AAMI,IAAA,GAAG,EAAEmB,aANT;AAOI,IAAA,YAAY,EAAE,KAPlB;AAQI,IAAA,8BAA8B,EAAE,KARpC;AASI,IAAA,4BAA4B,EAAE;AATlC,KAWKoC,WAXL,EAYKe,SAZL,CADO,gBAgBP,4DACKf,WADL,EAEKe,SAFL,CAzBR,CADJ;AAiCH;;AAAA","sourcesContent":["import React from 'react';\nimport { LayoutChangeEvent, ScrollView, View } from 'react-native';\nimport Animated, { Easing } from 'react-native-reanimated';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { isEveryDefined } from '@fountain-ui/utils';\nimport { css, useTheme } from '../styles';\nimport { useWidth } from '../internal/hooks';\nimport type TabsProps from './TabsProps';\nimport TabCoordinate, { defaultCoordinate } from './TabCoordinate';\nimport TabIndicator from './TabIndicator';\n\ntype TabsStyleKeys =\n | 'root'\n | 'fixedRoot'\n | 'fixedTab'\n | 'scrollableContainer';\n\ntype TabsStyles = NamedStylesStringUnion<TabsStyleKeys>;\n\nconst useStyles: UseStyles<TabsStyles> = function (): TabsStyles {\n const theme = useTheme();\n\n return {\n root: {},\n fixedRoot: {\n flexDirection: 'row',\n },\n fixedTab: {\n flex: 1,\n },\n scrollableContainer: {\n paddingHorizontal: theme.spacing(1),\n },\n };\n};\n\nexport default function Tabs(props: TabsProps) {\n const {\n children,\n index: indexProp,\n disableIndicator = false,\n onChange,\n scrollable = false,\n scrollValue: scrollValueProp,\n style,\n variant = 'primary',\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const [containerWidth, handleLayout] = useWidth();\n\n const scrollViewRef = React.useRef<ScrollView | null>(null);\n\n const tabCount = React.Children.count(children);\n const [coordinates, setCoordinates] = React.useState<TabCoordinate[]>(() => new Array(tabCount));\n\n const internalScrollValue = Animated.useSharedValue(0);\n const scrollValue = scrollValueProp || internalScrollValue;\n\n const isReadyToRenderIndicator = isEveryDefined(coordinates);\n\n React.useEffect(() => {\n const animateTab = (index: number) => {\n internalScrollValue.value = Animated.withTiming(index, {\n duration: 200,\n easing: Easing.out(Easing.exp),\n });\n };\n\n if (scrollValueProp === undefined) {\n animateTab(indexProp);\n }\n }, [indexProp, scrollValueProp, internalScrollValue]);\n\n React.useEffect(() => {\n const snapTab = (index: number) => {\n const scrollView = scrollViewRef.current;\n const coordinate: TabCoordinate = coordinates[index - 1] || defaultCoordinate;\n\n if (scrollView) {\n const tabWidth = coordinate.x2 - coordinate.x1;\n const x = coordinate.x1 + tabWidth / 2;\n\n scrollView.scrollTo({ x, y: 0, animated: true });\n }\n };\n\n snapTab(indexProp);\n }, [indexProp, containerWidth, coordinates]);\n\n const tabElements = React.Children.map(children, (child, index) => {\n const onLayout = (event: LayoutChangeEvent) => {\n const { x, width } = event.nativeEvent.layout;\n\n setCoordinates(prev => ([\n ...prev.slice(0, index),\n { x1: x, x2: x + width },\n ...prev.slice(index + 1),\n ]));\n };\n\n const onPress = () => {\n onChange?.(index);\n // @ts-ignore\n child.props.onPress?.();\n };\n\n const selected = index === indexProp;\n const enableIndicatorPlaceholder = disableIndicator\n ? false\n : (isReadyToRenderIndicator ? false : selected);\n\n //@ts-ignore\n return React.cloneElement(child, {\n enableIndicator: enableIndicatorPlaceholder,\n onLayout,\n onPress,\n variant,\n selected,\n style: scrollable ? undefined : styles.fixedTab,\n });\n });\n\n const indicator = (\n <TabIndicator\n coordinates={coordinates}\n disabled={disableIndicator}\n scrollable={scrollable}\n scrollValue={scrollValue}\n />\n );\n\n return (\n <View\n onLayout={handleLayout}\n style={css([\n styles.root,\n scrollable ? undefined : styles.fixedRoot,\n style,\n ])}\n {...otherProps}\n >\n {scrollable ? (\n <ScrollView\n automaticallyAdjustContentInsets={false}\n bounces={false}\n contentContainerStyle={styles.scrollableContainer}\n directionalLockEnabled={true}\n horizontal={true}\n ref={scrollViewRef}\n scrollsToTop={false}\n showsHorizontalScrollIndicator={false}\n showsVerticalScrollIndicator={false}\n >\n {tabElements}\n {indicator}\n </ScrollView>\n ) : (\n <>\n {tabElements}\n {indicator}\n </>\n )}\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["Tabs.tsx"],"names":["useStyles","theme","root","fixedRoot","flexDirection","fixedTab","flex","scrollableContainer","paddingHorizontal","spacing","Tabs","props","children","index","indexProp","disableIndicator","keyboardDismissMode","keyboardShouldPersistTaps","onChange","scrollable","scrollValue","scrollValueProp","style","variant","otherProps","styles","containerWidth","handleLayout","scrollViewRef","React","useRef","tabCount","Children","count","coordinates","setCoordinates","useState","Array","internalScrollValue","Animated","useSharedValue","isReadyToRenderIndicator","useEffect","animateTab","value","withTiming","duration","easing","Easing","out","exp","undefined","snapTab","scrollView","current","coordinate","defaultCoordinate","tabWidth","x2","x1","x","scrollTo","y","animated","tabElements","map","child","onLayout","event","width","nativeEvent","layout","prev","slice","onMouseDown","e","preventDefault","onPress","selected","enableIndicatorPlaceholder","cloneElement","enableIndicator","indicator"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, LayoutChangeEvent, ScrollView, View } from 'react-native';\nimport Animated, { Easing } from 'react-native-reanimated';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { isEveryDefined } from '@fountain-ui/utils';\nimport { css, useTheme } from '../styles';\nimport { useWidth } from '../internal/hooks';\nimport type TabsProps from './TabsProps';\nimport TabCoordinate, { defaultCoordinate } from './TabCoordinate';\nimport TabIndicator from './TabIndicator';\n\ntype TabsStyleKeys =\n | 'root'\n | 'fixedRoot'\n | 'fixedTab'\n | 'scrollableContainer';\n\ntype TabsStyles = NamedStylesStringUnion<TabsStyleKeys>;\n\nconst useStyles: UseStyles<TabsStyles> = function (): TabsStyles {\n const theme = useTheme();\n\n return {\n root: {},\n fixedRoot: {\n flexDirection: 'row',\n },\n fixedTab: {\n flex: 1,\n },\n scrollableContainer: {\n paddingHorizontal: theme.spacing(1),\n },\n };\n};\n\nexport default function Tabs(props: TabsProps) {\n const {\n children,\n index: indexProp,\n disableIndicator = false,\n keyboardDismissMode = 'none',\n keyboardShouldPersistTaps = 'never',\n onChange,\n scrollable = false,\n scrollValue: scrollValueProp,\n style,\n variant = 'primary',\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const [containerWidth, handleLayout] = useWidth();\n\n const scrollViewRef = React.useRef<ScrollView | null>(null);\n\n const tabCount = React.Children.count(children);\n const [coordinates, setCoordinates] = React.useState<TabCoordinate[]>(() => new Array(tabCount));\n\n const internalScrollValue = Animated.useSharedValue(0);\n const scrollValue = scrollValueProp || internalScrollValue;\n\n const isReadyToRenderIndicator = isEveryDefined(coordinates);\n\n React.useEffect(() => {\n const animateTab = (index: number) => {\n internalScrollValue.value = Animated.withTiming(index, {\n duration: 200,\n easing: Easing.out(Easing.exp),\n });\n };\n\n if (scrollValueProp === undefined) {\n animateTab(indexProp);\n }\n }, [indexProp, scrollValueProp, internalScrollValue]);\n\n React.useEffect(() => {\n const snapTab = (index: number) => {\n const scrollView = scrollViewRef.current;\n const coordinate: TabCoordinate = coordinates[index - 1] || defaultCoordinate;\n\n if (scrollView) {\n const tabWidth = coordinate.x2 - coordinate.x1;\n const x = coordinate.x1 + tabWidth / 2;\n\n scrollView.scrollTo({ x, y: 0, animated: true });\n }\n };\n\n snapTab(indexProp);\n }, [indexProp, containerWidth, coordinates]);\n\n const tabElements = React.Children.map(children, (child, index) => {\n const onLayout = (event: LayoutChangeEvent) => {\n const { x, width } = event.nativeEvent.layout;\n\n setCoordinates(prev => ([\n ...prev.slice(0, index),\n { x1: x, x2: x + width },\n ...prev.slice(index + 1),\n ]));\n };\n\n const onMouseDown = (e: GestureResponderEvent) => {\n if (keyboardShouldPersistTaps === 'always') {\n e.preventDefault();\n }\n };\n\n const onPress = () => {\n onChange?.(index);\n // @ts-ignore\n child.props.onPress?.();\n };\n\n const selected = index === indexProp;\n const enableIndicatorPlaceholder = disableIndicator\n ? false\n : (isReadyToRenderIndicator ? false : selected);\n\n //@ts-ignore\n return React.cloneElement(child, {\n enableIndicator: enableIndicatorPlaceholder,\n onLayout,\n onPress,\n onMouseDown,\n variant,\n selected,\n style: scrollable ? undefined : styles.fixedTab,\n });\n });\n\n const indicator = (\n <TabIndicator\n coordinates={coordinates}\n disabled={disableIndicator}\n scrollable={scrollable}\n scrollValue={scrollValue}\n />\n );\n\n return (\n <View\n onLayout={handleLayout}\n style={css([\n styles.root,\n scrollable ? undefined : styles.fixedRoot,\n style,\n ])}\n {...otherProps}\n >\n {scrollable ? (\n <ScrollView\n automaticallyAdjustContentInsets={false}\n bounces={false}\n contentContainerStyle={styles.scrollableContainer}\n directionalLockEnabled={true}\n horizontal={true}\n ref={scrollViewRef}\n scrollsToTop={false}\n showsHorizontalScrollIndicator={false}\n showsVerticalScrollIndicator={false}\n keyboardDismissMode={keyboardDismissMode}\n keyboardShouldPersistTaps={keyboardShouldPersistTaps}\n >\n {tabElements}\n {indicator}\n </ScrollView>\n ) : (\n <>\n {tabElements}\n {indicator}\n </>\n )}\n </View>\n );\n};\n"]}
@@ -22,6 +22,7 @@ var _useAppbarStyles = _interopRequireDefault(require("./useAppbarStyles"));
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
 
24
24
  const defaultOptions = {
25
+ keyboardDismissMode: 'none',
25
26
  translucent: false
26
27
  };
27
28
  const ANIMATION_DURATION_MILLIS = 100;
@@ -29,7 +30,8 @@ const SUPPORTS_DRAG_DETECTION = _reactNative.Platform.OS !== 'web';
29
30
 
30
31
  function useCollapsibleAppBar(userOptions = defaultOptions) {
31
32
  const {
32
- translucent
33
+ translucent,
34
+ keyboardDismissMode
33
35
  } = { ...defaultOptions,
34
36
  ...userOptions
35
37
  };
@@ -97,6 +99,10 @@ function useCollapsibleAppBar(userOptions = defaultOptions) {
97
99
 
98
100
  const scrollHandler = _reactNativeReanimated.default.useAnimatedScrollHandler({
99
101
  onBeginDrag: () => {
102
+ if (keyboardDismissMode === 'on-drag') {
103
+ _reactNativeReanimated.default.runOnJS(_reactNative.Keyboard.dismiss)();
104
+ }
105
+
100
106
  lastTranslateY.value = translateY.value;
101
107
  },
102
108
  onMomentumBegin: () => {
@@ -1 +1 @@
1
- {"version":3,"sources":["useCollapsibleAppBar.ts"],"names":["defaultOptions","translucent","ANIMATION_DURATION_MILLIS","SUPPORTS_DRAG_DETECTION","Platform","OS","useCollapsibleAppBar","userOptions","styles","safeAreaInsets","appBarHeight","onAppBarLayout","collapsibleToolbarHeight","onCollapsibleToolbarLayout","maxTranslateY","Animated","useDerivedValue","translateY","useSharedValue","lastTranslateY","lastOffsetY","overlapped","elevationStyle","animatedStyle","useAnimatedStyle","transform","value","boxShadow","elevation","shadowColor","shadowOffset","shadowRadius","shadowOpacity","indexRef","React","useRef","offsetsRef","onScrollViewChanged","nextIndex","prevIndex","current","savedOffsetY","withTiming","duration","scrollHandler","useAnimatedScrollHandler","onBeginDrag","onMomentumBegin","onScroll","event","offsetY","contentOffset","y","ty","maxTy","dy","Math","min","max","onEndDrag","onMomentumEnd","threshold","nextTranslateY","hasCollapsible","appBarStyle","paddingTop","top","undefined","floating","scrollContentInsets"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Falsy, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';\nimport Animated from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useHeight } from '../internal/hooks';\nimport useElevationStyle from './useElevationStyle';\nimport useAppbarStyles from './useAppbarStyles';\n\ntype WebOnlyStyle = { boxShadow: any };\n\ntype ViewStyleProp = Array<ViewStyle | RegisteredStyle<ViewStyle> | WebOnlyStyle | Falsy>;\n\ntype OnScroll = ScrollViewProps['onScroll'];\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport interface ContentInsets {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\nexport interface Options {\n translucent?: boolean;\n}\n\nexport interface CollapsibleAppBar {\n appBarStyle: ViewStyleProp;\n onAppBarLayout: OnLayoutCallback;\n onCollapsibleToolbarLayout: OnLayoutCallback;\n onScroll: OnScroll;\n onScrollViewChanged: (index: number) => void;\n scrollContentInsets: ContentInsets;\n}\n\nconst defaultOptions: Required<Options> = {\n translucent: false,\n};\n\nconst ANIMATION_DURATION_MILLIS = 100;\n\nconst SUPPORTS_DRAG_DETECTION = Platform.OS !== 'web';\n\nexport default function useCollapsibleAppBar(userOptions: Options = defaultOptions): CollapsibleAppBar {\n const { translucent }: Required<Options> = {\n ...defaultOptions,\n ...userOptions,\n };\n\n const styles = useAppbarStyles();\n\n const safeAreaInsets = useSafeAreaInsets();\n\n const [appBarHeight, onAppBarLayout] = useHeight();\n const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();\n\n const maxTranslateY = Animated.useDerivedValue(() => -collapsibleToolbarHeight);\n\n const translateY = Animated.useSharedValue<number>(0);\n const lastTranslateY = Animated.useSharedValue<number>(0);\n const lastOffsetY = Animated.useSharedValue<number>(0);\n const overlapped = Animated.useSharedValue<boolean>(false);\n\n const elevationStyle = useElevationStyle(4);\n const animatedStyle = Animated.useAnimatedStyle(() => {\n return Platform.OS === 'web' ? ({\n transform: [{ translateY: translateY.value }],\n boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,\n }) : ({\n transform: [{ translateY: translateY.value }],\n elevation: overlapped.value ? elevationStyle?.elevation : 0,\n shadowColor: elevationStyle?.shadowColor,\n shadowOffset: elevationStyle?.shadowOffset,\n shadowRadius: elevationStyle?.shadowRadius,\n shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,\n });\n });\n\n const indexRef = React.useRef<number>(0);\n const offsetsRef = React.useRef<Array<number>>([]);\n\n const onScrollViewChanged = (nextIndex: number) => {\n const prevIndex = indexRef.current;\n if (prevIndex === nextIndex) {\n return;\n }\n\n offsetsRef.current[prevIndex] = lastOffsetY.value;\n\n const savedOffsetY = offsetsRef.current[nextIndex] ?? 0;\n lastOffsetY.value = savedOffsetY;\n\n indexRef.current = nextIndex;\n\n // Determine whether to overlap every time index is changed.\n overlapped.value = savedOffsetY > 0;\n\n // If next ScrollView's offset is too short, expand app bar.\n if (translateY.value < 0 && savedOffsetY < appBarHeight) {\n translateY.value = Animated.withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n };\n\n const scrollHandler = Animated.useAnimatedScrollHandler({\n onBeginDrag: () => {\n lastTranslateY.value = translateY.value;\n },\n onMomentumBegin: () => {\n lastTranslateY.value = translateY.value;\n },\n onScroll: (event) => {\n const offsetY = event.contentOffset.y;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n if (SUPPORTS_DRAG_DETECTION) {\n const dy = offsetY - lastOffsetY.value;\n\n translateY.value = offsetY <= 0 ? 0 : Math.min(Math.max(lastTranslateY.value - dy, maxTy), 0);\n\n overlapped.value = offsetY + translateY.value > 0;\n } else {\n if (offsetY > -maxTy) {\n if (ty === 0) {\n translateY.value = Animated.withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n } else {\n if (ty === maxTy) {\n translateY.value = Animated.withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n }\n\n overlapped.value = offsetY > 0;\n\n lastOffsetY.value = offsetY;\n }\n },\n onEndDrag: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n onMomentumEnd: (event) => {\n const offsetY = event.contentOffset.y;\n\n lastOffsetY.value = offsetY;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n // If toolbar is already positioned on edge, do nothing.\n if (ty <= maxTy || ty >= 0) {\n return;\n }\n\n const threshold = maxTy * 0.5;\n\n const nextTranslateY = (ty > threshold || offsetY < appBarHeight) ? 0 : maxTy;\n\n overlapped.value = offsetY + nextTranslateY > 0;\n\n translateY.value = Animated.withTiming(nextTranslateY, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n },\n });\n\n const hasCollapsible = collapsibleToolbarHeight > 0;\n\n const appBarStyle = [\n animatedStyle,\n translucent ? { paddingTop: safeAreaInsets.top } : undefined,\n hasCollapsible ? styles.floating : undefined,\n ];\n\n return {\n appBarStyle,\n onAppBarLayout,\n onCollapsibleToolbarLayout,\n onScroll: scrollHandler,\n onScrollViewChanged,\n scrollContentInsets: { top: hasCollapsible ? appBarHeight : 0 },\n };\n};\n"]}
1
+ {"version":3,"sources":["useCollapsibleAppBar.ts"],"names":["defaultOptions","keyboardDismissMode","translucent","ANIMATION_DURATION_MILLIS","SUPPORTS_DRAG_DETECTION","Platform","OS","useCollapsibleAppBar","userOptions","styles","safeAreaInsets","appBarHeight","onAppBarLayout","collapsibleToolbarHeight","onCollapsibleToolbarLayout","maxTranslateY","Animated","useDerivedValue","translateY","useSharedValue","lastTranslateY","lastOffsetY","overlapped","elevationStyle","animatedStyle","useAnimatedStyle","transform","value","boxShadow","elevation","shadowColor","shadowOffset","shadowRadius","shadowOpacity","indexRef","React","useRef","offsetsRef","onScrollViewChanged","nextIndex","prevIndex","current","savedOffsetY","withTiming","duration","scrollHandler","useAnimatedScrollHandler","onBeginDrag","runOnJS","Keyboard","dismiss","onMomentumBegin","onScroll","event","offsetY","contentOffset","y","ty","maxTy","dy","Math","min","max","onEndDrag","onMomentumEnd","threshold","nextTranslateY","hasCollapsible","appBarStyle","paddingTop","top","undefined","floating","scrollContentInsets"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Falsy, Keyboard, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';\nimport Animated from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useHeight } from '../internal/hooks';\nimport useElevationStyle from './useElevationStyle';\nimport useAppbarStyles from './useAppbarStyles';\n\ntype WebOnlyStyle = { boxShadow: any };\n\ntype ViewStyleProp = Array<ViewStyle | RegisteredStyle<ViewStyle> | WebOnlyStyle | Falsy>;\n\ntype OnScroll = ScrollViewProps['onScroll'];\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport interface ContentInsets {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\nexport interface Options {\n keyboardDismissMode?: 'none' | 'on-drag';\n translucent?: boolean;\n}\n\nexport interface CollapsibleAppBar {\n appBarStyle: ViewStyleProp;\n onAppBarLayout: OnLayoutCallback;\n onCollapsibleToolbarLayout: OnLayoutCallback;\n onScroll: OnScroll;\n onScrollViewChanged: (index: number) => void;\n scrollContentInsets: ContentInsets;\n}\n\nconst defaultOptions: Required<Options> = {\n keyboardDismissMode: 'none',\n translucent: false,\n};\n\nconst ANIMATION_DURATION_MILLIS = 100;\n\nconst SUPPORTS_DRAG_DETECTION = Platform.OS !== 'web';\n\nexport default function useCollapsibleAppBar(userOptions: Options = defaultOptions): CollapsibleAppBar {\n const { translucent, keyboardDismissMode }: Required<Options> = {\n ...defaultOptions,\n ...userOptions,\n };\n\n const styles = useAppbarStyles();\n\n const safeAreaInsets = useSafeAreaInsets();\n\n const [appBarHeight, onAppBarLayout] = useHeight();\n const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();\n\n const maxTranslateY = Animated.useDerivedValue(() => -collapsibleToolbarHeight);\n\n const translateY = Animated.useSharedValue<number>(0);\n const lastTranslateY = Animated.useSharedValue<number>(0);\n const lastOffsetY = Animated.useSharedValue<number>(0);\n const overlapped = Animated.useSharedValue<boolean>(false);\n\n const elevationStyle = useElevationStyle(4);\n const animatedStyle = Animated.useAnimatedStyle(() => {\n return Platform.OS === 'web' ? ({\n transform: [{ translateY: translateY.value }],\n boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,\n }) : ({\n transform: [{ translateY: translateY.value }],\n elevation: overlapped.value ? elevationStyle?.elevation : 0,\n shadowColor: elevationStyle?.shadowColor,\n shadowOffset: elevationStyle?.shadowOffset,\n shadowRadius: elevationStyle?.shadowRadius,\n shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,\n });\n });\n\n const indexRef = React.useRef<number>(0);\n const offsetsRef = React.useRef<Array<number>>([]);\n\n const onScrollViewChanged = (nextIndex: number) => {\n const prevIndex = indexRef.current;\n if (prevIndex === nextIndex) {\n return;\n }\n\n offsetsRef.current[prevIndex] = lastOffsetY.value;\n\n const savedOffsetY = offsetsRef.current[nextIndex] ?? 0;\n lastOffsetY.value = savedOffsetY;\n\n indexRef.current = nextIndex;\n\n // Determine whether to overlap every time index is changed.\n overlapped.value = savedOffsetY > 0;\n\n // If next ScrollView's offset is too short, expand app bar.\n if (translateY.value < 0 && savedOffsetY < appBarHeight) {\n translateY.value = Animated.withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n };\n\n const scrollHandler = Animated.useAnimatedScrollHandler({\n onBeginDrag: () => {\n if (keyboardDismissMode === 'on-drag') {\n Animated.runOnJS(Keyboard.dismiss)();\n }\n lastTranslateY.value = translateY.value;\n },\n onMomentumBegin: () => {\n lastTranslateY.value = translateY.value;\n },\n onScroll: (event) => {\n const offsetY = event.contentOffset.y;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n if (SUPPORTS_DRAG_DETECTION) {\n const dy = offsetY - lastOffsetY.value;\n\n translateY.value = offsetY <= 0 ? 0 : Math.min(Math.max(lastTranslateY.value - dy, maxTy), 0);\n\n overlapped.value = offsetY + translateY.value > 0;\n } else {\n if (offsetY > -maxTy) {\n if (ty === 0) {\n translateY.value = Animated.withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n } else {\n if (ty === maxTy) {\n translateY.value = Animated.withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n }\n\n overlapped.value = offsetY > 0;\n\n lastOffsetY.value = offsetY;\n }\n },\n onEndDrag: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n onMomentumEnd: (event) => {\n const offsetY = event.contentOffset.y;\n\n lastOffsetY.value = offsetY;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n // If toolbar is already positioned on edge, do nothing.\n if (ty <= maxTy || ty >= 0) {\n return;\n }\n\n const threshold = maxTy * 0.5;\n\n const nextTranslateY = (ty > threshold || offsetY < appBarHeight) ? 0 : maxTy;\n\n overlapped.value = offsetY + nextTranslateY > 0;\n\n translateY.value = Animated.withTiming(nextTranslateY, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n },\n });\n\n const hasCollapsible = collapsibleToolbarHeight > 0;\n\n const appBarStyle = [\n animatedStyle,\n translucent ? { paddingTop: safeAreaInsets.top } : undefined,\n hasCollapsible ? styles.floating : undefined,\n ];\n\n return {\n appBarStyle,\n onAppBarLayout,\n onCollapsibleToolbarLayout,\n onScroll: scrollHandler,\n onScrollViewChanged,\n scrollContentInsets: { top: hasCollapsible ? appBarHeight : 0 },\n };\n};\n"]}
@@ -26,6 +26,7 @@ const defaultOptions = {
26
26
  fadeInBeginY: (endY, appBarHeight) => endY - appBarHeight,
27
27
  fadeInEndY: appBarHeight => appBarHeight,
28
28
  floating: true,
29
+ keyboardDismissMode: 'none',
29
30
  translucent: false
30
31
  };
31
32
  const shadowOffset = _reactNative.Platform.OS === 'ios' ? {
@@ -39,6 +40,7 @@ function useFadeInAppBar(userOptions = defaultOptions) {
39
40
  fadeInBeginY,
40
41
  fadeInEndY,
41
42
  floating,
43
+ keyboardDismissMode,
42
44
  translucent
43
45
  } = { ...defaultOptions,
44
46
  ...userOptions
@@ -75,6 +77,11 @@ function useFadeInAppBar(userOptions = defaultOptions) {
75
77
  }));
76
78
 
77
79
  const scrollHandler = _reactNativeReanimated.default.useAnimatedScrollHandler({
80
+ onBeginDrag: () => {
81
+ if (keyboardDismissMode === 'on-drag') {
82
+ _reactNativeReanimated.default.runOnJS(_reactNative.Keyboard.dismiss)();
83
+ }
84
+ },
78
85
  onScroll: event => {
79
86
  const offsetY = event.contentOffset.y;
80
87
  const distance = Math.max(toOffsetY - fromOffsetY, 1);
@@ -1 +1 @@
1
- {"version":3,"sources":["useFadeInAppBar.ts"],"names":["defaultOptions","backgroundColor","fadeInBeginY","endY","appBarHeight","fadeInEndY","floating","translucent","shadowOffset","Platform","OS","width","height","undefined","useFadeInAppBar","userOptions","styles","safeAreaInsets","onAppBarLayout","fromOffsetY","toOffsetY","React","useMemo","beginY","dy","Animated","useSharedValue","lastOffsetY","normalized","r","g","b","animatedAppBarStyle","useAnimatedStyle","value","elevation","shadowColor","shadowRadius","shadowOpacity","animatedTitleStyle","opacity","scrollHandler","useAnimatedScrollHandler","onScroll","event","offsetY","contentOffset","y","distance","Math","max","localOffsetY","min","onEndDrag","onMomentumEnd","appBarStyle","paddingTop","top","titleStyle"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Falsy, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';\nimport Animated from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { rgb } from '@fountain-ui/utils';\nimport { useHeight } from '../internal/hooks';\nimport useAppbarStyles from './useAppbarStyles';\n\ntype ViewStyleProp = Array<ViewStyle | RegisteredStyle<ViewStyle> | Falsy>;\n\ntype OnScroll = ScrollViewProps['onScroll'];\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport interface Options {\n backgroundColor?: string;\n fadeInBeginY?: number | ((endY: number, appBarHeight: number) => number);\n fadeInEndY?: number | ((appBarHeight: number) => number);\n floating?: boolean;\n translucent?: boolean;\n}\n\nexport interface FadeInAppBar {\n appBarStyle: ViewStyleProp;\n titleStyle: ViewStyleProp;\n onAppBarLayout: OnLayoutCallback;\n onScroll: OnScroll;\n dy: Animated.SharedValue<number>;\n normalized: Animated.SharedValue<number>;\n}\n\nconst defaultOptions: Required<Options> = {\n backgroundColor: '#ffffff',\n fadeInBeginY: (endY, appBarHeight) => endY - appBarHeight,\n fadeInEndY: (appBarHeight) => appBarHeight,\n floating: true,\n translucent: false,\n};\n\nconst shadowOffset = Platform.OS === 'ios' ? { width: 0, height: 3 } : undefined;\n\nexport default function useFadeInAppBar(userOptions: Options = defaultOptions): FadeInAppBar {\n const {\n backgroundColor,\n fadeInBeginY,\n fadeInEndY,\n floating,\n translucent,\n }: Required<Options> = {\n ...defaultOptions,\n ...userOptions,\n };\n\n const styles = useAppbarStyles();\n\n const safeAreaInsets = useSafeAreaInsets();\n\n const [appBarHeight, onAppBarLayout] = useHeight();\n\n const [fromOffsetY, toOffsetY] = React.useMemo(() => {\n const endY = typeof fadeInEndY === 'function'\n ? fadeInEndY(appBarHeight)\n : fadeInEndY;\n\n const beginY = typeof fadeInBeginY === 'function'\n ? fadeInBeginY(endY, appBarHeight)\n : fadeInBeginY;\n\n return [beginY, endY];\n }, [fadeInBeginY, fadeInBeginY, appBarHeight]);\n\n const dy = Animated.useSharedValue<number>(0);\n const lastOffsetY = Animated.useSharedValue<number>(0);\n const normalized = Animated.useSharedValue<number>(0);\n\n const [r, g, b] = React.useMemo(() => rgb(backgroundColor), [backgroundColor]);\n\n const animatedAppBarStyle = Animated.useAnimatedStyle(() => ({\n backgroundColor: `rgba(${r}, ${g}, ${b}, ${normalized.value})`,\n elevation: normalized.value >= 1 ? 6 : 0,\n shadowColor: '#000',\n shadowOffset,\n shadowRadius: 4.65,\n shadowOpacity: normalized.value >= 1 ? 0.25 : 0,\n }));\n\n const animatedTitleStyle = Animated.useAnimatedStyle(() => ({\n opacity: normalized.value,\n }));\n\n const scrollHandler = Animated.useAnimatedScrollHandler({\n onScroll: (event) => {\n const offsetY = event.contentOffset.y;\n\n const distance = Math.max(toOffsetY - fromOffsetY, 1);\n const localOffsetY = offsetY - fromOffsetY;\n\n dy.value = offsetY - lastOffsetY.value;\n\n normalized.value = Math.min(Math.max(localOffsetY / distance, 0), 1);\n },\n onEndDrag: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n onMomentumEnd: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n });\n\n const appBarStyle = [\n animatedAppBarStyle,\n translucent ? { paddingTop: safeAreaInsets.top } : undefined,\n floating ? styles.floating : undefined,\n ];\n\n return {\n appBarStyle,\n titleStyle: [animatedTitleStyle],\n onAppBarLayout,\n onScroll: scrollHandler,\n dy,\n normalized,\n };\n};\n"]}
1
+ {"version":3,"sources":["useFadeInAppBar.ts"],"names":["defaultOptions","backgroundColor","fadeInBeginY","endY","appBarHeight","fadeInEndY","floating","keyboardDismissMode","translucent","shadowOffset","Platform","OS","width","height","undefined","useFadeInAppBar","userOptions","styles","safeAreaInsets","onAppBarLayout","fromOffsetY","toOffsetY","React","useMemo","beginY","dy","Animated","useSharedValue","lastOffsetY","normalized","r","g","b","animatedAppBarStyle","useAnimatedStyle","value","elevation","shadowColor","shadowRadius","shadowOpacity","animatedTitleStyle","opacity","scrollHandler","useAnimatedScrollHandler","onBeginDrag","runOnJS","Keyboard","dismiss","onScroll","event","offsetY","contentOffset","y","distance","Math","max","localOffsetY","min","onEndDrag","onMomentumEnd","appBarStyle","paddingTop","top","titleStyle"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Falsy, Keyboard, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';\nimport Animated from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { rgb } from '@fountain-ui/utils';\nimport { useHeight } from '../internal/hooks';\nimport useAppbarStyles from './useAppbarStyles';\n\ntype ViewStyleProp = Array<ViewStyle | RegisteredStyle<ViewStyle> | Falsy>;\n\ntype OnScroll = ScrollViewProps['onScroll'];\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport interface Options {\n backgroundColor?: string;\n fadeInBeginY?: number | ((endY: number, appBarHeight: number) => number);\n fadeInEndY?: number | ((appBarHeight: number) => number);\n floating?: boolean;\n keyboardDismissMode?: 'none' | 'on-drag';\n translucent?: boolean;\n}\n\nexport interface FadeInAppBar {\n appBarStyle: ViewStyleProp;\n titleStyle: ViewStyleProp;\n onAppBarLayout: OnLayoutCallback;\n onScroll: OnScroll;\n dy: Animated.SharedValue<number>;\n normalized: Animated.SharedValue<number>;\n}\n\nconst defaultOptions: Required<Options> = {\n backgroundColor: '#ffffff',\n fadeInBeginY: (endY, appBarHeight) => endY - appBarHeight,\n fadeInEndY: (appBarHeight) => appBarHeight,\n floating: true,\n keyboardDismissMode: 'none',\n translucent: false,\n};\n\nconst shadowOffset = Platform.OS === 'ios' ? { width: 0, height: 3 } : undefined;\n\nexport default function useFadeInAppBar(userOptions: Options = defaultOptions): FadeInAppBar {\n const {\n backgroundColor,\n fadeInBeginY,\n fadeInEndY,\n floating,\n keyboardDismissMode,\n translucent,\n }: Required<Options> = {\n ...defaultOptions,\n ...userOptions,\n };\n\n const styles = useAppbarStyles();\n\n const safeAreaInsets = useSafeAreaInsets();\n\n const [appBarHeight, onAppBarLayout] = useHeight();\n\n const [fromOffsetY, toOffsetY] = React.useMemo(() => {\n const endY = typeof fadeInEndY === 'function'\n ? fadeInEndY(appBarHeight)\n : fadeInEndY;\n\n const beginY = typeof fadeInBeginY === 'function'\n ? fadeInBeginY(endY, appBarHeight)\n : fadeInBeginY;\n\n return [beginY, endY];\n }, [fadeInBeginY, fadeInBeginY, appBarHeight]);\n\n const dy = Animated.useSharedValue<number>(0);\n const lastOffsetY = Animated.useSharedValue<number>(0);\n const normalized = Animated.useSharedValue<number>(0);\n\n const [r, g, b] = React.useMemo(() => rgb(backgroundColor), [backgroundColor]);\n\n const animatedAppBarStyle = Animated.useAnimatedStyle(() => ({\n backgroundColor: `rgba(${r}, ${g}, ${b}, ${normalized.value})`,\n elevation: normalized.value >= 1 ? 6 : 0,\n shadowColor: '#000',\n shadowOffset,\n shadowRadius: 4.65,\n shadowOpacity: normalized.value >= 1 ? 0.25 : 0,\n }));\n\n const animatedTitleStyle = Animated.useAnimatedStyle(() => ({\n opacity: normalized.value,\n }));\n\n const scrollHandler = Animated.useAnimatedScrollHandler({\n onBeginDrag: () => {\n if (keyboardDismissMode === 'on-drag') {\n Animated.runOnJS(Keyboard.dismiss)();\n }\n },\n onScroll: (event) => {\n const offsetY = event.contentOffset.y;\n\n const distance = Math.max(toOffsetY - fromOffsetY, 1);\n const localOffsetY = offsetY - fromOffsetY;\n\n dy.value = offsetY - lastOffsetY.value;\n\n normalized.value = Math.min(Math.max(localOffsetY / distance, 0), 1);\n },\n onEndDrag: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n onMomentumEnd: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n });\n\n const appBarStyle = [\n animatedAppBarStyle,\n translucent ? { paddingTop: safeAreaInsets.top } : undefined,\n floating ? styles.floating : undefined,\n ];\n\n return {\n appBarStyle,\n titleStyle: [animatedTitleStyle],\n onAppBarLayout,\n onScroll: scrollHandler,\n dy,\n normalized,\n };\n};\n"]}
@@ -38,6 +38,7 @@ var _exportNames = {
38
38
  Menu: true,
39
39
  MenuItem: true,
40
40
  Modal: true,
41
+ createModalCloseEvent: true,
41
42
  Pagination: true,
42
43
  PaginationItem: true,
43
44
  Paper: true,
@@ -264,6 +265,12 @@ Object.defineProperty(exports, "Modal", {
264
265
  return _Modal.default;
265
266
  }
266
267
  });
268
+ Object.defineProperty(exports, "createModalCloseEvent", {
269
+ enumerable: true,
270
+ get: function () {
271
+ return _Modal.createModalCloseEvent;
272
+ }
273
+ });
267
274
  Object.defineProperty(exports, "Pagination", {
268
275
  enumerable: true,
269
276
  get: function () {
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './styles';\n\nexport * from './types';\n\nexport * from './hooks';\n\nexport * from './utils';\n\nexport { default as Accordion } from './Accordion';\nexport * from './Accordion';\n\nexport { default as AppBar } from './AppBar';\nexport * from './AppBar';\n\nexport { default as AspectRatio } from './AspectRatio';\nexport * from './AspectRatio';\n\nexport { default as Avatar } from './Avatar';\nexport * from './Avatar';\n\nexport { default as Badge } from './Badge';\nexport * from './Badge';\n\nexport { default as Button } from './Button';\nexport * from './Button';\n\nexport { default as ButtonBase } from './ButtonBase';\nexport * from './ButtonBase';\n\nexport { default as Card } from './Card';\nexport * from './Card';\n\nexport { default as CardActions } from './CardActions';\nexport * from './CardActions';\n\nexport { default as CardContent } from './CardContent';\nexport * from './CardContent';\n\nexport { default as CardMedia } from './CardMedia';\nexport * from './CardMedia';\n\nexport { default as Checkbox } from './Checkbox';\nexport * from './Checkbox';\n\nexport { default as Chip } from './Chip';\nexport * from './Chip';\n\nexport { default as CircularProgress } from './CircularProgress';\nexport * from './CircularProgress';\n\nexport { default as Column } from './Column';\nexport * from './Column';\n\nexport { default as Dialog } from './Dialog';\nexport * from './Dialog';\n\nexport { default as DialogActions } from './DialogActions';\nexport * from './DialogActions';\n\nexport { default as DialogContent } from './DialogContent';\nexport * from './DialogContent';\n\nexport { default as DialogMedia } from './DialogMedia';\nexport * from './DialogMedia';\n\nexport { default as DialogTitle } from './DialogTitle';\nexport * from './DialogTitle';\n\nexport { default as Divider } from './Divider';\nexport * from './Divider';\n\nexport { default as Fab } from './Fab';\nexport * from './Fab';\n\nexport { default as IconButton } from './IconButton';\nexport * from './IconButton';\n\nexport { default as Image } from './Image';\nexport * from './Image';\n\nexport { default as Link } from './Link';\nexport * from './Link';\n\nexport { default as List } from './List';\nexport * from './List';\n\nexport { default as ListItem } from './ListItem';\nexport * from './ListItem';\n\nexport { default as ListItemIcon } from './ListItemIcon';\nexport * from './ListItemIcon';\n\nexport { default as ListItemSecondaryAction } from './ListItemSecondaryAction';\nexport * from './ListItemSecondaryAction';\n\nexport { default as ListItemText } from './ListItemText';\nexport * from './ListItemText';\n\nexport { default as ListSubheader } from './ListSubheader';\nexport * from './ListSubheader';\n\nexport { default as Menu } from './Menu';\nexport * from './Menu';\n\nexport { default as MenuItem } from './MenuItem';\nexport * from './MenuItem';\n\nexport { default as Modal } from './Modal';\nexport * from './Modal';\n\nexport { default as Pagination } from './Pagination';\nexport * from './Pagination';\n\nexport { default as PaginationItem } from './PaginationItem';\nexport * from './PaginationItem';\n\nexport { default as Paper } from './Paper';\nexport * from './Paper';\n\nexport { default as Portal } from './Portal';\nexport * from './Portal';\n\nexport { default as Radio } from './Radio';\nexport * from './Radio';\n\nexport { default as RadioGroup } from './RadioGroup';\nexport * from './RadioGroup';\n\nexport { default as Row } from './Row';\nexport * from './Row';\n\nexport { default as Slide } from './Slide';\nexport * from './Slide';\n\nexport { default as Slider } from './Slider';\nexport * from './Slider';\n\nexport { default as Snackbar } from './Snackbar';\nexport * from './Snackbar';\n\nexport { default as SnackbarContent } from './SnackbarContent';\nexport * from './SnackbarContent';\n\nexport { default as Spacer } from './Spacer';\nexport * from './Spacer';\n\nexport { default as SvgIcon } from './SvgIcon';\nexport * from './SvgIcon';\n\nexport { default as Switch } from './Switch';\nexport * from './Switch';\n\nexport { default as Tab } from './Tab';\nexport * from './Tab';\n\nexport { default as TabBase } from './TabBase';\nexport * from './TabBase';\n\nexport { default as Tabs } from './Tabs';\nexport * from './Tabs';\n\nexport { default as TextField } from './TextField';\nexport * from './TextField';\n\nexport { default as Toolbar } from './Toolbar';\nexport * from './Toolbar';\n\nexport { default as Tooltip } from './Tooltip';\nexport * from './Tooltip';\n\nexport { default as Typography } from './Typography';\nexport * from './Typography';\n\nexport * from './animated';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './styles';\n\nexport * from './types';\n\nexport * from './hooks';\n\nexport * from './utils';\n\nexport { default as Accordion } from './Accordion';\nexport * from './Accordion';\n\nexport { default as AppBar } from './AppBar';\nexport * from './AppBar';\n\nexport { default as AspectRatio } from './AspectRatio';\nexport * from './AspectRatio';\n\nexport { default as Avatar } from './Avatar';\nexport * from './Avatar';\n\nexport { default as Badge } from './Badge';\nexport * from './Badge';\n\nexport { default as Button } from './Button';\nexport * from './Button';\n\nexport { default as ButtonBase } from './ButtonBase';\nexport * from './ButtonBase';\n\nexport { default as Card } from './Card';\nexport * from './Card';\n\nexport { default as CardActions } from './CardActions';\nexport * from './CardActions';\n\nexport { default as CardContent } from './CardContent';\nexport * from './CardContent';\n\nexport { default as CardMedia } from './CardMedia';\nexport * from './CardMedia';\n\nexport { default as Checkbox } from './Checkbox';\nexport * from './Checkbox';\n\nexport { default as Chip } from './Chip';\nexport * from './Chip';\n\nexport { default as CircularProgress } from './CircularProgress';\nexport * from './CircularProgress';\n\nexport { default as Column } from './Column';\nexport * from './Column';\n\nexport { default as Dialog } from './Dialog';\nexport * from './Dialog';\n\nexport { default as DialogActions } from './DialogActions';\nexport * from './DialogActions';\n\nexport { default as DialogContent } from './DialogContent';\nexport * from './DialogContent';\n\nexport { default as DialogMedia } from './DialogMedia';\nexport * from './DialogMedia';\n\nexport { default as DialogTitle } from './DialogTitle';\nexport * from './DialogTitle';\n\nexport { default as Divider } from './Divider';\nexport * from './Divider';\n\nexport { default as Fab } from './Fab';\nexport * from './Fab';\n\nexport { default as IconButton } from './IconButton';\nexport * from './IconButton';\n\nexport { default as Image } from './Image';\nexport * from './Image';\n\nexport { default as Link } from './Link';\nexport * from './Link';\n\nexport { default as List } from './List';\nexport * from './List';\n\nexport { default as ListItem } from './ListItem';\nexport * from './ListItem';\n\nexport { default as ListItemIcon } from './ListItemIcon';\nexport * from './ListItemIcon';\n\nexport { default as ListItemSecondaryAction } from './ListItemSecondaryAction';\nexport * from './ListItemSecondaryAction';\n\nexport { default as ListItemText } from './ListItemText';\nexport * from './ListItemText';\n\nexport { default as ListSubheader } from './ListSubheader';\nexport * from './ListSubheader';\n\nexport { default as Menu } from './Menu';\nexport * from './Menu';\n\nexport { default as MenuItem } from './MenuItem';\nexport * from './MenuItem';\n\nexport { default as Modal, createModalCloseEvent } from './Modal';\nexport type { ModalCloseEvent } from './Modal';\nexport * from './Modal';\n\nexport { default as Pagination } from './Pagination';\nexport * from './Pagination';\n\nexport { default as PaginationItem } from './PaginationItem';\nexport * from './PaginationItem';\n\nexport { default as Paper } from './Paper';\nexport * from './Paper';\n\nexport { default as Portal } from './Portal';\nexport * from './Portal';\n\nexport { default as Radio } from './Radio';\nexport * from './Radio';\n\nexport { default as RadioGroup } from './RadioGroup';\nexport * from './RadioGroup';\n\nexport { default as Row } from './Row';\nexport * from './Row';\n\nexport { default as Slide } from './Slide';\nexport * from './Slide';\n\nexport { default as Slider } from './Slider';\nexport * from './Slider';\n\nexport { default as Snackbar } from './Snackbar';\nexport * from './Snackbar';\n\nexport { default as SnackbarContent } from './SnackbarContent';\nexport * from './SnackbarContent';\n\nexport { default as Spacer } from './Spacer';\nexport * from './Spacer';\n\nexport { default as SvgIcon } from './SvgIcon';\nexport * from './SvgIcon';\n\nexport { default as Switch } from './Switch';\nexport * from './Switch';\n\nexport { default as Tab } from './Tab';\nexport * from './Tab';\n\nexport { default as TabBase } from './TabBase';\nexport * from './TabBase';\n\nexport { default as Tabs } from './Tabs';\nexport * from './Tabs';\n\nexport { default as TextField } from './TextField';\nexport * from './TextField';\n\nexport { default as Toolbar } from './Toolbar';\nexport * from './Toolbar';\n\nexport { default as Tooltip } from './Tooltip';\nexport * from './Tooltip';\n\nexport { default as Typography } from './Typography';\nexport * from './Typography';\n\nexport * from './animated';\n"]}
@@ -6,6 +6,11 @@ import { css, StyleSheet } from '../styles';
6
6
  import { useElevationStyle } from '../hooks';
7
7
  import Slide from '../Slide';
8
8
  import SimpleBackdrop from './SimpleBackdrop';
9
+ export const createModalCloseEvent = reason => ({
10
+ metadata: {
11
+ reason
12
+ }
13
+ });
9
14
  export default function Modal(props) {
10
15
  const {
11
16
  animationStyle,
@@ -21,7 +26,7 @@ export default function Modal(props) {
21
26
 
22
27
  const handleBackdropPress = () => {
23
28
  if (onClose) {
24
- onClose();
29
+ onClose(createModalCloseEvent('OUTSIDE_PRESS'));
25
30
  }
26
31
  };
27
32
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Modal.tsx"],"names":["React","View","css","StyleSheet","useElevationStyle","Slide","SimpleBackdrop","Modal","props","animationStyle","backdropOpacity","children","disableAnimation","hideBackdrop","onClose","style","visible","otherProps","handleBackdropPress","exited","setExited","useState","elevationStyle","absoluteFill"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,QAAqB,cAArB;AACA,SAASC,GAAT,EAAcC,UAAd,QAAgC,WAAhC;AACA,SAASC,iBAAT,QAAkC,UAAlC;AACA,OAAOC,KAAP,MAAkB,UAAlB;AACA,OAAOC,cAAP,MAA2B,kBAA3B;AAGA,eAAe,SAASC,KAAT,CAAeC,KAAf,EAAkC;AAC7C,QAAM;AACFC,IAAAA,cADE;AAEFC,IAAAA,eAAe,GAAG,GAFhB;AAGFC,IAAAA,QAHE;AAIFC,IAAAA,gBAAgB,GAAG,KAJjB;AAKFC,IAAAA,YAAY,GAAG,KALb;AAMFC,IAAAA,OANE;AAOFC,IAAAA,KAPE;AAQFC,IAAAA,OARE;AASF,OAAGC;AATD,MAUFT,KAVJ;;AAYA,QAAMU,mBAAmB,GAAG,MAAM;AAC9B,QAAIJ,OAAJ,EAAa;AACTA,MAAAA,OAAO;AACV;AACJ,GAJD;;AAMA,QAAM,CAACK,MAAD,EAASC,SAAT,IAAsBpB,KAAK,CAACqB,QAAN,CAAe,IAAf,CAA5B;AAEA,QAAMC,cAAc,GAAGlB,iBAAiB,CAAC,CAAD,CAAxC;;AAEA,MAAI,CAACY,OAAL,EAAc;AACV,QAAIJ,gBAAgB,IAAIO,MAAxB,EAAgC;AAC5B,aAAO,IAAP;AACH;AACJ;;AAED,sBACI,oBAAC,IAAD;AACI,IAAA,KAAK,EAAEjB,GAAG,CAAC,CACPC,UAAU,CAACoB,YADJ,EAEPD,cAFO,EAGPP,KAHO,CAAD;AADd,KAMQE,UANR,GAQMJ,YAAY,IAAI,CAACG,OAAlB,GAA6B,IAA7B,gBACG,oBAAC,cAAD;AACI,IAAA,OAAO,EAAEE,mBADb;AAEI,IAAA,OAAO,EAAER;AAFb,IATR,EAeK,CAACE,gBAAD,gBACG,oBAAC,KAAD;AACI,IAAA,MAAM,EAAEI,OADZ;AAEI,IAAA,YAAY,EAAE,GAFlB;AAGI,IAAA,OAAO,EAAE,MAAMI,SAAS,CAAC,KAAD,CAH5B;AAII,IAAA,QAAQ,EAAE,MAAMA,SAAS,CAAC,IAAD,CAJ7B;AAKI,IAAA,KAAK,EAAEX;AALX,KAOKE,QAPL,CADH,GAUGA,QAzBR,CADJ;AA6BH;AAAA","sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\nimport { css, StyleSheet } from '../styles';\nimport { useElevationStyle } from '../hooks';\nimport Slide from '../Slide';\nimport SimpleBackdrop from './SimpleBackdrop';\nimport type ModalProps from './ModalProps';\n\nexport default function Modal(props: ModalProps) {\n const {\n animationStyle,\n backdropOpacity = 0.5,\n children,\n disableAnimation = false,\n hideBackdrop = false,\n onClose,\n style,\n visible,\n ...otherProps\n } = props;\n\n const handleBackdropPress = () => {\n if (onClose) {\n onClose();\n }\n };\n\n const [exited, setExited] = React.useState(true);\n\n const elevationStyle = useElevationStyle(6);\n\n if (!visible) {\n if (disableAnimation || exited) {\n return null;\n }\n }\n\n return (\n <View\n style={css([\n StyleSheet.absoluteFill,\n elevationStyle,\n style,\n ])}\n {...otherProps}\n >\n {(hideBackdrop || !visible) ? null : (\n <SimpleBackdrop\n onPress={handleBackdropPress}\n opacity={backdropOpacity}\n />\n )}\n\n {!disableAnimation ? (\n <Slide\n appear={visible}\n exitDuration={150}\n onEnter={() => setExited(false)}\n onExited={() => setExited(true)}\n style={animationStyle}\n >\n {children}\n </Slide>\n ) : children}\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["Modal.tsx"],"names":["React","View","css","StyleSheet","useElevationStyle","Slide","SimpleBackdrop","createModalCloseEvent","reason","metadata","Modal","props","animationStyle","backdropOpacity","children","disableAnimation","hideBackdrop","onClose","style","visible","otherProps","handleBackdropPress","exited","setExited","useState","elevationStyle","absoluteFill"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,QAAqB,cAArB;AACA,SAASC,GAAT,EAAcC,UAAd,QAAgC,WAAhC;AACA,SAASC,iBAAT,QAAkC,UAAlC;AACA,OAAOC,KAAP,MAAkB,UAAlB;AACA,OAAOC,cAAP,MAA2B,kBAA3B;AAWA,OAAO,MAAMC,qBAAqB,GAAIC,MAAD,KAAmC;AACpEC,EAAAA,QAAQ,EAAE;AACND,IAAAA;AADM;AAD0D,CAAnC,CAA9B;AAMP,eAAe,SAASE,KAAT,CAAeC,KAAf,EAAkC;AAC7C,QAAM;AACFC,IAAAA,cADE;AAEFC,IAAAA,eAAe,GAAG,GAFhB;AAGFC,IAAAA,QAHE;AAIFC,IAAAA,gBAAgB,GAAG,KAJjB;AAKFC,IAAAA,YAAY,GAAG,KALb;AAMFC,IAAAA,OANE;AAOFC,IAAAA,KAPE;AAQFC,IAAAA,OARE;AASF,OAAGC;AATD,MAUFT,KAVJ;;AAYA,QAAMU,mBAAmB,GAAG,MAAM;AAC9B,QAAIJ,OAAJ,EAAa;AACTA,MAAAA,OAAO,CAACV,qBAAqB,CAAC,eAAD,CAAtB,CAAP;AACH;AACJ,GAJD;;AAMA,QAAM,CAACe,MAAD,EAASC,SAAT,IAAsBvB,KAAK,CAACwB,QAAN,CAAe,IAAf,CAA5B;AAEA,QAAMC,cAAc,GAAGrB,iBAAiB,CAAC,CAAD,CAAxC;;AAEA,MAAI,CAACe,OAAL,EAAc;AACV,QAAIJ,gBAAgB,IAAIO,MAAxB,EAAgC;AAC5B,aAAO,IAAP;AACH;AACJ;;AAED,sBACI,oBAAC,IAAD;AACI,IAAA,KAAK,EAAEpB,GAAG,CAAC,CACPC,UAAU,CAACuB,YADJ,EAEPD,cAFO,EAGPP,KAHO,CAAD;AADd,KAMQE,UANR,GAQMJ,YAAY,IAAI,CAACG,OAAlB,GAA6B,IAA7B,gBACG,oBAAC,cAAD;AACI,IAAA,OAAO,EAAEE,mBADb;AAEI,IAAA,OAAO,EAAER;AAFb,IATR,EAeK,CAACE,gBAAD,gBACG,oBAAC,KAAD;AACI,IAAA,MAAM,EAAEI,OADZ;AAEI,IAAA,YAAY,EAAE,GAFlB;AAGI,IAAA,OAAO,EAAE,MAAMI,SAAS,CAAC,KAAD,CAH5B;AAII,IAAA,QAAQ,EAAE,MAAMA,SAAS,CAAC,IAAD,CAJ7B;AAKI,IAAA,KAAK,EAAEX;AALX,KAOKE,QAPL,CADH,GAUGA,QAzBR,CADJ;AA6BH;AAAA","sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\nimport { css, StyleSheet } from '../styles';\nimport { useElevationStyle } from '../hooks';\nimport Slide from '../Slide';\nimport SimpleBackdrop from './SimpleBackdrop';\nimport type ModalProps from './ModalProps';\n\nexport type ModalCloseReasonType = 'OUTSIDE_PRESS' | 'HARDWARE_BACK_PRESS' | 'CLOSE_BUTTON_PRESS' | 'UNKNOWN';\n\nexport interface ModalCloseEvent {\n metadata: {\n reason: ModalCloseReasonType\n };\n}\n\nexport const createModalCloseEvent = (reason: ModalCloseReasonType) => ({\n metadata: {\n reason,\n },\n});\n\nexport default function Modal(props: ModalProps) {\n const {\n animationStyle,\n backdropOpacity = 0.5,\n children,\n disableAnimation = false,\n hideBackdrop = false,\n onClose,\n style,\n visible,\n ...otherProps\n } = props;\n\n const handleBackdropPress = () => {\n if (onClose) {\n onClose(createModalCloseEvent('OUTSIDE_PRESS'));\n }\n };\n\n const [exited, setExited] = React.useState(true);\n\n const elevationStyle = useElevationStyle(6);\n\n if (!visible) {\n if (disableAnimation || exited) {\n return null;\n }\n }\n\n return (\n <View\n style={css([\n StyleSheet.absoluteFill,\n elevationStyle,\n style,\n ])}\n {...otherProps}\n >\n {(hideBackdrop || !visible) ? null : (\n <SimpleBackdrop\n onPress={handleBackdropPress}\n opacity={backdropOpacity}\n />\n )}\n\n {!disableAnimation ? (\n <Slide\n appear={visible}\n exitDuration={150}\n onEnter={() => setExited(false)}\n onExited={() => setExited(true)}\n style={animationStyle}\n >\n {children}\n </Slide>\n ) : children}\n </View>\n );\n};\n"]}
@@ -1,2 +1,2 @@
1
- export { default } from './Modal';
1
+ export { default, createModalCloseEvent } from './Modal';
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["default"],"mappings":"AAAA,SAASA,OAAT,QAAwB,SAAxB","sourcesContent":["export { default } from './Modal';\nexport type { default as ModalProps } from './ModalProps';"]}
1
+ {"version":3,"sources":["index.ts"],"names":["default","createModalCloseEvent"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,qBAAlB,QAA+C,SAA/C","sourcesContent":["export { default, createModalCloseEvent } from './Modal';\nexport type { ModalCloseEvent } from './Modal';\nexport type { default as ModalProps } from './ModalProps';\n"]}
@@ -30,6 +30,8 @@ export default function Tabs(props) {
30
30
  children,
31
31
  index: indexProp,
32
32
  disableIndicator = false,
33
+ keyboardDismissMode = 'none',
34
+ keyboardShouldPersistTaps = 'never',
33
35
  onChange,
34
36
  scrollable = false,
35
37
  scrollValue: scrollValueProp,
@@ -87,6 +89,12 @@ export default function Tabs(props) {
87
89
  }, ...prev.slice(index + 1)]);
88
90
  };
89
91
 
92
+ const onMouseDown = e => {
93
+ if (keyboardShouldPersistTaps === 'always') {
94
+ e.preventDefault();
95
+ }
96
+ };
97
+
90
98
  const onPress = () => {
91
99
  var _child$props$onPress, _child$props;
92
100
 
@@ -102,6 +110,7 @@ export default function Tabs(props) {
102
110
  enableIndicator: enableIndicatorPlaceholder,
103
111
  onLayout,
104
112
  onPress,
113
+ onMouseDown,
105
114
  variant,
106
115
  selected,
107
116
  style: scrollable ? undefined : styles.fixedTab
@@ -125,7 +134,9 @@ export default function Tabs(props) {
125
134
  ref: scrollViewRef,
126
135
  scrollsToTop: false,
127
136
  showsHorizontalScrollIndicator: false,
128
- showsVerticalScrollIndicator: false
137
+ showsVerticalScrollIndicator: false,
138
+ keyboardDismissMode: keyboardDismissMode,
139
+ keyboardShouldPersistTaps: keyboardShouldPersistTaps
129
140
  }, tabElements, indicator) : /*#__PURE__*/React.createElement(React.Fragment, null, tabElements, indicator));
130
141
  }
131
142
  ;
@@ -1 +1 @@
1
- {"version":3,"sources":["Tabs.tsx"],"names":["React","ScrollView","View","Animated","Easing","isEveryDefined","css","useTheme","useWidth","defaultCoordinate","TabIndicator","useStyles","theme","root","fixedRoot","flexDirection","fixedTab","flex","scrollableContainer","paddingHorizontal","spacing","Tabs","props","children","index","indexProp","disableIndicator","onChange","scrollable","scrollValue","scrollValueProp","style","variant","otherProps","styles","containerWidth","handleLayout","scrollViewRef","useRef","tabCount","Children","count","coordinates","setCoordinates","useState","Array","internalScrollValue","useSharedValue","isReadyToRenderIndicator","useEffect","animateTab","value","withTiming","duration","easing","out","exp","undefined","snapTab","scrollView","current","coordinate","tabWidth","x2","x1","x","scrollTo","y","animated","tabElements","map","child","onLayout","event","width","nativeEvent","layout","prev","slice","onPress","selected","enableIndicatorPlaceholder","cloneElement","enableIndicator","indicator"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { LayoutChangeEvent, ScrollView, View } from 'react-native';\nimport Animated, { Easing } from 'react-native-reanimated';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { isEveryDefined } from '@fountain-ui/utils';\nimport { css, useTheme } from '../styles';\nimport { useWidth } from '../internal/hooks';\nimport type TabsProps from './TabsProps';\nimport TabCoordinate, { defaultCoordinate } from './TabCoordinate';\nimport TabIndicator from './TabIndicator';\n\ntype TabsStyleKeys =\n | 'root'\n | 'fixedRoot'\n | 'fixedTab'\n | 'scrollableContainer';\n\ntype TabsStyles = NamedStylesStringUnion<TabsStyleKeys>;\n\nconst useStyles: UseStyles<TabsStyles> = function (): TabsStyles {\n const theme = useTheme();\n\n return {\n root: {},\n fixedRoot: {\n flexDirection: 'row',\n },\n fixedTab: {\n flex: 1,\n },\n scrollableContainer: {\n paddingHorizontal: theme.spacing(1),\n },\n };\n};\n\nexport default function Tabs(props: TabsProps) {\n const {\n children,\n index: indexProp,\n disableIndicator = false,\n onChange,\n scrollable = false,\n scrollValue: scrollValueProp,\n style,\n variant = 'primary',\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const [containerWidth, handleLayout] = useWidth();\n\n const scrollViewRef = React.useRef<ScrollView | null>(null);\n\n const tabCount = React.Children.count(children);\n const [coordinates, setCoordinates] = React.useState<TabCoordinate[]>(() => new Array(tabCount));\n\n const internalScrollValue = Animated.useSharedValue(0);\n const scrollValue = scrollValueProp || internalScrollValue;\n\n const isReadyToRenderIndicator = isEveryDefined(coordinates);\n\n React.useEffect(() => {\n const animateTab = (index: number) => {\n internalScrollValue.value = Animated.withTiming(index, {\n duration: 200,\n easing: Easing.out(Easing.exp),\n });\n };\n\n if (scrollValueProp === undefined) {\n animateTab(indexProp);\n }\n }, [indexProp, scrollValueProp, internalScrollValue]);\n\n React.useEffect(() => {\n const snapTab = (index: number) => {\n const scrollView = scrollViewRef.current;\n const coordinate: TabCoordinate = coordinates[index - 1] || defaultCoordinate;\n\n if (scrollView) {\n const tabWidth = coordinate.x2 - coordinate.x1;\n const x = coordinate.x1 + tabWidth / 2;\n\n scrollView.scrollTo({ x, y: 0, animated: true });\n }\n };\n\n snapTab(indexProp);\n }, [indexProp, containerWidth, coordinates]);\n\n const tabElements = React.Children.map(children, (child, index) => {\n const onLayout = (event: LayoutChangeEvent) => {\n const { x, width } = event.nativeEvent.layout;\n\n setCoordinates(prev => ([\n ...prev.slice(0, index),\n { x1: x, x2: x + width },\n ...prev.slice(index + 1),\n ]));\n };\n\n const onPress = () => {\n onChange?.(index);\n // @ts-ignore\n child.props.onPress?.();\n };\n\n const selected = index === indexProp;\n const enableIndicatorPlaceholder = disableIndicator\n ? false\n : (isReadyToRenderIndicator ? false : selected);\n\n //@ts-ignore\n return React.cloneElement(child, {\n enableIndicator: enableIndicatorPlaceholder,\n onLayout,\n onPress,\n variant,\n selected,\n style: scrollable ? undefined : styles.fixedTab,\n });\n });\n\n const indicator = (\n <TabIndicator\n coordinates={coordinates}\n disabled={disableIndicator}\n scrollable={scrollable}\n scrollValue={scrollValue}\n />\n );\n\n return (\n <View\n onLayout={handleLayout}\n style={css([\n styles.root,\n scrollable ? undefined : styles.fixedRoot,\n style,\n ])}\n {...otherProps}\n >\n {scrollable ? (\n <ScrollView\n automaticallyAdjustContentInsets={false}\n bounces={false}\n contentContainerStyle={styles.scrollableContainer}\n directionalLockEnabled={true}\n horizontal={true}\n ref={scrollViewRef}\n scrollsToTop={false}\n showsHorizontalScrollIndicator={false}\n showsVerticalScrollIndicator={false}\n >\n {tabElements}\n {indicator}\n </ScrollView>\n ) : (\n <>\n {tabElements}\n {indicator}\n </>\n )}\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["Tabs.tsx"],"names":["React","ScrollView","View","Animated","Easing","isEveryDefined","css","useTheme","useWidth","defaultCoordinate","TabIndicator","useStyles","theme","root","fixedRoot","flexDirection","fixedTab","flex","scrollableContainer","paddingHorizontal","spacing","Tabs","props","children","index","indexProp","disableIndicator","keyboardDismissMode","keyboardShouldPersistTaps","onChange","scrollable","scrollValue","scrollValueProp","style","variant","otherProps","styles","containerWidth","handleLayout","scrollViewRef","useRef","tabCount","Children","count","coordinates","setCoordinates","useState","Array","internalScrollValue","useSharedValue","isReadyToRenderIndicator","useEffect","animateTab","value","withTiming","duration","easing","out","exp","undefined","snapTab","scrollView","current","coordinate","tabWidth","x2","x1","x","scrollTo","y","animated","tabElements","map","child","onLayout","event","width","nativeEvent","layout","prev","slice","onMouseDown","e","preventDefault","onPress","selected","enableIndicatorPlaceholder","cloneElement","enableIndicator","indicator"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, LayoutChangeEvent, ScrollView, View } from 'react-native';\nimport Animated, { Easing } from 'react-native-reanimated';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { isEveryDefined } from '@fountain-ui/utils';\nimport { css, useTheme } from '../styles';\nimport { useWidth } from '../internal/hooks';\nimport type TabsProps from './TabsProps';\nimport TabCoordinate, { defaultCoordinate } from './TabCoordinate';\nimport TabIndicator from './TabIndicator';\n\ntype TabsStyleKeys =\n | 'root'\n | 'fixedRoot'\n | 'fixedTab'\n | 'scrollableContainer';\n\ntype TabsStyles = NamedStylesStringUnion<TabsStyleKeys>;\n\nconst useStyles: UseStyles<TabsStyles> = function (): TabsStyles {\n const theme = useTheme();\n\n return {\n root: {},\n fixedRoot: {\n flexDirection: 'row',\n },\n fixedTab: {\n flex: 1,\n },\n scrollableContainer: {\n paddingHorizontal: theme.spacing(1),\n },\n };\n};\n\nexport default function Tabs(props: TabsProps) {\n const {\n children,\n index: indexProp,\n disableIndicator = false,\n keyboardDismissMode = 'none',\n keyboardShouldPersistTaps = 'never',\n onChange,\n scrollable = false,\n scrollValue: scrollValueProp,\n style,\n variant = 'primary',\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const [containerWidth, handleLayout] = useWidth();\n\n const scrollViewRef = React.useRef<ScrollView | null>(null);\n\n const tabCount = React.Children.count(children);\n const [coordinates, setCoordinates] = React.useState<TabCoordinate[]>(() => new Array(tabCount));\n\n const internalScrollValue = Animated.useSharedValue(0);\n const scrollValue = scrollValueProp || internalScrollValue;\n\n const isReadyToRenderIndicator = isEveryDefined(coordinates);\n\n React.useEffect(() => {\n const animateTab = (index: number) => {\n internalScrollValue.value = Animated.withTiming(index, {\n duration: 200,\n easing: Easing.out(Easing.exp),\n });\n };\n\n if (scrollValueProp === undefined) {\n animateTab(indexProp);\n }\n }, [indexProp, scrollValueProp, internalScrollValue]);\n\n React.useEffect(() => {\n const snapTab = (index: number) => {\n const scrollView = scrollViewRef.current;\n const coordinate: TabCoordinate = coordinates[index - 1] || defaultCoordinate;\n\n if (scrollView) {\n const tabWidth = coordinate.x2 - coordinate.x1;\n const x = coordinate.x1 + tabWidth / 2;\n\n scrollView.scrollTo({ x, y: 0, animated: true });\n }\n };\n\n snapTab(indexProp);\n }, [indexProp, containerWidth, coordinates]);\n\n const tabElements = React.Children.map(children, (child, index) => {\n const onLayout = (event: LayoutChangeEvent) => {\n const { x, width } = event.nativeEvent.layout;\n\n setCoordinates(prev => ([\n ...prev.slice(0, index),\n { x1: x, x2: x + width },\n ...prev.slice(index + 1),\n ]));\n };\n\n const onMouseDown = (e: GestureResponderEvent) => {\n if (keyboardShouldPersistTaps === 'always') {\n e.preventDefault();\n }\n };\n\n const onPress = () => {\n onChange?.(index);\n // @ts-ignore\n child.props.onPress?.();\n };\n\n const selected = index === indexProp;\n const enableIndicatorPlaceholder = disableIndicator\n ? false\n : (isReadyToRenderIndicator ? false : selected);\n\n //@ts-ignore\n return React.cloneElement(child, {\n enableIndicator: enableIndicatorPlaceholder,\n onLayout,\n onPress,\n onMouseDown,\n variant,\n selected,\n style: scrollable ? undefined : styles.fixedTab,\n });\n });\n\n const indicator = (\n <TabIndicator\n coordinates={coordinates}\n disabled={disableIndicator}\n scrollable={scrollable}\n scrollValue={scrollValue}\n />\n );\n\n return (\n <View\n onLayout={handleLayout}\n style={css([\n styles.root,\n scrollable ? undefined : styles.fixedRoot,\n style,\n ])}\n {...otherProps}\n >\n {scrollable ? (\n <ScrollView\n automaticallyAdjustContentInsets={false}\n bounces={false}\n contentContainerStyle={styles.scrollableContainer}\n directionalLockEnabled={true}\n horizontal={true}\n ref={scrollViewRef}\n scrollsToTop={false}\n showsHorizontalScrollIndicator={false}\n showsVerticalScrollIndicator={false}\n keyboardDismissMode={keyboardDismissMode}\n keyboardShouldPersistTaps={keyboardShouldPersistTaps}\n >\n {tabElements}\n {indicator}\n </ScrollView>\n ) : (\n <>\n {tabElements}\n {indicator}\n </>\n )}\n </View>\n );\n};\n"]}