@sigmela/router 0.2.8 → 0.3.1

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 (39) hide show
  1. package/README.md +107 -1
  2. package/lib/module/Drawer/Drawer.js +250 -0
  3. package/lib/module/Drawer/DrawerContext.js +4 -0
  4. package/lib/module/Drawer/DrawerIcon.web.js +47 -0
  5. package/lib/module/Drawer/RenderDrawer.native.js +244 -0
  6. package/lib/module/Drawer/RenderDrawer.web.js +197 -0
  7. package/lib/module/Drawer/useDrawer.js +11 -0
  8. package/lib/module/Navigation.js +4 -2
  9. package/lib/module/NavigationStack.js +14 -4
  10. package/lib/module/Router.js +214 -60
  11. package/lib/module/RouterContext.js +1 -1
  12. package/lib/module/ScreenStack/ScreenStack.web.js +78 -12
  13. package/lib/module/ScreenStackItem/ScreenStackItem.js +7 -7
  14. package/lib/module/ScreenStackItem/ScreenStackItem.web.js +65 -6
  15. package/lib/module/ScreenStackSheetItem/ScreenStackSheetItem.native.js +4 -5
  16. package/lib/module/SplitView/RenderSplitView.web.js +5 -7
  17. package/lib/module/SplitView/SplitView.js +10 -2
  18. package/lib/module/StackRenderer.js +10 -4
  19. package/lib/module/TabBar/RenderTabBar.native.js +55 -24
  20. package/lib/module/TabBar/RenderTabBar.web.js +25 -2
  21. package/lib/module/TabBar/TabBar.js +8 -1
  22. package/lib/module/TabBar/TabIcon.web.js +12 -7
  23. package/lib/module/index.js +2 -0
  24. package/lib/module/styles.css +255 -91
  25. package/lib/typescript/src/Drawer/Drawer.d.ts +100 -0
  26. package/lib/typescript/src/Drawer/DrawerContext.d.ts +3 -0
  27. package/lib/typescript/src/Drawer/DrawerIcon.web.d.ts +7 -0
  28. package/lib/typescript/src/Drawer/RenderDrawer.native.d.ts +8 -0
  29. package/lib/typescript/src/Drawer/RenderDrawer.web.d.ts +8 -0
  30. package/lib/typescript/src/Drawer/useDrawer.d.ts +2 -0
  31. package/lib/typescript/src/NavigationStack.d.ts +1 -0
  32. package/lib/typescript/src/Router.d.ts +13 -0
  33. package/lib/typescript/src/ScreenStack/ScreenStackContext.d.ts +1 -1
  34. package/lib/typescript/src/ScreenStack/animationHelpers.d.ts +1 -1
  35. package/lib/typescript/src/SplitView/SplitView.d.ts +2 -0
  36. package/lib/typescript/src/TabBar/TabBar.d.ts +10 -1
  37. package/lib/typescript/src/index.d.ts +5 -0
  38. package/lib/typescript/src/types.d.ts +12 -3
  39. package/package.json +28 -12
@@ -10,6 +10,7 @@ export class TabBar {
10
10
  stacks = {};
11
11
  nodes = {};
12
12
  listeners = new Set();
13
+ _cachedRenderer = null;
13
14
  constructor(options = {}) {
14
15
  this.tabBarId = `tabbar-${Math.random().toString(36).slice(2)}`;
15
16
  this.state = {
@@ -146,14 +147,20 @@ export class TabBar {
146
147
  return children;
147
148
  }
148
149
  getRenderer() {
150
+ if (this._cachedRenderer) {
151
+ return this._cachedRenderer;
152
+ }
153
+
149
154
  // eslint-disable-next-line consistent-this
150
155
  const tabBarInstance = this;
151
- return function TabBarScreen(props) {
156
+ const renderer = function TabBarScreen(props) {
152
157
  return /*#__PURE__*/React.createElement(RenderTabBar, {
153
158
  tabBar: tabBarInstance,
154
159
  appearance: props?.appearance
155
160
  });
156
161
  };
162
+ this._cachedRenderer = renderer;
163
+ return renderer;
157
164
  }
158
165
  seed() {
159
166
  const activeTab = this.state.tabs[this.state.index];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { memo } from 'react';
3
+ import { memo, useMemo } from 'react';
4
4
  import { Image } from 'react-native';
5
5
  import { jsx as _jsx } from "react/jsx-runtime";
6
6
  const resolveImageUri = source => {
@@ -20,18 +20,23 @@ export const TabIcon = /*#__PURE__*/memo(({
20
20
  }) => {
21
21
  const iconUri = resolveImageUri(source);
22
22
  const useMask = Boolean(tintColor && iconUri);
23
- if (useMask && iconUri) {
24
- const maskStyle = {
23
+ const maskStyle = useMemo(() => {
24
+ if (!useMask || !iconUri) return undefined;
25
+ return {
25
26
  backgroundColor: tintColor,
26
27
  WebkitMaskImage: `url(${iconUri})`,
27
- maskImage: `url(${iconUri})`,
28
28
  WebkitMaskSize: 'contain',
29
- maskSize: 'contain',
30
29
  WebkitMaskRepeat: 'no-repeat',
31
- maskRepeat: 'no-repeat',
32
30
  WebkitMaskPosition: 'center',
33
- maskPosition: 'center'
31
+ maskImage: `url(${iconUri})`,
32
+ maskSize: 'contain',
33
+ maskRepeat: 'no-repeat',
34
+ maskPosition: 'center',
35
+ width: '100%',
36
+ height: '100%'
34
37
  };
38
+ }, [tintColor, iconUri, useMask]);
39
+ if (maskStyle) {
35
40
  return /*#__PURE__*/_jsx("div", {
36
41
  style: maskStyle
37
42
  });
@@ -3,6 +3,8 @@
3
3
  export { useTabBar } from "./TabBar/useTabBar.js";
4
4
  export { useTabBarHeight, TAB_BAR_HEIGHT } from "./TabBar/useTabBarHeight.js";
5
5
  export { TabBar } from "./TabBar/TabBar.js";
6
+ export { Drawer } from "./Drawer/Drawer.js";
7
+ export { useDrawer } from "./Drawer/useDrawer.js";
6
8
  export { SplitView } from "./SplitView/SplitView.js";
7
9
  export { useSplitView } from "./SplitView/useSplitView.js";
8
10
  export { Router } from "./Router.js";