@idealyst/mcp-server 1.2.20 → 1.2.22
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/dist/data/navigation-guides.d.ts.map +1 -1
- package/dist/data/navigation-guides.js +445 -0
- package/dist/data/navigation-guides.js.map +1 -1
- package/dist/data/recipes.d.ts.map +1 -1
- package/dist/data/recipes.js +744 -0
- package/dist/data/recipes.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/examples/components/Card.examples.tsx +3 -4
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-guides.d.ts","sourceRoot":"","sources":["../../src/data/navigation-guides.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"navigation-guides.d.ts","sourceRoot":"","sources":["../../src/data/navigation-guides.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAomEnD,CAAC"}
|
|
@@ -1694,6 +1694,451 @@ type NavigateParams = {
|
|
|
1694
1694
|
replace?: boolean;
|
|
1695
1695
|
};
|
|
1696
1696
|
\`\`\`
|
|
1697
|
+
`,
|
|
1698
|
+
"idealyst://navigation/web-mobile-parity": `# Web/Mobile Navigation Parity
|
|
1699
|
+
|
|
1700
|
+
Understanding how to achieve the same navigation experience on web that you get for free on mobile.
|
|
1701
|
+
|
|
1702
|
+
## The Core Problem
|
|
1703
|
+
|
|
1704
|
+
On **React Native**, you get native navigation UI for free:
|
|
1705
|
+
- Stack navigator gives you headers with back buttons
|
|
1706
|
+
- Tab navigator gives you a bottom tab bar with icons
|
|
1707
|
+
- Drawer navigator gives you a slide-out menu
|
|
1708
|
+
|
|
1709
|
+
On **Web**, you get nothing but URL routing. No headers, no tab bars, no drawers. You must build these yourself using **layout components**.
|
|
1710
|
+
|
|
1711
|
+
## The Solution: Layout Components
|
|
1712
|
+
|
|
1713
|
+
The \`layoutComponent\` prop on navigators is how you achieve parity. It wraps your route content and provides the navigation UI.
|
|
1714
|
+
|
|
1715
|
+
\`\`\`tsx
|
|
1716
|
+
{
|
|
1717
|
+
path: "/",
|
|
1718
|
+
type: 'navigator',
|
|
1719
|
+
layout: 'stack',
|
|
1720
|
+
layoutComponent: MyStackLayout, // <-- This is the key!
|
|
1721
|
+
routes: [...]
|
|
1722
|
+
}
|
|
1723
|
+
\`\`\`
|
|
1724
|
+
|
|
1725
|
+
## What Layout Components Receive
|
|
1726
|
+
|
|
1727
|
+
Every layout component receives these props:
|
|
1728
|
+
|
|
1729
|
+
\`\`\`tsx
|
|
1730
|
+
type LayoutProps = {
|
|
1731
|
+
children: React.ReactNode; // The route content (renders via <Outlet />)
|
|
1732
|
+
options?: NavigatorOptions; // headerTitle, headerLeft, headerRight, etc.
|
|
1733
|
+
routes: RouteWithFullPath[]; // All child routes with their full paths
|
|
1734
|
+
currentPath: string; // Currently active route path
|
|
1735
|
+
};
|
|
1736
|
+
\`\`\`
|
|
1737
|
+
|
|
1738
|
+
**This gives you everything you need to build any navigation UI:**
|
|
1739
|
+
- \`options\` - What to show in headers
|
|
1740
|
+
- \`routes\` - What tabs/menu items to render
|
|
1741
|
+
- \`currentPath\` - Which one is active
|
|
1742
|
+
- \`children\` - Where to render the screen content
|
|
1743
|
+
|
|
1744
|
+
## Stack Navigator Parity
|
|
1745
|
+
|
|
1746
|
+
### What Native Gives You
|
|
1747
|
+
- Header bar with title
|
|
1748
|
+
- Back button (automatic)
|
|
1749
|
+
- Right-side actions
|
|
1750
|
+
- Smooth transitions
|
|
1751
|
+
|
|
1752
|
+
### Web Implementation
|
|
1753
|
+
|
|
1754
|
+
\`\`\`tsx
|
|
1755
|
+
import { Outlet } from 'react-router-dom';
|
|
1756
|
+
import { View, Text, IconButton, Pressable } from '@idealyst/components';
|
|
1757
|
+
import { useNavigator } from '@idealyst/navigation';
|
|
1758
|
+
import type { StackLayoutProps } from '@idealyst/navigation';
|
|
1759
|
+
|
|
1760
|
+
export function StackLayout({ options, currentPath }: StackLayoutProps) {
|
|
1761
|
+
const { canGoBack, goBack } = useNavigator();
|
|
1762
|
+
|
|
1763
|
+
return (
|
|
1764
|
+
<View style={{ flex: 1 }}>
|
|
1765
|
+
{/* Header - mimics native stack header */}
|
|
1766
|
+
{options?.headerShown !== false && (
|
|
1767
|
+
<View style={{
|
|
1768
|
+
height: 56,
|
|
1769
|
+
flexDirection: 'row',
|
|
1770
|
+
alignItems: 'center',
|
|
1771
|
+
paddingHorizontal: 16,
|
|
1772
|
+
borderBottomWidth: 1,
|
|
1773
|
+
borderBottomColor: '#e0e0e0',
|
|
1774
|
+
backgroundColor: '#fff',
|
|
1775
|
+
}}>
|
|
1776
|
+
{/* Back button - like native */}
|
|
1777
|
+
{options?.headerBackVisible !== false && canGoBack() && (
|
|
1778
|
+
<IconButton
|
|
1779
|
+
icon="arrow-left"
|
|
1780
|
+
onPress={goBack}
|
|
1781
|
+
style={{ marginRight: 8 }}
|
|
1782
|
+
/>
|
|
1783
|
+
)}
|
|
1784
|
+
|
|
1785
|
+
{/* Left slot */}
|
|
1786
|
+
{options?.headerLeft && (
|
|
1787
|
+
<View style={{ marginRight: 16 }}>
|
|
1788
|
+
{typeof options.headerLeft === 'function'
|
|
1789
|
+
? options.headerLeft({})
|
|
1790
|
+
: options.headerLeft}
|
|
1791
|
+
</View>
|
|
1792
|
+
)}
|
|
1793
|
+
|
|
1794
|
+
{/* Title - centered or left-aligned */}
|
|
1795
|
+
<View style={{ flex: 1 }}>
|
|
1796
|
+
{typeof options?.headerTitle === 'string' ? (
|
|
1797
|
+
<Text variant="title">{options.headerTitle}</Text>
|
|
1798
|
+
) : (
|
|
1799
|
+
options?.headerTitle
|
|
1800
|
+
)}
|
|
1801
|
+
</View>
|
|
1802
|
+
|
|
1803
|
+
{/* Right slot */}
|
|
1804
|
+
{options?.headerRight && (
|
|
1805
|
+
<View>
|
|
1806
|
+
{typeof options.headerRight === 'function'
|
|
1807
|
+
? options.headerRight({})
|
|
1808
|
+
: options.headerRight}
|
|
1809
|
+
</View>
|
|
1810
|
+
)}
|
|
1811
|
+
</View>
|
|
1812
|
+
)}
|
|
1813
|
+
|
|
1814
|
+
{/* Content area */}
|
|
1815
|
+
<View style={{ flex: 1 }}>
|
|
1816
|
+
<Outlet />
|
|
1817
|
+
</View>
|
|
1818
|
+
</View>
|
|
1819
|
+
);
|
|
1820
|
+
}
|
|
1821
|
+
\`\`\`
|
|
1822
|
+
|
|
1823
|
+
## Tab Navigator Parity
|
|
1824
|
+
|
|
1825
|
+
### What Native Gives You
|
|
1826
|
+
- Bottom tab bar
|
|
1827
|
+
- Icons for each tab
|
|
1828
|
+
- Labels
|
|
1829
|
+
- Badge counts
|
|
1830
|
+
- Active state highlighting
|
|
1831
|
+
|
|
1832
|
+
### Web Implementation
|
|
1833
|
+
|
|
1834
|
+
\`\`\`tsx
|
|
1835
|
+
import { Outlet } from 'react-router-dom';
|
|
1836
|
+
import { View, Text, Pressable, Icon, Badge } from '@idealyst/components';
|
|
1837
|
+
import { useNavigator } from '@idealyst/navigation';
|
|
1838
|
+
import type { TabLayoutProps } from '@idealyst/navigation';
|
|
1839
|
+
|
|
1840
|
+
export function TabLayout({ routes, currentPath }: TabLayoutProps) {
|
|
1841
|
+
const { navigate } = useNavigator();
|
|
1842
|
+
|
|
1843
|
+
return (
|
|
1844
|
+
<View style={{ flex: 1 }}>
|
|
1845
|
+
{/* Content area */}
|
|
1846
|
+
<View style={{ flex: 1 }}>
|
|
1847
|
+
<Outlet />
|
|
1848
|
+
</View>
|
|
1849
|
+
|
|
1850
|
+
{/* Bottom tab bar - mimics native */}
|
|
1851
|
+
<View style={{
|
|
1852
|
+
height: 56,
|
|
1853
|
+
flexDirection: 'row',
|
|
1854
|
+
borderTopWidth: 1,
|
|
1855
|
+
borderTopColor: '#e0e0e0',
|
|
1856
|
+
backgroundColor: '#fff',
|
|
1857
|
+
}}>
|
|
1858
|
+
{routes.map((route) => {
|
|
1859
|
+
const isActive = currentPath === route.fullPath;
|
|
1860
|
+
const options = route.options;
|
|
1861
|
+
|
|
1862
|
+
return (
|
|
1863
|
+
<Pressable
|
|
1864
|
+
key={route.fullPath}
|
|
1865
|
+
onPress={() => navigate({ path: route.fullPath })}
|
|
1866
|
+
style={{
|
|
1867
|
+
flex: 1,
|
|
1868
|
+
alignItems: 'center',
|
|
1869
|
+
justifyContent: 'center',
|
|
1870
|
+
paddingVertical: 8,
|
|
1871
|
+
}}
|
|
1872
|
+
>
|
|
1873
|
+
{/* Icon with optional badge */}
|
|
1874
|
+
<View style={{ position: 'relative' }}>
|
|
1875
|
+
{options?.tabBarIcon?.({
|
|
1876
|
+
focused: isActive,
|
|
1877
|
+
color: isActive ? '#007AFF' : '#8E8E93',
|
|
1878
|
+
size: 24,
|
|
1879
|
+
})}
|
|
1880
|
+
{options?.tabBarBadge && (
|
|
1881
|
+
<Badge
|
|
1882
|
+
count={options.tabBarBadge}
|
|
1883
|
+
style={{ position: 'absolute', top: -4, right: -8 }}
|
|
1884
|
+
/>
|
|
1885
|
+
)}
|
|
1886
|
+
</View>
|
|
1887
|
+
|
|
1888
|
+
{/* Label */}
|
|
1889
|
+
{options?.tabBarLabel && (
|
|
1890
|
+
<Text
|
|
1891
|
+
size="xs"
|
|
1892
|
+
style={{
|
|
1893
|
+
marginTop: 4,
|
|
1894
|
+
color: isActive ? '#007AFF' : '#8E8E93',
|
|
1895
|
+
}}
|
|
1896
|
+
>
|
|
1897
|
+
{options.tabBarLabel}
|
|
1898
|
+
</Text>
|
|
1899
|
+
)}
|
|
1900
|
+
</Pressable>
|
|
1901
|
+
);
|
|
1902
|
+
})}
|
|
1903
|
+
</View>
|
|
1904
|
+
</View>
|
|
1905
|
+
);
|
|
1906
|
+
}
|
|
1907
|
+
\`\`\`
|
|
1908
|
+
|
|
1909
|
+
## Drawer Navigator Parity
|
|
1910
|
+
|
|
1911
|
+
### What Native Gives You
|
|
1912
|
+
- Slide-out drawer from edge
|
|
1913
|
+
- Overlay when open
|
|
1914
|
+
- Gesture to open/close
|
|
1915
|
+
- Menu items
|
|
1916
|
+
|
|
1917
|
+
### Web Implementation
|
|
1918
|
+
|
|
1919
|
+
On web, drawers are typically persistent sidebars. Here's how to build both:
|
|
1920
|
+
|
|
1921
|
+
\`\`\`tsx
|
|
1922
|
+
import { Outlet } from 'react-router-dom';
|
|
1923
|
+
import { View, Text, Pressable, Icon } from '@idealyst/components';
|
|
1924
|
+
import { useNavigator } from '@idealyst/navigation';
|
|
1925
|
+
import type { StackLayoutProps } from '@idealyst/navigation';
|
|
1926
|
+
|
|
1927
|
+
export function DrawerLayout({ routes, currentPath, options }: StackLayoutProps) {
|
|
1928
|
+
const { navigate } = useNavigator();
|
|
1929
|
+
const [isCollapsed, setIsCollapsed] = useState(false);
|
|
1930
|
+
|
|
1931
|
+
return (
|
|
1932
|
+
<View style={{ flex: 1, flexDirection: 'row' }}>
|
|
1933
|
+
{/* Sidebar - always visible on web */}
|
|
1934
|
+
<View style={{
|
|
1935
|
+
width: isCollapsed ? 64 : 240,
|
|
1936
|
+
borderRightWidth: 1,
|
|
1937
|
+
borderRightColor: '#e0e0e0',
|
|
1938
|
+
backgroundColor: '#f8f8f8',
|
|
1939
|
+
transition: 'width 0.2s',
|
|
1940
|
+
}}>
|
|
1941
|
+
{/* Logo/Header */}
|
|
1942
|
+
<View style={{ height: 56, justifyContent: 'center', paddingHorizontal: 16 }}>
|
|
1943
|
+
{!isCollapsed && <Text variant="title">My App</Text>}
|
|
1944
|
+
</View>
|
|
1945
|
+
|
|
1946
|
+
{/* Menu Items */}
|
|
1947
|
+
{routes.map((route) => {
|
|
1948
|
+
const isActive = currentPath.startsWith(route.fullPath);
|
|
1949
|
+
return (
|
|
1950
|
+
<Pressable
|
|
1951
|
+
key={route.fullPath}
|
|
1952
|
+
onPress={() => navigate({ path: route.fullPath })}
|
|
1953
|
+
style={{
|
|
1954
|
+
flexDirection: 'row',
|
|
1955
|
+
alignItems: 'center',
|
|
1956
|
+
padding: 12,
|
|
1957
|
+
backgroundColor: isActive ? 'rgba(0,0,0,0.08)' : 'transparent',
|
|
1958
|
+
}}
|
|
1959
|
+
>
|
|
1960
|
+
<Icon
|
|
1961
|
+
name={route.options?.icon || 'circle'}
|
|
1962
|
+
size={24}
|
|
1963
|
+
color={isActive ? '#007AFF' : '#666'}
|
|
1964
|
+
/>
|
|
1965
|
+
{!isCollapsed && (
|
|
1966
|
+
<Text style={{ marginLeft: 12, color: isActive ? '#007AFF' : '#333' }}>
|
|
1967
|
+
{route.options?.title || route.path}
|
|
1968
|
+
</Text>
|
|
1969
|
+
)}
|
|
1970
|
+
</Pressable>
|
|
1971
|
+
);
|
|
1972
|
+
})}
|
|
1973
|
+
|
|
1974
|
+
{/* Collapse toggle */}
|
|
1975
|
+
<Pressable
|
|
1976
|
+
onPress={() => setIsCollapsed(!isCollapsed)}
|
|
1977
|
+
style={{ padding: 12, marginTop: 'auto' }}
|
|
1978
|
+
>
|
|
1979
|
+
<Icon name={isCollapsed ? 'chevron-right' : 'chevron-left'} size={24} />
|
|
1980
|
+
</Pressable>
|
|
1981
|
+
</View>
|
|
1982
|
+
|
|
1983
|
+
{/* Content */}
|
|
1984
|
+
<View style={{ flex: 1 }}>
|
|
1985
|
+
<Outlet />
|
|
1986
|
+
</View>
|
|
1987
|
+
</View>
|
|
1988
|
+
);
|
|
1989
|
+
}
|
|
1990
|
+
\`\`\`
|
|
1991
|
+
|
|
1992
|
+
## Using GeneralLayout Helper
|
|
1993
|
+
|
|
1994
|
+
The \`GeneralLayout\` component simplifies building layouts:
|
|
1995
|
+
|
|
1996
|
+
\`\`\`tsx
|
|
1997
|
+
import { GeneralLayout } from '@idealyst/navigation';
|
|
1998
|
+
|
|
1999
|
+
export function AppLayout({ options, routes, currentPath, children }: StackLayoutProps) {
|
|
2000
|
+
return (
|
|
2001
|
+
<GeneralLayout
|
|
2002
|
+
header={{
|
|
2003
|
+
enabled: true,
|
|
2004
|
+
height: 56,
|
|
2005
|
+
content: (
|
|
2006
|
+
<View style={{ flexDirection: 'row', alignItems: 'center', flex: 1 }}>
|
|
2007
|
+
<Text variant="title">{options?.headerTitle || 'App'}</Text>
|
|
2008
|
+
<View style={{ marginLeft: 'auto' }}>{options?.headerRight}</View>
|
|
2009
|
+
</View>
|
|
2010
|
+
),
|
|
2011
|
+
}}
|
|
2012
|
+
sidebar={{
|
|
2013
|
+
enabled: true,
|
|
2014
|
+
collapsible: true,
|
|
2015
|
+
expandedWidth: 240,
|
|
2016
|
+
collapsedWidth: 64,
|
|
2017
|
+
content: <SidebarMenu routes={routes} currentPath={currentPath} />,
|
|
2018
|
+
}}
|
|
2019
|
+
>
|
|
2020
|
+
{children}
|
|
2021
|
+
</GeneralLayout>
|
|
2022
|
+
);
|
|
2023
|
+
}
|
|
2024
|
+
\`\`\`
|
|
2025
|
+
|
|
2026
|
+
## Putting It All Together
|
|
2027
|
+
|
|
2028
|
+
Here's a complete router setup with web layouts:
|
|
2029
|
+
|
|
2030
|
+
\`\`\`tsx
|
|
2031
|
+
import { NavigatorParam } from '@idealyst/navigation';
|
|
2032
|
+
import { StackLayout } from './layouts/StackLayout';
|
|
2033
|
+
import { TabLayout } from './layouts/TabLayout';
|
|
2034
|
+
|
|
2035
|
+
const appRouter: NavigatorParam = {
|
|
2036
|
+
path: "/",
|
|
2037
|
+
type: 'navigator',
|
|
2038
|
+
layout: 'stack',
|
|
2039
|
+
layoutComponent: StackLayout, // Web header
|
|
2040
|
+
options: {
|
|
2041
|
+
headerTitle: "My App",
|
|
2042
|
+
headerRight: <UserMenu />,
|
|
2043
|
+
},
|
|
2044
|
+
routes: [
|
|
2045
|
+
{
|
|
2046
|
+
path: "main",
|
|
2047
|
+
type: 'navigator',
|
|
2048
|
+
layout: 'tab',
|
|
2049
|
+
layoutComponent: TabLayout, // Web tab bar
|
|
2050
|
+
routes: [
|
|
2051
|
+
{
|
|
2052
|
+
path: "home",
|
|
2053
|
+
type: 'screen',
|
|
2054
|
+
component: HomeScreen,
|
|
2055
|
+
options: {
|
|
2056
|
+
tabBarLabel: "Home",
|
|
2057
|
+
tabBarIcon: ({ color }) => <Icon name="home" color={color} />,
|
|
2058
|
+
},
|
|
2059
|
+
},
|
|
2060
|
+
{
|
|
2061
|
+
path: "search",
|
|
2062
|
+
type: 'screen',
|
|
2063
|
+
component: SearchScreen,
|
|
2064
|
+
options: {
|
|
2065
|
+
tabBarLabel: "Search",
|
|
2066
|
+
tabBarIcon: ({ color }) => <Icon name="magnify" color={color} />,
|
|
2067
|
+
},
|
|
2068
|
+
},
|
|
2069
|
+
],
|
|
2070
|
+
},
|
|
2071
|
+
{
|
|
2072
|
+
path: "settings",
|
|
2073
|
+
type: 'screen',
|
|
2074
|
+
component: SettingsScreen,
|
|
2075
|
+
},
|
|
2076
|
+
],
|
|
2077
|
+
};
|
|
2078
|
+
\`\`\`
|
|
2079
|
+
|
|
2080
|
+
## Key Insights
|
|
2081
|
+
|
|
2082
|
+
1. **layoutComponent is web-only** - Native ignores it and uses native navigators
|
|
2083
|
+
2. **Same route config, different UI** - Your routes stay the same, layouts differ
|
|
2084
|
+
3. **Options are your data source** - headerTitle, tabBarIcon, etc. drive your layout
|
|
2085
|
+
4. **routes array is navigation menu** - Use it to build sidebars, tab bars, menus
|
|
2086
|
+
5. **currentPath enables active states** - Compare to highlight current item
|
|
2087
|
+
6. **Outlet renders children** - From react-router-dom, this is where screen content goes
|
|
2088
|
+
|
|
2089
|
+
## Common Patterns
|
|
2090
|
+
|
|
2091
|
+
### Responsive Layout
|
|
2092
|
+
\`\`\`tsx
|
|
2093
|
+
function ResponsiveLayout(props: StackLayoutProps) {
|
|
2094
|
+
const { width } = useWindowDimensions();
|
|
2095
|
+
const isMobile = width < 768;
|
|
2096
|
+
|
|
2097
|
+
// Tabs on mobile, drawer on desktop
|
|
2098
|
+
return isMobile
|
|
2099
|
+
? <TabLayout {...props} />
|
|
2100
|
+
: <DrawerLayout {...props} />;
|
|
2101
|
+
}
|
|
2102
|
+
\`\`\`
|
|
2103
|
+
|
|
2104
|
+
### Nested Headers
|
|
2105
|
+
\`\`\`tsx
|
|
2106
|
+
// Parent navigator has app header
|
|
2107
|
+
// Child navigator has section header
|
|
2108
|
+
{
|
|
2109
|
+
path: "/",
|
|
2110
|
+
layoutComponent: AppHeaderLayout,
|
|
2111
|
+
routes: [{
|
|
2112
|
+
path: "admin",
|
|
2113
|
+
layoutComponent: AdminSectionHeader, // Adds another header
|
|
2114
|
+
routes: [...]
|
|
2115
|
+
}]
|
|
2116
|
+
}
|
|
2117
|
+
\`\`\`
|
|
2118
|
+
|
|
2119
|
+
### Hiding Navigation
|
|
2120
|
+
\`\`\`tsx
|
|
2121
|
+
function ConditionalLayout(props: StackLayoutProps) {
|
|
2122
|
+
// Hide navigation on certain routes
|
|
2123
|
+
if (props.currentPath.includes('/fullscreen')) {
|
|
2124
|
+
return <Outlet />; // No chrome
|
|
2125
|
+
}
|
|
2126
|
+
return <FullLayout {...props} />;
|
|
2127
|
+
}
|
|
2128
|
+
\`\`\`
|
|
2129
|
+
|
|
2130
|
+
## Summary
|
|
2131
|
+
|
|
2132
|
+
| Native Gets | Web Needs |
|
|
2133
|
+
|-------------|-----------|
|
|
2134
|
+
| Stack header | \`layoutComponent\` with header UI |
|
|
2135
|
+
| Tab bar | \`layoutComponent\` with tab buttons |
|
|
2136
|
+
| Drawer | \`layoutComponent\` with sidebar |
|
|
2137
|
+
| Back button | \`canGoBack()\` + \`goBack()\` |
|
|
2138
|
+
| Active states | Compare \`currentPath\` to \`route.fullPath\` |
|
|
2139
|
+
| Screen options | Access via \`options\` and \`route.options\` |
|
|
2140
|
+
|
|
2141
|
+
The key to web/mobile parity is understanding that **layout components give web everything native navigators provide automatically**.
|
|
1697
2142
|
`,
|
|
1698
2143
|
};
|
|
1699
2144
|
//# sourceMappingURL=navigation-guides.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-guides.js","sourceRoot":"","sources":["../../src/data/navigation-guides.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,gCAAgC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FnC;IAEC,2CAA2C,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwO9C;IAEC,uCAAuC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuN1C;IAEC,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkTzC;IAEC,qCAAqC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8exC;IAEC,8CAA8C,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+VjD;CACA,CAAC"}
|
|
1
|
+
{"version":3,"file":"navigation-guides.js","sourceRoot":"","sources":["../../src/data/navigation-guides.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,gCAAgC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FnC;IAEC,2CAA2C,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwO9C;IAEC,uCAAuC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuN1C;IAEC,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkTzC;IAEC,qCAAqC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8exC;IAEC,8CAA8C,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+VjD;IAEC,yCAAyC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4b5C;CACA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/data/recipes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACrF,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/data/recipes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACrF,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAu2F1C,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAW/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,KAAK,CAAC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CASD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAUrD"}
|