@gtkx/navigation 2.0.0-beta.10 → 2.0.0-beta.12

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 (89) hide show
  1. package/README.md +8 -168
  2. package/dist/drawer/create-drawer-navigator.d.ts.map +1 -1
  3. package/dist/drawer/create-drawer-navigator.js +2 -2
  4. package/dist/drawer/create-drawer-navigator.js.map +1 -1
  5. package/dist/drawer/drawer-item-list.d.ts.map +1 -1
  6. package/dist/drawer/drawer-item-list.js +5 -3
  7. package/dist/drawer/drawer-item-list.js.map +1 -1
  8. package/dist/drawer/drawer-router.d.ts.map +1 -1
  9. package/dist/drawer/drawer-router.js.map +1 -1
  10. package/dist/drawer/drawer-status.d.ts +2 -2
  11. package/dist/drawer/drawer-status.d.ts.map +1 -1
  12. package/dist/drawer/drawer-status.js +1 -9
  13. package/dist/drawer/drawer-status.js.map +1 -1
  14. package/dist/drawer/drawer-view.d.ts.map +1 -1
  15. package/dist/drawer/drawer-view.js +8 -12
  16. package/dist/drawer/drawer-view.js.map +1 -1
  17. package/dist/drawer/types.d.ts +2 -0
  18. package/dist/drawer/types.d.ts.map +1 -1
  19. package/dist/drawer/types.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/shared/header-bar.d.ts.map +1 -1
  25. package/dist/shared/header-bar.js +2 -2
  26. package/dist/shared/header-bar.js.map +1 -1
  27. package/dist/shared/routes.d.ts.map +1 -1
  28. package/dist/shared/scene-page.d.ts +3 -1
  29. package/dist/shared/scene-page.d.ts.map +1 -1
  30. package/dist/shared/scene-page.js +8 -1
  31. package/dist/shared/scene-page.js.map +1 -1
  32. package/dist/shared/use-pop-to-top-on-blur.d.ts.map +1 -1
  33. package/dist/split-view/create-split-view-navigator.d.ts.map +1 -1
  34. package/dist/split-view/create-split-view-navigator.js +2 -2
  35. package/dist/split-view/create-split-view-navigator.js.map +1 -1
  36. package/dist/split-view/split-view.d.ts.map +1 -1
  37. package/dist/split-view/split-view.js +3 -7
  38. package/dist/split-view/split-view.js.map +1 -1
  39. package/dist/split-view/types.d.ts.map +1 -1
  40. package/dist/split-view/types.js.map +1 -1
  41. package/dist/stack/create-stack-navigator.d.ts.map +1 -1
  42. package/dist/stack/create-stack-navigator.js +2 -2
  43. package/dist/stack/create-stack-navigator.js.map +1 -1
  44. package/dist/stack/stack-pages.d.ts.map +1 -1
  45. package/dist/stack/stack-pages.js +4 -14
  46. package/dist/stack/stack-pages.js.map +1 -1
  47. package/dist/stack/stack-view.d.ts.map +1 -1
  48. package/dist/stack/stack-view.js +5 -22
  49. package/dist/stack/stack-view.js.map +1 -1
  50. package/dist/stack/sync-navigation-stack.d.ts.map +1 -1
  51. package/dist/stack/types.d.ts.map +1 -1
  52. package/dist/stack/types.js.map +1 -1
  53. package/dist/tabs/create-tab-navigator.d.ts.map +1 -1
  54. package/dist/tabs/create-tab-navigator.js +2 -2
  55. package/dist/tabs/create-tab-navigator.js.map +1 -1
  56. package/dist/tabs/tab-view.d.ts.map +1 -1
  57. package/dist/tabs/tab-view.js +5 -9
  58. package/dist/tabs/tab-view.js.map +1 -1
  59. package/dist/tabs/types.d.ts +2 -0
  60. package/dist/tabs/types.d.ts.map +1 -1
  61. package/dist/tabs/types.js.map +1 -1
  62. package/dist/theme.d.ts.map +1 -1
  63. package/dist/theme.js.map +1 -1
  64. package/package.json +13 -21
  65. package/src/drawer/create-drawer-navigator.tsx +14 -16
  66. package/src/drawer/drawer-item-list.tsx +22 -15
  67. package/src/drawer/drawer-router.ts +4 -2
  68. package/src/drawer/drawer-status.ts +3 -16
  69. package/src/drawer/drawer-view.tsx +18 -23
  70. package/src/drawer/types.ts +6 -3
  71. package/src/index.ts +1 -5
  72. package/src/shared/header-bar.tsx +2 -2
  73. package/src/shared/scene-page.tsx +24 -12
  74. package/src/split-view/create-split-view-navigator.tsx +15 -17
  75. package/src/split-view/split-view.tsx +32 -26
  76. package/src/split-view/types.ts +4 -3
  77. package/src/stack/create-stack-navigator.tsx +9 -11
  78. package/src/stack/stack-pages.ts +14 -24
  79. package/src/stack/stack-view.tsx +9 -29
  80. package/src/stack/types.ts +4 -3
  81. package/src/tabs/create-tab-navigator.tsx +3 -5
  82. package/src/tabs/tab-view.tsx +28 -24
  83. package/src/tabs/types.ts +6 -3
  84. package/src/theme.ts +0 -1
  85. package/dist/shared/use-loaded-routes.d.ts +0 -3
  86. package/dist/shared/use-loaded-routes.d.ts.map +0 -1
  87. package/dist/shared/use-loaded-routes.js +0 -11
  88. package/dist/shared/use-loaded-routes.js.map +0 -1
  89. package/src/shared/use-loaded-routes.ts +0 -14
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ export { DrawerItemList } from "./drawer/drawer-item-list.js";
3
3
  export { NavigationContainer, } from "./navigation-container.js";
4
4
  export { createSplitViewNavigator, createSplitViewScreen, SplitViewNavigator, } from "./split-view/create-split-view-navigator.js";
5
5
  export { createStackNavigator, createStackScreen, StackNavigator, } from "./stack/create-stack-navigator.js";
6
- export { createStaticNavigation, } from "./static-navigation.js";
6
+ export { createStaticNavigation } from "./static-navigation.js";
7
7
  export { createTabNavigator, createTabScreen, TabNavigator } from "./tabs/create-tab-navigator.js";
8
8
  export { DarkTheme, DefaultTheme } from "./theme.js";
