react-native-hold-menu-actions 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENCE +21 -0
- package/README.md +38 -0
- package/lib/commonjs/components/backdrop/Backdrop.js +104 -0
- package/lib/commonjs/components/backdrop/Backdrop.js.map +1 -0
- package/lib/commonjs/components/backdrop/constants.js +14 -0
- package/lib/commonjs/components/backdrop/constants.js.map +1 -0
- package/lib/commonjs/components/backdrop/index.js +16 -0
- package/lib/commonjs/components/backdrop/index.js.map +1 -0
- package/lib/commonjs/components/backdrop/styles.js +17 -0
- package/lib/commonjs/components/backdrop/styles.js.map +1 -0
- package/lib/commonjs/components/flatList/FlatList.js +35 -0
- package/lib/commonjs/components/flatList/FlatList.js.map +1 -0
- package/lib/commonjs/components/flatList/index.js +16 -0
- package/lib/commonjs/components/flatList/index.js.map +1 -0
- package/lib/commonjs/components/holdItem/HoldItem.js +369 -0
- package/lib/commonjs/components/holdItem/HoldItem.js.map +1 -0
- package/lib/commonjs/components/holdItem/index.js +16 -0
- package/lib/commonjs/components/holdItem/index.js.map +1 -0
- package/lib/commonjs/components/holdItem/styles.js +22 -0
- package/lib/commonjs/components/holdItem/styles.js.map +1 -0
- package/lib/commonjs/components/holdItem/types.d.js +2 -0
- package/lib/commonjs/components/holdItem/types.d.js.map +1 -0
- package/lib/commonjs/components/icon/Icon.js +43 -0
- package/lib/commonjs/components/icon/Icon.js.map +1 -0
- package/lib/commonjs/components/icon/index.js +16 -0
- package/lib/commonjs/components/icon/index.js.map +1 -0
- package/lib/commonjs/components/menu/Menu.js +57 -0
- package/lib/commonjs/components/menu/Menu.js.map +1 -0
- package/lib/commonjs/components/menu/MenuItem.js +85 -0
- package/lib/commonjs/components/menu/MenuItem.js.map +1 -0
- package/lib/commonjs/components/menu/MenuItems.js +35 -0
- package/lib/commonjs/components/menu/MenuItems.js.map +1 -0
- package/lib/commonjs/components/menu/MenuList.js +121 -0
- package/lib/commonjs/components/menu/MenuList.js.map +1 -0
- package/lib/commonjs/components/menu/Separator.js +47 -0
- package/lib/commonjs/components/menu/Separator.js.map +1 -0
- package/lib/commonjs/components/menu/calculations.js +31 -0
- package/lib/commonjs/components/menu/calculations.js.map +1 -0
- package/lib/commonjs/components/menu/constants.js +21 -0
- package/lib/commonjs/components/menu/constants.js.map +1 -0
- package/lib/commonjs/components/menu/index.js +16 -0
- package/lib/commonjs/components/menu/index.js.map +1 -0
- package/lib/commonjs/components/menu/styles.js +77 -0
- package/lib/commonjs/components/menu/styles.js.map +1 -0
- package/lib/commonjs/components/menu/types.d.js +2 -0
- package/lib/commonjs/components/menu/types.d.js.map +1 -0
- package/lib/commonjs/components/provider/Provider.js +98 -0
- package/lib/commonjs/components/provider/Provider.js.map +1 -0
- package/lib/commonjs/components/provider/index.js +16 -0
- package/lib/commonjs/components/provider/index.js.map +1 -0
- package/lib/commonjs/components/provider/reducer.js +50 -0
- package/lib/commonjs/components/provider/reducer.js.map +1 -0
- package/lib/commonjs/components/provider/types.d.js +2 -0
- package/lib/commonjs/components/provider/types.d.js.map +1 -0
- package/lib/commonjs/constants.js +60 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/context/index.js +14 -0
- package/lib/commonjs/context/index.js.map +1 -0
- package/lib/commonjs/context/internal.js +13 -0
- package/lib/commonjs/context/internal.js.map +1 -0
- package/lib/commonjs/hooks/index.js +24 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/hooks/useDeviceOrientation.js +38 -0
- package/lib/commonjs/hooks/useDeviceOrientation.js.map +1 -0
- package/lib/commonjs/hooks/useInternal.js +15 -0
- package/lib/commonjs/hooks/useInternal.js.map +1 -0
- package/lib/commonjs/index.js +40 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/styleGuide.js +39 -0
- package/lib/commonjs/styleGuide.js.map +1 -0
- package/lib/commonjs/utils/calculations.js +73 -0
- package/lib/commonjs/utils/calculations.js.map +1 -0
- package/lib/commonjs/utils/validations.js +43 -0
- package/lib/commonjs/utils/validations.js.map +1 -0
- package/lib/module/components/backdrop/Backdrop.js +83 -0
- package/lib/module/components/backdrop/Backdrop.js.map +1 -0
- package/lib/module/components/backdrop/constants.js +4 -0
- package/lib/module/components/backdrop/constants.js.map +1 -0
- package/lib/module/components/backdrop/index.js +2 -0
- package/lib/module/components/backdrop/index.js.map +1 -0
- package/lib/module/components/backdrop/styles.js +7 -0
- package/lib/module/components/backdrop/styles.js.map +1 -0
- package/lib/module/components/flatList/FlatList.js +17 -0
- package/lib/module/components/flatList/FlatList.js.map +1 -0
- package/lib/module/components/flatList/index.js +2 -0
- package/lib/module/components/flatList/index.js.map +1 -0
- package/lib/module/components/holdItem/HoldItem.js +344 -0
- package/lib/module/components/holdItem/HoldItem.js.map +1 -0
- package/lib/module/components/holdItem/index.js +2 -0
- package/lib/module/components/holdItem/index.js.map +1 -0
- package/lib/module/components/holdItem/styles.js +12 -0
- package/lib/module/components/holdItem/styles.js.map +1 -0
- package/lib/module/components/holdItem/types.d.js +2 -0
- package/lib/module/components/holdItem/types.d.js.map +1 -0
- package/lib/module/components/icon/Icon.js +26 -0
- package/lib/module/components/icon/Icon.js.map +1 -0
- package/lib/module/components/icon/index.js +2 -0
- package/lib/module/components/icon/index.js.map +1 -0
- package/lib/module/components/menu/Menu.js +37 -0
- package/lib/module/components/menu/Menu.js.map +1 -0
- package/lib/module/components/menu/MenuItem.js +59 -0
- package/lib/module/components/menu/MenuItem.js.map +1 -0
- package/lib/module/components/menu/MenuItems.js +19 -0
- package/lib/module/components/menu/MenuItems.js.map +1 -0
- package/lib/module/components/menu/MenuList.js +93 -0
- package/lib/module/components/menu/MenuList.js.map +1 -0
- package/lib/module/components/menu/Separator.js +29 -0
- package/lib/module/components/menu/Separator.js.map +1 -0
- package/lib/module/components/menu/calculations.js +17 -0
- package/lib/module/components/menu/calculations.js.map +1 -0
- package/lib/module/components/menu/constants.js +8 -0
- package/lib/module/components/menu/constants.js.map +1 -0
- package/lib/module/components/menu/index.js +2 -0
- package/lib/module/components/menu/index.js.map +1 -0
- package/lib/module/components/menu/styles.js +63 -0
- package/lib/module/components/menu/styles.js.map +1 -0
- package/lib/module/components/menu/types.d.js +2 -0
- package/lib/module/components/menu/types.d.js.map +1 -0
- package/lib/module/components/provider/Provider.js +75 -0
- package/lib/module/components/provider/Provider.js.map +1 -0
- package/lib/module/components/provider/index.js +2 -0
- package/lib/module/components/provider/index.js.map +1 -0
- package/lib/module/components/provider/reducer.js +38 -0
- package/lib/module/components/provider/reducer.js.map +1 -0
- package/lib/module/components/provider/types.d.js +2 -0
- package/lib/module/components/provider/types.d.js.map +1 -0
- package/lib/module/constants.js +37 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/context/index.js +2 -0
- package/lib/module/context/index.js.map +1 -0
- package/lib/module/context/internal.js +4 -0
- package/lib/module/context/internal.js.map +1 -0
- package/lib/module/hooks/index.js +3 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useDeviceOrientation.js +27 -0
- package/lib/module/hooks/useDeviceOrientation.js.map +1 -0
- package/lib/module/hooks/useInternal.js +4 -0
- package/lib/module/hooks/useInternal.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/styleGuide.js +30 -0
- package/lib/module/styleGuide.js.map +1 -0
- package/lib/module/utils/calculations.js +51 -0
- package/lib/module/utils/calculations.js.map +1 -0
- package/lib/module/utils/validations.js +38 -0
- package/lib/module/utils/validations.js.map +1 -0
- package/lib/typescript/components/backdrop/Backdrop.d.ts +3 -0
- package/lib/typescript/components/backdrop/constants.d.ts +2 -0
- package/lib/typescript/components/backdrop/index.d.ts +1 -0
- package/lib/typescript/components/backdrop/styles.d.ts +10 -0
- package/lib/typescript/components/flatList/FlatList.d.ts +5 -0
- package/lib/typescript/components/flatList/index.d.ts +2 -0
- package/lib/typescript/components/holdItem/HoldItem.d.ts +4 -0
- package/lib/typescript/components/holdItem/index.d.ts +2 -0
- package/lib/typescript/components/holdItem/styles.d.ts +15 -0
- package/lib/typescript/components/holdItem/types.d.ts +131 -0
- package/lib/typescript/components/icon/Icon.d.ts +7 -0
- package/lib/typescript/components/icon/index.d.ts +1 -0
- package/lib/typescript/components/menu/Menu.d.ts +3 -0
- package/lib/typescript/components/menu/MenuItem.d.ts +8 -0
- package/lib/typescript/components/menu/MenuItems.d.ts +6 -0
- package/lib/typescript/components/menu/MenuList.d.ts +3 -0
- package/lib/typescript/components/menu/Separator.d.ts +3 -0
- package/lib/typescript/components/menu/calculations.d.ts +4 -0
- package/lib/typescript/components/menu/constants.d.ts +7 -0
- package/lib/typescript/components/menu/index.d.ts +1 -0
- package/lib/typescript/components/menu/styles.d.ts +59 -0
- package/lib/typescript/components/menu/types.d.ts +28 -0
- package/lib/typescript/components/provider/Provider.d.ts +10 -0
- package/lib/typescript/components/provider/index.d.ts +2 -0
- package/lib/typescript/components/provider/reducer.d.ts +20 -0
- package/lib/typescript/components/provider/types.d.ts +33 -0
- package/lib/typescript/constants.d.ts +29 -0
- package/lib/typescript/context/index.d.ts +1 -0
- package/lib/typescript/context/internal.d.ts +16 -0
- package/lib/typescript/hooks/index.d.ts +2 -0
- package/lib/typescript/hooks/useDeviceOrientation.d.ts +3 -0
- package/lib/typescript/hooks/useInternal.d.ts +1 -0
- package/lib/typescript/index.d.ts +4 -0
- package/lib/typescript/styleGuide.d.ts +28 -0
- package/lib/typescript/utils/calculations.d.ts +14 -0
- package/lib/typescript/utils/validations.d.ts +3 -0
- package/package.json +106 -0
- package/src/components/backdrop/Backdrop.tsx +138 -0
- package/src/components/backdrop/constants.ts +8 -0
- package/src/components/backdrop/index.ts +1 -0
- package/src/components/backdrop/styles.ts +8 -0
- package/src/components/flatList/FlatList.tsx +23 -0
- package/src/components/flatList/index.ts +2 -0
- package/src/components/holdItem/HoldItem.tsx +449 -0
- package/src/components/holdItem/index.ts +2 -0
- package/src/components/holdItem/styles.ts +11 -0
- package/src/components/holdItem/types.d.ts +131 -0
- package/src/components/icon/Icon.tsx +33 -0
- package/src/components/icon/index.ts +1 -0
- package/src/components/menu/Menu.tsx +57 -0
- package/src/components/menu/MenuItem.tsx +79 -0
- package/src/components/menu/MenuItems.tsx +26 -0
- package/src/components/menu/MenuList.tsx +151 -0
- package/src/components/menu/Separator.tsx +28 -0
- package/src/components/menu/calculations.ts +49 -0
- package/src/components/menu/constants.ts +9 -0
- package/src/components/menu/index.ts +1 -0
- package/src/components/menu/styles.ts +64 -0
- package/src/components/menu/types.d.ts +28 -0
- package/src/components/provider/Provider.tsx +105 -0
- package/src/components/provider/index.ts +2 -0
- package/src/components/provider/reducer.ts +48 -0
- package/src/components/provider/types.d.ts +33 -0
- package/src/constants.ts +54 -0
- package/src/context/index.ts +1 -0
- package/src/context/internal.ts +19 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useDeviceOrientation.ts +28 -0
- package/src/hooks/useInternal.ts +4 -0
- package/src/index.ts +4 -0
- package/src/styleGuide.ts +31 -0
- package/src/utils/calculations.ts +110 -0
- package/src/utils/validations.ts +42 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _Provider.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _Provider = _interopRequireDefault(require("./Provider"));
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export { default } from './Provider';\nexport type { HoldMenuProviderProps } from './types';\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.initialState = exports.reducer = exports.ActionType = void 0;
|
|
7
|
+
|
|
8
|
+
var _constants = require("../../constants");
|
|
9
|
+
|
|
10
|
+
let ActionType;
|
|
11
|
+
exports.ActionType = ActionType;
|
|
12
|
+
|
|
13
|
+
(function (ActionType) {
|
|
14
|
+
ActionType["Active"] = "Active";
|
|
15
|
+
ActionType["End"] = "End";
|
|
16
|
+
ActionType["Theme"] = "Theme";
|
|
17
|
+
})(ActionType || (exports.ActionType = ActionType = {}));
|
|
18
|
+
|
|
19
|
+
const reducer = (state, action) => {
|
|
20
|
+
switch (action.type) {
|
|
21
|
+
case ActionType.Active:
|
|
22
|
+
return { ...state,
|
|
23
|
+
active: _constants.CONTEXT_MENU_STATE.ACTIVE,
|
|
24
|
+
activeItem: action.activeItem
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
case ActionType.End:
|
|
28
|
+
return { ...state,
|
|
29
|
+
active: _constants.CONTEXT_MENU_STATE.END,
|
|
30
|
+
activeItem: null
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
case ActionType.Theme:
|
|
34
|
+
return { ...state,
|
|
35
|
+
theme: state.theme === 'dark' ? 'light' : 'dark'
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
default:
|
|
39
|
+
return state;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
exports.reducer = reducer;
|
|
44
|
+
const initialState = {
|
|
45
|
+
active: 0,
|
|
46
|
+
activeItem: null,
|
|
47
|
+
theme: 'light'
|
|
48
|
+
};
|
|
49
|
+
exports.initialState = initialState;
|
|
50
|
+
//# sourceMappingURL=reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["reducer.ts"],"names":["ActionType","reducer","state","action","type","Active","active","CONTEXT_MENU_STATE","ACTIVE","activeItem","End","END","Theme","theme","initialState"],"mappings":";;;;;;;AAAA;;IAQYA,U;;;WAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;GAAAA,U,0BAAAA,U;;AAWL,MAAMC,OAAO,GAAG,CAACC,KAAD,EAAoBC,MAApB,KAAmD;AACxE,UAAQA,MAAM,CAACC,IAAf;AACE,SAAKJ,UAAU,CAACK,MAAhB;AACE,aAAO,EACL,GAAGH,KADE;AAELI,QAAAA,MAAM,EAAEC,8BAAmBC,MAFtB;AAGLC,QAAAA,UAAU,EAAEN,MAAM,CAACM;AAHd,OAAP;;AAKF,SAAKT,UAAU,CAACU,GAAhB;AACE,aAAO,EACL,GAAGR,KADE;AAELI,QAAAA,MAAM,EAAEC,8BAAmBI,GAFtB;AAGLF,QAAAA,UAAU,EAAE;AAHP,OAAP;;AAKF,SAAKT,UAAU,CAACY,KAAhB;AACE,aAAO,EACL,GAAGV,KADE;AAELW,QAAAA,KAAK,EAAEX,KAAK,CAACW,KAAN,KAAgB,MAAhB,GAAyB,OAAzB,GAAmC;AAFrC,OAAP;;AAIF;AACE,aAAOX,KAAP;AAnBJ;AAqBD,CAtBM;;;AAwBA,MAAMY,YAAwB,GAAG;AACtCR,EAAAA,MAAM,EAAE,CAD8B;AAEtCG,EAAAA,UAAU,EAAE,IAF0B;AAGtCI,EAAAA,KAAK,EAAE;AAH+B,CAAjC","sourcesContent":["import { CONTEXT_MENU_STATE } from '../../constants';\n\nexport type StateProps = {\n active: number;\n activeItem: string | null;\n theme: 'light' | 'dark';\n};\n\nexport enum ActionType {\n Active = 'Active',\n End = 'End',\n Theme = 'Theme',\n}\n\nexport type Action =\n | { type: ActionType.Active; activeItem: string | null }\n | { type: ActionType.End }\n | { type: ActionType.Theme };\n\nexport const reducer = (state: StateProps, action: Action): StateProps => {\n switch (action.type) {\n case ActionType.Active:\n return {\n ...state,\n active: CONTEXT_MENU_STATE.ACTIVE,\n activeItem: action.activeItem,\n };\n case ActionType.End:\n return {\n ...state,\n active: CONTEXT_MENU_STATE.END,\n activeItem: null,\n };\n case ActionType.Theme:\n return {\n ...state,\n theme: state.theme === 'dark' ? 'light' : 'dark',\n };\n default:\n return state;\n }\n};\n\nexport const initialState: StateProps = {\n active: 0,\n activeItem: null,\n theme: 'light',\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FONT_SCALE = exports.IS_IOS = exports.MENU_TRANSFORM_ORIGIN_TOLERENCE = exports.SPRING_CONFIGURATION_MENU = exports.SPRING_CONFIGURATION = exports.HOLD_ITEM_SCALE_DOWN_DURATION = exports.HOLD_ITEM_SCALE_DOWN_VALUE = exports.HOLD_ITEM_TRANSFORM_DURATION = exports.MENU_CONTAINER_WIDTH = exports.MENU_WIDTH = exports.WINDOW_WIDTH = exports.WINDOW_HEIGHT = exports.CONTEXT_MENU_STATE = void 0;
|
|
7
|
+
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
|
|
10
|
+
const HOLD_ITEM_TRANSFORM_DURATION = 150;
|
|
11
|
+
exports.HOLD_ITEM_TRANSFORM_DURATION = HOLD_ITEM_TRANSFORM_DURATION;
|
|
12
|
+
const HOLD_ITEM_SCALE_DOWN_VALUE = 0.95;
|
|
13
|
+
exports.HOLD_ITEM_SCALE_DOWN_VALUE = HOLD_ITEM_SCALE_DOWN_VALUE;
|
|
14
|
+
const HOLD_ITEM_SCALE_DOWN_DURATION = 210;
|
|
15
|
+
exports.HOLD_ITEM_SCALE_DOWN_DURATION = HOLD_ITEM_SCALE_DOWN_DURATION;
|
|
16
|
+
const SPRING_CONFIGURATION = {
|
|
17
|
+
damping: 33,
|
|
18
|
+
mass: 1.03,
|
|
19
|
+
stiffness: 500,
|
|
20
|
+
restDisplacementThreshold: 0.001,
|
|
21
|
+
restSpeedThreshold: 0.001
|
|
22
|
+
};
|
|
23
|
+
exports.SPRING_CONFIGURATION = SPRING_CONFIGURATION;
|
|
24
|
+
const SPRING_CONFIGURATION_MENU = {
|
|
25
|
+
damping: 39,
|
|
26
|
+
mass: 1.09,
|
|
27
|
+
stiffness: 500,
|
|
28
|
+
restDisplacementThreshold: 0.001,
|
|
29
|
+
restSpeedThreshold: 0.001
|
|
30
|
+
};
|
|
31
|
+
exports.SPRING_CONFIGURATION_MENU = SPRING_CONFIGURATION_MENU;
|
|
32
|
+
var CONTEXT_MENU_STATE;
|
|
33
|
+
exports.CONTEXT_MENU_STATE = CONTEXT_MENU_STATE;
|
|
34
|
+
|
|
35
|
+
(function (CONTEXT_MENU_STATE) {
|
|
36
|
+
CONTEXT_MENU_STATE[CONTEXT_MENU_STATE["UNDETERMINED"] = 0] = "UNDETERMINED";
|
|
37
|
+
CONTEXT_MENU_STATE[CONTEXT_MENU_STATE["ACTIVE"] = 1] = "ACTIVE";
|
|
38
|
+
CONTEXT_MENU_STATE[CONTEXT_MENU_STATE["END"] = 2] = "END";
|
|
39
|
+
})(CONTEXT_MENU_STATE || (exports.CONTEXT_MENU_STATE = CONTEXT_MENU_STATE = {}));
|
|
40
|
+
|
|
41
|
+
const {
|
|
42
|
+
height: WINDOW_HEIGHT,
|
|
43
|
+
width: WINDOW_WIDTH
|
|
44
|
+
} = _reactNative.Dimensions.get('screen');
|
|
45
|
+
|
|
46
|
+
exports.WINDOW_WIDTH = WINDOW_WIDTH;
|
|
47
|
+
exports.WINDOW_HEIGHT = WINDOW_HEIGHT;
|
|
48
|
+
const MENU_CONTAINER_WIDTH = 100;
|
|
49
|
+
exports.MENU_CONTAINER_WIDTH = MENU_CONTAINER_WIDTH;
|
|
50
|
+
const MENU_WIDTH = WINDOW_WIDTH * 60 / 100;
|
|
51
|
+
exports.MENU_WIDTH = MENU_WIDTH;
|
|
52
|
+
const MENU_TRANSFORM_ORIGIN_TOLERENCE = 10;
|
|
53
|
+
exports.MENU_TRANSFORM_ORIGIN_TOLERENCE = MENU_TRANSFORM_ORIGIN_TOLERENCE;
|
|
54
|
+
const IS_IOS = _reactNative.Platform.OS === 'ios';
|
|
55
|
+
exports.IS_IOS = IS_IOS;
|
|
56
|
+
|
|
57
|
+
const FONT_SCALE = _reactNative.Dimensions.get('screen').fontScale;
|
|
58
|
+
|
|
59
|
+
exports.FONT_SCALE = FONT_SCALE;
|
|
60
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["constants.ts"],"names":["HOLD_ITEM_TRANSFORM_DURATION","HOLD_ITEM_SCALE_DOWN_VALUE","HOLD_ITEM_SCALE_DOWN_DURATION","SPRING_CONFIGURATION","damping","mass","stiffness","restDisplacementThreshold","restSpeedThreshold","SPRING_CONFIGURATION_MENU","CONTEXT_MENU_STATE","height","WINDOW_HEIGHT","width","WINDOW_WIDTH","Dimensions","get","MENU_CONTAINER_WIDTH","MENU_WIDTH","MENU_TRANSFORM_ORIGIN_TOLERENCE","IS_IOS","Platform","OS","FONT_SCALE","fontScale"],"mappings":";;;;;;;AAAA;;AAEA,MAAMA,4BAA4B,GAAG,GAArC;;AACA,MAAMC,0BAA0B,GAAG,IAAnC;;AACA,MAAMC,6BAA6B,GAAG,GAAtC;;AAEA,MAAMC,oBAAoB,GAAG;AAC3BC,EAAAA,OAAO,EAAE,EADkB;AAE3BC,EAAAA,IAAI,EAAE,IAFqB;AAG3BC,EAAAA,SAAS,EAAE,GAHgB;AAI3BC,EAAAA,yBAAyB,EAAE,KAJA;AAK3BC,EAAAA,kBAAkB,EAAE;AALO,CAA7B;;AAQA,MAAMC,yBAAyB,GAAG;AAChCL,EAAAA,OAAO,EAAE,EADuB;AAEhCC,EAAAA,IAAI,EAAE,IAF0B;AAGhCC,EAAAA,SAAS,EAAE,GAHqB;AAIhCC,EAAAA,yBAAyB,EAAE,KAJK;AAKhCC,EAAAA,kBAAkB,EAAE;AALY,CAAlC;;IAQKE,kB;;;WAAAA,kB;AAAAA,EAAAA,kB,CAAAA,kB;AAAAA,EAAAA,kB,CAAAA,kB;AAAAA,EAAAA,kB,CAAAA,kB;GAAAA,kB,kCAAAA,kB;;AAML,MAAM;AAAEC,EAAAA,MAAM,EAAEC,aAAV;AAAyBC,EAAAA,KAAK,EAAEC;AAAhC,IAAiDC,wBAAWC,GAAX,CAAe,QAAf,CAAvD;;;;AAEA,MAAMC,oBAAoB,GAAG,GAA7B;;AACA,MAAMC,UAAU,GAAIJ,YAAY,GAAG,EAAhB,GAAsB,GAAzC;;AAEA,MAAMK,+BAA+B,GAAG,EAAxC;;AAEA,MAAMC,MAAM,GAAGC,sBAASC,EAAT,KAAgB,KAA/B;;;AAEA,MAAMC,UAAU,GAAGR,wBAAWC,GAAX,CAAe,QAAf,EAAyBQ,SAA5C","sourcesContent":["import { Dimensions, Platform } from 'react-native';\n\nconst HOLD_ITEM_TRANSFORM_DURATION = 150;\nconst HOLD_ITEM_SCALE_DOWN_VALUE = 0.95;\nconst HOLD_ITEM_SCALE_DOWN_DURATION = 210;\n\nconst SPRING_CONFIGURATION = {\n damping: 33,\n mass: 1.03,\n stiffness: 500,\n restDisplacementThreshold: 0.001,\n restSpeedThreshold: 0.001,\n};\n\nconst SPRING_CONFIGURATION_MENU = {\n damping: 39,\n mass: 1.09,\n stiffness: 500,\n restDisplacementThreshold: 0.001,\n restSpeedThreshold: 0.001,\n};\n\nenum CONTEXT_MENU_STATE {\n UNDETERMINED = 0,\n ACTIVE,\n END,\n}\n\nconst { height: WINDOW_HEIGHT, width: WINDOW_WIDTH } = Dimensions.get('screen');\n\nconst MENU_CONTAINER_WIDTH = 100;\nconst MENU_WIDTH = (WINDOW_WIDTH * 60) / 100;\n\nconst MENU_TRANSFORM_ORIGIN_TOLERENCE = 10;\n\nconst IS_IOS = Platform.OS === 'ios';\n\nconst FONT_SCALE = Dimensions.get('screen').fontScale;\n\nexport {\n CONTEXT_MENU_STATE,\n WINDOW_HEIGHT,\n WINDOW_WIDTH,\n MENU_WIDTH,\n MENU_CONTAINER_WIDTH,\n HOLD_ITEM_TRANSFORM_DURATION,\n HOLD_ITEM_SCALE_DOWN_VALUE,\n HOLD_ITEM_SCALE_DOWN_DURATION,\n SPRING_CONFIGURATION,\n SPRING_CONFIGURATION_MENU,\n MENU_TRANSFORM_ORIGIN_TOLERENCE,\n IS_IOS,\n FONT_SCALE,\n};\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "InternalContext", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _internal.InternalContext;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _internal = require("./internal");
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export { InternalContext } from './internal';\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.InternalContext = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
const InternalContext = /*#__PURE__*/(0, _react.createContext)();
|
|
12
|
+
exports.InternalContext = InternalContext;
|
|
13
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["internal.ts"],"names":["InternalContext"],"mappings":";;;;;;;AAAA;;AAiBA;AACO,MAAMA,eAAe,gBAAG,2BAAxB","sourcesContent":["import { createContext } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport type { CONTEXT_MENU_STATE } from '../constants';\nimport { MenuInternalProps } from '../components/menu/types';\n\nexport type InternalContextType = {\n state: Animated.SharedValue<CONTEXT_MENU_STATE>;\n theme: Animated.SharedValue<'light' | 'dark'>;\n menuProps: Animated.SharedValue<MenuInternalProps>;\n safeAreaInsets?: {\n top: number;\n right: number;\n bottom: number;\n left: number;\n };\n};\n\n// @ts-ignore\nexport const InternalContext = createContext<InternalContextType>();\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useDeviceOrientation", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useDeviceOrientation.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "useInternal", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _useInternal.useInternal;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
var _useDeviceOrientation = _interopRequireDefault(require("./useDeviceOrientation"));
|
|
20
|
+
|
|
21
|
+
var _useInternal = require("./useInternal");
|
|
22
|
+
|
|
23
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AACA","sourcesContent":["export { default as useDeviceOrientation } from './useDeviceOrientation';\nexport { useInternal } from './useInternal';\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
|
|
12
|
+
function getWindowOrientation() {
|
|
13
|
+
const {
|
|
14
|
+
width,
|
|
15
|
+
height
|
|
16
|
+
} = _reactNative.Dimensions.get('window');
|
|
17
|
+
|
|
18
|
+
return height >= width ? 'portrait' : 'landscape';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function useDeviceOrientation() {
|
|
22
|
+
const [deviceOrientation, setDeviceOrientation] = (0, _react.useState)(getWindowOrientation());
|
|
23
|
+
(0, _react.useEffect)(() => {
|
|
24
|
+
function updateState() {
|
|
25
|
+
setDeviceOrientation(getWindowOrientation());
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const changeEvent = _reactNative.Dimensions.addEventListener('change', updateState); // @ts-ignore
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
return () => changeEvent.remove();
|
|
32
|
+
}, []);
|
|
33
|
+
return deviceOrientation;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
var _default = useDeviceOrientation;
|
|
37
|
+
exports.default = _default;
|
|
38
|
+
//# sourceMappingURL=useDeviceOrientation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useDeviceOrientation.ts"],"names":["getWindowOrientation","width","height","Dimensions","get","useDeviceOrientation","deviceOrientation","setDeviceOrientation","updateState","changeEvent","addEventListener","remove"],"mappings":";;;;;;;AAAA;;AACA;;AAIA,SAASA,oBAAT,GAA6C;AAC3C,QAAM;AAAEC,IAAAA,KAAF;AAASC,IAAAA;AAAT,MAAoBC,wBAAWC,GAAX,CAAe,QAAf,CAA1B;;AACA,SAAOF,MAAM,IAAID,KAAV,GAAkB,UAAlB,GAA+B,WAAtC;AACD;;AAED,SAASI,oBAAT,GAAgC;AAC9B,QAAM,CAACC,iBAAD,EAAoBC,oBAApB,IAA4C,qBAChDP,oBAAoB,EAD4B,CAAlD;AAIA,wBAAU,MAAM;AACd,aAASQ,WAAT,GAAuB;AACrBD,MAAAA,oBAAoB,CAACP,oBAAoB,EAArB,CAApB;AACD;;AACD,UAAMS,WAAW,GAAGN,wBAAWO,gBAAX,CAA4B,QAA5B,EAAsCF,WAAtC,CAApB,CAJc,CAKd;;;AACA,WAAO,MAAMC,WAAW,CAACE,MAAZ,EAAb;AACD,GAPD,EAOG,EAPH;AASA,SAAOL,iBAAP;AACD;;eAEcD,oB","sourcesContent":["import { useState, useEffect } from 'react';\nimport { Dimensions } from 'react-native';\n\ntype Orientation = 'landscape' | 'portrait';\n\nfunction getWindowOrientation(): Orientation {\n const { width, height } = Dimensions.get('window');\n return height >= width ? 'portrait' : 'landscape';\n}\n\nfunction useDeviceOrientation() {\n const [deviceOrientation, setDeviceOrientation] = useState<Orientation>(\n getWindowOrientation()\n );\n\n useEffect(() => {\n function updateState() {\n setDeviceOrientation(getWindowOrientation());\n }\n const changeEvent = Dimensions.addEventListener('change', updateState);\n // @ts-ignore\n return () => changeEvent.remove();\n }, []);\n\n return deviceOrientation;\n}\n\nexport default useDeviceOrientation;\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useInternal = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _context = require("../context");
|
|
11
|
+
|
|
12
|
+
const useInternal = () => (0, _react.useContext)(_context.InternalContext);
|
|
13
|
+
|
|
14
|
+
exports.useInternal = useInternal;
|
|
15
|
+
//# sourceMappingURL=useInternal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useInternal.ts"],"names":["useInternal","InternalContext"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,MAAMA,WAAW,GAAG,MAAM,uBAAWC,wBAAX,CAA1B","sourcesContent":["import { useContext } from 'react';\nimport { InternalContext } from '../context';\n\nexport const useInternal = () => useContext(InternalContext);\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "HoldItem", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _holdItem.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "HoldMenuProvider", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _provider.default;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "HoldMenuFlatList", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _flatList.default;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "HoldMenuIcon", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _icon.default;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
var _holdItem = _interopRequireDefault(require("./components/holdItem"));
|
|
32
|
+
|
|
33
|
+
var _provider = _interopRequireDefault(require("./components/provider"));
|
|
34
|
+
|
|
35
|
+
var _flatList = _interopRequireDefault(require("./components/flatList"));
|
|
36
|
+
|
|
37
|
+
var _icon = _interopRequireDefault(require("./components/icon"));
|
|
38
|
+
|
|
39
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA","sourcesContent":["export { default as HoldItem } from './components/holdItem';\nexport { default as HoldMenuProvider } from './components/provider';\nexport { default as HoldMenuFlatList } from './components/flatList';\nexport { default as HoldMenuIcon } from './components/icon';\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
|
|
10
|
+
const styleGuide = {
|
|
11
|
+
spacing: 8,
|
|
12
|
+
dimensionWidth: _reactNative.Dimensions.get('screen').width,
|
|
13
|
+
dimensionHeight: _reactNative.Dimensions.get('screen').height,
|
|
14
|
+
palette: {
|
|
15
|
+
primary: '#0072ff',
|
|
16
|
+
secondary: '#e2e2e2',
|
|
17
|
+
common: {
|
|
18
|
+
white: '#fff',
|
|
19
|
+
black: '#000'
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
typography: {
|
|
23
|
+
body: {
|
|
24
|
+
fontSize: 17,
|
|
25
|
+
lineHeight: 20
|
|
26
|
+
},
|
|
27
|
+
callout: {
|
|
28
|
+
fontSize: 16,
|
|
29
|
+
lineHeight: 20
|
|
30
|
+
},
|
|
31
|
+
callout2: {
|
|
32
|
+
fontSize: 14,
|
|
33
|
+
lineHeight: 18
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var _default = styleGuide;
|
|
38
|
+
exports.default = _default;
|
|
39
|
+
//# sourceMappingURL=styleGuide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["styleGuide.ts"],"names":["styleGuide","spacing","dimensionWidth","Dimensions","get","width","dimensionHeight","height","palette","primary","secondary","common","white","black","typography","body","fontSize","lineHeight","callout","callout2"],"mappings":";;;;;;;AAAA;;AAEA,MAAMA,UAAU,GAAG;AACjBC,EAAAA,OAAO,EAAE,CADQ;AAEjBC,EAAAA,cAAc,EAAEC,wBAAWC,GAAX,CAAe,QAAf,EAAyBC,KAFxB;AAGjBC,EAAAA,eAAe,EAAEH,wBAAWC,GAAX,CAAe,QAAf,EAAyBG,MAHzB;AAIjBC,EAAAA,OAAO,EAAE;AACPC,IAAAA,OAAO,EAAE,SADF;AAEPC,IAAAA,SAAS,EAAE,SAFJ;AAGPC,IAAAA,MAAM,EAAE;AACNC,MAAAA,KAAK,EAAE,MADD;AAENC,MAAAA,KAAK,EAAE;AAFD;AAHD,GAJQ;AAYjBC,EAAAA,UAAU,EAAE;AACVC,IAAAA,IAAI,EAAE;AACJC,MAAAA,QAAQ,EAAE,EADN;AAEJC,MAAAA,UAAU,EAAE;AAFR,KADI;AAKVC,IAAAA,OAAO,EAAE;AACPF,MAAAA,QAAQ,EAAE,EADH;AAEPC,MAAAA,UAAU,EAAE;AAFL,KALC;AASVE,IAAAA,QAAQ,EAAE;AACRH,MAAAA,QAAQ,EAAE,EADF;AAERC,MAAAA,UAAU,EAAE;AAFJ;AATA;AAZK,CAAnB;eA4BejB,U","sourcesContent":["import { Dimensions } from 'react-native';\n\nconst styleGuide = {\n spacing: 8,\n dimensionWidth: Dimensions.get('screen').width,\n dimensionHeight: Dimensions.get('screen').height,\n palette: {\n primary: '#0072ff',\n secondary: '#e2e2e2',\n common: {\n white: '#fff',\n black: '#000',\n },\n },\n typography: {\n body: {\n fontSize: 17,\n lineHeight: 20,\n },\n callout: {\n fontSize: 16,\n lineHeight: 20,\n },\n callout2: {\n fontSize: 14,\n lineHeight: 18,\n },\n },\n};\n\nexport default styleGuide;\n"]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getTransformOrigin = exports.menuAnimationAnchor = exports.calculateMenuHeight = exports.MenuItemHeight = void 0;
|
|
7
|
+
|
|
8
|
+
var _styleGuide = _interopRequireDefault(require("../styleGuide"));
|
|
9
|
+
|
|
10
|
+
var _constants = require("../constants");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
const MenuItemHeight = () => {
|
|
15
|
+
'worklet';
|
|
16
|
+
|
|
17
|
+
return _styleGuide.default.typography.callout.lineHeight * _constants.FONT_SCALE + _styleGuide.default.spacing * 2.5;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
exports.MenuItemHeight = MenuItemHeight;
|
|
21
|
+
|
|
22
|
+
const calculateMenuHeight = (itemLength, separatorCount) => {
|
|
23
|
+
'worklet';
|
|
24
|
+
|
|
25
|
+
return MenuItemHeight() * itemLength + (itemLength - 1) + separatorCount * _styleGuide.default.spacing;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
exports.calculateMenuHeight = calculateMenuHeight;
|
|
29
|
+
|
|
30
|
+
const menuAnimationAnchor = (anchorPoint, itemWidth, itemLength, itemsWithSeparatorLength) => {
|
|
31
|
+
'worklet';
|
|
32
|
+
|
|
33
|
+
const MenuHeight = calculateMenuHeight(itemLength, itemsWithSeparatorLength);
|
|
34
|
+
const splittetAnchorName = anchorPoint.split('-');
|
|
35
|
+
const Center1 = itemWidth;
|
|
36
|
+
const Center2 = 0;
|
|
37
|
+
const TyTop1 = -(MenuHeight / 2);
|
|
38
|
+
const TyTop2 = MenuHeight / 2;
|
|
39
|
+
const TxLeft1 = _constants.MENU_WIDTH / 2 * -1;
|
|
40
|
+
const TxLeft2 = _constants.MENU_WIDTH / 2 * 1;
|
|
41
|
+
return {
|
|
42
|
+
beginningTransformations: {
|
|
43
|
+
translateX: splittetAnchorName[1] === 'right' ? -TxLeft1 : splittetAnchorName[1] === 'left' ? TxLeft1 : Center1,
|
|
44
|
+
translateY: splittetAnchorName[0] === 'top' ? TyTop1 : splittetAnchorName[0] === 'bottom' ? TyTop1 : Center2
|
|
45
|
+
},
|
|
46
|
+
endingTransformations: {
|
|
47
|
+
translateX: splittetAnchorName[1] === 'right' ? -TxLeft2 : splittetAnchorName[1] === 'left' ? TxLeft2 : Center2,
|
|
48
|
+
translateY: splittetAnchorName[0] === 'top' ? TyTop2 : splittetAnchorName[0] === 'bottom' ? -TyTop2 : Center2
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
exports.menuAnimationAnchor = menuAnimationAnchor;
|
|
54
|
+
|
|
55
|
+
const getTransformOrigin = (posX, itemWidth, windowWidth, bottom) => {
|
|
56
|
+
'worklet';
|
|
57
|
+
|
|
58
|
+
const distanceToLeft = Math.round(posX + itemWidth / 2);
|
|
59
|
+
const distanceToRight = Math.round(windowWidth - distanceToLeft);
|
|
60
|
+
let position = bottom ? 'bottom-right' : 'top-right';
|
|
61
|
+
const majority = Math.abs(distanceToLeft - distanceToRight);
|
|
62
|
+
|
|
63
|
+
if (majority < _constants.MENU_TRANSFORM_ORIGIN_TOLERENCE) {
|
|
64
|
+
position = bottom ? 'bottom-center' : 'top-center';
|
|
65
|
+
} else if (distanceToLeft < distanceToRight) {
|
|
66
|
+
position = bottom ? 'bottom-left' : 'top-left';
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return position;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
exports.getTransformOrigin = getTransformOrigin;
|
|
73
|
+
//# sourceMappingURL=calculations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["calculations.ts"],"names":["MenuItemHeight","styleGuide","typography","callout","lineHeight","FONT_SCALE","spacing","calculateMenuHeight","itemLength","separatorCount","menuAnimationAnchor","anchorPoint","itemWidth","itemsWithSeparatorLength","MenuHeight","splittetAnchorName","split","Center1","Center2","TyTop1","TyTop2","TxLeft1","MENU_WIDTH","TxLeft2","beginningTransformations","translateX","translateY","endingTransformations","getTransformOrigin","posX","windowWidth","bottom","distanceToLeft","Math","round","distanceToRight","position","majority","abs","MENU_TRANSFORM_ORIGIN_TOLERENCE"],"mappings":";;;;;;;AAAA;;AACA;;;;AAMO,MAAMA,cAAc,GAAG,MAAM;AAClC;;AACA,SACEC,oBAAWC,UAAX,CAAsBC,OAAtB,CAA8BC,UAA9B,GAA2CC,qBAA3C,GACAJ,oBAAWK,OAAX,GAAqB,GAFvB;AAID,CANM;;;;AAQA,MAAMC,mBAAmB,GAAG,CACjCC,UADiC,EAEjCC,cAFiC,KAG9B;AACH;;AACA,SACET,cAAc,KAAKQ,UAAnB,IACCA,UAAU,GAAG,CADd,IAEAC,cAAc,GAAGR,oBAAWK,OAH9B;AAKD,CAVM;;;;AAoBA,MAAMI,mBAAmB,GAAG,CACjCC,WADiC,EAEjCC,SAFiC,EAGjCJ,UAHiC,EAIjCK,wBAJiC,KAK9B;AACH;;AACA,QAAMC,UAAU,GAAGP,mBAAmB,CAACC,UAAD,EAAaK,wBAAb,CAAtC;AACA,QAAME,kBAA4B,GAAGJ,WAAW,CAACK,KAAZ,CAAkB,GAAlB,CAArC;AAEA,QAAMC,OAAO,GAAGL,SAAhB;AACA,QAAMM,OAAO,GAAG,CAAhB;AAEA,QAAMC,MAAM,GAAG,EAAEL,UAAU,GAAG,CAAf,CAAf;AACA,QAAMM,MAAM,GAAGN,UAAU,GAAG,CAA5B;AAEA,QAAMO,OAAO,GAAIC,wBAAa,CAAd,GAAmB,CAAC,CAApC;AACA,QAAMC,OAAO,GAAID,wBAAa,CAAd,GAAmB,CAAnC;AAEA,SAAO;AACLE,IAAAA,wBAAwB,EAAE;AACxBC,MAAAA,UAAU,EACRV,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,OAA1B,GACI,CAACM,OADL,GAEIN,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,MAA1B,GACAM,OADA,GAEAJ,OANkB;AAOxBS,MAAAA,UAAU,EACRX,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,KAA1B,GACII,MADJ,GAEIJ,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,QAA1B,GACAI,MADA,GAEAD;AAZkB,KADrB;AAeLS,IAAAA,qBAAqB,EAAE;AACrBF,MAAAA,UAAU,EACRV,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,OAA1B,GACI,CAACQ,OADL,GAEIR,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,MAA1B,GACAQ,OADA,GAEAL,OANe;AAOrBQ,MAAAA,UAAU,EACRX,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,KAA1B,GACIK,MADJ,GAEIL,kBAAkB,CAAC,CAAD,CAAlB,KAA0B,QAA1B,GACA,CAACK,MADD,GAEAF;AAZe;AAflB,GAAP;AA8BD,CAjDM;;;;AAmDA,MAAMU,kBAAkB,GAAG,CAChCC,IADgC,EAEhCjB,SAFgC,EAGhCkB,WAHgC,EAIhCC,MAJgC,KAKE;AAClC;;AACA,QAAMC,cAAc,GAAGC,IAAI,CAACC,KAAL,CAAWL,IAAI,GAAGjB,SAAS,GAAG,CAA9B,CAAvB;AACA,QAAMuB,eAAe,GAAGF,IAAI,CAACC,KAAL,CAAWJ,WAAW,GAAGE,cAAzB,CAAxB;AAEA,MAAII,QAAuC,GAAGL,MAAM,GAChD,cADgD,GAEhD,WAFJ;AAIA,QAAMM,QAAQ,GAAGJ,IAAI,CAACK,GAAL,CAASN,cAAc,GAAGG,eAA1B,CAAjB;;AAEA,MAAIE,QAAQ,GAAGE,0CAAf,EAAgD;AAC9CH,IAAAA,QAAQ,GAAGL,MAAM,GAAG,eAAH,GAAqB,YAAtC;AACD,GAFD,MAEO,IAAIC,cAAc,GAAGG,eAArB,EAAsC;AAC3CC,IAAAA,QAAQ,GAAGL,MAAM,GAAG,aAAH,GAAmB,UAApC;AACD;;AAED,SAAOK,QAAP;AACD,CAvBM","sourcesContent":["import styleGuide from '../styleGuide';\nimport {\n MENU_WIDTH,\n MENU_TRANSFORM_ORIGIN_TOLERENCE,\n FONT_SCALE,\n} from '../constants';\n\nexport const MenuItemHeight = () => {\n 'worklet';\n return (\n styleGuide.typography.callout.lineHeight * FONT_SCALE +\n styleGuide.spacing * 2.5\n );\n};\n\nexport const calculateMenuHeight = (\n itemLength: number,\n separatorCount: number\n) => {\n 'worklet';\n return (\n MenuItemHeight() * itemLength +\n (itemLength - 1) +\n separatorCount * styleGuide.spacing\n );\n};\n\nexport type TransformOriginAnchorPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nexport const menuAnimationAnchor = (\n anchorPoint: TransformOriginAnchorPosition,\n itemWidth: number,\n itemLength: number,\n itemsWithSeparatorLength: number\n) => {\n 'worklet';\n const MenuHeight = calculateMenuHeight(itemLength, itemsWithSeparatorLength);\n const splittetAnchorName: string[] = anchorPoint.split('-');\n\n const Center1 = itemWidth;\n const Center2 = 0;\n\n const TyTop1 = -(MenuHeight / 2);\n const TyTop2 = MenuHeight / 2;\n\n const TxLeft1 = (MENU_WIDTH / 2) * -1;\n const TxLeft2 = (MENU_WIDTH / 2) * 1;\n\n return {\n beginningTransformations: {\n translateX:\n splittetAnchorName[1] === 'right'\n ? -TxLeft1\n : splittetAnchorName[1] === 'left'\n ? TxLeft1\n : Center1,\n translateY:\n splittetAnchorName[0] === 'top'\n ? TyTop1\n : splittetAnchorName[0] === 'bottom'\n ? TyTop1\n : Center2,\n },\n endingTransformations: {\n translateX:\n splittetAnchorName[1] === 'right'\n ? -TxLeft2\n : splittetAnchorName[1] === 'left'\n ? TxLeft2\n : Center2,\n translateY:\n splittetAnchorName[0] === 'top'\n ? TyTop2\n : splittetAnchorName[0] === 'bottom'\n ? -TyTop2\n : Center2,\n },\n };\n};\n\nexport const getTransformOrigin = (\n posX: number,\n itemWidth: number,\n windowWidth: number,\n bottom?: boolean\n): TransformOriginAnchorPosition => {\n 'worklet';\n const distanceToLeft = Math.round(posX + itemWidth / 2);\n const distanceToRight = Math.round(windowWidth - distanceToLeft);\n\n let position: TransformOriginAnchorPosition = bottom\n ? 'bottom-right'\n : 'top-right';\n\n const majority = Math.abs(distanceToLeft - distanceToRight);\n\n if (majority < MENU_TRANSFORM_ORIGIN_TOLERENCE) {\n position = bottom ? 'bottom-center' : 'top-center';\n } else if (distanceToLeft < distanceToRight) {\n position = bottom ? 'bottom-left' : 'top-left';\n }\n\n return position;\n};\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.deepEqual = deepEqual;
|
|
7
|
+
|
|
8
|
+
function fieldAreSame(obj1, obj2) {
|
|
9
|
+
'worklet';
|
|
10
|
+
|
|
11
|
+
const keys = Object.keys(obj1);
|
|
12
|
+
return keys.every(key => {
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const val1 = obj1[key]; // @ts-ignore
|
|
15
|
+
|
|
16
|
+
const val2 = obj2[key];
|
|
17
|
+
|
|
18
|
+
if (val1 !== val2) {
|
|
19
|
+
if (typeof val1 === 'function' && typeof val2 === 'function') return val1.toString() === val2.toString();
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return true;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function deepEqual(array1, array2) {
|
|
28
|
+
'worklet';
|
|
29
|
+
|
|
30
|
+
const areArrays = Array.isArray(array1) && Array.isArray(array2);
|
|
31
|
+
const areSameLength = areArrays && array2 && array1.length === array2.length;
|
|
32
|
+
|
|
33
|
+
if (areArrays && areSameLength && array2) {
|
|
34
|
+
return array1.every((menuItem, index) => {
|
|
35
|
+
const obj1 = menuItem;
|
|
36
|
+
const obj2 = array2[index];
|
|
37
|
+
return fieldAreSame(obj1, obj2);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=validations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["validations.ts"],"names":["fieldAreSame","obj1","obj2","keys","Object","every","key","val1","val2","toString","deepEqual","array1","array2","areArrays","Array","isArray","areSameLength","length","menuItem","index"],"mappings":";;;;;;;AAEA,SAASA,YAAT,CAAsBC,IAAtB,EAA2CC,IAA3C,EAAgE;AAC9D;;AAEA,QAAMC,IAAI,GAAGC,MAAM,CAACD,IAAP,CAAYF,IAAZ,CAAb;AAEA,SAAOE,IAAI,CAACE,KAAL,CAAWC,GAAG,IAAI;AACvB;AACA,UAAMC,IAAI,GAAGN,IAAI,CAACK,GAAD,CAAjB,CAFuB,CAGvB;;AACA,UAAME,IAAI,GAAGN,IAAI,CAACI,GAAD,CAAjB;;AAEA,QAAIC,IAAI,KAAKC,IAAb,EAAmB;AACjB,UAAI,OAAOD,IAAP,KAAgB,UAAhB,IAA8B,OAAOC,IAAP,KAAgB,UAAlD,EACE,OAAOD,IAAI,CAACE,QAAL,OAAoBD,IAAI,CAACC,QAAL,EAA3B;AACF,aAAO,KAAP;AACD;;AAED,WAAO,IAAP;AACD,GAbM,CAAP;AAcD;;AAED,SAASC,SAAT,CAAmBC,MAAnB,EAA4CC,MAA5C,EAAqE;AACnE;;AAEA,QAAMC,SAAS,GAAGC,KAAK,CAACC,OAAN,CAAcJ,MAAd,KAAyBG,KAAK,CAACC,OAAN,CAAcH,MAAd,CAA3C;AACA,QAAMI,aAAa,GAAGH,SAAS,IAAID,MAAb,IAAuBD,MAAM,CAACM,MAAP,KAAkBL,MAAM,CAACK,MAAtE;;AAEA,MAAIJ,SAAS,IAAIG,aAAb,IAA8BJ,MAAlC,EAA0C;AACxC,WAAOD,MAAM,CAACN,KAAP,CAAa,CAACa,QAAD,EAA0BC,KAA1B,KAAoC;AACtD,YAAMlB,IAAI,GAAGiB,QAAb;AACA,YAAMhB,IAAI,GAAGU,MAAM,CAACO,KAAD,CAAnB;AAEA,aAAOnB,YAAY,CAACC,IAAD,EAAOC,IAAP,CAAnB;AACD,KALM,CAAP;AAMD;;AAED,SAAO,KAAP;AACD","sourcesContent":["import { MenuItemProps } from '../components/menu/types';\n\nfunction fieldAreSame(obj1: MenuItemProps, obj2: MenuItemProps) {\n 'worklet';\n\n const keys = Object.keys(obj1);\n\n return keys.every(key => {\n // @ts-ignore\n const val1 = obj1[key];\n // @ts-ignore\n const val2 = obj2[key];\n\n if (val1 !== val2) {\n if (typeof val1 === 'function' && typeof val2 === 'function')\n return val1.toString() === val2.toString();\n return false;\n }\n\n return true;\n });\n}\n\nfunction deepEqual(array1: MenuItemProps[], array2: MenuItemProps[]) {\n 'worklet';\n\n const areArrays = Array.isArray(array1) && Array.isArray(array2);\n const areSameLength = areArrays && array2 && array1.length === array2.length;\n\n if (areArrays && areSameLength && array2) {\n return array1.every((menuItem: MenuItemProps, index) => {\n const obj1 = menuItem;\n const obj2 = array2[index];\n\n return fieldAreSame(obj1, obj2);\n });\n }\n\n return false;\n}\n\nexport { deepEqual };\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import { StyleSheet } from 'react-native';
|
|
3
|
+
import Animated, { useAnimatedGestureHandler, useAnimatedProps, useAnimatedStyle, withDelay, withTiming } from 'react-native-reanimated';
|
|
4
|
+
import { TapGestureHandler } from 'react-native-gesture-handler'; // Components
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
|
|
7
|
+
import { BlurView } from '@react-native-community/blur'; // Utils
|
|
8
|
+
|
|
9
|
+
import { styles } from './styles';
|
|
10
|
+
import { CONTEXT_MENU_STATE, HOLD_ITEM_TRANSFORM_DURATION, IS_IOS, WINDOW_HEIGHT } from '../../constants';
|
|
11
|
+
import { BACKDROP_LIGHT_BACKGROUND_COLOR, BACKDROP_DARK_BACKGROUND_COLOR } from './constants';
|
|
12
|
+
import { useInternal } from '../../hooks';
|
|
13
|
+
const AnimatedBlurView = IS_IOS ? Animated.createAnimatedComponent(BlurView) : Animated.View;
|
|
14
|
+
|
|
15
|
+
const BackdropComponent = () => {
|
|
16
|
+
const {
|
|
17
|
+
state,
|
|
18
|
+
theme
|
|
19
|
+
} = useInternal();
|
|
20
|
+
const tapGestureEvent = useAnimatedGestureHandler({
|
|
21
|
+
onStart: (event, context) => {
|
|
22
|
+
context.startPosition = {
|
|
23
|
+
x: event.x,
|
|
24
|
+
y: event.y
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
onCancel: () => {
|
|
28
|
+
state.value = CONTEXT_MENU_STATE.END;
|
|
29
|
+
},
|
|
30
|
+
onEnd: (event, context) => {
|
|
31
|
+
const distance = Math.hypot(event.x - context.startPosition.x, event.y - context.startPosition.y);
|
|
32
|
+
const shouldClose = distance < 10;
|
|
33
|
+
const isStateActive = state.value === CONTEXT_MENU_STATE.ACTIVE;
|
|
34
|
+
|
|
35
|
+
if (shouldClose && isStateActive) {
|
|
36
|
+
state.value = CONTEXT_MENU_STATE.END;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}, [state]);
|
|
40
|
+
const animatedContainerStyle = useAnimatedStyle(() => {
|
|
41
|
+
const topValueAnimation = () => state.value === CONTEXT_MENU_STATE.ACTIVE ? 0 : withDelay(HOLD_ITEM_TRANSFORM_DURATION, withTiming(WINDOW_HEIGHT, {
|
|
42
|
+
duration: 0
|
|
43
|
+
}));
|
|
44
|
+
|
|
45
|
+
const opacityValueAnimation = () => withTiming(state.value === CONTEXT_MENU_STATE.ACTIVE ? 1 : 0, {
|
|
46
|
+
duration: HOLD_ITEM_TRANSFORM_DURATION
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
top: topValueAnimation(),
|
|
51
|
+
opacity: opacityValueAnimation()
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
const animatedContainerProps = useAnimatedProps(() => {
|
|
55
|
+
return {
|
|
56
|
+
blurAmount: withTiming(state.value === CONTEXT_MENU_STATE.ACTIVE ? 100 : 0, {
|
|
57
|
+
duration: HOLD_ITEM_TRANSFORM_DURATION
|
|
58
|
+
})
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
const animatedInnerContainerStyle = useAnimatedStyle(() => {
|
|
62
|
+
const backgroundColor = theme.value === 'light' ? BACKDROP_LIGHT_BACKGROUND_COLOR : BACKDROP_DARK_BACKGROUND_COLOR;
|
|
63
|
+
return {
|
|
64
|
+
backgroundColor
|
|
65
|
+
};
|
|
66
|
+
}, [theme]);
|
|
67
|
+
return /*#__PURE__*/React.createElement(TapGestureHandler, {
|
|
68
|
+
onHandlerStateChange: tapGestureEvent
|
|
69
|
+
}, /*#__PURE__*/React.createElement(AnimatedBlurView // @ts-ignore
|
|
70
|
+
, {
|
|
71
|
+
tint: "default" // @ts-ignore
|
|
72
|
+
,
|
|
73
|
+
animatedProps: animatedContainerProps,
|
|
74
|
+
style: [styles.container, animatedContainerStyle]
|
|
75
|
+
}, /*#__PURE__*/React.createElement(Animated.View, {
|
|
76
|
+
style: [{ ...StyleSheet.absoluteFillObject
|
|
77
|
+
}, animatedInnerContainerStyle]
|
|
78
|
+
})));
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const Backdrop = /*#__PURE__*/memo(BackdropComponent);
|
|
82
|
+
export default Backdrop;
|
|
83
|
+
//# sourceMappingURL=Backdrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["Backdrop.tsx"],"names":["React","memo","StyleSheet","Animated","useAnimatedGestureHandler","useAnimatedProps","useAnimatedStyle","withDelay","withTiming","TapGestureHandler","BlurView","styles","CONTEXT_MENU_STATE","HOLD_ITEM_TRANSFORM_DURATION","IS_IOS","WINDOW_HEIGHT","BACKDROP_LIGHT_BACKGROUND_COLOR","BACKDROP_DARK_BACKGROUND_COLOR","useInternal","AnimatedBlurView","createAnimatedComponent","View","BackdropComponent","state","theme","tapGestureEvent","onStart","event","context","startPosition","x","y","onCancel","value","END","onEnd","distance","Math","hypot","shouldClose","isStateActive","ACTIVE","animatedContainerStyle","topValueAnimation","duration","opacityValueAnimation","top","opacity","animatedContainerProps","blurAmount","animatedInnerContainerStyle","backgroundColor","container","absoluteFillObject","Backdrop"],"mappings":"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","sourcesContent":["import React, { memo } from 'react';\nimport { StyleSheet } from 'react-native';\nimport Animated, {\n useAnimatedGestureHandler,\n useAnimatedProps,\n useAnimatedStyle,\n withDelay,\n withTiming,\n} from 'react-native-reanimated';\nimport {\n TapGestureHandler,\n TapGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\n\n// Components\n// @ts-ignore\nimport { BlurView } from '@react-native-community/blur';\n\n// Utils\nimport { styles } from './styles';\nimport {\n CONTEXT_MENU_STATE,\n HOLD_ITEM_TRANSFORM_DURATION,\n IS_IOS,\n WINDOW_HEIGHT,\n} from '../../constants';\nimport {\n BACKDROP_LIGHT_BACKGROUND_COLOR,\n BACKDROP_DARK_BACKGROUND_COLOR,\n} from './constants';\nimport { useInternal } from '../../hooks';\n\nconst AnimatedBlurView = IS_IOS\n ? Animated.createAnimatedComponent(BlurView)\n : Animated.View;\n\ntype Context = {\n startPosition: {\n x: number;\n y: number;\n };\n};\n\nconst BackdropComponent = () => {\n const { state, theme } = useInternal();\n\n const tapGestureEvent = useAnimatedGestureHandler<\n TapGestureHandlerGestureEvent,\n Context\n >(\n {\n onStart: (event, context) => {\n context.startPosition = { x: event.x, y: event.y };\n },\n onCancel: () => {\n state.value = CONTEXT_MENU_STATE.END;\n },\n onEnd: (event, context) => {\n const distance = Math.hypot(\n event.x - context.startPosition.x,\n event.y - context.startPosition.y\n );\n const shouldClose = distance < 10;\n const isStateActive = state.value === CONTEXT_MENU_STATE.ACTIVE;\n\n if (shouldClose && isStateActive) {\n state.value = CONTEXT_MENU_STATE.END;\n }\n },\n },\n [state]\n );\n\n const animatedContainerStyle = useAnimatedStyle(() => {\n const topValueAnimation = () =>\n state.value === CONTEXT_MENU_STATE.ACTIVE\n ? 0\n : withDelay(\n HOLD_ITEM_TRANSFORM_DURATION,\n withTiming(WINDOW_HEIGHT, {\n duration: 0,\n })\n );\n\n const opacityValueAnimation = () =>\n withTiming(state.value === CONTEXT_MENU_STATE.ACTIVE ? 1 : 0, {\n duration: HOLD_ITEM_TRANSFORM_DURATION,\n });\n\n return {\n top: topValueAnimation(),\n opacity: opacityValueAnimation(),\n };\n });\n\n const animatedContainerProps = useAnimatedProps(() => {\n return {\n blurAmount: withTiming(\n state.value === CONTEXT_MENU_STATE.ACTIVE ? 100 : 0,\n {\n duration: HOLD_ITEM_TRANSFORM_DURATION,\n }\n ),\n };\n });\n\n const animatedInnerContainerStyle = useAnimatedStyle(() => {\n const backgroundColor =\n theme.value === 'light'\n ? BACKDROP_LIGHT_BACKGROUND_COLOR\n : BACKDROP_DARK_BACKGROUND_COLOR;\n\n return { backgroundColor };\n }, [theme]);\n\n return (\n <TapGestureHandler onHandlerStateChange={tapGestureEvent}>\n <AnimatedBlurView\n // @ts-ignore\n tint=\"default\"\n // @ts-ignore\n animatedProps={animatedContainerProps}\n style={[styles.container, animatedContainerStyle]}\n >\n <Animated.View\n style={[\n { ...StyleSheet.absoluteFillObject },\n animatedInnerContainerStyle,\n ]}\n />\n </AnimatedBlurView>\n </TapGestureHandler>\n );\n};\n\nconst Backdrop = memo(BackdropComponent);\n\nexport default Backdrop;\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { IS_IOS } from '../../constants';
|
|
2
|
+
export const BACKDROP_LIGHT_BACKGROUND_COLOR = IS_IOS ? 'rgba(0,0,0,0.2)' : 'rgba(19, 19, 19, 0.95)';
|
|
3
|
+
export const BACKDROP_DARK_BACKGROUND_COLOR = IS_IOS ? 'rgba(0,0,0,0.75)' : 'rgba(0,0,0,0.95)';
|
|
4
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["constants.ts"],"names":["IS_IOS","BACKDROP_LIGHT_BACKGROUND_COLOR","BACKDROP_DARK_BACKGROUND_COLOR"],"mappings":"AAAA,SAASA,MAAT,QAAuB,iBAAvB;AAEA,OAAO,MAAMC,+BAA+B,GAAGD,MAAM,GACjD,iBADiD,GAEjD,wBAFG;AAGP,OAAO,MAAME,8BAA8B,GAAGF,MAAM,GAChD,kBADgD,GAEhD,kBAFG","sourcesContent":["import { IS_IOS } from '../../constants';\n\nexport const BACKDROP_LIGHT_BACKGROUND_COLOR = IS_IOS\n ? 'rgba(0,0,0,0.2)'\n : 'rgba(19, 19, 19, 0.95)';\nexport const BACKDROP_DARK_BACKGROUND_COLOR = IS_IOS\n ? 'rgba(0,0,0,0.75)'\n : 'rgba(0,0,0,0.95)';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["default","Backdrop"],"mappings":"AAAA,SAASA,OAAO,IAAIC,QAApB,QAAoC,YAApC","sourcesContent":["export { default as Backdrop } from './Backdrop';\n"]}
|