react-native-magic-tab-bar 2.0.0 → 2.0.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.
package/lib/module/MagicTabs.js
CHANGED
|
@@ -14,6 +14,16 @@ function hrefToPath(href) {
|
|
|
14
14
|
return typeof pathname === 'string' ? pathname : '';
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Removes Expo Router group segments (`(group)`) from a path so hrefs match
|
|
19
|
+
* `usePathname()`. Groups are organizational and never appear in the URL, so
|
|
20
|
+
* `href: "/(home)/expenses"` must compare against a pathname of `/expenses`.
|
|
21
|
+
* Collapses any doubled or trailing slashes and falls back to `/` for root.
|
|
22
|
+
*/
|
|
23
|
+
function stripGroupSegments(path) {
|
|
24
|
+
return path.replace(/\/\([^/)]+\)/g, '').replace(/\/{2,}/g, '/').replace(/(.)\/$/, '$1') || '/';
|
|
25
|
+
}
|
|
26
|
+
|
|
17
27
|
/**
|
|
18
28
|
* Finds the tab whose `href` best matches the current path, by longest prefix
|
|
19
29
|
* so nested routes (e.g. `/explore/details`) still resolve to their tab.
|
|
@@ -21,10 +31,12 @@ function hrefToPath(href) {
|
|
|
21
31
|
function findActiveTab(tabs, pathname) {
|
|
22
32
|
let best;
|
|
23
33
|
let bestLen = -1;
|
|
34
|
+
const currentPath = stripGroupSegments(pathname);
|
|
24
35
|
for (const tab of tabs) {
|
|
25
|
-
const
|
|
26
|
-
if (!
|
|
27
|
-
const
|
|
36
|
+
const rawPath = hrefToPath(tab.href);
|
|
37
|
+
if (!rawPath) continue;
|
|
38
|
+
const path = stripGroupSegments(rawPath);
|
|
39
|
+
const matches = path === '/' ? currentPath === '/' : currentPath === path || currentPath.startsWith(`${path}/`);
|
|
28
40
|
if (matches && path.length > bestLen) {
|
|
29
41
|
best = tab;
|
|
30
42
|
bestLen = path.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","Tabs","TabList","TabSlot","TabTrigger","usePathname","MagicTabBar","MagicTabItem","defaultTheme","jsx","_jsx","jsxs","_jsxs","hrefToPath","href","pathname","findActiveTab","tabs","best","bestLen","tab","
|
|
1
|
+
{"version":3,"names":["useMemo","Tabs","TabList","TabSlot","TabTrigger","usePathname","MagicTabBar","MagicTabItem","defaultTheme","jsx","_jsx","jsxs","_jsxs","hrefToPath","href","pathname","stripGroupSegments","path","replace","findActiveTab","tabs","best","bestLen","currentPath","tab","rawPath","matches","startsWith","length","resolveLabelMode","showLabels","labelPosition","mode","__DEV__","console","warn","MagicTabs","theme","themeOverride","isLight","lightBottomMargin","variant","isTransparent","transparency","glass","renderBackground","haptics","onTabPress","onTabLongPress","barLabelMode","activeTab","effectiveLight","children","asChild","map","labelMode","showLabel","undefined","name","icon","label","badge","disabled"],"sourceRoot":"../../src","sources":["MagicTabs.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MagicTabs.d.ts","sourceRoot":"","sources":["../../src/MagicTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOhD,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACrB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MagicTabs.d.ts","sourceRoot":"","sources":["../../src/MagicTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOhD,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAgFjB,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IACtC,kEAAkE;IAClE,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,SAAS,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,2CAA2C;IAC3C,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EAAE,aAAa,EACpB,UAAiB,EACjB,aAAuB,EACvB,OAAe,EACf,iBAAiB,EACjB,OAAO,EACP,aAAa,EACb,YAAY,EACZ,KAAK,EACL,gBAAgB,EAChB,OAAO,EACP,UAAU,EACV,cAAc,GACf,EAAE,cAAc,+BAkEhB"}
|
package/package.json
CHANGED
package/src/MagicTabs.tsx
CHANGED
|
@@ -23,6 +23,21 @@ function hrefToPath(href: Href): string {
|
|
|
23
23
|
return typeof pathname === 'string' ? pathname : '';
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Removes Expo Router group segments (`(group)`) from a path so hrefs match
|
|
28
|
+
* `usePathname()`. Groups are organizational and never appear in the URL, so
|
|
29
|
+
* `href: "/(home)/expenses"` must compare against a pathname of `/expenses`.
|
|
30
|
+
* Collapses any doubled or trailing slashes and falls back to `/` for root.
|
|
31
|
+
*/
|
|
32
|
+
function stripGroupSegments(path: string): string {
|
|
33
|
+
return (
|
|
34
|
+
path
|
|
35
|
+
.replace(/\/\([^/)]+\)/g, '')
|
|
36
|
+
.replace(/\/{2,}/g, '/')
|
|
37
|
+
.replace(/(.)\/$/, '$1') || '/'
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
26
41
|
/**
|
|
27
42
|
* Finds the tab whose `href` best matches the current path, by longest prefix
|
|
28
43
|
* so nested routes (e.g. `/explore/details`) still resolve to their tab.
|
|
@@ -33,13 +48,15 @@ function findActiveTab(
|
|
|
33
48
|
): MagicTabConfig | undefined {
|
|
34
49
|
let best: MagicTabConfig | undefined;
|
|
35
50
|
let bestLen = -1;
|
|
51
|
+
const currentPath = stripGroupSegments(pathname);
|
|
36
52
|
for (const tab of tabs) {
|
|
37
|
-
const
|
|
38
|
-
if (!
|
|
53
|
+
const rawPath = hrefToPath(tab.href);
|
|
54
|
+
if (!rawPath) continue;
|
|
55
|
+
const path = stripGroupSegments(rawPath);
|
|
39
56
|
const matches =
|
|
40
57
|
path === '/'
|
|
41
|
-
?
|
|
42
|
-
:
|
|
58
|
+
? currentPath === '/'
|
|
59
|
+
: currentPath === path || currentPath.startsWith(`${path}/`);
|
|
43
60
|
if (matches && path.length > bestLen) {
|
|
44
61
|
best = tab;
|
|
45
62
|
bestLen = path.length;
|