@cratis/scene.react 4.13.0 → 4.14.0

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/dist/cjs/core/coreComponents.js +1 -1
  2. package/dist/cjs/index.js +12 -2
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/navigation/SceneNavigationContext.js.map +1 -1
  5. package/dist/cjs/navigation/SceneNavigationHost.js +19 -44
  6. package/dist/cjs/navigation/SceneNavigationHost.js.map +1 -1
  7. package/dist/cjs/navigation/createBrowserSceneHistory.js +39 -0
  8. package/dist/cjs/navigation/createBrowserSceneHistory.js.map +1 -0
  9. package/dist/cjs/navigation/createMemorySceneHistory.js +53 -0
  10. package/dist/cjs/navigation/createMemorySceneHistory.js.map +1 -0
  11. package/dist/cjs/navigation/matchSceneRoute.js +43 -0
  12. package/dist/cjs/navigation/matchSceneRoute.js.map +1 -0
  13. package/dist/cjs/navigation/resolveDestination.js +1 -0
  14. package/dist/cjs/navigation/resolveDestination.js.map +1 -1
  15. package/dist/cjs/navigation/sceneRoutesFrom.js +37 -0
  16. package/dist/cjs/navigation/sceneRoutesFrom.js.map +1 -0
  17. package/dist/cjs/navigation/useSceneHistoryNavigation.js +112 -0
  18. package/dist/cjs/navigation/useSceneHistoryNavigation.js.map +1 -0
  19. package/dist/esm/core/coreComponents.js +1 -1
  20. package/dist/esm/index.js +6 -1
  21. package/dist/esm/index.js.map +1 -1
  22. package/dist/esm/navigation/DestinationResolution.d.ts +1 -0
  23. package/dist/esm/navigation/DestinationResolution.d.ts.map +1 -1
  24. package/dist/esm/navigation/DialogResult.d.ts +5 -0
  25. package/dist/esm/navigation/DialogResult.d.ts.map +1 -0
  26. package/dist/esm/navigation/DialogResult.js +2 -0
  27. package/dist/esm/navigation/DialogResult.js.map +1 -0
  28. package/dist/esm/navigation/SceneHistory.d.ts +10 -0
  29. package/dist/esm/navigation/SceneHistory.d.ts.map +1 -0
  30. package/dist/esm/navigation/SceneHistory.js +2 -0
  31. package/dist/esm/navigation/SceneHistory.js.map +1 -0
  32. package/dist/esm/navigation/SceneNavigationContext.d.ts +6 -1
  33. package/dist/esm/navigation/SceneNavigationContext.d.ts.map +1 -1
  34. package/dist/esm/navigation/SceneNavigationContext.js.map +1 -1
  35. package/dist/esm/navigation/SceneNavigationHost.d.ts +7 -2
  36. package/dist/esm/navigation/SceneNavigationHost.d.ts.map +1 -1
  37. package/dist/esm/navigation/SceneNavigationHost.js +20 -45
  38. package/dist/esm/navigation/SceneNavigationHost.js.map +1 -1
  39. package/dist/esm/navigation/SceneNavigationState.d.ts +8 -0
  40. package/dist/esm/navigation/SceneNavigationState.d.ts.map +1 -0
  41. package/dist/esm/navigation/SceneNavigationState.js +2 -0
  42. package/dist/esm/navigation/SceneNavigationState.js.map +1 -0
  43. package/dist/esm/navigation/SceneRoute.d.ts +6 -0
  44. package/dist/esm/navigation/SceneRoute.d.ts.map +1 -0
  45. package/dist/esm/navigation/SceneRoute.js +2 -0
  46. package/dist/esm/navigation/SceneRoute.js.map +1 -0
  47. package/dist/esm/navigation/createBrowserSceneHistory.d.ts +4 -0
  48. package/dist/esm/navigation/createBrowserSceneHistory.d.ts.map +1 -0
  49. package/dist/esm/navigation/createBrowserSceneHistory.js +37 -0
  50. package/dist/esm/navigation/createBrowserSceneHistory.js.map +1 -0
  51. package/dist/esm/navigation/createMemorySceneHistory.d.ts +7 -0
  52. package/dist/esm/navigation/createMemorySceneHistory.d.ts.map +1 -0
  53. package/dist/esm/navigation/createMemorySceneHistory.js +51 -0
  54. package/dist/esm/navigation/createMemorySceneHistory.js.map +1 -0
  55. package/dist/esm/navigation/index.d.ts +10 -1
  56. package/dist/esm/navigation/index.d.ts.map +1 -1
  57. package/dist/esm/navigation/index.js +10 -1
  58. package/dist/esm/navigation/index.js.map +1 -1
  59. package/dist/esm/navigation/matchSceneRoute.d.ts +7 -0
  60. package/dist/esm/navigation/matchSceneRoute.d.ts.map +1 -0
  61. package/dist/esm/navigation/matchSceneRoute.js +41 -0
  62. package/dist/esm/navigation/matchSceneRoute.js.map +1 -0
  63. package/dist/esm/navigation/resolveDestination.d.ts.map +1 -1
  64. package/dist/esm/navigation/resolveDestination.js +1 -0
  65. package/dist/esm/navigation/resolveDestination.js.map +1 -1
  66. package/dist/esm/navigation/sceneRoutesFrom.d.ts +4 -0
  67. package/dist/esm/navigation/sceneRoutesFrom.d.ts.map +1 -0
  68. package/dist/esm/navigation/sceneRoutesFrom.js +35 -0
  69. package/dist/esm/navigation/sceneRoutesFrom.js.map +1 -0
  70. package/dist/esm/navigation/useSceneHistoryNavigation.d.ts +6 -0
  71. package/dist/esm/navigation/useSceneHistoryNavigation.d.ts.map +1 -0
  72. package/dist/esm/navigation/useSceneHistoryNavigation.js +110 -0
  73. package/dist/esm/navigation/useSceneHistoryNavigation.js.map +1 -0
  74. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  75. package/navigation/DestinationResolution.ts +3 -0
  76. package/navigation/DialogResult.ts +8 -0
  77. package/navigation/SceneHistory.ts +24 -0
  78. package/navigation/SceneNavigationContext.tsx +16 -1
  79. package/navigation/SceneNavigationHost.tsx +30 -40
  80. package/navigation/SceneNavigationState.ts +19 -0
  81. package/navigation/SceneRoute.ts +12 -0
  82. package/navigation/createBrowserSceneHistory.ts +40 -0
  83. package/navigation/createMemorySceneHistory.ts +44 -0
  84. package/navigation/index.ts +10 -1
  85. package/navigation/matchSceneRoute.ts +45 -0
  86. package/navigation/resolveDestination.ts +1 -0
  87. package/navigation/sceneRoutesFrom.ts +24 -0
  88. package/navigation/useSceneHistoryNavigation.ts +80 -0
  89. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sceneRoutesFrom.d.ts","sourceRoot":"","sources":["../../../navigation/sceneRoutesFrom.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,oBAAoB,EAAO,GAAG,UAAU,EAAE,CAW1G"}