9
9
  export * from "@react-navigation/core";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAElB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAc9D,OAAO,EACH,mBAAmB,GAGtB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GAErB,MAAM,6CAA6C,CAAC;AAYrD,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,GAEjB,MAAM,mCAAmC,CAAC;AAe3C,OAAO,EACH,sBAAsB,GAGzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAmB,MAAM,gCAAgC,CAAC;AAapH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AACjE,cAAc,wBAAwB,CAAC","sourcesContent":["export {\n createDrawerNavigator,\n createDrawerScreen,\n DrawerNavigator,\n type DrawerTypeBag,\n} from \"./drawer/create-drawer-navigator.js\";\nexport { DrawerItemList } from \"./drawer/drawer-item-list.js\";\nexport type {\n DrawerContentProps,\n DrawerDescriptor,\n DrawerDescriptorMap,\n DrawerHeaderProps,\n DrawerNavigationConfig,\n DrawerNavigationEventMap,\n DrawerNavigationHelpers,\n DrawerNavigationOptions,\n DrawerNavigationProp,\n DrawerNavigatorProps,\n DrawerScreenProps,\n} from \"./drawer/types.js\";\nexport {\n NavigationContainer,\n type NavigationContainerComponent,\n type NavigationContainerProps,\n} from \"./navigation-container.js\";\nexport type { HeaderOptions } from \"./shared/types.js\";\nexport {\n createSplitViewNavigator,\n createSplitViewScreen,\n SplitViewNavigator,\n type SplitViewTypeBag,\n} from \"./split-view/create-split-view-navigator.js\";\nexport type {\n SplitViewDescriptor,\n SplitViewDescriptorMap,\n SplitViewNavigationConfig,\n SplitViewNavigationEventMap,\n SplitViewNavigationHelpers,\n SplitViewNavigationOptions,\n SplitViewNavigationProp,\n SplitViewNavigatorProps,\n SplitViewScreenProps,\n} from \"./split-view/types.js\";\nexport {\n createStackNavigator,\n createStackScreen,\n StackNavigator,\n type StackTypeBag,\n} from \"./stack/create-stack-navigator.js\";\nexport type {\n StackDescriptor,\n StackDescriptorMap,\n StackHeaderBack,\n StackHeaderProps,\n StackNavigationConfig,\n StackNavigationEventMap,\n StackNavigationHelpers,\n StackNavigationOptions,\n StackNavigationProp,\n StackNavigatorProps,\n StackScreenProps,\n StackTransitionData,\n} from \"./stack/types.js\";\nexport {\n createStaticNavigation,\n type StaticNavigationProps,\n type StaticNavigationTree,\n} from \"./static-navigation.js\";\nexport { createTabNavigator, createTabScreen, TabNavigator, type TabTypeBag } from \"./tabs/create-tab-navigator.js\";\nexport type {\n TabDescriptor,\n TabDescriptorMap,\n TabHeaderProps,\n TabNavigationConfig,\n TabNavigationEventMap,\n TabNavigationHelpers,\n TabNavigationOptions,\n TabNavigationProp,\n TabNavigatorProps,\n TabScreenProps,\n} from \"./tabs/types.js\";\nexport { DarkTheme, DefaultTheme, type Theme } from \"./theme.js\";\nexport * from \"@react-navigation/core\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAElB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAc9D,OAAO,EACH,mBAAmB,GAGtB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACH,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GAErB,MAAM,6CAA6C,CAAC;AAYrD,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,GAEjB,MAAM,mCAAmC,CAAC;AAe3C,OAAO,EAAE,sBAAsB,EAAyD,MAAM,wBAAwB,CAAC;AACvH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAmB,MAAM,gCAAgC,CAAC;AAapH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AACjE,cAAc,wBAAwB,CAAC","sourcesContent":["export {\n createDrawerNavigator,\n createDrawerScreen,\n DrawerNavigator,\n type DrawerTypeBag,\n} from \"./drawer/create-drawer-navigator.js\";\nexport { DrawerItemList } from \"./drawer/drawer-item-list.js\";\nexport type {\n DrawerContentProps,\n DrawerDescriptor,\n DrawerDescriptorMap,\n DrawerHeaderProps,\n DrawerNavigationConfig,\n DrawerNavigationEventMap,\n DrawerNavigationHelpers,\n DrawerNavigationOptions,\n DrawerNavigationProp,\n DrawerNavigatorProps,\n DrawerScreenProps,\n} from \"./drawer/types.js\";\nexport {\n NavigationContainer,\n type NavigationContainerComponent,\n type NavigationContainerProps,\n} from \"./navigation-container.js\";\nexport type { HeaderOptions } from \"./shared/types.js\";\nexport {\n createSplitViewNavigator,\n createSplitViewScreen,\n SplitViewNavigator,\n type SplitViewTypeBag,\n} from \"./split-view/create-split-view-navigator.js\";\nexport type {\n SplitViewDescriptor,\n SplitViewDescriptorMap,\n SplitViewNavigationConfig,\n SplitViewNavigationEventMap,\n SplitViewNavigationHelpers,\n SplitViewNavigationOptions,\n SplitViewNavigationProp,\n SplitViewNavigatorProps,\n SplitViewScreenProps,\n} from \"./split-view/types.js\";\nexport {\n createStackNavigator,\n createStackScreen,\n StackNavigator,\n type StackTypeBag,\n} from \"./stack/create-stack-navigator.js\";\nexport type {\n StackDescriptor,\n StackDescriptorMap,\n StackHeaderBack,\n StackHeaderProps,\n StackNavigationConfig,\n StackNavigationEventMap,\n StackNavigationHelpers,\n StackNavigationOptions,\n StackNavigationProp,\n StackNavigatorProps,\n StackScreenProps,\n StackTransitionData,\n} from \"./stack/types.js\";\nexport { createStaticNavigation, type StaticNavigationProps, type StaticNavigationTree } from \"./static-navigation.js\";\nexport { createTabNavigator, createTabScreen, TabNavigator, type TabTypeBag } from \"./tabs/create-tab-navigator.js\";\nexport type {\n TabDescriptor,\n TabDescriptorMap,\n TabHeaderProps,\n TabNavigationConfig,\n TabNavigationEventMap,\n TabNavigationHelpers,\n TabNavigationOptions,\n TabNavigationProp,\n TabNavigatorProps,\n TabScreenProps,\n} from \"./tabs/types.js\";\nexport { DarkTheme, DefaultTheme, type Theme } from \"./theme.js\";\nexport * from \"@react-navigation/core\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"header-bar.d.ts","sourceRoot":"","sources":["../../src/shared/header-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,KAAK,cAAc,GAAG;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAUF,QAAA,MAAM,SAAS,GAAI,iDAAiD,cAAc,KAAG,SAYpF,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"header-bar.d.ts","sourceRoot":"","sources":["../../src/shared/header-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,KAAK,cAAc,GAAG;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAUF,QAAA,MAAM,SAAS,oDAAqD,cAAc,KAAG,SAYpF,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { AdwHeaderBar, AdwWindowTitle } from "@gtkx/jsx/adw";
3
3
  const resolveTitleWidget = (options, fallback) => {
4
4
  if (typeof options.headerTitle === "string") {
@@ -6,6 +6,6 @@ const resolveTitleWidget = (options, fallback) => {
6
6
  }
7
7
  return options.headerTitle ?? fallback;
8
8
  };
9
- const HeaderBar = ({ options, titleWidget, start, showBackButton }) => (_jsx(AdwHeaderBar, { showBackButton: showBackButton ?? true, titleWidget: resolveTitleWidget(options, titleWidget), start: (_jsxs(_Fragment, { children: [start, options.headerStart] })), end: options.headerEnd }));
9
+ const HeaderBar = ({ options, titleWidget, start, showBackButton }) => (_jsx(AdwHeaderBar, { showBackButton: showBackButton ?? true, titleWidget: resolveTitleWidget(options, titleWidget), start: _jsxs(_Fragment, { children: [start, options.headerStart] }), end: options.headerEnd }));
10
10
  export { HeaderBar };
11
11
  //# sourceMappingURL=header-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header-bar.js","sourceRoot":"","sources":["../../src/shared/header-bar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAU7D,MAAM,kBAAkB,GAAG,CAAC,OAAsB,EAAE,QAAkC,EAA4B,EAAE;IAChH,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,KAAC,cAAc,IAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAI,CAAC;IAC1D,CAAC;IAED,OAAO,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAkB,EAAa,EAAE,CAAC,CAC9F,KAAC,YAAY,IACT,cAAc,EAAE,cAAc,IAAI,IAAI,EACtC,WAAW,EAAE,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,EACrD,KAAK,EAAE,CACH,8BACK,KAAK,EACL,OAAO,CAAC,WAAW,IACrB,CACN,EACD,GAAG,EAAE,OAAO,CAAC,SAAS,GACxB,CACL,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { ReactElement, ReactNode } from \"react\";\nimport { AdwHeaderBar, AdwWindowTitle } from \"@gtkx/jsx/adw\";\nimport type { HeaderOptions } from \"./types.js\";\n\ntype HeaderBarProps = {\n options: HeaderOptions;\n titleWidget?: ReactElement;\n start?: ReactNode;\n showBackButton?: boolean;\n};\n\nconst resolveTitleWidget = (options: HeaderOptions, fallback: ReactElement | undefined): ReactElement | undefined => {\n if (typeof options.headerTitle === \"string\") {\n return <AdwWindowTitle title={options.headerTitle} />;\n }\n\n return options.headerTitle ?? fallback;\n};\n\nconst HeaderBar = ({ options, titleWidget, start, showBackButton }: HeaderBarProps): ReactNode => (\n <AdwHeaderBar\n showBackButton={showBackButton ?? true}\n titleWidget={resolveTitleWidget(options, titleWidget)}\n start={(\n <>\n {start}\n {options.headerStart}\n </>\n )}\n end={options.headerEnd}\n />\n);\n\nexport { HeaderBar };\n"]}
1
+ {"version":3,"file":"header-bar.js","sourceRoot":"","sources":["../../src/shared/header-bar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAU7D,MAAM,kBAAkB,GAAG,CAAC,OAAsB,EAAE,QAAkC,EAA4B,EAAE;IAChH,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,KAAC,cAAc,IAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAI,CAAC;IAC1D,CAAC;IAED,OAAO,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAkB,EAAa,EAAE,CAAC,CAC9F,KAAC,YAAY,IACT,cAAc,EAAE,cAAc,IAAI,IAAI,EACtC,WAAW,EAAE,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,EACrD,KAAK,EACD,8BACK,KAAK,EACL,OAAO,CAAC,WAAW,IACrB,EAEP,GAAG,EAAE,OAAO,CAAC,SAAS,GACxB,CACL,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { ReactElement, ReactNode } from \"react\";\nimport { AdwHeaderBar, AdwWindowTitle } from \"@gtkx/jsx/adw\";\nimport type { HeaderOptions } from \"./types.js\";\n\ntype HeaderBarProps = {\n options: HeaderOptions;\n titleWidget?: ReactElement;\n start?: ReactNode;\n showBackButton?: boolean;\n};\n\nconst resolveTitleWidget = (options: HeaderOptions, fallback: ReactElement | undefined): ReactElement | undefined => {\n if (typeof options.headerTitle === \"string\") {\n return <AdwWindowTitle title={options.headerTitle} />;\n }\n\n return options.headerTitle ?? fallback;\n};\n\nconst HeaderBar = ({ options, titleWidget, start, showBackButton }: HeaderBarProps): ReactNode => (\n <AdwHeaderBar\n showBackButton={showBackButton ?? true}\n titleWidget={resolveTitleWidget(options, titleWidget)}\n start={\n <>\n {start}\n {options.headerStart}\n </>\n }\n end={options.headerEnd}\n />\n);\n\nexport { HeaderBar };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/shared/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,KAAK,YAAY,CAAC,KAAK,SAAS,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,QAAA,MAAM,eAAe,GAAI,KAAK,SAAS,eAAe,EAAE,OAAO,KAAK,KAAG,YAAY,CAAC,KAAK,CAQxF,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,UAAU,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,MAAM,KAAG,UAQ7F,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/shared/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,KAAK,YAAY,CAAC,KAAK,SAAS,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,QAAA,MAAM,eAAe,GAAI,KAAK,SAAS,eAAe,SAAS,KAAK,KAAG,YAAY,CAAC,KAAK,CAQxF,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,UAAU,eAAe,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,KAAG,UAQ7F,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
@@ -5,9 +5,11 @@ type ScenePageProps = {
5
5
  iconName?: string;
6
6
  badgeNumber?: number;
7
7
  needsAttention?: boolean;
8
+ useUnderline?: boolean;
9
+ isFocused: boolean;
8
10
  isLoaded: boolean;
9
11
  render: () => ReactElement;
10
12
  };
11
- declare const ScenePage: ({ name, title, isLoaded, render, ...page }: ScenePageProps) => ReactNode;
13
+ declare const ScenePage: ({ name, title, isFocused, isLoaded, render, ...page }: ScenePageProps) => ReactNode;
12
14
  export { ScenePage };
13
15
  //# sourceMappingURL=scene-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene-page.d.ts","sourceRoot":"","sources":["../../src/shared/scene-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrD,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,YAAY,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,SAAS,GAAI,4CAA4C,cAAc,KAAG,SAW/E,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"scene-page.d.ts","sourceRoot":"","sources":["../../src/shared/scene-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,YAAY,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,SAAS,0DAA2D,cAAc,KAAG,SAoB1F,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,5 +1,12 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { AdwBin, AdwViewStackPage } from "@gtkx/jsx/adw";
3
- const ScenePage = ({ name, title, isLoaded, render, ...page }) => (_jsx(AdwViewStackPage, { name: name, title: title, iconName: page.iconName, badgeNumber: page.badgeNumber, needsAttention: page.needsAttention, useUnderline: false, children: _jsx(AdwBin, { children: isLoaded ? render() : null }) }));
3
+ import { useState } from "react";
4
+ const ScenePage = ({ name, title, isFocused, isLoaded, render, ...page }) => {
5
+ const [hasLoaded, setHasLoaded] = useState(isLoaded);
6
+ if (isLoaded && !hasLoaded) {
7
+ setHasLoaded(true);
8
+ }
9
+ return (_jsx(AdwViewStackPage, { name: name, title: title, iconName: page.iconName, badgeNumber: page.badgeNumber, needsAttention: page.needsAttention, accessibleHidden: !isFocused, useUnderline: page.useUnderline ?? false, children: _jsx(AdwBin, { children: hasLoaded ? render() : null }) }));
10
+ };
4
11
  export { ScenePage };
5
12
  //# sourceMappingURL=scene-page.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene-page.js","sourceRoot":"","sources":["../../src/shared/scene-page.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAYzD,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAkB,EAAa,EAAE,CAAC,CACzF,KAAC,gBAAgB,IACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,YAAY,EAAE,KAAK,YAEnB,KAAC,MAAM,cAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,GAAU,GAC9B,CACtB,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { ReactElement, ReactNode } from \"react\";\nimport { AdwBin, AdwViewStackPage } from \"@gtkx/jsx/adw\";\n\ntype ScenePageProps = {\n name: string;\n title: string;\n iconName?: string;\n badgeNumber?: number;\n needsAttention?: boolean;\n isLoaded: boolean;\n render: () => ReactElement;\n};\n\nconst ScenePage = ({ name, title, isLoaded, render, ...page }: ScenePageProps): ReactNode => (\n <AdwViewStackPage\n name={name}\n title={title}\n iconName={page.iconName}\n badgeNumber={page.badgeNumber}\n needsAttention={page.needsAttention}\n useUnderline={false}\n >\n <AdwBin>{isLoaded ? render() : null}</AdwBin>\n </AdwViewStackPage>\n);\n\nexport { ScenePage };\n"]}
1
+ {"version":3,"file":"scene-page.js","sourceRoot":"","sources":["../../src/shared/scene-page.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAcjC,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAkB,EAAa,EAAE;IACnG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CACH,KAAC,gBAAgB,IACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,gBAAgB,EAAE,CAAC,SAAS,EAC5B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK,YAExC,KAAC,MAAM,cAAE,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,GAAU,GAC/B,CACtB,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { ReactElement, ReactNode } from \"react\";\nimport { AdwBin, AdwViewStackPage } from \"@gtkx/jsx/adw\";\nimport { useState } from \"react\";\n\ntype ScenePageProps = {\n name: string;\n title: string;\n iconName?: string;\n badgeNumber?: number;\n needsAttention?: boolean;\n useUnderline?: boolean;\n isFocused: boolean;\n isLoaded: boolean;\n render: () => ReactElement;\n};\n\nconst ScenePage = ({ name, title, isFocused, isLoaded, render, ...page }: ScenePageProps): ReactNode => {\n const [hasLoaded, setHasLoaded] = useState(isLoaded);\n\n if (isLoaded && !hasLoaded) {\n setHasLoaded(true);\n }\n\n return (\n <AdwViewStackPage\n name={name}\n title={title}\n iconName={page.iconName}\n badgeNumber={page.badgeNumber}\n needsAttention={page.needsAttention}\n accessibleHidden={!isFocused}\n useUnderline={page.useUnderline ?? false}\n >\n <AdwBin>{hasLoaded ? render() : null}</AdwBin>\n </AdwViewStackPage>\n );\n};\n\nexport { ScenePage };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"use-pop-to-top-on-blur.d.ts","sourceRoot":"","sources":["../../src/shared/use-pop-to-top-on-blur.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIhG,KAAK,WAAW,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAChD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAehE,QAAA,MAAM,iBAAiB,GACnB,OAAO,eAAe,EACtB,aAAa,eAAe,EAC5B,YAAY,iBAAiB,CAAC,aAAa,CAAC,KAC7C,IAkBF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"use-pop-to-top-on-blur.d.ts","sourceRoot":"","sources":["../../src/shared/use-pop-to-top-on-blur.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIhG,KAAK,WAAW,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAChD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAehE,QAAA,MAAM,iBAAiB,UACZ,eAAe,eACT,eAAe,cAChB,iBAAiB,CAAC,aAAa,CAAC,KAC7C,IAkBF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-split-view-navigator.d.ts","sourceRoot":"","sources":["../../src/split-view/create-split-view-navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,oBAAoB,EACpB,aAAa,EAEb,oBAAoB,EAEpB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACR,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EAC1B,MAAM,YAAY,CAAC;AAIpB,qFAAqF;AACrF,KAAK,gBAAgB,CACjB,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IAC3D;IACA,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,0BAA0B;IAC1B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,kCAAkC;IAClC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,mCAAmC;IACnC,cAAc,EAAE;SACX,SAAS,IAAI,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;KAC7F,CAAC;IACF,+BAA+B;IAC/B,SAAS,EAAE,OAAO,kBAAkB,CAAC;CACxC,CAAC;AAEF,0FAA0F;AAC1F,QAAA,MAAM,qBAAqB,EAAE,mBAAmB,CAAC,gBAAgB,CAA2C,CAAC;AAE7G,gGAAgG;AAChG,iBAAS,kBAAkB,CAAC,EACxB,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,GAAG,OAAO,EACb,EAAE,uBAAuB,GAAG,SAAS,CA0BrC;AAED;;;GAGG;AACH,iBAAS,wBAAwB,CAC7B,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACjE,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,EACrF,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACpE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAElD;AAED,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"create-split-view-navigator.d.ts","sourceRoot":"","sources":["../../src/split-view/create-split-view-navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,oBAAoB,EACpB,aAAa,EAEb,oBAAoB,EAEpB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACR,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EAC1B,MAAM,YAAY,CAAC;AAIpB,qFAAqF;AACrF,KAAK,gBAAgB,CACjB,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IAC3D;IACA,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,0BAA0B;IAC1B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,kCAAkC;IAClC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,mCAAmC;IACnC,cAAc,EAAE;SACX,SAAS,IAAI,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;KAC7F,CAAC;IACF,+BAA+B;IAC/B,SAAS,EAAE,OAAO,kBAAkB,CAAC;CACxC,CAAC;AAEF,0FAA0F;AAC1F,QAAA,MAAM,qBAAqB,EAAE,mBAAmB,CAAC,gBAAgB,CAA2C,CAAC;AAE7G,gGAAgG;AAChG,iBAAS,kBAAkB,CAAC,EACxB,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,GAAG,OAAO,EACb,EAAE,uBAAuB,GAAG,SAAS,CAwBrC;AAED;;;GAGG;AACH,iBAAS,wBAAwB,CAC7B,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACjE,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,EACrF,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACpE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAElD;AAED,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
@@ -6,8 +6,8 @@ import { SplitView } from "./split-view.js";
6
6
  const createSplitViewScreen = createScreenFactory();
7
7
  /** Renders the screens of a {@link createSplitViewNavigator} in an `AdwNavigationSplitView`. */
8
8
  function SplitViewNavigator({ collapsed, contentPlaceholder, sidebarPosition, minSidebarWidth, maxSidebarWidth, sidebarWidthFraction, popOnEscape, ...options }) {
9
- const { state, describe, descriptors, navigation, NavigationContent } = useNavigationBuilder(splitViewRouter, options);
10
- return (_jsx(NavigationContent, { children: _jsx(SplitView, { state: state, navigation: navigation, descriptors: descriptors, describe: describe, collapsed: collapsed, contentPlaceholder: contentPlaceholder, sidebarPosition: sidebarPosition, minSidebarWidth: minSidebarWidth, maxSidebarWidth: maxSidebarWidth, sidebarWidthFraction: sidebarWidthFraction, popOnEscape: popOnEscape }) }));
9
+ const { state, describe, descriptors, navigation, render } = useNavigationBuilder(splitViewRouter, options);
10
+ return render(_jsx(SplitView, { state: state, navigation: navigation, descriptors: descriptors, describe: describe, collapsed: collapsed, contentPlaceholder: contentPlaceholder, sidebarPosition: sidebarPosition, minSidebarWidth: minSidebarWidth, maxSidebarWidth: maxSidebarWidth, sidebarWidthFraction: sidebarWidthFraction, popOnEscape: popOnEscape }));
11
11
  }
12
12
  /**
13
13
  * Creates a master/detail navigator rendered with `AdwNavigationSplitView`: the first screen fills the sidebar
@@ -1 +1 @@
1
- {"version":3,"file":"create-split-view-navigator.js","sourceRoot":"","sources":["../../src/split-view/create-split-view-navigator.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO3G,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAyB5C,0FAA0F;AAC1F,MAAM,qBAAqB,GAA0C,mBAAmB,EAAoB,CAAC;AAE7G,gGAAgG;AAChG,SAAS,kBAAkB,CAAC,EACxB,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,GAAG,OAAO,EACY;IACtB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAM1F,eAAe,EAAE,OAAO,CAAC,CAAC;IAE5B,OAAO,CACH,KAAC,iBAAiB,cACd,KAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,oBAAoB,EAC1C,WAAW,EAAE,WAAW,GAC1B,GACc,CACvB,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAK/B,MAAe;IACb,OAAO,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAoC,CAAC;AACjG,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,EAAyB,CAAC","sourcesContent":["import type {\n NavigatorTypeBagBase,\n ParamListBase,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n StaticConfig,\n StaticScreenFactory,\n TypedNavigator,\n} from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport { createNavigatorFactory, createScreenFactory, useNavigationBuilder } from \"@react-navigation/core\";\nimport type {\n SplitViewNavigationEventMap,\n SplitViewNavigationOptions,\n SplitViewNavigationProp,\n SplitViewNavigatorProps,\n} from \"./types.js\";\nimport { splitViewRouter } from \"./split-view-router.js\";\nimport { SplitView } from \"./split-view.js\";\n\n/** Type bag describing the split view navigator to React Navigation's typed APIs. */\ntype SplitViewTypeBag<\n ParamList extends ParamListBase = ParamListBase,\n NavigatorID extends string | undefined = string | undefined,\n> = {\n /** Route names and their params. */\n ParamList: ParamList;\n /** Optional navigator id. */\n NavigatorID: NavigatorID;\n /** Shape of the navigator state. */\n State: StackNavigationState<ParamList>;\n /** Per-screen options. */\n ScreenOptions: SplitViewNavigationOptions;\n /** Events the navigator emits. */\n EventMap: SplitViewNavigationEventMap;\n /** Navigation object per route. */\n NavigationList: {\n [RouteName in keyof ParamList]: SplitViewNavigationProp<ParamList, RouteName, NavigatorID>;\n };\n /** The navigator component. */\n Navigator: typeof SplitViewNavigator;\n};\n\n/** Declares a typed screen of a split view navigator for the static configuration API. */\nconst createSplitViewScreen: StaticScreenFactory<SplitViewTypeBag> = createScreenFactory<SplitViewTypeBag>();\n\n/** Renders the screens of a {@link createSplitViewNavigator} in an `AdwNavigationSplitView`. */\nfunction SplitViewNavigator({\n collapsed,\n contentPlaceholder,\n sidebarPosition,\n minSidebarWidth,\n maxSidebarWidth,\n sidebarWidthFraction,\n popOnEscape,\n ...options\n}: SplitViewNavigatorProps): ReactNode {\n const { state, describe, descriptors, navigation, NavigationContent } = useNavigationBuilder<\n StackNavigationState<ParamListBase>,\n StackRouterOptions,\n StackActionHelpers<ParamListBase>,\n SplitViewNavigationOptions,\n SplitViewNavigationEventMap\n >(splitViewRouter, options);\n\n return (\n <NavigationContent>\n <SplitView\n state={state}\n navigation={navigation}\n descriptors={descriptors}\n describe={describe}\n collapsed={collapsed}\n contentPlaceholder={contentPlaceholder}\n sidebarPosition={sidebarPosition}\n minSidebarWidth={minSidebarWidth}\n maxSidebarWidth={maxSidebarWidth}\n sidebarWidthFraction={sidebarWidthFraction}\n popOnEscape={popOnEscape}\n />\n </NavigationContent>\n );\n}\n\n/**\n * Creates a master/detail navigator rendered with `AdwNavigationSplitView`: the first screen fills the sidebar\n * pane, the rest are a stack in the content pane, and a narrow window collapses the two into one.\n */\nfunction createSplitViewNavigator<\n const ParamList extends ParamListBase,\n const NavigatorID extends string | undefined = string | undefined,\n const TypeBag extends NavigatorTypeBagBase = SplitViewTypeBag<ParamList, NavigatorID>,\n const Config extends StaticConfig<TypeBag> | undefined = undefined,\n>(config?: Config): TypedNavigator<TypeBag, Config> {\n return createNavigatorFactory(SplitViewNavigator)(config) as TypedNavigator<TypeBag, Config>;\n}\n\nexport { createSplitViewNavigator, createSplitViewScreen, SplitViewNavigator, type SplitViewTypeBag };\n"]}
1
+ {"version":3,"file":"create-split-view-navigator.js","sourceRoot":"","sources":["../../src/split-view/create-split-view-navigator.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO3G,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAyB5C,0FAA0F;AAC1F,MAAM,qBAAqB,GAA0C,mBAAmB,EAAoB,CAAC;AAE7G,gGAAgG;AAChG,SAAS,kBAAkB,CAAC,EACxB,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,GAAG,OAAO,EACY;IACtB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAM/E,eAAe,EAAE,OAAO,CAAC,CAAC;IAE5B,OAAO,MAAM,CACT,KAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,oBAAoB,EAC1C,WAAW,EAAE,WAAW,GAC1B,CACL,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAK/B,MAAe;IACb,OAAO,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAoC,CAAC;AACjG,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,EAAyB,CAAC","sourcesContent":["import type {\n NavigatorTypeBagBase,\n ParamListBase,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n StaticConfig,\n StaticScreenFactory,\n TypedNavigator,\n} from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport { createNavigatorFactory, createScreenFactory, useNavigationBuilder } from \"@react-navigation/core\";\nimport type {\n SplitViewNavigationEventMap,\n SplitViewNavigationOptions,\n SplitViewNavigationProp,\n SplitViewNavigatorProps,\n} from \"./types.js\";\nimport { splitViewRouter } from \"./split-view-router.js\";\nimport { SplitView } from \"./split-view.js\";\n\n/** Type bag describing the split view navigator to React Navigation's typed APIs. */\ntype SplitViewTypeBag<\n ParamList extends ParamListBase = ParamListBase,\n NavigatorID extends string | undefined = string | undefined,\n> = {\n /** Route names and their params. */\n ParamList: ParamList;\n /** Optional navigator id. */\n NavigatorID: NavigatorID;\n /** Shape of the navigator state. */\n State: StackNavigationState<ParamList>;\n /** Per-screen options. */\n ScreenOptions: SplitViewNavigationOptions;\n /** Events the navigator emits. */\n EventMap: SplitViewNavigationEventMap;\n /** Navigation object per route. */\n NavigationList: {\n [RouteName in keyof ParamList]: SplitViewNavigationProp<ParamList, RouteName, NavigatorID>;\n };\n /** The navigator component. */\n Navigator: typeof SplitViewNavigator;\n};\n\n/** Declares a typed screen of a split view navigator for the static configuration API. */\nconst createSplitViewScreen: StaticScreenFactory<SplitViewTypeBag> = createScreenFactory<SplitViewTypeBag>();\n\n/** Renders the screens of a {@link createSplitViewNavigator} in an `AdwNavigationSplitView`. */\nfunction SplitViewNavigator({\n collapsed,\n contentPlaceholder,\n sidebarPosition,\n minSidebarWidth,\n maxSidebarWidth,\n sidebarWidthFraction,\n popOnEscape,\n ...options\n}: SplitViewNavigatorProps): ReactNode {\n const { state, describe, descriptors, navigation, render } = useNavigationBuilder<\n StackNavigationState<ParamListBase>,\n StackRouterOptions,\n StackActionHelpers<ParamListBase>,\n SplitViewNavigationOptions,\n SplitViewNavigationEventMap\n >(splitViewRouter, options);\n\n return render(\n <SplitView\n state={state}\n navigation={navigation}\n descriptors={descriptors}\n describe={describe}\n collapsed={collapsed}\n contentPlaceholder={contentPlaceholder}\n sidebarPosition={sidebarPosition}\n minSidebarWidth={minSidebarWidth}\n maxSidebarWidth={maxSidebarWidth}\n sidebarWidthFraction={sidebarWidthFraction}\n popOnEscape={popOnEscape}\n />,\n );\n}\n\n/**\n * Creates a master/detail navigator rendered with `AdwNavigationSplitView`: the first screen fills the sidebar\n * pane, the rest are a stack in the content pane, and a narrow window collapses the two into one.\n */\nfunction createSplitViewNavigator<\n const ParamList extends ParamListBase,\n const NavigatorID extends string | undefined = string | undefined,\n const TypeBag extends NavigatorTypeBagBase = SplitViewTypeBag<ParamList, NavigatorID>,\n const Config extends StaticConfig<TypeBag> | undefined = undefined,\n>(config?: Config): TypedNavigator<TypeBag, Config> {\n return createNavigatorFactory(SplitViewNavigator)(config) as TypedNavigator<TypeBag, Config>;\n}\n\nexport { createSplitViewNavigator, createSplitViewScreen, SplitViewNavigator, type SplitViewTypeBag };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"split-view.d.ts","sourceRoot":"","sources":["../../src/split-view/split-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EACR,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC7B,MAAM,YAAY,CAAC;AAOpB,KAAK,cAAc,GAAG,yBAAyB,GAAG;IAC9C,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC3C,UAAU,EAAE,0BAA0B,CAAC;IACvC,WAAW,EAAE,sBAAsB,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,OAAO,KAAK,mBAAmB,CAAC;CAC9F,CAAC;AAsEF,QAAA,MAAM,SAAS,GAAI,OAAO,cAAc,KAAG,SAsC1C,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"split-view.d.ts","sourceRoot":"","sources":["../../src/split-view/split-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EACR,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC7B,MAAM,YAAY,CAAC;AAOpB,KAAK,cAAc,GAAG,yBAAyB,GAAG;IAC9C,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC3C,UAAU,EAAE,0BAA0B,CAAC;IACvC,WAAW,EAAE,sBAAsB,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,OAAO,KAAK,mBAAmB,CAAC;CAC9F,CAAC;AA4EF,QAAA,MAAM,SAAS,UAAW,cAAc,KAAG,SAsC1C,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as Gdk from "@gtkx/gi/gdk";
3
3
  import * as Gtk from "@gtkx/gi/gtk";
4
4
  import { AdwNavigationPage, AdwNavigationSplitView, AdwToolbarView } from "@gtkx/jsx/adw";
@@ -43,9 +43,7 @@ const SidebarPage = ({ descriptor }) => {
43
43
  if (options.headerShown === false) {
44
44
  return _jsx(AdwNavigationPage, { title: options.title ?? route.name, children: descriptor.render() });
45
45
  }
46
- const topBar = options.header === undefined
47
- ? _jsx(HeaderBar, { options: options, showBackButton: false })
48
- : _jsx(_Fragment, { children: options.header({ route, navigation, options, back: undefined }) });
46
+ const topBar = options.header === undefined ? (_jsx(HeaderBar, { options: options, showBackButton: false })) : (_jsx(_Fragment, { children: options.header({ route, navigation, options, back: undefined }) }));
49
47
  return (_jsx(AdwNavigationPage, { title: options.title ?? route.name, children: _jsx(AdwToolbarView, { topBar: topBar, children: descriptor.render() }) }));
50
48
  };
51
49
  const SplitView = (props) => {
@@ -54,9 +52,7 @@ const SplitView = (props) => {
54
52
  const viewRef = useRef(null);
55
53
  const onShowContentChanged = useContentSync(viewRef, navigation);
56
54
  const sidebar = requireDescriptor(descriptors, state.routes[0]?.key ?? "");
57
- return (_jsx(AdwNavigationSplitView, { ref: viewRef, collapsed: collapsed, showContent: hasContent(state), sidebarPosition: PACK_TYPES[sidebarPosition], minSidebarWidth: minSidebarWidth, maxSidebarWidth: maxSidebarWidth, sidebarWidthFraction: props.sidebarWidthFraction, onNotifyShowContent: onShowContentChanged, sidebar: _jsx(SidebarPage, { descriptor: sidebar }), children: _jsx(AdwNavigationPage, { title: contentTitle(state, descriptors), controllers: collapsed && props.popOnEscape === false ? _jsx(EscapeGuard, {}) : null, children: hasContent(state)
58
- ? (_jsx(StackView, { offset: 1, popOnEscape: props.popOnEscape, state: state, navigation: navigation, descriptors: descriptors, describe: describe }))
59
- : _jsx(_Fragment, { children: contentPlaceholder }) }) }));
55
+ return (_jsx(AdwNavigationSplitView, { ref: viewRef, collapsed: collapsed, showContent: hasContent(state), sidebarPosition: PACK_TYPES[sidebarPosition], minSidebarWidth: minSidebarWidth, maxSidebarWidth: maxSidebarWidth, sidebarWidthFraction: props.sidebarWidthFraction, onNotifyShowContent: onShowContentChanged, sidebar: _jsx(SidebarPage, { descriptor: sidebar }), children: _jsx(AdwNavigationPage, { title: contentTitle(state, descriptors), controllers: collapsed && props.popOnEscape === false ? _jsx(EscapeGuard, {}) : null, children: hasContent(state) ? (_jsx(StackView, { offset: 1, popOnEscape: props.popOnEscape, state: state, navigation: navigation, descriptors: descriptors, describe: describe })) : (_jsx(_Fragment, { children: contentPlaceholder })) }) }));
60
56
  };
61
57
  export { SplitView };
62
58
  //# sourceMappingURL=split-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"split-view.js","sourceRoot":"","sources":["../../src/split-view/split-view.tsx"],"names":[],"mappings":"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","sourcesContent":["import type * as Adw from \"@gtkx/gi/adw\";\nimport type { ParamListBase, RouteProp, StackNavigationState } from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { AdwNavigationPage, AdwNavigationSplitView, AdwToolbarView } from \"@gtkx/jsx/adw\";\nimport { GtkEventControllerKey } from \"@gtkx/jsx/gtk\";\nimport { StackActions } from \"@react-navigation/core\";\nimport { useCallback, useRef } from \"react\";\nimport type {\n SplitViewDescriptor,\n SplitViewDescriptorMap,\n SplitViewNavigationConfig,\n SplitViewNavigationHelpers,\n} from \"./types.js\";\nimport { HeaderBar } from \"../shared/header-bar.js\";\nimport { requireDescriptor } from \"../shared/routes.js\";\nimport { StackView } from \"../stack/stack-view.js\";\n\ntype ViewRef = { current: Adw.NavigationSplitView | null };\n\ntype SplitViewProps = SplitViewNavigationConfig & {\n state: StackNavigationState<ParamListBase>;\n navigation: SplitViewNavigationHelpers;\n descriptors: SplitViewDescriptorMap;\n describe: (route: RouteProp<ParamListBase>, isPlaceholder: boolean) => SplitViewDescriptor;\n};\n\nconst PACK_TYPES = { start: Gtk.PackType.START, end: Gtk.PackType.END } as const;\nconst CONTENT_TITLE = \"Content\";\nconst ESCAPE_KEYVAL = Gdk.KEY_Escape;\n\nconst hasContent = (state: { routes: readonly unknown[] }): boolean => state.routes.length > 1;\n\nconst contentTitle = (state: StackNavigationState<ParamListBase>, descriptors: SplitViewDescriptorMap): string => {\n const route = state.routes[state.index];\n\n if (route === undefined || state.index === 0) {\n return state.routeNames[1] ?? CONTENT_TITLE;\n }\n\n return descriptors[route.key]?.options.title ?? route.name;\n};\n\nconst popContent = (navigation: SplitViewNavigationHelpers): void => {\n const state = navigation.getState();\n navigation.dispatch({ ...StackActions.pop(state.routes.length - 1), target: state.key });\n};\n\nconst settleShowContent = (viewRef: ViewRef, isShown: boolean, isSettled: boolean): void => {\n if (isSettled !== isShown && viewRef.current !== null) {\n viewRef.current.setShowContent(isSettled);\n }\n};\n\nconst useContentSync = (\n viewRef: ViewRef,\n navigation: SplitViewNavigationHelpers,\n): ((isShown: boolean | null) => void) =>\n useCallback((isShown: boolean | null) => {\n if (isShown === null || isShown === hasContent(navigation.getState())) {\n return;\n }\n\n if (!isShown) {\n popContent(navigation);\n }\n\n settleShowContent(viewRef, isShown, hasContent(navigation.getState()));\n }, [viewRef, navigation]);\n\nconst EscapeGuard = (): ReactNode => (\n <GtkEventControllerKey\n propagationPhase={Gtk.PropagationPhase.BUBBLE}\n onKeyPressed={(keyval) => keyval === ESCAPE_KEYVAL}\n />\n);\n\nconst SidebarPage = ({ descriptor }: { descriptor: SplitViewDescriptor }): ReactNode => {\n const { route, options, navigation } = descriptor;\n\n if (options.headerShown === false) {\n return <AdwNavigationPage title={options.title ?? route.name}>{descriptor.render()}</AdwNavigationPage>;\n }\n\n const topBar = options.header === undefined\n ? <HeaderBar options={options} showBackButton={false} />\n : <>{options.header({ route, navigation, options, back: undefined })}</>;\n\n return (\n <AdwNavigationPage title={options.title ?? route.name}>\n <AdwToolbarView topBar={topBar}>{descriptor.render()}</AdwToolbarView>\n </AdwNavigationPage>\n );\n};\n\nconst SplitView = (props: SplitViewProps): ReactNode => {\n const { state, navigation, descriptors, describe, contentPlaceholder } = props;\n const { collapsed = false, sidebarPosition = \"start\", minSidebarWidth, maxSidebarWidth } = props;\n const viewRef = useRef<Adw.NavigationSplitView | null>(null);\n const onShowContentChanged = useContentSync(viewRef, navigation);\n const sidebar = requireDescriptor(descriptors, state.routes[0]?.key ?? \"\");\n\n return (\n <AdwNavigationSplitView\n ref={viewRef}\n collapsed={collapsed}\n showContent={hasContent(state)}\n sidebarPosition={PACK_TYPES[sidebarPosition]}\n minSidebarWidth={minSidebarWidth}\n maxSidebarWidth={maxSidebarWidth}\n sidebarWidthFraction={props.sidebarWidthFraction}\n onNotifyShowContent={onShowContentChanged}\n sidebar={<SidebarPage descriptor={sidebar} />}\n >\n <AdwNavigationPage\n title={contentTitle(state, descriptors)}\n controllers={collapsed && props.popOnEscape === false ? <EscapeGuard /> : null}\n >\n {hasContent(state)\n ? (\n <StackView\n offset={1}\n popOnEscape={props.popOnEscape}\n state={state}\n navigation={navigation}\n descriptors={descriptors}\n describe={describe}\n />\n )\n : <>{contentPlaceholder}</>}\n </AdwNavigationPage>\n </AdwNavigationSplitView>\n );\n};\n\nexport { SplitView };\n"]}
1
+ {"version":3,"file":"split-view.js","sourceRoot":"","sources":["../../src/split-view/split-view.tsx"],"names":[],"mappings":"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","sourcesContent":["import type * as Adw from \"@gtkx/gi/adw\";\nimport type { ParamListBase, RouteProp, StackNavigationState } from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { AdwNavigationPage, AdwNavigationSplitView, AdwToolbarView } from \"@gtkx/jsx/adw\";\nimport { GtkEventControllerKey } from \"@gtkx/jsx/gtk\";\nimport { StackActions } from \"@react-navigation/core\";\nimport { useCallback, useRef } from \"react\";\nimport type {\n SplitViewDescriptor,\n SplitViewDescriptorMap,\n SplitViewNavigationConfig,\n SplitViewNavigationHelpers,\n} from \"./types.js\";\nimport { HeaderBar } from \"../shared/header-bar.js\";\nimport { requireDescriptor } from \"../shared/routes.js\";\nimport { StackView } from \"../stack/stack-view.js\";\n\ntype ViewRef = { current: Adw.NavigationSplitView | null };\n\ntype SplitViewProps = SplitViewNavigationConfig & {\n state: StackNavigationState<ParamListBase>;\n navigation: SplitViewNavigationHelpers;\n descriptors: SplitViewDescriptorMap;\n describe: (route: RouteProp<ParamListBase>, isPlaceholder: boolean) => SplitViewDescriptor;\n};\n\nconst PACK_TYPES = { start: Gtk.PackType.START, end: Gtk.PackType.END } as const;\nconst CONTENT_TITLE = \"Content\";\nconst ESCAPE_KEYVAL = Gdk.KEY_Escape;\n\nconst hasContent = (state: { routes: readonly unknown[] }): boolean => state.routes.length > 1;\n\nconst contentTitle = (state: StackNavigationState<ParamListBase>, descriptors: SplitViewDescriptorMap): string => {\n const route = state.routes[state.index];\n\n if (route === undefined || state.index === 0) {\n return state.routeNames[1] ?? CONTENT_TITLE;\n }\n\n return descriptors[route.key]?.options.title ?? route.name;\n};\n\nconst popContent = (navigation: SplitViewNavigationHelpers): void => {\n const state = navigation.getState();\n navigation.dispatch({ ...StackActions.pop(state.routes.length - 1), target: state.key });\n};\n\nconst settleShowContent = (viewRef: ViewRef, isShown: boolean, isSettled: boolean): void => {\n if (isSettled !== isShown && viewRef.current !== null) {\n viewRef.current.setShowContent(isSettled);\n }\n};\n\nconst useContentSync = (\n viewRef: ViewRef,\n navigation: SplitViewNavigationHelpers,\n): ((isShown: boolean | null) => void) =>\n useCallback(\n (isShown: boolean | null) => {\n if (isShown === null || isShown === hasContent(navigation.getState())) {\n return;\n }\n\n if (!isShown) {\n popContent(navigation);\n }\n\n settleShowContent(viewRef, isShown, hasContent(navigation.getState()));\n },\n [viewRef, navigation],\n );\n\nconst EscapeGuard = (): ReactNode => (\n <GtkEventControllerKey\n propagationPhase={Gtk.PropagationPhase.BUBBLE}\n onKeyPressed={(keyval) => keyval === ESCAPE_KEYVAL}\n />\n);\n\nconst SidebarPage = ({ descriptor }: { descriptor: SplitViewDescriptor }): ReactNode => {\n const { route, options, navigation } = descriptor;\n\n if (options.headerShown === false) {\n return <AdwNavigationPage title={options.title ?? route.name}>{descriptor.render()}</AdwNavigationPage>;\n }\n\n const topBar =\n options.header === undefined ? (\n <HeaderBar options={options} showBackButton={false} />\n ) : (\n <>{options.header({ route, navigation, options, back: undefined })}</>\n );\n\n return (\n <AdwNavigationPage title={options.title ?? route.name}>\n <AdwToolbarView topBar={topBar}>{descriptor.render()}</AdwToolbarView>\n </AdwNavigationPage>\n );\n};\n\nconst SplitView = (props: SplitViewProps): ReactNode => {\n const { state, navigation, descriptors, describe, contentPlaceholder } = props;\n const { collapsed = false, sidebarPosition = \"start\", minSidebarWidth, maxSidebarWidth } = props;\n const viewRef = useRef<Adw.NavigationSplitView | null>(null);\n const onShowContentChanged = useContentSync(viewRef, navigation);\n const sidebar = requireDescriptor(descriptors, state.routes[0]?.key ?? \"\");\n\n return (\n <AdwNavigationSplitView\n ref={viewRef}\n collapsed={collapsed}\n showContent={hasContent(state)}\n sidebarPosition={PACK_TYPES[sidebarPosition]}\n minSidebarWidth={minSidebarWidth}\n maxSidebarWidth={maxSidebarWidth}\n sidebarWidthFraction={props.sidebarWidthFraction}\n onNotifyShowContent={onShowContentChanged}\n sidebar={<SidebarPage descriptor={sidebar} />}\n >\n <AdwNavigationPage\n title={contentTitle(state, descriptors)}\n controllers={collapsed && props.popOnEscape === false ? <EscapeGuard /> : null}\n >\n {hasContent(state) ? (\n <StackView\n offset={1}\n popOnEscape={props.popOnEscape}\n state={state}\n navigation={navigation}\n descriptors={descriptors}\n describe={describe}\n />\n ) : (\n <>{contentPlaceholder}</>\n )}\n </AdwNavigationPage>\n </AdwNavigationSplitView>\n );\n};\n\nexport { SplitView };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/split-view/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEzF,mGAAmG;AACnG,KAAK,2BAA2B,GAAG,uBAAuB,CAAC;AAC3D,0FAA0F;AAC1F,KAAK,0BAA0B,GAAG,sBAAsB,CAAC;AAEzD,gDAAgD;AAChD,KAAK,uBAAuB,CACxB,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,EACnD,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAClD,cAAc,CACd,SAAS,EACT,SAAS,EACT,WAAW,EACX,oBAAoB,CAAC,SAAS,CAAC,EAC/B,0BAA0B,EAC1B,2BAA2B,CAC9B,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAElC,oDAAoD;AACpD,KAAK,oBAAoB,CACrB,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,EACnD,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAClD;IACA,uCAAuC;IACvC,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACvE,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF,6DAA6D;AAC7D,KAAK,0BAA0B,GAAG,iBAAiB,CAAC,aAAa,EAAE,2BAA2B,CAAC,GAC3F,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAEtC,0CAA0C;AAC1C,KAAK,mBAAmB,GAAG,UAAU,CACjC,0BAA0B,EAC1B,uBAAuB,CAAC,aAAa,CAAC,EACtC,SAAS,CAAC,aAAa,CAAC,CAC3B,CAAC;AAEF,gEAAgE;AAChE,KAAK,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAElE,mFAAmF;AACnF,KAAK,yBAAyB,GAAG;IAC7B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAClC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,qDAAqD;AACrD,KAAK,uBAAuB,GAAG,uBAAuB,CAClD,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,oBAAoB,CAAC,aAAa,CAAC,EACnC,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,CAAC,aAAa,CAAC,CACzC,GACD,kBAAkB,GAClB,yBAAyB,CAAC;AAE1B,YAAY,EACR,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,GACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/split-view/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEzF,mGAAmG;AACnG,KAAK,2BAA2B,GAAG,uBAAuB,CAAC;AAC3D,0FAA0F;AAC1F,KAAK,0BAA0B,GAAG,sBAAsB,CAAC;AAEzD,gDAAgD;AAChD,KAAK,uBAAuB,CACxB,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,EACnD,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAClD,cAAc,CACd,SAAS,EACT,SAAS,EACT,WAAW,EACX,oBAAoB,CAAC,SAAS,CAAC,EAC/B,0BAA0B,EAC1B,2BAA2B,CAC9B,GACG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAElC,oDAAoD;AACpD,KAAK,oBAAoB,CACrB,SAAS,SAAS,aAAa,EAC/B,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,EACnD,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,IAClD;IACA,uCAAuC;IACvC,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACvE,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF,6DAA6D;AAC7D,KAAK,0BAA0B,GAAG,iBAAiB,CAAC,aAAa,EAAE,2BAA2B,CAAC,GAC3F,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAEtC,0CAA0C;AAC1C,KAAK,mBAAmB,GAAG,UAAU,CACjC,0BAA0B,EAC1B,uBAAuB,CAAC,aAAa,CAAC,EACtC,SAAS,CAAC,aAAa,CAAC,CAC3B,CAAC;AAEF,gEAAgE;AAChE,KAAK,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAElE,mFAAmF;AACnF,KAAK,yBAAyB,GAAG;IAC7B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAClC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,qDAAqD;AACrD,KAAK,uBAAuB,GAAG,uBAAuB,CAClD,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,oBAAoB,CAAC,aAAa,CAAC,EACnC,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,CAAC,aAAa,CAAC,CACzC,GACG,kBAAkB,GAClB,yBAAyB,CAAC;AAE9B,YAAY,EACR,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,GACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/split-view/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n DefaultNavigatorOptions,\n Descriptor,\n NavigationHelpers,\n NavigationProp,\n ParamListBase,\n RouteProp,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n} from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport type { StackNavigationEventMap, StackNavigationOptions } from \"../stack/types.js\";\n\n/** Events the split view navigator emits: the stack's transition events, from the content pane. */\ntype SplitViewNavigationEventMap = StackNavigationEventMap;\n/** Per-screen options of the split view navigator, the same ones a stack screen takes. */\ntype SplitViewNavigationOptions = StackNavigationOptions;\n\n/** Navigation object of a split view screen. */\ntype SplitViewNavigationProp<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = keyof ParamList,\n NavigatorID extends string | undefined = undefined,\n> = NavigationProp<\n ParamList,\n RouteName,\n NavigatorID,\n StackNavigationState<ParamList>,\n SplitViewNavigationOptions,\n SplitViewNavigationEventMap\n> & StackActionHelpers<ParamList>;\n\n/** Props a split view screen component receives. */\ntype SplitViewScreenProps<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = keyof ParamList,\n NavigatorID extends string | undefined = undefined,\n> = {\n /** Navigation object of the screen. */\n navigation: SplitViewNavigationProp<ParamList, RouteName, NavigatorID>;\n /** The route the screen renders. */\n route: RouteProp<ParamList, RouteName>;\n};\n\n/** Navigation helpers of the split view navigator itself. */\ntype SplitViewNavigationHelpers = NavigationHelpers<ParamListBase, SplitViewNavigationEventMap> &\n StackActionHelpers<ParamListBase>;\n\n/** Descriptor of one split view route. */\ntype SplitViewDescriptor = Descriptor<\n SplitViewNavigationOptions,\n SplitViewNavigationProp<ParamListBase>,\n RouteProp<ParamListBase>\n>;\n\n/** Descriptors of the split view routes, keyed by route key. */\ntype SplitViewDescriptorMap = Record<string, SplitViewDescriptor>;\n\n/** Props of the split view navigator beyond the options every navigator shares. */\ntype SplitViewNavigationConfig = {\n /** Whether the panes stack into one instead of sitting side by side; defaults to `false`. */\n collapsed?: boolean;\n /** Fills the content pane while no content route is open; defaults to nothing. */\n contentPlaceholder?: ReactNode;\n /** Which side the sidebar sits on; defaults to `\"start\"`. */\n sidebarPosition?: \"start\" | \"end\";\n /** Minimum sidebar width, in the unit libadwaita uses for the split view. */\n minSidebarWidth?: number;\n /** Maximum sidebar width, in the unit libadwaita uses for the split view. */\n maxSidebarWidth?: number;\n /** Preferred sidebar width as a fraction of the total width. */\n sidebarWidthFraction?: number;\n /** Whether pressing Escape pops the visible content page; defaults to `true`. */\n popOnEscape?: boolean;\n};\n\n/** Props of the split view `Navigator` component. */\ntype SplitViewNavigatorProps = DefaultNavigatorOptions<\n ParamListBase,\n string | undefined,\n StackNavigationState<ParamListBase>,\n SplitViewNavigationOptions,\n SplitViewNavigationEventMap,\n SplitViewNavigationProp<ParamListBase>\n> &\nStackRouterOptions &\nSplitViewNavigationConfig;\n\nexport type {\n SplitViewDescriptor,\n SplitViewDescriptorMap,\n SplitViewNavigationConfig,\n SplitViewNavigationEventMap,\n SplitViewNavigationHelpers,\n SplitViewNavigationOptions,\n SplitViewNavigationProp,\n SplitViewNavigatorProps,\n SplitViewScreenProps,\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/split-view/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n DefaultNavigatorOptions,\n Descriptor,\n NavigationHelpers,\n NavigationProp,\n ParamListBase,\n RouteProp,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n} from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport type { StackNavigationEventMap, StackNavigationOptions } from \"../stack/types.js\";\n\n/** Events the split view navigator emits: the stack's transition events, from the content pane. */\ntype SplitViewNavigationEventMap = StackNavigationEventMap;\n/** Per-screen options of the split view navigator, the same ones a stack screen takes. */\ntype SplitViewNavigationOptions = StackNavigationOptions;\n\n/** Navigation object of a split view screen. */\ntype SplitViewNavigationProp<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = keyof ParamList,\n NavigatorID extends string | undefined = undefined,\n> = NavigationProp<\n ParamList,\n RouteName,\n NavigatorID,\n StackNavigationState<ParamList>,\n SplitViewNavigationOptions,\n SplitViewNavigationEventMap\n> &\n StackActionHelpers<ParamList>;\n\n/** Props a split view screen component receives. */\ntype SplitViewScreenProps<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = keyof ParamList,\n NavigatorID extends string | undefined = undefined,\n> = {\n /** Navigation object of the screen. */\n navigation: SplitViewNavigationProp<ParamList, RouteName, NavigatorID>;\n /** The route the screen renders. */\n route: RouteProp<ParamList, RouteName>;\n};\n\n/** Navigation helpers of the split view navigator itself. */\ntype SplitViewNavigationHelpers = NavigationHelpers<ParamListBase, SplitViewNavigationEventMap> &\n StackActionHelpers<ParamListBase>;\n\n/** Descriptor of one split view route. */\ntype SplitViewDescriptor = Descriptor<\n SplitViewNavigationOptions,\n SplitViewNavigationProp<ParamListBase>,\n RouteProp<ParamListBase>\n>;\n\n/** Descriptors of the split view routes, keyed by route key. */\ntype SplitViewDescriptorMap = Record<string, SplitViewDescriptor>;\n\n/** Props of the split view navigator beyond the options every navigator shares. */\ntype SplitViewNavigationConfig = {\n /** Whether the panes stack into one instead of sitting side by side; defaults to `false`. */\n collapsed?: boolean;\n /** Fills the content pane while no content route is open; defaults to nothing. */\n contentPlaceholder?: ReactNode;\n /** Which side the sidebar sits on; defaults to `\"start\"`. */\n sidebarPosition?: \"start\" | \"end\";\n /** Minimum sidebar width, in the unit libadwaita uses for the split view. */\n minSidebarWidth?: number;\n /** Maximum sidebar width, in the unit libadwaita uses for the split view. */\n maxSidebarWidth?: number;\n /** Preferred sidebar width as a fraction of the total width. */\n sidebarWidthFraction?: number;\n /** Whether pressing Escape pops the visible content page; defaults to `true`. */\n popOnEscape?: boolean;\n};\n\n/** Props of the split view `Navigator` component. */\ntype SplitViewNavigatorProps = DefaultNavigatorOptions<\n ParamListBase,\n string | undefined,\n StackNavigationState<ParamListBase>,\n SplitViewNavigationOptions,\n SplitViewNavigationEventMap,\n SplitViewNavigationProp<ParamListBase>\n> &\n StackRouterOptions &\n SplitViewNavigationConfig;\n\nexport type {\n SplitViewDescriptor,\n SplitViewDescriptorMap,\n SplitViewNavigationConfig,\n SplitViewNavigationEventMap,\n SplitViewNavigationHelpers,\n SplitViewNavigationOptions,\n SplitViewNavigationProp,\n SplitViewNavigatorProps,\n SplitViewScreenProps,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"create-stack-navigator.d.ts","sourceRoot":"","sources":["../../src/stack/create-stack-navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,oBAAoB,EACpB,aAAa,EAEb,oBAAoB,EAEpB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACR,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,YAAY,CAAC;AAGpB,gFAAgF;AAChF,KAAK,YAAY,CACb,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IAC3D;IACA,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,0BAA0B;IAC1B,aAAa,EAAE,sBAAsB,CAAC;IACtC,kCAAkC;IAClC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,mCAAmC;IACnC,cAAc,EAAE;SACX,SAAS,IAAI,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;KACzF,CAAC;IACF,+BAA+B;IAC/B,SAAS,EAAE,OAAO,cAAc,CAAC;CACpC,CAAC;AAEF,qFAAqF;AACrF,QAAA,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,YAAY,CAAuC,CAAC;AAEjG,gGAAgG;AAChG,iBAAS,cAAc,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,EAAE,mBAAmB,GAAG,SAAS,CAoBnF;AAED,sHAAsH;AACtH,iBAAS,oBAAoB,CACzB,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACjE,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,EACjF,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACpE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAElD;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"create-stack-navigator.d.ts","sourceRoot":"","sources":["../../src/stack/create-stack-navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,oBAAoB,EACpB,aAAa,EAEb,oBAAoB,EAEpB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACR,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,YAAY,CAAC;AAGpB,gFAAgF;AAChF,KAAK,YAAY,CACb,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IAC3D;IACA,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,0BAA0B;IAC1B,aAAa,EAAE,sBAAsB,CAAC;IACtC,kCAAkC;IAClC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,mCAAmC;IACnC,cAAc,EAAE;SACX,SAAS,IAAI,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;KACzF,CAAC;IACF,+BAA+B;IAC/B,SAAS,EAAE,OAAO,cAAc,CAAC;CACpC,CAAC;AAEF,qFAAqF;AACrF,QAAA,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,YAAY,CAAuC,CAAC;AAEjG,gGAAgG;AAChG,iBAAS,cAAc,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,EAAE,mBAAmB,GAAG,SAAS,CAkBnF;AAED,sHAAsH;AACtH,iBAAS,oBAAoB,CACzB,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACjE,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,EACjF,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EACpE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAElD;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -5,8 +5,8 @@ import { StackView } from "./stack-view.js";
5
5
  const createStackScreen = createScreenFactory();
6
6
  /** Renders the screens of a {@link createStackNavigator} as pages of an `AdwNavigationView`. */
7
7
  function StackNavigator({ popOnEscape, ...options }) {
8
- const { state, describe, descriptors, navigation, NavigationContent } = useNavigationBuilder(StackRouter, options);
9
- return (_jsx(NavigationContent, { children: _jsx(StackView, { popOnEscape: popOnEscape, state: state, navigation: navigation, descriptors: descriptors, describe: describe }) }));
8
+ const { state, describe, descriptors, navigation, render } = useNavigationBuilder(StackRouter, options);
9
+ return render(_jsx(StackView, { popOnEscape: popOnEscape, state: state, navigation: navigation, descriptors: descriptors, describe: describe }));
10
10
  }
11
11
  /** Creates a stack navigator rendered with `AdwNavigationView`: pushes and pops animate like native Adwaita pages. */
12
12
  function createStackNavigator(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"create-stack-navigator.js","sourceRoot":"","sources":["../../src/stack/create-stack-navigator.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAOxH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAyB5C,qFAAqF;AACrF,MAAM,iBAAiB,GAAsC,mBAAmB,EAAgB,CAAC;AAEjG,gGAAgG;AAChG,SAAS,cAAc,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,EAAuB;IACpE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAM1F,WAAW,EAAE,OAAO,CAAC,CAAC;IAExB,OAAO,CACH,KAAC,iBAAiB,cACd,KAAC,SAAS,IACN,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,GACpB,GACc,CACvB,CAAC;AACN,CAAC;AAED,sHAAsH;AACtH,SAAS,oBAAoB,CAK3B,MAAe;IACb,OAAO,sBAAsB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAoC,CAAC;AAC7F,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAqB,CAAC","sourcesContent":["import type {\n NavigatorTypeBagBase,\n ParamListBase,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n StaticConfig,\n StaticScreenFactory,\n TypedNavigator,\n} from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport { createNavigatorFactory, createScreenFactory, StackRouter, useNavigationBuilder } from \"@react-navigation/core\";\nimport type {\n StackNavigationEventMap,\n StackNavigationOptions,\n StackNavigationProp,\n StackNavigatorProps,\n} from \"./types.js\";\nimport { StackView } from \"./stack-view.js\";\n\n/** Type bag describing the stack navigator to React Navigation's typed APIs. */\ntype StackTypeBag<\n ParamList extends ParamListBase = ParamListBase,\n NavigatorID extends string | undefined = string | undefined,\n> = {\n /** Route names and their params. */\n ParamList: ParamList;\n /** Optional navigator id. */\n NavigatorID: NavigatorID;\n /** Shape of the navigator state. */\n State: StackNavigationState<ParamList>;\n /** Per-screen options. */\n ScreenOptions: StackNavigationOptions;\n /** Events the navigator emits. */\n EventMap: StackNavigationEventMap;\n /** Navigation object per route. */\n NavigationList: {\n [RouteName in keyof ParamList]: StackNavigationProp<ParamList, RouteName, NavigatorID>;\n };\n /** The navigator component. */\n Navigator: typeof StackNavigator;\n};\n\n/** Declares a typed screen of a stack navigator for the static configuration API. */\nconst createStackScreen: StaticScreenFactory<StackTypeBag> = createScreenFactory<StackTypeBag>();\n\n/** Renders the screens of a {@link createStackNavigator} as pages of an `AdwNavigationView`. */\nfunction StackNavigator({ popOnEscape, ...options }: StackNavigatorProps): ReactNode {\n const { state, describe, descriptors, navigation, NavigationContent } = useNavigationBuilder<\n StackNavigationState<ParamListBase>,\n StackRouterOptions,\n StackActionHelpers<ParamListBase>,\n StackNavigationOptions,\n StackNavigationEventMap\n >(StackRouter, options);\n\n return (\n <NavigationContent>\n <StackView\n popOnEscape={popOnEscape}\n state={state}\n navigation={navigation}\n descriptors={descriptors}\n describe={describe}\n />\n </NavigationContent>\n );\n}\n\n/** Creates a stack navigator rendered with `AdwNavigationView`: pushes and pops animate like native Adwaita pages. */\nfunction createStackNavigator<\n const ParamList extends ParamListBase,\n const NavigatorID extends string | undefined = string | undefined,\n const TypeBag extends NavigatorTypeBagBase = StackTypeBag<ParamList, NavigatorID>,\n const Config extends StaticConfig<TypeBag> | undefined = undefined,\n>(config?: Config): TypedNavigator<TypeBag, Config> {\n return createNavigatorFactory(StackNavigator)(config) as TypedNavigator<TypeBag, Config>;\n}\n\nexport { createStackNavigator, createStackScreen, StackNavigator, type StackTypeBag };\n"]}
1
+ {"version":3,"file":"create-stack-navigator.js","sourceRoot":"","sources":["../../src/stack/create-stack-navigator.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAOxH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAyB5C,qFAAqF;AACrF,MAAM,iBAAiB,GAAsC,mBAAmB,EAAgB,CAAC;AAEjG,gGAAgG;AAChG,SAAS,cAAc,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,EAAuB;IACpE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAM/E,WAAW,EAAE,OAAO,CAAC,CAAC;IAExB,OAAO,MAAM,CACT,KAAC,SAAS,IACN,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,GACpB,CACL,CAAC;AACN,CAAC;AAED,sHAAsH;AACtH,SAAS,oBAAoB,CAK3B,MAAe;IACb,OAAO,sBAAsB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAoC,CAAC;AAC7F,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAqB,CAAC","sourcesContent":["import type {\n NavigatorTypeBagBase,\n ParamListBase,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n StaticConfig,\n StaticScreenFactory,\n TypedNavigator,\n} from \"@react-navigation/core\";\nimport type { ReactNode } from \"react\";\nimport { createNavigatorFactory, createScreenFactory, StackRouter, useNavigationBuilder } from \"@react-navigation/core\";\nimport type {\n StackNavigationEventMap,\n StackNavigationOptions,\n StackNavigationProp,\n StackNavigatorProps,\n} from \"./types.js\";\nimport { StackView } from \"./stack-view.js\";\n\n/** Type bag describing the stack navigator to React Navigation's typed APIs. */\ntype StackTypeBag<\n ParamList extends ParamListBase = ParamListBase,\n NavigatorID extends string | undefined = string | undefined,\n> = {\n /** Route names and their params. */\n ParamList: ParamList;\n /** Optional navigator id. */\n NavigatorID: NavigatorID;\n /** Shape of the navigator state. */\n State: StackNavigationState<ParamList>;\n /** Per-screen options. */\n ScreenOptions: StackNavigationOptions;\n /** Events the navigator emits. */\n EventMap: StackNavigationEventMap;\n /** Navigation object per route. */\n NavigationList: {\n [RouteName in keyof ParamList]: StackNavigationProp<ParamList, RouteName, NavigatorID>;\n };\n /** The navigator component. */\n Navigator: typeof StackNavigator;\n};\n\n/** Declares a typed screen of a stack navigator for the static configuration API. */\nconst createStackScreen: StaticScreenFactory<StackTypeBag> = createScreenFactory<StackTypeBag>();\n\n/** Renders the screens of a {@link createStackNavigator} as pages of an `AdwNavigationView`. */\nfunction StackNavigator({ popOnEscape, ...options }: StackNavigatorProps): ReactNode {\n const { state, describe, descriptors, navigation, render } = useNavigationBuilder<\n StackNavigationState<ParamListBase>,\n StackRouterOptions,\n StackActionHelpers<ParamListBase>,\n StackNavigationOptions,\n StackNavigationEventMap\n >(StackRouter, options);\n\n return render(\n <StackView\n popOnEscape={popOnEscape}\n state={state}\n navigation={navigation}\n descriptors={descriptors}\n describe={describe}\n />,\n );\n}\n\n/** Creates a stack navigator rendered with `AdwNavigationView`: pushes and pops animate like native Adwaita pages. */\nfunction createStackNavigator<\n const ParamList extends ParamListBase,\n const NavigatorID extends string | undefined = string | undefined,\n const TypeBag extends NavigatorTypeBagBase = StackTypeBag<ParamList, NavigatorID>,\n const Config extends StaticConfig<TypeBag> | undefined = undefined,\n>(config?: Config): TypedNavigator<TypeBag, Config> {\n return createNavigatorFactory(StackNavigator)(config) as TypedNavigator<TypeBag, Config>;\n}\n\nexport { createStackNavigator, createStackScreen, StackNavigator, type StackTypeBag };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"stack-pages.d.ts","sourceRoot":"","sources":["../../src/stack/stack-pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE7F,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,KAAK,UAAU,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;AACtD,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,OAAO,KAAK,eAAe,CAAC;AAS7F,KAAK,UAAU,GAAG;IACd,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AAyFF,QAAA,MAAM,aAAa,GACf,OAAO,UAAU,EACjB,aAAa,kBAAkB,EAC/B,UAAU,QAAQ,EAClB,QAAQ,MAAM,KACf,UA0BF,CAAC;AAEF,OAAO,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"stack-pages.d.ts","sourceRoot":"","sources":["../../src/stack/stack-pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE7F,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,KAAK,UAAU,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;AACtD,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,OAAO,KAAK,eAAe,CAAC;AAS7F,KAAK,UAAU,GAAG;IACd,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AA6EF,QAAA,MAAM,aAAa,UACR,UAAU,eACJ,kBAAkB,YACrB,QAAQ,UACV,MAAM,KACf,UA4BF,CAAC;AAEF,OAAO,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAE,CAAC"}
@@ -9,14 +9,6 @@ const neededKeys = (state, closing, offset) => [
9
9
  ...Object.keys(closing),
10
10
  ];
11
11
  const hasSameMembers = (left, right) => left.length === right.length && left.every((key) => right.includes(key));
12
- const hasRefreshedFocus = (tracking, descriptors) => {
13
- const { focusedKey } = tracking;
14
- if (focusedKey === undefined) {
15
- return false;
16
- }
17
- const next = descriptors[focusedKey];
18
- return next !== undefined && tracking.descriptors[focusedKey]?.route !== next.route;
19
- };
20
12
  const appendOrder = (previous, needed) => [
21
13
  ...previous.filter((key) => needed.includes(key)),
22
14
  ...needed.filter((key) => !previous.includes(key)),
@@ -58,22 +50,20 @@ const useStackPages = (state, descriptors, describe, offset) => {
58
50
  const [tracking, setTracking] = useState(() => initialTracking(state, descriptors, offset));
59
51
  if (!hasSameMembers(tracking.order, neededKeys(state, tracking.closing, offset)) ||
60
52
  tracking.focusedKey !== getFocusedKey(state, offset) ||
61
- hasRefreshedFocus(tracking, descriptors)) {
53
+ tracking.descriptors !== descriptors) {
62
54
  setTracking(advance(tracking, state, descriptors, offset));
63
55
  }
64
56
  const release = useCallback((key) => {
65
- setTracking((current) => (current.closing[key] === undefined
57
+ setTracking((current) => current.closing[key] === undefined
66
58
  ? current
67
59
  : {
68
60
  ...current,
69
61
  order: current.order.filter((entry) => entry !== key),
70
62
  closing: withoutKeys(current.closing, [key]),
71
- }));
63
+ });
72
64
  }, []);
73
65
  const sources = { state, descriptors, closing: tracking.closing };
74
- const pages = tracking.order
75
- .map((key) => resolvePage(key, sources, describe))
76
- .filter((page) => page !== undefined);
66
+ const pages = tracking.order.map((key) => resolvePage(key, sources, describe)).filter((page) => page !== undefined);
77
67
  return { pages, release };
78
68
  };
79
69
  export { useStackPages };
@@ -1 +1 @@
1
- {"version":3,"file":"stack-pages.js","sourceRoot":"","sources":["../../src/stack/stack-pages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ParamListBase, RouteProp, StackNavigationState } from \"@react-navigation/core\";\nimport { useCallback, useState } from \"react\";\nimport type { StackDescriptor, StackDescriptorMap } from \"./types.js\";\n\ntype StackState = StackNavigationState<ParamListBase>;\ntype Describe = (route: RouteProp<ParamListBase>, isPlaceholder: boolean) => StackDescriptor;\n\ntype PageTracking = {\n order: readonly string[];\n focusedKey: string | undefined;\n descriptors: StackDescriptorMap;\n closing: StackDescriptorMap;\n};\n\ntype StackPages = {\n pages: readonly StackDescriptor[];\n release: (key: string) => void;\n};\n\nconst getFocusedKey = (state: StackState, offset: number): string | undefined =>\n state.index < offset ? undefined : state.routes[state.index]?.key;\n\nconst mountedKeys = (state: StackState, offset: number): string[] => [\n ...state.routes.slice(offset).map((route) => route.key),\n ...state.preloadedRoutes.map((route) => route.key),\n];\n\nconst neededKeys = (state: StackState, closing: StackDescriptorMap, offset: number): string[] => [\n ...mountedKeys(state, offset),\n ...Object.keys(closing),\n];\n\nconst hasSameMembers = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((key) => right.includes(key));\n\nconst hasRefreshedFocus = (tracking: PageTracking, descriptors: StackDescriptorMap): boolean => {\n const { focusedKey } = tracking;\n\n if (focusedKey === undefined) {\n return false;\n }\n\n const next = descriptors[focusedKey];\n\n return next !== undefined && tracking.descriptors[focusedKey]?.route !== next.route;\n};\n\nconst appendOrder = (previous: readonly string[], needed: readonly string[]): string[] => [\n ...previous.filter((key) => needed.includes(key)),\n ...needed.filter((key) => !previous.includes(key)),\n];\n\nconst withoutKeys = (map: StackDescriptorMap, keys: readonly string[]): StackDescriptorMap =>\n Object.fromEntries(Object.entries(map).filter(([key]) => !keys.includes(key)));\n\nconst nextClosing = (tracking: PageTracking, state: StackState, offset: number): StackDescriptorMap => {\n const mounted = mountedKeys(state, offset);\n const kept = withoutKeys(tracking.closing, mounted);\n const { focusedKey } = tracking;\n\n if (focusedKey === undefined || mounted.includes(focusedKey)) {\n return kept;\n }\n\n const descriptor = tracking.descriptors[focusedKey];\n\n return descriptor === undefined ? kept : { ...kept, [focusedKey]: descriptor };\n};\n\nconst advance = (\n tracking: PageTracking,\n state: StackState,\n descriptors: StackDescriptorMap,\n offset: number,\n): PageTracking => {\n const closing = nextClosing(tracking, state, offset);\n\n return {\n order: appendOrder(tracking.order, neededKeys(state, closing, offset)),\n focusedKey: getFocusedKey(state, offset),\n descriptors,\n closing,\n };\n};\n\nconst initialTracking = (state: StackState, descriptors: StackDescriptorMap, offset: number): PageTracking => ({\n order: neededKeys(state, {}, offset),\n focusedKey: getFocusedKey(state, offset),\n descriptors,\n closing: {},\n});\n\nconst resolvePage = (\n key: string,\n sources: { state: StackState; descriptors: StackDescriptorMap; closing: StackDescriptorMap },\n describe: Describe,\n): StackDescriptor | undefined => {\n const preloaded = sources.state.preloadedRoutes.find((route) => route.key === key);\n\n if (preloaded !== undefined) {\n return describe(preloaded, true);\n }\n\n return sources.descriptors[key] ?? sources.closing[key];\n};\n\nconst useStackPages = (\n state: StackState,\n descriptors: StackDescriptorMap,\n describe: Describe,\n offset: number,\n): StackPages => {\n const [tracking, setTracking] = useState<PageTracking>(() => initialTracking(state, descriptors, offset));\n\n if (!hasSameMembers(tracking.order, neededKeys(state, tracking.closing, offset)) ||\n tracking.focusedKey !== getFocusedKey(state, offset) ||\n hasRefreshedFocus(tracking, descriptors)) {\n setTracking(advance(tracking, state, descriptors, offset));\n }\n\n const release = useCallback((key: string) => {\n setTracking((current) => (current.closing[key] === undefined\n ? current\n : {\n ...current,\n order: current.order.filter((entry) => entry !== key),\n closing: withoutKeys(current.closing, [key]),\n }));\n }, []);\n\n const sources = { state, descriptors, closing: tracking.closing };\n\n const pages = tracking.order\n .map((key) => resolvePage(key, sources, describe))\n .filter((page) => page !== undefined);\n\n return { pages, release };\n};\n\nexport { type Describe, useStackPages };\n"]}
1
+ {"version":3,"file":"stack-pages.js","sourceRoot":"","sources":["../../src/stack/stack-pages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ParamListBase, RouteProp, StackNavigationState } from \"@react-navigation/core\";\nimport { useCallback, useState } from \"react\";\nimport type { StackDescriptor, StackDescriptorMap } from \"./types.js\";\n\ntype StackState = StackNavigationState<ParamListBase>;\ntype Describe = (route: RouteProp<ParamListBase>, isPlaceholder: boolean) => StackDescriptor;\n\ntype PageTracking = {\n order: readonly string[];\n focusedKey: string | undefined;\n descriptors: StackDescriptorMap;\n closing: StackDescriptorMap;\n};\n\ntype StackPages = {\n pages: readonly StackDescriptor[];\n release: (key: string) => void;\n};\n\nconst getFocusedKey = (state: StackState, offset: number): string | undefined =>\n state.index < offset ? undefined : state.routes[state.index]?.key;\n\nconst mountedKeys = (state: StackState, offset: number): string[] => [\n ...state.routes.slice(offset).map((route) => route.key),\n ...state.preloadedRoutes.map((route) => route.key),\n];\n\nconst neededKeys = (state: StackState, closing: StackDescriptorMap, offset: number): string[] => [\n ...mountedKeys(state, offset),\n ...Object.keys(closing),\n];\n\nconst hasSameMembers = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((key) => right.includes(key));\n\nconst appendOrder = (previous: readonly string[], needed: readonly string[]): string[] => [\n ...previous.filter((key) => needed.includes(key)),\n ...needed.filter((key) => !previous.includes(key)),\n];\n\nconst withoutKeys = (map: StackDescriptorMap, keys: readonly string[]): StackDescriptorMap =>\n Object.fromEntries(Object.entries(map).filter(([key]) => !keys.includes(key)));\n\nconst nextClosing = (tracking: PageTracking, state: StackState, offset: number): StackDescriptorMap => {\n const mounted = mountedKeys(state, offset);\n const kept = withoutKeys(tracking.closing, mounted);\n const { focusedKey } = tracking;\n\n if (focusedKey === undefined || mounted.includes(focusedKey)) {\n return kept;\n }\n\n const descriptor = tracking.descriptors[focusedKey];\n\n return descriptor === undefined ? kept : { ...kept, [focusedKey]: descriptor };\n};\n\nconst advance = (\n tracking: PageTracking,\n state: StackState,\n descriptors: StackDescriptorMap,\n offset: number,\n): PageTracking => {\n const closing = nextClosing(tracking, state, offset);\n\n return {\n order: appendOrder(tracking.order, neededKeys(state, closing, offset)),\n focusedKey: getFocusedKey(state, offset),\n descriptors,\n closing,\n };\n};\n\nconst initialTracking = (state: StackState, descriptors: StackDescriptorMap, offset: number): PageTracking => ({\n order: neededKeys(state, {}, offset),\n focusedKey: getFocusedKey(state, offset),\n descriptors,\n closing: {},\n});\n\nconst resolvePage = (\n key: string,\n sources: { state: StackState; descriptors: StackDescriptorMap; closing: StackDescriptorMap },\n describe: Describe,\n): StackDescriptor | undefined => {\n const preloaded = sources.state.preloadedRoutes.find((route) => route.key === key);\n\n if (preloaded !== undefined) {\n return describe(preloaded, true);\n }\n\n return sources.descriptors[key] ?? sources.closing[key];\n};\n\nconst useStackPages = (\n state: StackState,\n descriptors: StackDescriptorMap,\n describe: Describe,\n offset: number,\n): StackPages => {\n const [tracking, setTracking] = useState<PageTracking>(() => initialTracking(state, descriptors, offset));\n\n if (\n !hasSameMembers(tracking.order, neededKeys(state, tracking.closing, offset)) ||\n tracking.focusedKey !== getFocusedKey(state, offset) ||\n tracking.descriptors !== descriptors\n ) {\n setTracking(advance(tracking, state, descriptors, offset));\n }\n\n const release = useCallback((key: string) => {\n setTracking((current) =>\n current.closing[key] === undefined\n ? current\n : {\n ...current,\n order: current.order.filter((entry) => entry !== key),\n closing: withoutKeys(current.closing, [key]),\n },\n );\n }, []);\n\n const sources = { state, descriptors, closing: tracking.closing };\n\n const pages = tracking.order.map((key) => resolvePage(key, sources, describe)).filter((page) => page !== undefined);\n\n return { pages, release };\n};\n\nexport { type Describe, useStackPages };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"stack-view.d.ts","sourceRoot":"","sources":["../../src/stack/stack-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAGlD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAER,kBAAkB,EAClB,qBAAqB,EAErB,sBAAsB,EAEzB,MAAM,YAAY,CAAC;AAQpB,KAAK,cAAc,GAAG,qBAAqB,GAAG;IAC1C,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC3C,UAAU,EAAE,sBAAsB,CAAC;IACnC,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAsJF,QAAA,MAAM,SAAS,GAAI,OAAO,cAAc,KAAG,SAqB1C,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"stack-view.d.ts","sourceRoot":"","sources":["../../src/stack/stack-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAIlD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAER,kBAAkB,EAClB,qBAAqB,EAErB,sBAAsB,EACzB,MAAM,YAAY,CAAC;AAOpB,KAAK,cAAc,GAAG,qBAAqB,GAAG;IAC1C,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC3C,UAAU,EAAE,sBAAsB,CAAC;IACnC,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAmIF,QAAA,MAAM,SAAS,UAAW,cAAc,KAAG,SAqB1C,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,5 +1,6 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { AdwNavigationPage, AdwNavigationView, AdwToolbarView } from "@gtkx/jsx/adw";
3
+ import { useLatestRef } from "@gtkx/react/internal";
3
4
  import { useCallback, useEffect, useRef } from "react";
4
5
  import { HeaderBar } from "../shared/header-bar.js";
5
6
  import { useStackPages } from "./stack-pages.js";
@@ -9,22 +10,6 @@ const previousDescriptor = (state, descriptors, key, offset) => {
9
10
  const previousKey = index > offset ? state.routes[index - 1]?.key : undefined;
10
11
  return previousKey === undefined ? undefined : descriptors[previousKey];
11
12
  };
12
- const useLatest = (value) => {
13
- const ref = useRef(value);
14
- useEffect(() => {
15
- ref.current = value;
16
- }, [value]);
17
- return ref;
18
- };
19
- const useTrackedOptions = (descriptors) => {
20
- const optionsRef = useRef({});
21
- useEffect(() => {
22
- for (const [key, descriptor] of Object.entries(descriptors)) {
23
- optionsRef.current[key] = descriptor.options;
24
- }
25
- }, [descriptors]);
26
- return optionsRef;
27
- };
28
13
  const useStackSync = (viewRef, state, options, offset) => {
29
14
  const isInitialRef = useRef(true);
30
15
  useEffect(() => {
@@ -38,7 +23,7 @@ const useStackSync = (viewRef, state, options, offset) => {
38
23
  }, [viewRef, state, options, offset]);
39
24
  };
40
25
  const usePoppedHandler = (viewRef, navigation, options, offset) => {
41
- const navigationRef = useLatest(navigation);
26
+ const navigationRef = useLatestRef(navigation);
42
27
  const isScheduledRef = useRef(false);
43
28
  return useCallback(() => {
44
29
  if (isScheduledRef.current) {
@@ -60,9 +45,7 @@ const StackPageContent = ({ descriptor, previous }) => {
60
45
  return descriptor.render();
61
46
  }
62
47
  const back = previous === undefined ? undefined : { title: previous.options.title ?? previous.route.name };
63
- const topBar = options.header === undefined
64
- ? _jsx(HeaderBar, { options: options, showBackButton: options.headerBackVisible ?? true })
65
- : _jsx(_Fragment, { children: options.header({ route, navigation, options, back }) });
48
+ const topBar = options.header === undefined ? (_jsx(HeaderBar, { options: options, showBackButton: options.headerBackVisible ?? true })) : (_jsx(_Fragment, { children: options.header({ route, navigation, options, back }) }));
66
49
  return _jsx(AdwToolbarView, { topBar: topBar, children: descriptor.render() });
67
50
  };
68
51
  const StackPage = ({ descriptor, previous, navigation, onHidden }) => {
@@ -91,8 +74,8 @@ const StackPage = ({ descriptor, previous, navigation, onHidden }) => {
91
74
  const StackView = (props) => {
92
75
  const { state, navigation, descriptors, describe, popOnEscape, offset = 0 } = props;
93
76
  const viewRef = useRef(null);
94
- const options = useTrackedOptions(descriptors);
95
77
  const { pages, release } = useStackPages(state, descriptors, describe, offset);
78
+ const options = useLatestRef(Object.fromEntries(pages.map((page) => [page.route.key, page.options])));
96
79
  const onPopped = usePoppedHandler(viewRef, navigation, options, offset);
97
80
  useStackSync(viewRef, state, options, offset);
98
81
  return (_jsx(AdwNavigationView, { ref: viewRef, popOnEscape: popOnEscape ?? true, onPopped: onPopped, children: pages.map((descriptor) => (_jsx(StackPage, { descriptor: descriptor, previous: previousDescriptor(state, descriptors, descriptor.route.key, offset), navigation: navigation, onHidden: release }, descriptor.route.key))) }));
@@ -1 +1 @@
1
- {"version":3,"file":"stack-view.js","sourceRoot":"","sources":["../../src/stack/stack-view.tsx"],"names":[],"mappings":"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","sourcesContent":["import type * as Adw from \"@gtkx/gi/adw\";\nimport type { ParamListBase, StackNavigationState } from \"@react-navigation/core\";\nimport type { ReactNode, RefObject } from \"react\";\nimport { AdwNavigationPage, AdwNavigationView, AdwToolbarView } from \"@gtkx/jsx/adw\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport type { Describe } from \"./stack-pages.js\";\nimport type { OptionsByKey } from \"./sync-navigation-stack.js\";\nimport type {\n StackDescriptor,\n StackDescriptorMap,\n StackNavigationConfig,\n StackNavigationEventMap,\n StackNavigationHelpers,\n StackNavigationOptions,\n} from \"./types.js\";\nimport { HeaderBar } from \"../shared/header-bar.js\";\nimport { useStackPages } from \"./stack-pages.js\";\nimport { reconcilePoppedStack, syncNavigationStack } from \"./sync-navigation-stack.js\";\n\ntype ViewRef = RefObject<Adw.NavigationView | null>;\ntype MutableOptions = Record<string, StackNavigationOptions>;\n\ntype StackViewProps = StackNavigationConfig & {\n state: StackNavigationState<ParamListBase>;\n navigation: StackNavigationHelpers;\n descriptors: StackDescriptorMap;\n describe: Describe;\n offset?: number;\n};\n\ntype StackPageProps = {\n descriptor: StackDescriptor;\n previous?: StackDescriptor;\n navigation: StackNavigationHelpers;\n onHidden: (key: string) => void;\n};\n\ntype TransitionEvent = keyof StackNavigationEventMap;\n\nconst previousDescriptor = (\n state: StackNavigationState<ParamListBase>,\n descriptors: StackDescriptorMap,\n key: string,\n offset: number,\n): StackDescriptor | undefined => {\n const index = state.routes.findIndex((route) => route.key === key);\n const previousKey = index > offset ? state.routes[index - 1]?.key : undefined;\n\n return previousKey === undefined ? undefined : descriptors[previousKey];\n};\n\nconst useLatest = <T,>(value: T): RefObject<T> => {\n const ref = useRef(value);\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n};\n\nconst useTrackedOptions = (descriptors: StackDescriptorMap): RefObject<MutableOptions> => {\n const optionsRef = useRef<MutableOptions>({});\n\n useEffect(() => {\n for (const [key, descriptor] of Object.entries(descriptors)) {\n optionsRef.current[key] = descriptor.options;\n }\n }, [descriptors]);\n\n return optionsRef;\n};\n\nconst useStackSync = (\n viewRef: ViewRef,\n state: StackNavigationState<ParamListBase>,\n options: RefObject<OptionsByKey>,\n offset: number,\n): void => {\n const isInitialRef = useRef(true);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (view === null) {\n return;\n }\n\n const desired = state.routes.slice(offset).map((route) => route.key);\n syncNavigationStack(view, desired, options.current, isInitialRef.current);\n isInitialRef.current = false;\n }, [viewRef, state, options, offset]);\n};\n\nconst usePoppedHandler = (\n viewRef: ViewRef,\n navigation: StackNavigationHelpers,\n options: RefObject<OptionsByKey>,\n offset: number,\n): (() => void) => {\n const navigationRef = useLatest(navigation);\n const isScheduledRef = useRef(false);\n\n return useCallback(() => {\n if (isScheduledRef.current) {\n return;\n }\n\n isScheduledRef.current = true;\n\n queueMicrotask(() => {\n isScheduledRef.current = false;\n const view = viewRef.current;\n\n if (view !== null) {\n reconcilePoppedStack(view, navigationRef.current, options.current, offset);\n }\n });\n }, [viewRef, navigationRef, options, offset]);\n};\n\nconst StackPageContent = ({ descriptor, previous }: Omit<StackPageProps, \"navigation\" | \"onHidden\">): ReactNode => {\n const { route, options, navigation } = descriptor;\n\n if (options.headerShown === false) {\n return descriptor.render();\n }\n\n const back = previous === undefined ? undefined : { title: previous.options.title ?? previous.route.name };\n\n const topBar = options.header === undefined\n ? <HeaderBar options={options} showBackButton={options.headerBackVisible ?? true} />\n : <>{options.header({ route, navigation, options, back })}</>;\n\n return <AdwToolbarView topBar={topBar}>{descriptor.render()}</AdwToolbarView>;\n};\n\nconst StackPage = ({ descriptor, previous, navigation, onHidden }: StackPageProps): ReactNode => {\n const { route, options } = descriptor;\n const pageRef = useRef<Adw.NavigationPage | null>(null);\n\n const emit = (type: TransitionEvent, isClosing: boolean): void => {\n navigation.emit({ type, data: { closing: isClosing }, target: route.key });\n };\n\n useEffect(() => {\n const page = pageRef.current;\n\n if (page !== null && !page.getMapped()) {\n onHidden(route.key);\n }\n });\n\n return (\n <AdwNavigationPage\n ref={pageRef}\n tag={route.key}\n title={options.title ?? route.name}\n canPop={options.canPop ?? true}\n onShowing={() => {\n emit(\"transitionStart\", false);\n }}\n onHiding={() => {\n emit(\"transitionStart\", true);\n }}\n onShown={() => {\n emit(\"transitionEnd\", false);\n }}\n onHidden={() => {\n emit(\"transitionEnd\", true);\n onHidden(route.key);\n }}\n >\n <StackPageContent descriptor={descriptor} previous={previous} />\n </AdwNavigationPage>\n );\n};\n\nconst StackView = (props: StackViewProps): ReactNode => {\n const { state, navigation, descriptors, describe, popOnEscape, offset = 0 } = props;\n const viewRef = useRef<Adw.NavigationView | null>(null);\n const options = useTrackedOptions(descriptors);\n const { pages, release } = useStackPages(state, descriptors, describe, offset);\n const onPopped = usePoppedHandler(viewRef, navigation, options, offset);\n useStackSync(viewRef, state, options, offset);\n\n return (\n <AdwNavigationView ref={viewRef} popOnEscape={popOnEscape ?? true} onPopped={onPopped}>\n {pages.map((descriptor) => (\n <StackPage\n key={descriptor.route.key}\n descriptor={descriptor}\n previous={previousDescriptor(state, descriptors, descriptor.route.key, offset)}\n navigation={navigation}\n onHidden={release}\n />\n ))}\n </AdwNavigationView>\n );\n};\n\nexport { StackView };\n"]}
1
+ {"version":3,"file":"stack-view.js","sourceRoot":"","sources":["../../src/stack/stack-view.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAUvD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAqBvF,MAAM,kBAAkB,GAAG,CACvB,KAA0C,EAC1C,WAA+B,EAC/B,GAAW,EACX,MAAc,EACa,EAAE;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACjB,OAAgB,EAChB,KAA0C,EAC1C,OAAgC,EAChC,MAAc,EACV,EAAE;IACN,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAElC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAE7B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrE,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1E,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;IACjC,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAgB,EAChB,UAAkC,EAClC,OAAgC,EAChC,MAAc,EACF,EAAE;IACd,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,OAAO,WAAW,CAAC,GAAG,EAAE;QACpB,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAE9B,cAAc,CAAC,GAAG,EAAE;YAChB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAE7B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAChB,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/E,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAmD,EAAa,EAAE;IAC9G,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC;IAElD,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAE3G,MAAM,MAAM,GACR,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAC3B,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI,GAAI,CACrF,CAAC,CAAC,CAAC,CACA,4BAAG,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAI,CAC9D,CAAC;IAEN,OAAO,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,YAAG,UAAU,CAAC,MAAM,EAAE,GAAkB,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAkB,EAAa,EAAE;IAC5F,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,CAAC,IAAqB,EAAE,SAAkB,EAAQ,EAAE;QAC7D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAE7B,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,KAAC,iBAAiB,IACd,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAClC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,EAC9B,SAAS,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;YACX,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC,EACD,OAAO,EAAE,GAAG,EAAE;YACV,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;YACX,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAC5B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,YAED,KAAC,gBAAgB,IAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAI,GAChD,CACvB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAqB,EAAa,EAAE;IACnD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,YAAY,CAAe,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACpH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACxE,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAE9C,OAAO,CACH,KAAC,iBAAiB,IAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,YAChF,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CACvB,KAAC,SAAS,IAEN,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAC9E,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,OAAO,IAJZ,UAAU,CAAC,KAAK,CAAC,GAAG,CAK3B,CACL,CAAC,GACc,CACvB,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type * as Adw from \"@gtkx/gi/adw\";\nimport type { ParamListBase, StackNavigationState } from \"@react-navigation/core\";\nimport type { ReactNode, RefObject } from \"react\";\nimport { AdwNavigationPage, AdwNavigationView, AdwToolbarView } from \"@gtkx/jsx/adw\";\nimport { useLatestRef } from \"@gtkx/react/internal\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport type { Describe } from \"./stack-pages.js\";\nimport type { OptionsByKey } from \"./sync-navigation-stack.js\";\nimport type {\n StackDescriptor,\n StackDescriptorMap,\n StackNavigationConfig,\n StackNavigationEventMap,\n StackNavigationHelpers,\n} from \"./types.js\";\nimport { HeaderBar } from \"../shared/header-bar.js\";\nimport { useStackPages } from \"./stack-pages.js\";\nimport { reconcilePoppedStack, syncNavigationStack } from \"./sync-navigation-stack.js\";\n\ntype ViewRef = RefObject<Adw.NavigationView | null>;\n\ntype StackViewProps = StackNavigationConfig & {\n state: StackNavigationState<ParamListBase>;\n navigation: StackNavigationHelpers;\n descriptors: StackDescriptorMap;\n describe: Describe;\n offset?: number;\n};\n\ntype StackPageProps = {\n descriptor: StackDescriptor;\n previous?: StackDescriptor;\n navigation: StackNavigationHelpers;\n onHidden: (key: string) => void;\n};\n\ntype TransitionEvent = keyof StackNavigationEventMap;\n\nconst previousDescriptor = (\n state: StackNavigationState<ParamListBase>,\n descriptors: StackDescriptorMap,\n key: string,\n offset: number,\n): StackDescriptor | undefined => {\n const index = state.routes.findIndex((route) => route.key === key);\n const previousKey = index > offset ? state.routes[index - 1]?.key : undefined;\n\n return previousKey === undefined ? undefined : descriptors[previousKey];\n};\n\nconst useStackSync = (\n viewRef: ViewRef,\n state: StackNavigationState<ParamListBase>,\n options: RefObject<OptionsByKey>,\n offset: number,\n): void => {\n const isInitialRef = useRef(true);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (view === null) {\n return;\n }\n\n const desired = state.routes.slice(offset).map((route) => route.key);\n syncNavigationStack(view, desired, options.current, isInitialRef.current);\n isInitialRef.current = false;\n }, [viewRef, state, options, offset]);\n};\n\nconst usePoppedHandler = (\n viewRef: ViewRef,\n navigation: StackNavigationHelpers,\n options: RefObject<OptionsByKey>,\n offset: number,\n): (() => void) => {\n const navigationRef = useLatestRef(navigation);\n const isScheduledRef = useRef(false);\n\n return useCallback(() => {\n if (isScheduledRef.current) {\n return;\n }\n\n isScheduledRef.current = true;\n\n queueMicrotask(() => {\n isScheduledRef.current = false;\n const view = viewRef.current;\n\n if (view !== null) {\n reconcilePoppedStack(view, navigationRef.current, options.current, offset);\n }\n });\n }, [viewRef, navigationRef, options, offset]);\n};\n\nconst StackPageContent = ({ descriptor, previous }: Omit<StackPageProps, \"navigation\" | \"onHidden\">): ReactNode => {\n const { route, options, navigation } = descriptor;\n\n if (options.headerShown === false) {\n return descriptor.render();\n }\n\n const back = previous === undefined ? undefined : { title: previous.options.title ?? previous.route.name };\n\n const topBar =\n options.header === undefined ? (\n <HeaderBar options={options} showBackButton={options.headerBackVisible ?? true} />\n ) : (\n <>{options.header({ route, navigation, options, back })}</>\n );\n\n return <AdwToolbarView topBar={topBar}>{descriptor.render()}</AdwToolbarView>;\n};\n\nconst StackPage = ({ descriptor, previous, navigation, onHidden }: StackPageProps): ReactNode => {\n const { route, options } = descriptor;\n const pageRef = useRef<Adw.NavigationPage | null>(null);\n\n const emit = (type: TransitionEvent, isClosing: boolean): void => {\n navigation.emit({ type, data: { closing: isClosing }, target: route.key });\n };\n\n useEffect(() => {\n const page = pageRef.current;\n\n if (page !== null && !page.getMapped()) {\n onHidden(route.key);\n }\n });\n\n return (\n <AdwNavigationPage\n ref={pageRef}\n tag={route.key}\n title={options.title ?? route.name}\n canPop={options.canPop ?? true}\n onShowing={() => {\n emit(\"transitionStart\", false);\n }}\n onHiding={() => {\n emit(\"transitionStart\", true);\n }}\n onShown={() => {\n emit(\"transitionEnd\", false);\n }}\n onHidden={() => {\n emit(\"transitionEnd\", true);\n onHidden(route.key);\n }}\n >\n <StackPageContent descriptor={descriptor} previous={previous} />\n </AdwNavigationPage>\n );\n};\n\nconst StackView = (props: StackViewProps): ReactNode => {\n const { state, navigation, descriptors, describe, popOnEscape, offset = 0 } = props;\n const viewRef = useRef<Adw.NavigationView | null>(null);\n const { pages, release } = useStackPages(state, descriptors, describe, offset);\n const options = useLatestRef<OptionsByKey>(Object.fromEntries(pages.map((page) => [page.route.key, page.options])));\n const onPopped = usePoppedHandler(viewRef, navigation, options, offset);\n useStackSync(viewRef, state, options, offset);\n\n return (\n <AdwNavigationView ref={viewRef} popOnEscape={popOnEscape ?? true} onPopped={onPopped}>\n {pages.map((descriptor) => (\n <StackPage\n key={descriptor.route.key}\n descriptor={descriptor}\n previous={previousDescriptor(state, descriptors, descriptor.route.key, offset)}\n navigation={navigation}\n onHidden={release}\n />\n ))}\n </AdwNavigationView>\n );\n};\n\nexport { StackView };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-navigation-stack.d.ts","sourceRoot":"","sources":["../../src/stack/sync-navigation-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEjF,KAAK,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC;AAiEjF,QAAA,MAAM,mBAAmB,GACrB,MAAM,GAAG,CAAC,cAAc,EACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,SAAS,YAAY,EACrB,WAAW,OAAO,KACnB,IAYF,CAAC;AAcF,QAAA,MAAM,oBAAoB,GACtB,MAAM,GAAG,CAAC,cAAc,EACxB,YAAY,sBAAsB,EAClC,SAAS,YAAY,EACrB,QAAQ,MAAM,KACf,IASF,CAAC;AAEF,OAAO,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"sync-navigation-stack.d.ts","sourceRoot":"","sources":["../../src/stack/sync-navigation-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEjF,KAAK,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC;AAiEjF,QAAA,MAAM,mBAAmB,SACf,GAAG,CAAC,cAAc,WACf,SAAS,MAAM,EAAE,WACjB,YAAY,aACV,OAAO,KACnB,IAYF,CAAC;AAcF,QAAA,MAAM,oBAAoB,SAChB,GAAG,CAAC,cAAc,cACZ,sBAAsB,WACzB,YAAY,UACb,MAAM,KACf,IASF,CAAC;AAEF,OAAO,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC"}