@simonbackx/vue-app-navigation 2.18.1 → 2.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +79 -53
- package/dist/src/NavigationController.vue.d.ts +14 -5
- package/dist/src/NavigationMixin.d.ts +1 -1
- package/dist/src/SplitViewController.vue.d.ts +39 -9
- package/dist/src/utils/UrlHelper.d.ts +5 -0
- package/dist/src/utils/navigationHooks.d.ts +39 -41
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -773,6 +773,7 @@ const _ComponentWithProperties = class _ComponentWithProperties {
|
|
|
773
773
|
}
|
|
774
774
|
const state = HistoryManager.getCurrentState();
|
|
775
775
|
this.historyIndex = state.index;
|
|
776
|
+
if (_ComponentWithProperties.debug) console.warn("Assigned index to component", this.component.name ?? this, state.index);
|
|
776
777
|
_ComponentWithProperties.historyIndexOwners.set(state.index, this);
|
|
777
778
|
}
|
|
778
779
|
inheritHistoryIndex(index) {
|
|
@@ -832,6 +833,7 @@ const _ComponentWithProperties = class _ComponentWithProperties {
|
|
|
832
833
|
if (_ComponentWithProperties.debug) console.warn("Returning to a component that has no history index assigned. Has this component been pushed to a navigation controller properly before returning to it?", this.component.name);
|
|
833
834
|
return false;
|
|
834
835
|
}
|
|
836
|
+
if (_ComponentWithProperties.debug) console.warn("Returned to component", this.component.name ?? this);
|
|
835
837
|
HistoryManager.returnToHistoryIndex(this.historyIndex);
|
|
836
838
|
return true;
|
|
837
839
|
}
|
|
@@ -1163,7 +1165,7 @@ const ComponentWithPropertiesInstance = defineComponent({
|
|
|
1163
1165
|
};
|
|
1164
1166
|
}
|
|
1165
1167
|
});
|
|
1166
|
-
const _sfc_main$
|
|
1168
|
+
const _sfc_main$4 = {
|
|
1167
1169
|
name: "FramedComponent",
|
|
1168
1170
|
components: {
|
|
1169
1171
|
ComponentWithPropertiesInstance
|
|
@@ -1200,8 +1202,8 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1200
1202
|
])
|
|
1201
1203
|
]);
|
|
1202
1204
|
}
|
|
1203
|
-
const FramedComponent = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
1204
|
-
const
|
|
1205
|
+
const FramedComponent = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$2]]);
|
|
1206
|
+
const NavigationController$1 = defineComponent({
|
|
1205
1207
|
name: "NavigationController",
|
|
1206
1208
|
components: {
|
|
1207
1209
|
FramedComponent
|
|
@@ -1215,6 +1217,9 @@ const _sfc_main$4 = defineComponent({
|
|
|
1215
1217
|
},
|
|
1216
1218
|
reactive_navigation_can_dismiss: {
|
|
1217
1219
|
default: false
|
|
1220
|
+
},
|
|
1221
|
+
reactive_navigationController: {
|
|
1222
|
+
default: null
|
|
1218
1223
|
}
|
|
1219
1224
|
},
|
|
1220
1225
|
provide() {
|
|
@@ -1273,6 +1278,11 @@ const _sfc_main$4 = defineComponent({
|
|
|
1273
1278
|
cachedProvides: /* @__PURE__ */ new Map()
|
|
1274
1279
|
};
|
|
1275
1280
|
},
|
|
1281
|
+
computed: {
|
|
1282
|
+
navigationController() {
|
|
1283
|
+
return unref(this.reactive_navigationController);
|
|
1284
|
+
}
|
|
1285
|
+
},
|
|
1276
1286
|
watch: {
|
|
1277
1287
|
// whenever question changes, this function will run
|
|
1278
1288
|
mainComponent(newComponent) {
|
|
@@ -1768,7 +1778,14 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
1768
1778
|
}, 8, ["onBeforeEnter", "onBeforeLeave", "onEnter", "onLeave", "onAfterLeave", "onAfterEnter", "onEnterCancelled"])
|
|
1769
1779
|
])) : createCommentVNode("", true);
|
|
1770
1780
|
}
|
|
1771
|
-
const NavigationController = /* @__PURE__ */ _export_sfc(
|
|
1781
|
+
const NavigationController = /* @__PURE__ */ _export_sfc(NavigationController$1, [["render", _sfc_render$1]]);
|
|
1782
|
+
function typeRoute(route) {
|
|
1783
|
+
return route;
|
|
1784
|
+
}
|
|
1785
|
+
const defineRoute = (route) => {
|
|
1786
|
+
defineRoutes([route]);
|
|
1787
|
+
return route;
|
|
1788
|
+
};
|
|
1772
1789
|
function usePop() {
|
|
1773
1790
|
const rawPop = inject("reactive_navigation_pop", null);
|
|
1774
1791
|
return (options) => {
|
|
@@ -1786,12 +1803,18 @@ function useNavigate() {
|
|
|
1786
1803
|
const show = useShow();
|
|
1787
1804
|
const showDetail = useShowDetail();
|
|
1788
1805
|
const toRoute = async function(route, options) {
|
|
1789
|
-
let componentProperties = (options == null ? void 0 : options.properties) ?? (
|
|
1806
|
+
let componentProperties = (options == null ? void 0 : options.properties) ?? ("defaultProperties" in route && route.defaultProperties ? route.defaultProperties() : null) ?? {};
|
|
1790
1807
|
let params = (options == null ? void 0 : options.params) ?? {};
|
|
1791
|
-
if (!(options == null ? void 0 : options.properties)
|
|
1792
|
-
|
|
1808
|
+
if (!(options == null ? void 0 : options.properties)) {
|
|
1809
|
+
if ("paramsToProps" in route) {
|
|
1810
|
+
componentProperties = route.paramsToProps((options == null ? void 0 : options.params) ?? {}, options == null ? void 0 : options.query);
|
|
1811
|
+
} else {
|
|
1812
|
+
if (options == null ? void 0 : options.params) {
|
|
1813
|
+
console.error("Using route to a route that only has properties, no parameters. Use properties instead of params in navigate() for this route: " + route.url, route, options);
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1793
1816
|
}
|
|
1794
|
-
if (!(options == null ? void 0 : options.params) &&
|
|
1817
|
+
if (!(options == null ? void 0 : options.params) && "propsToParams" in route) {
|
|
1795
1818
|
const { params: p } = route.propsToParams(await componentProperties);
|
|
1796
1819
|
params = p;
|
|
1797
1820
|
}
|
|
@@ -1801,7 +1824,8 @@ function useNavigate() {
|
|
|
1801
1824
|
url,
|
|
1802
1825
|
adjustHistory: (options == null ? void 0 : options.adjustHistory) ?? true,
|
|
1803
1826
|
animated: (options == null ? void 0 : options.animated) ?? true,
|
|
1804
|
-
modalDisplayStyle:
|
|
1827
|
+
modalDisplayStyle: void 0,
|
|
1828
|
+
// modalDisplayStyle: route.present && typeof route.present === 'string' ? route.present : undefined,
|
|
1805
1829
|
checkRoutes: (options == null ? void 0 : options.checkRoutes) ?? false,
|
|
1806
1830
|
componentProperties: await componentProperties
|
|
1807
1831
|
});
|
|
@@ -1810,7 +1834,7 @@ function useNavigate() {
|
|
|
1810
1834
|
let component;
|
|
1811
1835
|
const isComponentFunction = typeof route.component === "function" && !(!!route.component.prototype && route.component.prototype.constructor === route.component);
|
|
1812
1836
|
if (isComponentFunction || componentProperties.then) {
|
|
1813
|
-
const method = isComponentFunction ? route.component : () => route.component;
|
|
1837
|
+
const method = isComponentFunction ? route.component : (_) => route.component;
|
|
1814
1838
|
const originalProperties = componentProperties;
|
|
1815
1839
|
if (!("PromiseComponent" in window)) {
|
|
1816
1840
|
throw new Error("Required PromiseComponent window variable to make async components work in routes");
|
|
@@ -1818,8 +1842,12 @@ function useNavigate() {
|
|
|
1818
1842
|
component = window.PromiseComponent;
|
|
1819
1843
|
componentProperties = {
|
|
1820
1844
|
promise: async () => {
|
|
1821
|
-
const
|
|
1822
|
-
|
|
1845
|
+
const properties = await originalProperties;
|
|
1846
|
+
const realComponent = await method(properties);
|
|
1847
|
+
if (realComponent instanceof ComponentWithProperties) {
|
|
1848
|
+
return realComponent;
|
|
1849
|
+
}
|
|
1850
|
+
return new ComponentWithProperties(realComponent === "self" ? instance == null ? void 0 : instance.type : realComponent, properties);
|
|
1823
1851
|
}
|
|
1824
1852
|
};
|
|
1825
1853
|
} else {
|
|
@@ -1862,7 +1890,7 @@ function useNavigate() {
|
|
|
1862
1890
|
new ComponentWithProperties(component, componentProperties)
|
|
1863
1891
|
],
|
|
1864
1892
|
checkRoutes: (options == null ? void 0 : options.checkRoutes) ?? false
|
|
1865
|
-
});
|
|
1893
|
+
}, typeof route.show === "object" && route.show !== null && "getCustomShow" in route.show ? route.show.getCustomShow() : void 0);
|
|
1866
1894
|
}
|
|
1867
1895
|
};
|
|
1868
1896
|
const currentRoutes = getCurrentRoutes();
|
|
@@ -1945,22 +1973,27 @@ function addCheckRoutesMountedHandler() {
|
|
|
1945
1973
|
}
|
|
1946
1974
|
});
|
|
1947
1975
|
}
|
|
1948
|
-
function defineRoutes(
|
|
1976
|
+
function defineRoutes(tmpRoutes) {
|
|
1949
1977
|
const urlhelpers = useUrl();
|
|
1950
1978
|
const navigate = useNavigate();
|
|
1951
1979
|
const currentRoutes = getCurrentRoutes();
|
|
1952
1980
|
const provideDefaultHandler = inject("reactive_provide_default_handler", null);
|
|
1981
|
+
let hadRoutes = false;
|
|
1953
1982
|
if (currentRoutes.value.length) {
|
|
1954
|
-
|
|
1983
|
+
hadRoutes = true;
|
|
1984
|
+
tmpRoutes = [...currentRoutes.value, ...tmpRoutes];
|
|
1955
1985
|
}
|
|
1956
|
-
currentRoutes.value =
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1986
|
+
currentRoutes.value = tmpRoutes;
|
|
1987
|
+
if (hadRoutes || tmpRoutes.length === 0) {
|
|
1988
|
+
return;
|
|
1989
|
+
}
|
|
1990
|
+
async function handleRoutes(routes) {
|
|
1991
|
+
for (const route of routes) {
|
|
1992
|
+
const result = urlhelpers.match(route.url, "params" in route ? route.params : {});
|
|
1960
1993
|
if (result) {
|
|
1961
1994
|
try {
|
|
1962
1995
|
await navigate(route, {
|
|
1963
|
-
params: result.params,
|
|
1996
|
+
params: "params" in route ? result.params : void 0,
|
|
1964
1997
|
animated: false,
|
|
1965
1998
|
adjustHistory: false,
|
|
1966
1999
|
query: result.query,
|
|
@@ -1982,6 +2015,7 @@ function defineRoutes(routes) {
|
|
|
1982
2015
|
return false;
|
|
1983
2016
|
}
|
|
1984
2017
|
const getDefaultRoute = ({ allowDetail } = { allowDetail: true }) => {
|
|
2018
|
+
const routes = currentRoutes.value;
|
|
1985
2019
|
if (!Array.isArray(routes)) {
|
|
1986
2020
|
return null;
|
|
1987
2021
|
}
|
|
@@ -2013,24 +2047,10 @@ function defineRoutes(routes) {
|
|
|
2013
2047
|
}
|
|
2014
2048
|
};
|
|
2015
2049
|
onCheckRoutes(async () => {
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
}
|
|
2021
|
-
} else {
|
|
2022
|
-
const extraRoutes = await routes();
|
|
2023
|
-
if (Array.isArray(extraRoutes)) {
|
|
2024
|
-
if (await handleRoutes(extraRoutes)) {
|
|
2025
|
-
setDefaultHandler();
|
|
2026
|
-
return;
|
|
2027
|
-
}
|
|
2028
|
-
} else {
|
|
2029
|
-
if (extraRoutes) {
|
|
2030
|
-
setDefaultHandler();
|
|
2031
|
-
return;
|
|
2032
|
-
}
|
|
2033
|
-
}
|
|
2050
|
+
const routes = currentRoutes.value;
|
|
2051
|
+
if (await handleRoutes(routes)) {
|
|
2052
|
+
setDefaultHandler();
|
|
2053
|
+
return;
|
|
2034
2054
|
}
|
|
2035
2055
|
setDefaultHandler();
|
|
2036
2056
|
});
|
|
@@ -2039,10 +2059,6 @@ function defineRoutes(routes) {
|
|
|
2039
2059
|
setDefaultHandler();
|
|
2040
2060
|
});
|
|
2041
2061
|
}
|
|
2042
|
-
const checkRouteCache = {
|
|
2043
|
-
lastUrl: null,
|
|
2044
|
-
results: /* @__PURE__ */ new Map()
|
|
2045
|
-
};
|
|
2046
2062
|
function useCurrentHref() {
|
|
2047
2063
|
const state = ref(window.location.href);
|
|
2048
2064
|
const owner = {};
|
|
@@ -2059,6 +2075,10 @@ function useCheckRoute() {
|
|
|
2059
2075
|
const currentRoutes = getCurrentRoutes();
|
|
2060
2076
|
const instance = getCurrentInstance();
|
|
2061
2077
|
const currentPath = useCurrentHref();
|
|
2078
|
+
const checkRouteCache = {
|
|
2079
|
+
lastUrl: null,
|
|
2080
|
+
results: /* @__PURE__ */ new Map()
|
|
2081
|
+
};
|
|
2062
2082
|
const checkMatchResult = function(route, result, options) {
|
|
2063
2083
|
if (!result) {
|
|
2064
2084
|
return false;
|
|
@@ -2074,7 +2094,7 @@ function useCheckRoute() {
|
|
|
2074
2094
|
return false;
|
|
2075
2095
|
}
|
|
2076
2096
|
}
|
|
2077
|
-
if (!(options == null ? void 0 : options.params) &&
|
|
2097
|
+
if (!(options == null ? void 0 : options.params) && "propsToParams" in route && options.properties) {
|
|
2078
2098
|
const { params } = route.propsToParams(options.properties);
|
|
2079
2099
|
for (const key in params) {
|
|
2080
2100
|
if (result.params[key] !== params[key]) {
|
|
@@ -2097,7 +2117,7 @@ function useCheckRoute() {
|
|
|
2097
2117
|
}
|
|
2098
2118
|
};
|
|
2099
2119
|
const checkRoute = function(route, options) {
|
|
2100
|
-
const result = urlhelpers.matchCurrent(route.url, route.params);
|
|
2120
|
+
const result = urlhelpers.matchCurrent(route.url, "params" in route ? route.params : {});
|
|
2101
2121
|
checkRouteCache.results.set(route.url, { result, route });
|
|
2102
2122
|
if (route.name) {
|
|
2103
2123
|
checkRouteCache.results.set(route.name, { result, route });
|
|
@@ -2162,8 +2182,8 @@ function useShow() {
|
|
|
2162
2182
|
const currentComponent = useCurrentComponent();
|
|
2163
2183
|
const rawShow = inject("reactive_navigation_show", null);
|
|
2164
2184
|
const urlHelpers = useUrl();
|
|
2165
|
-
return (options) => {
|
|
2166
|
-
const show = unref(rawShow);
|
|
2185
|
+
return (options, customShow) => {
|
|
2186
|
+
const show = customShow ?? unref(rawShow);
|
|
2167
2187
|
if (!show) {
|
|
2168
2188
|
console.warn("Failed to perform show");
|
|
2169
2189
|
return Promise.resolve();
|
|
@@ -2564,7 +2584,6 @@ const navigationMethods = {
|
|
|
2564
2584
|
};
|
|
2565
2585
|
const NavigationMixin = {
|
|
2566
2586
|
created() {
|
|
2567
|
-
var _a;
|
|
2568
2587
|
const definitions = {
|
|
2569
2588
|
pop: usePop(),
|
|
2570
2589
|
showDetail: useShowDetail(),
|
|
@@ -2584,10 +2603,6 @@ const NavigationMixin = {
|
|
|
2584
2603
|
$url: useUrl(),
|
|
2585
2604
|
$navigate: useNavigate()
|
|
2586
2605
|
};
|
|
2587
|
-
const navigationOptions = (_a = this.$options) == null ? void 0 : _a.navigation;
|
|
2588
|
-
if (navigationOptions || this.customRoutes) {
|
|
2589
|
-
defineRoutes((navigationOptions == null ? void 0 : navigationOptions.routes) ?? (this.customRoutes ? this.customRoutes.bind(this) : null) ?? []);
|
|
2590
|
-
}
|
|
2591
2606
|
injectHooks(this, definitions);
|
|
2592
2607
|
},
|
|
2593
2608
|
computed: {
|
|
@@ -2773,6 +2788,13 @@ const _sfc_main = defineComponent({
|
|
|
2773
2788
|
}
|
|
2774
2789
|
};
|
|
2775
2790
|
},
|
|
2791
|
+
detailProvide() {
|
|
2792
|
+
return {
|
|
2793
|
+
// Detail can not alter the navigation of the parent of split view controller.
|
|
2794
|
+
reactive_navigation_can_pop: false,
|
|
2795
|
+
reactive_navigation_can_dismiss: false
|
|
2796
|
+
};
|
|
2797
|
+
},
|
|
2776
2798
|
lastIsDetail() {
|
|
2777
2799
|
var _a, _b;
|
|
2778
2800
|
return this.detailKey != null && ((_b = (_a = this.navigationController) == null ? void 0 : _a.mainComponent) == null ? void 0 : _b.key) == this.detailKey;
|
|
@@ -2811,6 +2833,7 @@ const _sfc_main = defineComponent({
|
|
|
2811
2833
|
return this.navigationController.returnToHistoryIndex();
|
|
2812
2834
|
},
|
|
2813
2835
|
onResize() {
|
|
2836
|
+
if (this.$el.isConnected === false) return false;
|
|
2814
2837
|
if (this.shouldCollapse()) {
|
|
2815
2838
|
if (this.detail) {
|
|
2816
2839
|
this.collapse().catch(console.error);
|
|
@@ -3017,8 +3040,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
3017
3040
|
_ctx.detail ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
3018
3041
|
(openBlock(), createBlock(_component_FramedComponent, {
|
|
3019
3042
|
key: _ctx.detail.key,
|
|
3020
|
-
root: _ctx.detail
|
|
3021
|
-
|
|
3043
|
+
root: _ctx.detail,
|
|
3044
|
+
"custom-provide": _ctx.detailProvide
|
|
3045
|
+
}, null, 8, ["root", "custom-provide"]))
|
|
3022
3046
|
])) : createCommentVNode("", true)
|
|
3023
3047
|
], 8, _hoisted_1);
|
|
3024
3048
|
}
|
|
@@ -3036,6 +3060,7 @@ export {
|
|
|
3036
3060
|
SplitViewController,
|
|
3037
3061
|
_sfc_main$3 as StackComponent,
|
|
3038
3062
|
UrlHelper,
|
|
3063
|
+
defineRoute,
|
|
3039
3064
|
defineRoutes,
|
|
3040
3065
|
extendUrl,
|
|
3041
3066
|
forAllRoots,
|
|
@@ -3050,6 +3075,7 @@ export {
|
|
|
3050
3075
|
setTitleSuffix,
|
|
3051
3076
|
setUrl,
|
|
3052
3077
|
templateToUrl,
|
|
3078
|
+
typeRoute,
|
|
3053
3079
|
useCanDismiss,
|
|
3054
3080
|
useCanPop,
|
|
3055
3081
|
useCheckRoute,
|
|
@@ -3,7 +3,7 @@ import { ComponentWithProperties, ComponentWithPropertiesType } from './Componen
|
|
|
3
3
|
import { PopOptions } from './PopOptions';
|
|
4
4
|
import { PushOptions } from './PushOptions';
|
|
5
5
|
|
|
6
|
-
declare const
|
|
6
|
+
declare const NavigationController: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
7
7
|
root: {
|
|
8
8
|
default: null;
|
|
9
9
|
type: PropType<ComponentWithProperties | null>;
|
|
@@ -29,7 +29,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
29
29
|
asyncQueue: (() => Promise<void>)[];
|
|
30
30
|
asyncQueueRunning: boolean;
|
|
31
31
|
cachedProvides: Map<number, any>;
|
|
32
|
-
}, {
|
|
32
|
+
}, {
|
|
33
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
34
|
+
}, {
|
|
33
35
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
34
36
|
provideForComponent(key: number): any;
|
|
35
37
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -135,7 +137,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
135
137
|
asyncQueue: (() => Promise<void>)[];
|
|
136
138
|
asyncQueueRunning: boolean;
|
|
137
139
|
cachedProvides: Map<number, any>;
|
|
138
|
-
}, {
|
|
140
|
+
}, {
|
|
141
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
142
|
+
}, {
|
|
139
143
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
140
144
|
provideForComponent(key: number): any;
|
|
141
145
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -172,6 +176,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
172
176
|
reactive_navigation_can_dismiss: {
|
|
173
177
|
default: boolean;
|
|
174
178
|
};
|
|
179
|
+
reactive_navigationController: {
|
|
180
|
+
default: null;
|
|
181
|
+
};
|
|
175
182
|
}, {}, {
|
|
176
183
|
FramedComponent: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
177
184
|
root: {
|
|
@@ -235,7 +242,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
235
242
|
asyncQueue: (() => Promise<void>)[];
|
|
236
243
|
asyncQueueRunning: boolean;
|
|
237
244
|
cachedProvides: Map<number, any>;
|
|
238
|
-
}, {
|
|
245
|
+
}, {
|
|
246
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
247
|
+
}, {
|
|
239
248
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
240
249
|
provideForComponent(key: number): any;
|
|
241
250
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -266,4 +275,4 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
266
275
|
reactive_navigation_show: (options: PushOptions) => Promise<void>;
|
|
267
276
|
reactive_navigation_pop: import('vue').ComputedRef<unknown>;
|
|
268
277
|
}, true, {}, any>;
|
|
269
|
-
export default
|
|
278
|
+
export default NavigationController;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DefineComponent, Ref } from 'vue';
|
|
2
2
|
import { default as NavigationController } from './NavigationController.vue';
|
|
3
3
|
import { default as Popup } from './Popup.vue';
|
|
4
|
+
import { useNavigationController } from './useNavigationController';
|
|
4
5
|
import { useSplitViewController } from './useSplitViewController';
|
|
5
6
|
import { NavigationOptions, useCanDismiss, useCanPop, useDismiss, useFocused, useNavigate, usePop, usePresent, useShow, useShowDetail, useUrl } from './utils/navigationHooks';
|
|
6
7
|
import { useModalStackComponent } from './utils/useModalStackComponent';
|
|
7
|
-
import { useNavigationController } from './useNavigationController';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @returns To detect whether you are in a popup
|
|
@@ -23,12 +23,16 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
23
23
|
reactive_navigation_disable_url: import('vue').ComputedRef<boolean>;
|
|
24
24
|
reactive_provide_default_handler: (defaultHandler: DefaultRouteHandler) => void;
|
|
25
25
|
};
|
|
26
|
+
detailProvide(): {
|
|
27
|
+
reactive_navigation_can_pop: boolean;
|
|
28
|
+
reactive_navigation_can_dismiss: boolean;
|
|
29
|
+
};
|
|
26
30
|
lastIsDetail(): boolean;
|
|
27
31
|
navigationController(): InstanceType<typeof NavigationController>;
|
|
28
32
|
masterElement(): HTMLElement;
|
|
29
33
|
}, {
|
|
30
34
|
returnToHistoryIndex(): boolean;
|
|
31
|
-
onResize():
|
|
35
|
+
onResize(): false | undefined;
|
|
32
36
|
getScrollElement(element?: HTMLElement | null): HTMLElement;
|
|
33
37
|
shouldNavigateAway(): Promise<boolean>;
|
|
34
38
|
showDetail(options: PushOptions): Promise<boolean>;
|
|
@@ -74,7 +78,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
74
78
|
asyncQueue: (() => Promise<void>)[];
|
|
75
79
|
asyncQueueRunning: boolean;
|
|
76
80
|
cachedProvides: Map<number, any>;
|
|
77
|
-
}, {
|
|
81
|
+
}, {
|
|
82
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
83
|
+
}, {
|
|
78
84
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
79
85
|
provideForComponent(key: number): any;
|
|
80
86
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -180,7 +186,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
180
186
|
asyncQueue: (() => Promise<void>)[];
|
|
181
187
|
asyncQueueRunning: boolean;
|
|
182
188
|
cachedProvides: Map<number, any>;
|
|
183
|
-
}, {
|
|
189
|
+
}, {
|
|
190
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
191
|
+
}, {
|
|
184
192
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
185
193
|
provideForComponent(key: number): any;
|
|
186
194
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -217,6 +225,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
217
225
|
reactive_navigation_can_dismiss: {
|
|
218
226
|
default: boolean;
|
|
219
227
|
};
|
|
228
|
+
reactive_navigationController: {
|
|
229
|
+
default: null;
|
|
230
|
+
};
|
|
220
231
|
}, {}, {
|
|
221
232
|
FramedComponent: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
222
233
|
root: {
|
|
@@ -280,7 +291,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
280
291
|
asyncQueue: (() => Promise<void>)[];
|
|
281
292
|
asyncQueueRunning: boolean;
|
|
282
293
|
cachedProvides: Map<number, any>;
|
|
283
|
-
}, {
|
|
294
|
+
}, {
|
|
295
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
296
|
+
}, {
|
|
284
297
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
285
298
|
provideForComponent(key: number): any;
|
|
286
299
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -360,12 +373,16 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
360
373
|
reactive_navigation_disable_url: import('vue').ComputedRef<boolean>;
|
|
361
374
|
reactive_provide_default_handler: (defaultHandler: DefaultRouteHandler) => void;
|
|
362
375
|
};
|
|
376
|
+
detailProvide(): {
|
|
377
|
+
reactive_navigation_can_pop: boolean;
|
|
378
|
+
reactive_navigation_can_dismiss: boolean;
|
|
379
|
+
};
|
|
363
380
|
lastIsDetail(): boolean;
|
|
364
381
|
navigationController(): InstanceType<typeof NavigationController>;
|
|
365
382
|
masterElement(): HTMLElement;
|
|
366
383
|
}, {
|
|
367
384
|
returnToHistoryIndex(): boolean;
|
|
368
|
-
onResize():
|
|
385
|
+
onResize(): false | undefined;
|
|
369
386
|
getScrollElement(element?: HTMLElement | null): HTMLElement;
|
|
370
387
|
shouldNavigateAway(): Promise<boolean>;
|
|
371
388
|
showDetail(options: PushOptions): Promise<boolean>;
|
|
@@ -400,7 +417,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
400
417
|
asyncQueue: (() => Promise<void>)[];
|
|
401
418
|
asyncQueueRunning: boolean;
|
|
402
419
|
cachedProvides: Map<number, any>;
|
|
403
|
-
}, {
|
|
420
|
+
}, {
|
|
421
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
422
|
+
}, {
|
|
404
423
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
405
424
|
provideForComponent(key: number): any;
|
|
406
425
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -506,7 +525,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
506
525
|
asyncQueue: (() => Promise<void>)[];
|
|
507
526
|
asyncQueueRunning: boolean;
|
|
508
527
|
cachedProvides: Map<number, any>;
|
|
509
|
-
}, {
|
|
528
|
+
}, {
|
|
529
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
530
|
+
}, {
|
|
510
531
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
511
532
|
provideForComponent(key: number): any;
|
|
512
533
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -543,6 +564,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
543
564
|
reactive_navigation_can_dismiss: {
|
|
544
565
|
default: boolean;
|
|
545
566
|
};
|
|
567
|
+
reactive_navigationController: {
|
|
568
|
+
default: null;
|
|
569
|
+
};
|
|
546
570
|
}, {}, {
|
|
547
571
|
FramedComponent: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
548
572
|
root: {
|
|
@@ -606,7 +630,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
606
630
|
asyncQueue: (() => Promise<void>)[];
|
|
607
631
|
asyncQueueRunning: boolean;
|
|
608
632
|
cachedProvides: Map<number, any>;
|
|
609
|
-
}, {
|
|
633
|
+
}, {
|
|
634
|
+
navigationController(): InstanceType<typeof NavigationController> | null;
|
|
635
|
+
}, {
|
|
610
636
|
cacheComponentProvides(newComponent: ComponentWithPropertiesType): void;
|
|
611
637
|
provideForComponent(key: number): any;
|
|
612
638
|
runQueue<T>(run: () => Promise<T>): Promise<T>;
|
|
@@ -692,12 +718,16 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
692
718
|
reactive_navigation_disable_url: import('vue').ComputedRef<boolean>;
|
|
693
719
|
reactive_provide_default_handler: (defaultHandler: DefaultRouteHandler) => void;
|
|
694
720
|
};
|
|
721
|
+
detailProvide(): {
|
|
722
|
+
reactive_navigation_can_pop: boolean;
|
|
723
|
+
reactive_navigation_can_dismiss: boolean;
|
|
724
|
+
};
|
|
695
725
|
lastIsDetail(): boolean;
|
|
696
726
|
navigationController(): InstanceType<typeof NavigationController>;
|
|
697
727
|
masterElement(): HTMLElement;
|
|
698
728
|
}, {
|
|
699
729
|
returnToHistoryIndex(): boolean;
|
|
700
|
-
onResize():
|
|
730
|
+
onResize(): false | undefined;
|
|
701
731
|
getScrollElement(element?: HTMLElement | null): HTMLElement;
|
|
702
732
|
shouldNavigateAway(): Promise<boolean>;
|
|
703
733
|
showDetail(options: PushOptions): Promise<boolean>;
|
|
@@ -66,6 +66,10 @@ export declare class UrlHelper {
|
|
|
66
66
|
static trim(url: string): string;
|
|
67
67
|
match<Params>(template: string, params?: UrlParamsConstructors<Params>): UrlMatchResult<Params> | undefined;
|
|
68
68
|
}
|
|
69
|
+
type ConstructorToType<C> = C extends NumberConstructor ? number : C extends StringConstructor ? string : C extends BooleanConstructor ? boolean : never;
|
|
70
|
+
export type ParamsFromConstructors<C> = {
|
|
71
|
+
[K in keyof C]: ConstructorToType<C[K]>;
|
|
72
|
+
};
|
|
69
73
|
export type UrlParamsConstructors<Params> = {
|
|
70
74
|
[Key in keyof Params]: Params[Key] extends number ? NumberConstructor : StringConstructor;
|
|
71
75
|
};
|
|
@@ -80,3 +84,4 @@ export type UrlMatchResult<Params> = {
|
|
|
80
84
|
export declare function matchPath<Params>(path: string | string[], query: URLSearchParams, template: string, params?: UrlParamsConstructors<Params>): UrlMatchResult<Params> | undefined;
|
|
81
85
|
export declare function matchQuery(): void;
|
|
82
86
|
export declare function templateToUrl<Params>(template: string, params: Params): string;
|
|
87
|
+
export {};
|
|
@@ -3,70 +3,67 @@ import { ComponentWithProperties, ModalDisplayStyle } from '../ComponentWithProp
|
|
|
3
3
|
import { HistoryUrl } from '../HistoryManager';
|
|
4
4
|
import { PopOptions } from '../PopOptions';
|
|
5
5
|
import { PushOptions } from '../PushOptions';
|
|
6
|
-
import { UrlMatchResult, UrlParamsConstructors } from './UrlHelper';
|
|
6
|
+
import { ParamsFromConstructors, UrlMatchResult, UrlParamsConstructors } from './UrlHelper';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
|
|
9
|
+
export declare function typeRoute<const C extends Record<string, StringConstructor | NumberConstructor>, Props = unknown>(route: DistributiveOmit<RouteWithParams<Props, ParamsFromConstructors<C>>, 'params'> & {
|
|
10
|
+
params: C;
|
|
11
|
+
}): RouteWithParams<Props, ParamsFromConstructors<C>>;
|
|
12
|
+
export declare function typeRoute<Props = unknown>(route: RouteWithoutParams<Props>): RouteWithoutParams<Props>;
|
|
13
|
+
export declare const defineRoute: typeof typeRoute;
|
|
14
|
+
type NotFunction<T> = T extends Function ? never : T;
|
|
15
|
+
type RouteComponent<Props> = {
|
|
14
16
|
present?: ModalDisplayStyle | true;
|
|
15
|
-
show?: true | 'detail'
|
|
16
|
-
|
|
17
|
-
paramsToProps?: (params: Params, query?: URLSearchParams) => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
18
|
-
/**
|
|
19
|
-
* Used for building back the URL if only properties are provided
|
|
20
|
-
*/
|
|
21
|
-
propsToParams?: (props: Record<string, unknown>) => {
|
|
22
|
-
params: Params;
|
|
23
|
-
query?: URLSearchParams;
|
|
17
|
+
show?: true | 'detail' | {
|
|
18
|
+
getCustomShow: () => (options: PushOptions) => Promise<void>;
|
|
24
19
|
};
|
|
20
|
+
component: NotFunction<Component> | 'self' | ((props: Record<string, unknown>) => Promise<Component | ComponentWithProperties> | Component | ComponentWithProperties);
|
|
25
21
|
} | {
|
|
26
|
-
name?: string;
|
|
27
|
-
url: string;
|
|
28
|
-
params?: UrlParamsConstructors<Params>;
|
|
29
|
-
query?: UrlParamsConstructors<unknown>;
|
|
30
|
-
present?: ModalDisplayStyle | true;
|
|
31
22
|
handler: (options: {
|
|
32
23
|
url: string;
|
|
33
24
|
adjustHistory: boolean;
|
|
34
25
|
animated: boolean;
|
|
35
26
|
modalDisplayStyle: ModalDisplayStyle | undefined;
|
|
36
27
|
checkRoutes: boolean;
|
|
37
|
-
componentProperties:
|
|
28
|
+
componentProperties: Props;
|
|
38
29
|
}) => Promise<void>;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
30
|
+
};
|
|
31
|
+
export type RouteWithParams<Props, Params> = {
|
|
32
|
+
name?: string;
|
|
33
|
+
url: string;
|
|
34
|
+
params: UrlParamsConstructors<Params>;
|
|
35
|
+
isDefault?: RouteNavigationOptions<Props, Params> & ({
|
|
36
|
+
params: Params;
|
|
37
|
+
} | {
|
|
38
|
+
properties: Props;
|
|
39
|
+
});
|
|
40
|
+
paramsToProps: (params: Params, query?: URLSearchParams) => Promise<Props> | Props;
|
|
41
|
+
propsToParams: (props: Props) => {
|
|
45
42
|
params: Params;
|
|
46
43
|
query?: URLSearchParams;
|
|
47
44
|
};
|
|
48
|
-
}
|
|
49
|
-
export type
|
|
45
|
+
} & RouteComponent<Props>;
|
|
46
|
+
export type RouteWithoutParams<Props> = {
|
|
47
|
+
name?: string;
|
|
48
|
+
url: string;
|
|
49
|
+
isDefault?: RouteNavigationOptions<Props>;
|
|
50
|
+
defaultProperties?: (query?: URLSearchParams) => Promise<Props> | Props;
|
|
51
|
+
} & RouteComponent<Props>;
|
|
52
|
+
export type Route<Props = Record<string, unknown>, Params = Record<string, unknown>> = RouteWithParams<Props, Params> | RouteWithoutParams<Props>;
|
|
53
|
+
export type RouteNavigationOptions<Props = Record<string, unknown>, Params = Record<string, never>> = {
|
|
50
54
|
params?: Params;
|
|
51
|
-
properties?:
|
|
55
|
+
properties?: Props;
|
|
52
56
|
query?: URLSearchParams;
|
|
53
57
|
animated?: boolean;
|
|
54
58
|
adjustHistory?: boolean;
|
|
55
59
|
checkRoutes?: boolean;
|
|
56
60
|
};
|
|
57
|
-
export type RouteIdentification<Params> = {
|
|
58
|
-
name: string;
|
|
59
|
-
} | {
|
|
60
|
-
url: string;
|
|
61
|
-
} | {
|
|
62
|
-
route: Route<Params>;
|
|
63
|
-
};
|
|
64
61
|
export type NavigationOptions<T> = {
|
|
65
62
|
title: string | ((this: T) => string);
|
|
66
63
|
routes?: Route<any>[];
|
|
67
64
|
};
|
|
68
65
|
export declare function usePop(): (options?: PopOptions) => Promise<void> | undefined;
|
|
69
|
-
export declare function useNavigate(): <
|
|
66
|
+
export declare function useNavigate(): <Props, Params>(prop1: string | Route<Props, Params>, prop2?: RouteNavigationOptions<Props, Params>) => Promise<void>;
|
|
70
67
|
export type DefaultRouteHandler = () => Promise<boolean>;
|
|
71
68
|
/**
|
|
72
69
|
* Return true when the route has been handled and other route checks should not be executed.
|
|
@@ -74,12 +71,12 @@ export type DefaultRouteHandler = () => Promise<boolean>;
|
|
|
74
71
|
export type OnCheckRoutesHandler = () => Promise<void | boolean> | void | boolean;
|
|
75
72
|
export declare function onCheckRoutes(handler: OnCheckRoutesHandler): void;
|
|
76
73
|
export declare function onNotCheckRoutes(handler: OnCheckRoutesHandler): void;
|
|
77
|
-
export declare function defineRoutes(
|
|
74
|
+
export declare function defineRoutes(tmpRoutes: Route<any>[]): void;
|
|
78
75
|
export declare function useCurrentHref(): Ref<string, string>;
|
|
79
76
|
export declare function useCheckRoute(): <Params extends Record<string, unknown>>(prop1: string | Route<Params>, prop2?: RouteNavigationOptions<Params>) => boolean;
|
|
80
77
|
export declare function normalizePushOptions(o: PushOptions | ComponentWithProperties, currentComponent: ComponentWithProperties | null, urlHelpers: ReturnType<typeof useUrl>): PushOptions;
|
|
81
78
|
export declare function useManualPresent(): (present: (options: PushOptions) => Promise<void> | void, options: PushOptions | ComponentWithProperties) => void | Promise<void>;
|
|
82
|
-
export declare function useShow(): (options: PushOptions | ComponentWithProperties) => Promise<void>;
|
|
79
|
+
export declare function useShow(): (options: PushOptions | ComponentWithProperties, customShow?: (options: PushOptions) => Promise<void>) => Promise<void>;
|
|
83
80
|
export declare function useShowDetail(): (options: PushOptions | ComponentWithProperties) => Promise<void>;
|
|
84
81
|
export declare function usePresent(): (options: PushOptions | ComponentWithProperties) => Promise<void>;
|
|
85
82
|
export declare function useDismiss(): (options?: PopOptions) => Promise<void>;
|
|
@@ -106,3 +103,4 @@ export declare function useUrl(): {
|
|
|
106
103
|
matchCurrent<Params>(template: string, params?: UrlParamsConstructors<Params>): UrlMatchResult<Params> | undefined;
|
|
107
104
|
overrideUrl(url: HistoryUrl, title?: string): void;
|
|
108
105
|
};
|
|
106
|
+
export {};
|