@@ -0,0 +1,35 @@
1
+ import { DestinationKind } from '@cratis/scene.model';
2
+ import { identityRoute } from './identityRoute.js';
3
+
4
+ // Copyright (c) Cratis. All rights reserved.
5
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
6
+ /**
7
+ * The routes a host can deep link to: every screen at its own name, and every outlet destination at its
8
+ * authored route override or identity route. A destination listed earlier wins a route it shares with a
9
+ * later one, and authored overrides come before the screen-name defaults.
10
+ */ function sceneRoutesFrom(screens, destinations = []) {
11
+ const routes = [];
12
+ for (const destination of destinations){
13
+ const kind = destination.kind ?? (destination.dialog ? DestinationKind.Dialog : DestinationKind.Outlet);
14
+ const screen = destination.screen ?? destination.slice;
15
+ const route = destination.route ?? identityRoute(destination);
16
+ if (kind !== DestinationKind.Outlet || !screen || !route) continue;
17
+ routes.push({
18
+ route,
19
+ screen,
20
+ ...destination.outlet ? {
21
+ outlet: destination.outlet
22
+ } : {}
23
+ });
24
+ }
25
+ return [
26
+ ...routes,
27
+ ...screens.map((screen)=>({
28
+ route: screen,
29
+ screen
30
+ }))
31
+ ];
32
+ }
33
+
34
+ export { sceneRoutesFrom };
35
+ //# sourceMappingURL=sceneRoutesFrom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sceneRoutesFrom.js","sources":["../../../navigation/sceneRoutesFrom.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DestinationKind, DestinationReference } from '@cratis/scene.model';\nimport { identityRoute } from './identityRoute';\nimport { SceneRoute } from './SceneRoute';\n\n/**\n * The routes a host can deep link to: every screen at its own name, and every outlet destination at its\n * authored route override or identity route. A destination listed earlier wins a route it shares with a\n * later one, and authored overrides come before the screen-name defaults.\n */\nexport function sceneRoutesFrom(screens: string[], destinations: DestinationReference[] = []): SceneRoute[] {\n const routes: SceneRoute[] = [];\n for (const destination of destinations) {\n const kind = destination.kind ?? (destination.dialog ? DestinationKind.Dialog : DestinationKind.Outlet);\n const screen = destination.screen ?? destination.slice;\n const route = destination.route ?? identityRoute(destination);\n if (kind !== DestinationKind.Outlet || !screen || !route) continue;\n routes.push({ route, screen, ...(destination.outlet ? { outlet: destination.outlet } : {}) });\n }\n\n return [...routes, ...screens.map(screen => ({ route: screen, screen }))];\n}\n"],"names":["sceneRoutesFrom","screens","destinations","routes","destination","kind","dialog","DestinationKind","Dialog","Outlet","screen","slice","route","identityRoute","push","outlet","map"],"mappings":";;;AAAA;AACA;AAMA;;;;AAIC,IACM,SAASA,eAAAA,CAAgBC,OAAiB,EAAEC,eAAuC,EAAE,EAAA;AACxF,IAAA,MAAMC,SAAuB,EAAE;IAC/B,KAAK,MAAMC,eAAeF,YAAAA,CAAc;AACpC,QAAA,MAAMG,IAAAA,GAAOD,WAAAA,CAAYC,IAAI,KAAKD,WAAAA,CAAYE,MAAM,GAAGC,eAAAA,CAAgBC,MAAM,GAAGD,eAAAA,CAAgBE,MAAM,CAAD;AACrG,QAAA,MAAMC,MAAAA,GAASN,WAAAA,CAAYM,MAAM,IAAIN,YAAYO,KAAK;AACtD,QAAA,MAAMC,KAAAA,GAAQR,WAAAA,CAAYQ,KAAK,IAAIC,aAAAA,CAAcT,WAAAA,CAAAA;AACjD,QAAA,IAAIC,SAASE,eAAAA,CAAgBE,MAAM,IAAI,CAACC,MAAAA,IAAU,CAACE,KAAAA,EAAO;AAC1DT,QAAAA,MAAAA,CAAOW,IAAI,CAAC;AAAEF,YAAAA,KAAAA;AAAOF,YAAAA,MAAAA;YAAQ,GAAIN,WAAAA,CAAYW,MAAM,GAAG;AAAEA,gBAAAA,MAAAA,EAAQX,YAAYW;AAAO,aAAA,GAAI;AAAI,SAAA,CAAA;AAC/F,IAAA;IAEA,OAAO;AAAIZ,QAAAA,GAAAA,MAAAA;AAAWF,QAAAA,GAAAA,OAAAA,CAAQe,GAAG,CAACN,CAAAA,MAAAA,IAAW;gBAAEE,KAAAA,EAAOF,MAAAA;AAAQA,gBAAAA;aAAO,CAAA;AAAI,KAAA;AAC7E;;"}
@@ -0,0 +1,6 @@
1
+ import { BindingScope } from '@cratis/scene.engine';
2
+ import { SceneHistory } from './SceneHistory';
3
+ import { SceneNavigationContextValue } from './SceneNavigationContext';
4
+ import { SceneRoute } from './SceneRoute';
5
+ export declare function useSceneHistoryNavigation(history: SceneHistory, routes: SceneRoute[], initialScreen: string, bindingScope: BindingScope): SceneNavigationContextValue;
6
+ //# sourceMappingURL=useSceneHistoryNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSceneHistoryNavigation.d.ts","sourceRoot":"","sources":["../../../navigation/useSceneHistoryNavigation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,2BAA2B,CA4DrK"}
@@ -0,0 +1,110 @@
1
+ import { useCallback, useMemo, useState, useRef, useEffect } from 'react';
2
+ import { DestinationKind } from '@cratis/scene.model';
3
+ import { matchSceneRoute } from './matchSceneRoute.js';
4
+ import { resolveDestination } from './resolveDestination.js';
5
+
6
+ // Copyright (c) Cratis. All rights reserved.
7
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
8
+ /**
9
+ * Keeps a navigation host's state in a {@link SceneHistory}: every navigation and every dialog is an entry,
10
+ * so back and forward step through them, a refresh restores the stored entry, and a deep link is matched
11
+ * against the route table. Closing a dialog goes back to the entry that opened it.
12
+ */ function useSceneHistoryNavigation(history, routes, initialScreen, bindingScope) {
13
+ const fromLocation = useCallback((url)=>{
14
+ const match = url ? matchSceneRoute(url, routes) : undefined;
15
+ return match ? {
16
+ screen: match.route.screen,
17
+ url,
18
+ outlet: match.route.outlet,
19
+ parameters: match.parameters
20
+ } : undefined;
21
+ }, [
22
+ routes
23
+ ]);
24
+ const fallback = useMemo(()=>({
25
+ screen: initialScreen,
26
+ url: initialScreen,
27
+ parameters: {}
28
+ }), [
29
+ initialScreen
30
+ ]);
31
+ const [unresolvedUrl] = useState(()=>{
32
+ const url = history.location();
33
+ return !history.state() && url && !fromLocation(url) ? url : undefined;
34
+ });
35
+ const [state, setState] = useState(()=>history.state() ?? fromLocation(history.location()) ?? fallback);
36
+ const [dialogResult, setDialogResult] = useState();
37
+ // Back and forward restore the stored entry, or match a URL the host never wrote against the current routes.
38
+ const restore = useRef((url, stored)=>stored ?? fromLocation(url) ?? fallback);
39
+ restore.current = (url, stored)=>stored ?? fromLocation(url) ?? fallback;
40
+ const initialState = useRef(state);
41
+ // The current entry is written once, when a history is attached; later entries are written by navigate.
42
+ useEffect(()=>{
43
+ history.replace(initialState.current);
44
+ return history.listen((url, stored)=>setState(restore.current(url, stored)));
45
+ }, [
46
+ history
47
+ ]);
48
+ const go = useCallback((next)=>{
49
+ history.push(next);
50
+ setState(next);
51
+ }, [
52
+ history
53
+ ]);
54
+ const navigate = useCallback((destination)=>{
55
+ const resolution = resolveDestination(destination, bindingScope);
56
+ if (resolution.kind === DestinationKind.Dialog) {
57
+ if (resolution.dialog) go({
58
+ ...state,
59
+ dialog: resolution.dialog
60
+ });
61
+ } else if (resolution.kind !== DestinationKind.External) {
62
+ go({
63
+ screen: destination.screen ?? destination.slice ?? state.screen,
64
+ url: resolution.url,
65
+ outlet: resolution.outlet,
66
+ parameters: resolution.parameters
67
+ });
68
+ }
69
+ return resolution;
70
+ }, [
71
+ bindingScope,
72
+ go,
73
+ state
74
+ ]);
75
+ const closeDialog = useCallback((result)=>{
76
+ if (!state.dialog) return;
77
+ setDialogResult({
78
+ dialog: state.dialog,
79
+ result
80
+ });
81
+ history.back();
82
+ }, [
83
+ history,
84
+ state.dialog
85
+ ]);
86
+ return useMemo(()=>({
87
+ currentScreen: state.screen,
88
+ currentUrl: state.url,
89
+ currentOutlet: state.outlet,
90
+ currentDialog: state.dialog,
91
+ currentParameters: state.parameters,
92
+ dialogResult,
93
+ unresolvedUrl,
94
+ bindingScope,
95
+ navigate,
96
+ closeDialog,
97
+ back: ()=>history.back()
98
+ }), [
99
+ bindingScope,
100
+ closeDialog,
101
+ dialogResult,
102
+ history,
103
+ navigate,
104
+ state,
105
+ unresolvedUrl
106
+ ]);
107
+ }
108
+
109
+ export { useSceneHistoryNavigation };
110
+ //# sourceMappingURL=useSceneHistoryNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSceneHistoryNavigation.js","sources":["../../../navigation/useSceneHistoryNavigation.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { BindingScope } from '@cratis/scene.engine';\nimport { DestinationKind, DestinationReference } from '@cratis/scene.model';\nimport { DialogResult } from './DialogResult';\nimport { matchSceneRoute } from './matchSceneRoute';\nimport { resolveDestination } from './resolveDestination';\nimport { SceneHistory } from './SceneHistory';\nimport { SceneNavigationContextValue } from './SceneNavigationContext';\nimport { SceneNavigationState } from './SceneNavigationState';\nimport { SceneRoute } from './SceneRoute';\n\n/**\n * Keeps a navigation host's state in a {@link SceneHistory}: every navigation and every dialog is an entry,\n * so back and forward step through them, a refresh restores the stored entry, and a deep link is matched\n * against the route table. Closing a dialog goes back to the entry that opened it.\n */\nexport function useSceneHistoryNavigation(history: SceneHistory, routes: SceneRoute[], initialScreen: string, bindingScope: BindingScope): SceneNavigationContextValue {\n const fromLocation = useCallback((url: string | undefined): SceneNavigationState | undefined => {\n const match = url ? matchSceneRoute(url, routes) : undefined;\n return match ? { screen: match.route.screen, url, outlet: match.route.outlet, parameters: match.parameters } : undefined;\n }, [routes]);\n const fallback = useMemo<SceneNavigationState>(() => ({ screen: initialScreen, url: initialScreen, parameters: {} }), [initialScreen]);\n\n const [unresolvedUrl] = useState(() => {\n const url = history.location();\n return !history.state() && url && !fromLocation(url) ? url : undefined;\n });\n const [state, setState] = useState<SceneNavigationState>(() => history.state() ?? fromLocation(history.location()) ?? fallback);\n const [dialogResult, setDialogResult] = useState<DialogResult>();\n\n // Back and forward restore the stored entry, or match a URL the host never wrote against the current routes.\n const restore = useRef((url: string | undefined, stored: SceneNavigationState | undefined) => stored ?? fromLocation(url) ?? fallback);\n restore.current = (url, stored) => stored ?? fromLocation(url) ?? fallback;\n const initialState = useRef(state);\n\n // The current entry is written once, when a history is attached; later entries are written by navigate.\n useEffect(() => {\n history.replace(initialState.current);\n return history.listen((url, stored) => setState(restore.current(url, stored)));\n }, [history]);\n\n const go = useCallback((next: SceneNavigationState) => {\n history.push(next);\n setState(next);\n }, [history]);\n\n const navigate = useCallback((destination: DestinationReference) => {\n const resolution = resolveDestination(destination, bindingScope);\n if (resolution.kind === DestinationKind.Dialog) {\n if (resolution.dialog) go({ ...state, dialog: resolution.dialog });\n } else if (resolution.kind !== DestinationKind.External) {\n go({ screen: destination.screen ?? destination.slice ?? state.screen, url: resolution.url, outlet: resolution.outlet, parameters: resolution.parameters });\n }\n\n return resolution;\n }, [bindingScope, go, state]);\n\n const closeDialog = useCallback((result?: unknown) => {\n if (!state.dialog) return;\n setDialogResult({ dialog: state.dialog, result });\n history.back();\n }, [history, state.dialog]);\n\n return useMemo(() => ({\n currentScreen: state.screen,\n currentUrl: state.url,\n currentOutlet: state.outlet,\n currentDialog: state.dialog,\n currentParameters: state.parameters,\n dialogResult,\n unresolvedUrl,\n bindingScope,\n navigate,\n closeDialog,\n back: () => history.back(),\n }), [bindingScope, closeDialog, dialogResult, history, navigate, state, unresolvedUrl]);\n}\n"],"names":["useSceneHistoryNavigation","history","routes","initialScreen","bindingScope","fromLocation","useCallback","url","match","matchSceneRoute","undefined","screen","route","outlet","parameters","fallback","useMemo","unresolvedUrl","useState","location","state","setState","dialogResult","setDialogResult","restore","useRef","stored","current","initialState","useEffect","replace","listen","go","next","push","navigate","destination","resolution","resolveDestination","kind","DestinationKind","Dialog","dialog","External","slice","closeDialog","result","back","currentScreen","currentUrl","currentOutlet","currentDialog","currentParameters"],"mappings":"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"}