@powerhousedao/common 3.2.0-dev.4 → 3.2.0-dev.6

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 (106) hide show
  1. package/dist/drive-analytics/processor/document-processor.d.ts +14 -0
  2. package/dist/drive-analytics/processor/document-processor.d.ts.map +1 -0
  3. package/dist/drive-analytics/processor/document-processor.js +66 -0
  4. package/dist/drive-analytics/processor/document-processor.js.map +1 -0
  5. package/dist/drive-analytics/processor/{processor.d.ts → drive-processor.d.ts} +1 -1
  6. package/dist/drive-analytics/processor/drive-processor.d.ts.map +1 -0
  7. package/dist/drive-analytics/processor/{processor.js → drive-processor.js} +1 -1
  8. package/dist/drive-analytics/processor/drive-processor.js.map +1 -0
  9. package/dist/drive-analytics/processor/index.d.ts +2 -1
  10. package/dist/drive-analytics/processor/index.d.ts.map +1 -1
  11. package/dist/drive-analytics/processor/index.js +13 -2
  12. package/dist/drive-analytics/processor/index.js.map +1 -1
  13. package/dist/editors/generic-drive-explorer/components/file-content-view.d.ts.map +1 -1
  14. package/dist/editors/generic-drive-explorer/components/file-content-view.js.map +1 -1
  15. package/dist/editors/generic-drive-explorer/editor.d.ts.map +1 -1
  16. package/dist/editors/generic-drive-explorer/editor.js +27 -3
  17. package/dist/editors/generic-drive-explorer/editor.js.map +1 -1
  18. package/dist/editors/styles.css +7 -1
  19. package/dist/editors/utils/storybook.d.ts.map +1 -1
  20. package/dist/editors/utils/storybook.js +13 -14
  21. package/dist/editors/utils/storybook.js.map +1 -1
  22. package/dist/editors/utils/uiNodes.d.ts +2 -2
  23. package/dist/editors/utils/uiNodes.d.ts.map +1 -1
  24. package/dist/editors/utils/uiNodes.js +2 -3
  25. package/dist/editors/utils/uiNodes.js.map +1 -1
  26. package/dist/hooks/useTimelineItems.d.ts +1 -1
  27. package/dist/hooks/useTimelineItems.d.ts.map +1 -1
  28. package/dist/hooks/useTimelineItems.js +8 -6
  29. package/dist/hooks/useTimelineItems.js.map +1 -1
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/package.json +12 -2
  35. package/dist/state/atoms.d.ts +136 -0
  36. package/dist/state/atoms.d.ts.map +1 -0
  37. package/dist/state/atoms.js +311 -0
  38. package/dist/state/atoms.js.map +1 -0
  39. package/dist/state/document-model-modules.d.ts +10 -0
  40. package/dist/state/document-model-modules.d.ts.map +1 -0
  41. package/dist/state/document-model-modules.js +82 -0
  42. package/dist/state/document-model-modules.js.map +1 -0
  43. package/dist/state/documents.d.ts +17 -0
  44. package/dist/state/documents.d.ts.map +1 -0
  45. package/dist/state/documents.js +40 -0
  46. package/dist/state/documents.js.map +1 -0
  47. package/dist/state/drives.d.ts +57 -0
  48. package/dist/state/drives.d.ts.map +1 -0
  49. package/dist/state/drives.js +194 -0
  50. package/dist/state/drives.js.map +1 -0
  51. package/dist/state/editor-modules.d.ts +7 -0
  52. package/dist/state/editor-modules.d.ts.map +1 -0
  53. package/dist/state/editor-modules.js +40 -0
  54. package/dist/state/editor-modules.js.map +1 -0
  55. package/dist/state/folders.d.ts +6 -0
  56. package/dist/state/folders.d.ts.map +1 -0
  57. package/dist/state/folders.js +11 -0
  58. package/dist/state/folders.js.map +1 -0
  59. package/dist/state/index.d.ts +16 -0
  60. package/dist/state/index.d.ts.map +1 -0
  61. package/dist/state/index.js +16 -0
  62. package/dist/state/index.js.map +1 -0
  63. package/dist/state/modals.d.ts +38 -0
  64. package/dist/state/modals.d.ts.map +1 -0
  65. package/dist/state/modals.js +32 -0
  66. package/dist/state/modals.js.map +1 -0
  67. package/dist/state/nodes.d.ts +29 -0
  68. package/dist/state/nodes.d.ts.map +1 -0
  69. package/dist/state/nodes.js +121 -0
  70. package/dist/state/nodes.js.map +1 -0
  71. package/dist/state/ph-packages.d.ts +10 -0
  72. package/dist/state/ph-packages.d.ts.map +1 -0
  73. package/dist/state/ph-packages.js +26 -0
  74. package/dist/state/ph-packages.js.map +1 -0
  75. package/dist/state/processors.d.ts +4 -0
  76. package/dist/state/processors.d.ts.map +1 -0
  77. package/dist/state/processors.js +26 -0
  78. package/dist/state/processors.js.map +1 -0
  79. package/dist/state/reactor.d.ts +16 -0
  80. package/dist/state/reactor.d.ts.map +1 -0
  81. package/dist/state/reactor.js +77 -0
  82. package/dist/state/reactor.js.map +1 -0
  83. package/dist/state/store-provider.d.ts +16 -0
  84. package/dist/state/store-provider.d.ts.map +1 -0
  85. package/dist/state/store-provider.js +19 -0
  86. package/dist/state/store-provider.js.map +1 -0
  87. package/dist/state/store.d.ts +14 -0
  88. package/dist/state/store.d.ts.map +1 -0
  89. package/dist/state/store.js +7 -0
  90. package/dist/state/store.js.map +1 -0
  91. package/dist/state/syncing.d.ts +3 -0
  92. package/dist/state/syncing.d.ts.map +1 -0
  93. package/dist/state/syncing.js +13 -0
  94. package/dist/state/syncing.js.map +1 -0
  95. package/dist/state/types.d.ts +73 -0
  96. package/dist/state/types.d.ts.map +1 -0
  97. package/dist/state/types.js +2 -0
  98. package/dist/state/types.js.map +1 -0
  99. package/dist/state/utils.d.ts +31 -0
  100. package/dist/state/utils.d.ts.map +1 -0
  101. package/dist/state/utils.js +108 -0
  102. package/dist/state/utils.js.map +1 -0
  103. package/dist/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +19 -9
  105. package/dist/drive-analytics/processor/processor.d.ts.map +0 -1
  106. package/dist/drive-analytics/processor/processor.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ import { type DocumentDriveDocument, type Trigger } from "document-drive";
2
+ import { type Loadable, type SharingType } from "./types.js";
3
+ /** Returns a loadable of the drives for a reactor. */
4
+ export declare function useDrives(): Loadable<DocumentDriveDocument[]>;
5
+ /** Returns a resolved promise of the drives for a reactor. */
6
+ export declare function useUnwrappedDrives(): DocumentDriveDocument[] | undefined;
7
+ /** Refreshes the drives for a reactor. */
8
+ export declare function useRefreshDrives(): (args_0: void) => void;
9
+ /** Returns a loadable of a drive for a reactor by id. */
10
+ export declare function useDriveById(id: string | null | undefined): Loadable<DocumentDriveDocument | undefined>;
11
+ /** Returns a resolved promise of a drive for a reactor by id. */
12
+ export declare function useUnwrappedDriveById(id: string | null | undefined): DocumentDriveDocument | undefined;
13
+ /** Returns a loadable of the selected drive */
14
+ export declare function useSelectedDrive(): Loadable<DocumentDriveDocument | undefined>;
15
+ /** Returns a resolved promise of the selected drive */
16
+ export declare function useUnwrappedSelectedDrive(): DocumentDriveDocument | undefined;
17
+ /** Returns a function that sets the selected drive with a drive id.
18
+ *
19
+ * If `shouldNavigate` is true, the URL will be updated to the new drive.
20
+ * `shouldNavigate` can be overridden by passing a different value to the callback.
21
+ */
22
+ export declare function useSetSelectedDrive(shouldNavigate?: boolean): (driveId: string | undefined, _shouldNavigate?: boolean) => void;
23
+ /** Returns a loadable of the remote URL for a drive. */
24
+ export declare function useDriveRemoteUrl(driveId: string | null | undefined): Loadable<string | undefined>;
25
+ /** Returns a loadable of the pull responder trigger for a drive. */
26
+ export declare function useDrivePullResponderTrigger(driveId: string | null | undefined): Loadable<Trigger | undefined>;
27
+ /** Returns a loadable of the pull responder URL for a drive. */
28
+ export declare function useDrivePullResponderUrl(driveId: string | null | undefined): Loadable<string | undefined>;
29
+ /** Returns a loadable of whether a drive is remote. */
30
+ export declare function useDriveIsRemote(driveId: string | null | undefined): Loadable<boolean>;
31
+ /** Returns a loadable of the sharing type for a drive. */
32
+ export declare function useDriveSharingType(driveId: string | null | undefined): Loadable<SharingType | undefined>;
33
+ /** Returns a loadable of whether a drive is available offline. */
34
+ export declare function useIsDriveAvailableOffline(driveId: string | null | undefined): Loadable<boolean>;
35
+ /** Returns the sharing type for a drive. */
36
+ export declare function getDriveSharingType(drive: {
37
+ state: {
38
+ local: {
39
+ sharingType?: string | null;
40
+ };
41
+ };
42
+ readContext?: {
43
+ sharingType?: string | null;
44
+ };
45
+ } | undefined | null): SharingType;
46
+ /** Returns whether a drive is available offline. */
47
+ export declare function getDriveAvailableOffline(drive: {
48
+ state: {
49
+ local: {
50
+ availableOffline?: boolean | null;
51
+ };
52
+ };
53
+ readContext?: {
54
+ availableOffline?: boolean | null;
55
+ };
56
+ } | undefined | null): boolean;
57
+ //# sourceMappingURL=drives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drives.d.ts","sourceRoot":"","sources":["../../state/drives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAW1E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG7D,sDAAsD;AACtD,wBAAgB,SAAS,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC,CAE7D;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,IAAI,qBAAqB,EAAE,GAAG,SAAS,CAExE;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,2BAE/B;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC5B,QAAQ,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAS7C;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAInC;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,IAAI,QAAQ,CAC1C,qBAAqB,GAAG,SAAS,CAClC,CAEA;AAED,uDAAuD;AACvD,wBAAgB,yBAAyB,IAAI,qBAAqB,GAAG,SAAS,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,UAAO,aAK3C,MAAM,GAAG,SAAS,qCAU/B;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CA0B9B;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAc/B;AAED,gEAAgE;AAChE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAS9B;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,QAAQ,CAAC,OAAO,CAAC,CAsBnB;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,CAUnC;AAED,kEAAkE;AAClE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,QAAQ,CAAC,OAAO,CAAC,CAUnB;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CACjC,KAAK,EACD;IACE,KAAK,EAAE;QACL,KAAK,EAAE;YACL,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SAC7B,CAAC;KACH,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CAAC;CACH,GACD,SAAS,GACT,IAAI,eAST;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,CACtC,KAAK,EACD;IACE,KAAK,EAAE;QACL,KAAK,EAAE;YACL,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;SACnC,CAAC;KACH,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KACnC,CAAC;CACH,GACD,SAAS,GACT,IAAI,WAQT"}
@@ -0,0 +1,194 @@
1
+ import { useAtomValue, useSetAtom } from "jotai";
2
+ import { useCallback } from "react";
3
+ import { drivesAtom, loadableDrivesAtom, loadableSelectedDriveAtom, selectedDriveAtom, unwrappedDrivesAtom, unwrappedSelectedDriveAtom, } from "./atoms.js";
4
+ import { makeDriveUrlComponent } from "./utils.js";
5
+ /** Returns a loadable of the drives for a reactor. */
6
+ export function useDrives() {
7
+ return useAtomValue(loadableDrivesAtom);
8
+ }
9
+ /** Returns a resolved promise of the drives for a reactor. */
10
+ export function useUnwrappedDrives() {
11
+ return useAtomValue(unwrappedDrivesAtom);
12
+ }
13
+ /** Refreshes the drives for a reactor. */
14
+ export function useRefreshDrives() {
15
+ return useSetAtom(drivesAtom);
16
+ }
17
+ /** Returns a loadable of a drive for a reactor by id. */
18
+ export function useDriveById(id) {
19
+ const loadableDrives = useDrives();
20
+ if (loadableDrives.state !== "hasData")
21
+ return loadableDrives;
22
+ if (!id)
23
+ return { state: "hasData", data: undefined };
24
+ const data = loadableDrives.data;
25
+ return {
26
+ state: "hasData",
27
+ data: data.find((d) => d.header.id === id),
28
+ };
29
+ }
30
+ /** Returns a resolved promise of a drive for a reactor by id. */
31
+ export function useUnwrappedDriveById(id) {
32
+ const drives = useUnwrappedDrives();
33
+ if (!id)
34
+ return undefined;
35
+ return drives?.find((d) => d.header.id === id);
36
+ }
37
+ /** Returns a loadable of the selected drive */
38
+ export function useSelectedDrive() {
39
+ return useAtomValue(loadableSelectedDriveAtom);
40
+ }
41
+ /** Returns a resolved promise of the selected drive */
42
+ export function useUnwrappedSelectedDrive() {
43
+ return useAtomValue(unwrappedSelectedDriveAtom);
44
+ }
45
+ /** Returns a function that sets the selected drive with a drive id.
46
+ *
47
+ * If `shouldNavigate` is true, the URL will be updated to the new drive.
48
+ * `shouldNavigate` can be overridden by passing a different value to the callback.
49
+ */
50
+ export function useSetSelectedDrive(shouldNavigate = true) {
51
+ const drives = useUnwrappedDrives();
52
+ const setSelectedDrive = useSetAtom(selectedDriveAtom);
53
+ return useCallback((driveId, _shouldNavigate = shouldNavigate) => {
54
+ setSelectedDrive(driveId);
55
+ const drive = drives?.find((d) => d.header.id === driveId);
56
+ const newPathname = makeDriveUrlComponent(drive);
57
+ if (typeof window !== "undefined" && _shouldNavigate) {
58
+ window.history.pushState(null, "", newPathname);
59
+ }
60
+ }, [drives, setSelectedDrive]);
61
+ }
62
+ /** Returns a loadable of the remote URL for a drive. */
63
+ export function useDriveRemoteUrl(driveId) {
64
+ const loadableDrive = useDriveById(driveId);
65
+ const pullResponderUrl = useDrivePullResponderUrl(driveId);
66
+ if (!driveId)
67
+ return { state: "hasData", data: undefined };
68
+ if (loadableDrive.state !== "hasData")
69
+ return loadableDrive;
70
+ const drive = loadableDrive.data;
71
+ if (!drive)
72
+ return { state: "hasData", data: undefined };
73
+ if ("remoteUrl" in drive.state.global) {
74
+ const remoteUrl = drive.state.global.remoteUrl;
75
+ if (typeof remoteUrl === "string") {
76
+ return {
77
+ state: "hasData",
78
+ data: remoteUrl,
79
+ };
80
+ }
81
+ }
82
+ if (pullResponderUrl.state !== "hasData")
83
+ return pullResponderUrl;
84
+ return {
85
+ state: "hasData",
86
+ data: undefined,
87
+ };
88
+ }
89
+ /** Returns a loadable of the pull responder trigger for a drive. */
90
+ export function useDrivePullResponderTrigger(driveId) {
91
+ const loadableDrive = useDriveById(driveId);
92
+ if (!driveId)
93
+ return { state: "hasData", data: undefined };
94
+ if (loadableDrive.state !== "hasData")
95
+ return loadableDrive;
96
+ const drive = loadableDrive.data;
97
+ if (!drive)
98
+ return { state: "hasData", data: undefined };
99
+ const pullResponder = drive.state.local.triggers.find((trigger) => trigger.type === "PullResponder");
100
+ return {
101
+ state: "hasData",
102
+ data: pullResponder,
103
+ };
104
+ }
105
+ /** Returns a loadable of the pull responder URL for a drive. */
106
+ export function useDrivePullResponderUrl(driveId) {
107
+ const pullResponder = useDrivePullResponderTrigger(driveId);
108
+ if (!driveId)
109
+ return { state: "hasData", data: undefined };
110
+ if (pullResponder.state !== "hasData")
111
+ return pullResponder;
112
+ const trigger = pullResponder.data;
113
+ return {
114
+ state: "hasData",
115
+ data: trigger?.data?.url,
116
+ };
117
+ }
118
+ /** Returns a loadable of whether a drive is remote. */
119
+ export function useDriveIsRemote(driveId) {
120
+ const remoteUrl = useDriveRemoteUrl(driveId);
121
+ const pullResponder = useDrivePullResponderTrigger(driveId);
122
+ if (!driveId)
123
+ return { state: "hasData", data: false };
124
+ if (remoteUrl.state === "loading" || pullResponder.state === "loading")
125
+ return {
126
+ state: "loading",
127
+ };
128
+ if (remoteUrl.state === "hasError")
129
+ return {
130
+ state: "hasError",
131
+ error: remoteUrl.error,
132
+ };
133
+ if (pullResponder.state === "hasError")
134
+ return {
135
+ state: "hasError",
136
+ error: pullResponder.error,
137
+ };
138
+ return {
139
+ state: "hasData",
140
+ data: remoteUrl.data !== undefined || pullResponder.data !== undefined,
141
+ };
142
+ }
143
+ /** Returns a loadable of the sharing type for a drive. */
144
+ export function useDriveSharingType(driveId) {
145
+ const loadableDrive = useDriveById(driveId);
146
+ if (!driveId)
147
+ return { state: "hasData", data: undefined };
148
+ if (loadableDrive.state !== "hasData")
149
+ return loadableDrive;
150
+ const drive = loadableDrive.data;
151
+ if (!drive)
152
+ return { state: "hasData", data: undefined };
153
+ return {
154
+ state: "hasData",
155
+ data: getDriveSharingType(drive),
156
+ };
157
+ }
158
+ /** Returns a loadable of whether a drive is available offline. */
159
+ export function useIsDriveAvailableOffline(driveId) {
160
+ const loadableDrive = useDriveById(driveId);
161
+ if (!driveId)
162
+ return { state: "hasData", data: false };
163
+ if (loadableDrive.state !== "hasData")
164
+ return loadableDrive;
165
+ const drive = loadableDrive.data;
166
+ if (!drive)
167
+ return { state: "hasData", data: false };
168
+ return {
169
+ state: "hasData",
170
+ data: getDriveAvailableOffline(drive),
171
+ };
172
+ }
173
+ /** Returns the sharing type for a drive. */
174
+ export function getDriveSharingType(drive) {
175
+ if (!drive)
176
+ return "PUBLIC";
177
+ const isReadDrive = "readContext" in drive;
178
+ const { sharingType: _sharingType } = !isReadDrive
179
+ ? drive.state.local
180
+ : { sharingType: "PUBLIC" };
181
+ const __sharingType = _sharingType?.toUpperCase();
182
+ return (__sharingType === "PRIVATE" ? "LOCAL" : __sharingType);
183
+ }
184
+ /** Returns whether a drive is available offline. */
185
+ export function getDriveAvailableOffline(drive) {
186
+ if (!drive)
187
+ return false;
188
+ const isReadDrive = "readContext" in drive;
189
+ const { availableOffline: _availableOffline } = !isReadDrive
190
+ ? drive.state.local
191
+ : { availableOffline: false };
192
+ return _availableOffline ?? false;
193
+ }
194
+ //# sourceMappingURL=drives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drives.js","sourceRoot":"","sources":["../../state/drives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type EditorModule } from "document-model";
2
+ import { type Loadable } from "./types.js";
3
+ export declare function useEditors(): Loadable<Promise<EditorModule<import("document-model").PHDocument<unknown, unknown, import("document-model").Action<string, unknown, import("document-model").OperationScope>>, unknown, Record<string, unknown>>[] | undefined>>;
4
+ export declare function useEditorById(id: string | null | undefined): Loadable<EditorModule | undefined>;
5
+ export declare function useEditorByDocumentType(documentType: string | null | undefined): Loadable<EditorModule | undefined>;
6
+ export declare function useGetEditor(): (documentType: string, preferredEditorId?: string) => EditorModule<import("document-model").PHDocument<unknown, unknown, import("document-model").Action<string, unknown, import("document-model").OperationScope>>, unknown, Record<string, unknown>> | undefined;
7
+ //# sourceMappingURL=editor-modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-modules.d.ts","sourceRoot":"","sources":["../../state/editor-modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAOnD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAgB,UAAU,sOAGzB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC5B,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,CAMpC;AAED,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,CAQpC;AAED,wBAAgB,YAAY,mBAIT,MAAM,sBAAsB,MAAM,kNAqBpD"}
@@ -0,0 +1,40 @@
1
+ import { useAtomValue } from "jotai";
2
+ import { useCallback } from "react";
3
+ import { loadableEditorModulesAtom, unwrappedEditorModulesAtom, } from "./atoms.js";
4
+ export function useEditors() {
5
+ const editors = useAtomValue(loadableEditorModulesAtom);
6
+ return editors;
7
+ }
8
+ export function useEditorById(id) {
9
+ const editors = useEditors();
10
+ if (!id)
11
+ return { state: "hasData", data: undefined };
12
+ if (editors.state !== "hasData")
13
+ return editors;
14
+ const editor = editors.data?.find((editor) => editor.config.id === id);
15
+ return { state: "hasData", data: editor };
16
+ }
17
+ export function useEditorByDocumentType(documentType) {
18
+ const editors = useEditors();
19
+ if (!documentType)
20
+ return { state: "hasData", data: undefined };
21
+ if (editors.state !== "hasData")
22
+ return editors;
23
+ const editor = editors.data?.find((editor) => editor.documentTypes.includes(documentType));
24
+ return { state: "hasData", data: editor };
25
+ }
26
+ export function useGetEditor() {
27
+ const unwrappedEditors = useAtomValue(unwrappedEditorModulesAtom);
28
+ const getEditor = useCallback((documentType, preferredEditorId) => {
29
+ if (!unwrappedEditors)
30
+ return undefined;
31
+ const preferredEditor = unwrappedEditors.find((editor) => editor.config.id === preferredEditorId &&
32
+ editor.documentTypes.includes(documentType));
33
+ if (preferredEditor)
34
+ return preferredEditor;
35
+ const defaultEditor = unwrappedEditors.find((editor) => editor.documentTypes.includes(documentType));
36
+ return defaultEditor;
37
+ }, [unwrappedEditors]);
38
+ return getEditor;
39
+ }
40
+ //# sourceMappingURL=editor-modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-modules.js","sourceRoot":"","sources":["../../state/editor-modules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAGpB,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;IACxD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,EAA6B;IAE7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,YAAuC;IAEvC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAChE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3C,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC5C,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,gBAAgB,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAElE,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,YAAoB,EAAE,iBAA0B,EAAE,EAAE;QACnD,IAAI,CAAC,gBAAgB;YAAE,OAAO,SAAS,CAAC;QAExC,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAC3C,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,iBAAiB;YACtC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC9C,CAAC;QAEF,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAE5C,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACrD,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC5C,CAAC;QAEF,OAAO,aAAa,CAAC;IACvB,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type FolderNode } from "document-drive";
2
+ /** Returns a loadable of the selected folder. */
3
+ export declare function useSelectedFolder(): import("jotai/vanilla/utils/loadable").Loadable<FolderNode | Promise<FolderNode | undefined> | undefined>;
4
+ /** Returns a resolved promise of the selected folder. */
5
+ export declare function useUnwrappedSelectedFolder(): FolderNode | undefined;
6
+ //# sourceMappingURL=folders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../state/folders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAOjD,iDAAiD;AACjD,wBAAgB,iBAAiB,8GAEhC;AAED,yDAAyD;AACzD,wBAAgB,0BAA0B,IAAI,UAAU,GAAG,SAAS,CAEnE"}
@@ -0,0 +1,11 @@
1
+ import { useAtomValue } from "jotai";
2
+ import { loadableSelectedFolderAtom, unwrappedSelectedFolderAtom, } from "./atoms.js";
3
+ /** Returns a loadable of the selected folder. */
4
+ export function useSelectedFolder() {
5
+ return useAtomValue(loadableSelectedFolderAtom);
6
+ }
7
+ /** Returns a resolved promise of the selected folder. */
8
+ export function useUnwrappedSelectedFolder() {
9
+ return useAtomValue(unwrappedSelectedFolderAtom);
10
+ }
11
+ //# sourceMappingURL=folders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.js","sourceRoot":"","sources":["../../state/folders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,iDAAiD;AACjD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAClD,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,0BAA0B;IACxC,OAAO,YAAY,CAAC,2BAA2B,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * from "./document-model-modules.js";
2
+ export * from "./documents.js";
3
+ export * from "./drives.js";
4
+ export * from "./editor-modules.js";
5
+ export * from "./folders.js";
6
+ export * from "./modals.js";
7
+ export * from "./nodes.js";
8
+ export * from "./ph-packages.js";
9
+ export * from "./processors.js";
10
+ export * from "./reactor.js";
11
+ export * from "./store-provider.js";
12
+ export * from "./store.js";
13
+ export * from "./syncing.js";
14
+ export * from "./types.js";
15
+ export * from "./utils.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../state/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * from "./document-model-modules.js";
2
+ export * from "./documents.js";
3
+ export * from "./drives.js";
4
+ export * from "./editor-modules.js";
5
+ export * from "./folders.js";
6
+ export * from "./modals.js";
7
+ export * from "./nodes.js";
8
+ export * from "./ph-packages.js";
9
+ export * from "./processors.js";
10
+ export * from "./reactor.js";
11
+ export * from "./store-provider.js";
12
+ export * from "./store.js";
13
+ export * from "./syncing.js";
14
+ export * from "./types.js";
15
+ export * from "./utils.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../state/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type PHDocument, type ValidationError } from "document-model";
2
+ type ModalRegistry = {
3
+ deleteNode: {
4
+ nodeId: string;
5
+ };
6
+ deleteDrive: {
7
+ driveId: string;
8
+ };
9
+ addDocument: {
10
+ documentModelId: string;
11
+ };
12
+ addDrive: never;
13
+ settings: never;
14
+ driveSettings: {
15
+ driveId: string;
16
+ };
17
+ upgradeDrive: {
18
+ driveId: string;
19
+ };
20
+ exportWithErrors: {
21
+ document: PHDocument;
22
+ validationErrors: ValidationError[];
23
+ };
24
+ clearStorage: never;
25
+ debugSettings: never;
26
+ disclaimer: never;
27
+ cookiesPolicy: never;
28
+ };
29
+ type ModalId = keyof ModalRegistry;
30
+ type ShowFn<K extends ModalId> = ModalRegistry[K] extends never ? () => void : (props: ModalRegistry[K]) => void;
31
+ export declare function useModal<K extends ModalId>(modalId: K): {
32
+ isOpen: boolean;
33
+ props: ModalRegistry[K];
34
+ show: ShowFn<K>;
35
+ hide: () => void;
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=modals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modals.d.ts","sourceRoot":"","sources":["../../state/modals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIvE,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,WAAW,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,QAAQ,EAAE,KAAK,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;IAChB,aAAa,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,gBAAgB,EAAE;QAChB,QAAQ,EAAE,UAAU,CAAC;QACrB,gBAAgB,EAAE,eAAe,EAAE,CAAC;KACrC,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;IACpB,aAAa,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;IAClB,aAAa,EAAE,KAAK,CAAC;CACtB,CAAC;AAEF,KAAK,OAAO,GAAG,MAAM,aAAa,CAAC;AAanC,KAAK,MAAM,CAAC,CAAC,SAAS,OAAO,IAE3B,aAAa,CAAC,CAAC,CAAC,SAAS,KAAK,GAC1B,MAAM,IAAI,GACV,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAkBxC,wBAAgB,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC;;;;;EAiCrD"}
@@ -0,0 +1,32 @@
1
+ import { atom, useAtomValue, useSetAtom } from "jotai";
2
+ import { useCallback, useMemo } from "react";
3
+ const modalAtom = atom({ id: null, props: null });
4
+ modalAtom.debugLabel = "modalAtom";
5
+ const showModalAtom = atom(null, (_get, set, payload) => {
6
+ set(modalAtom, payload);
7
+ });
8
+ showModalAtom.debugLabel = "showModalAtom";
9
+ const hideModalAtom = atom(null, (_get, set) => {
10
+ set(modalAtom, { id: null, props: null });
11
+ });
12
+ hideModalAtom.debugLabel = "hideModalAtom";
13
+ export function useModal(modalId) {
14
+ const modal = useAtomValue(modalAtom);
15
+ const showModal = useSetAtom(showModalAtom);
16
+ const hide = useSetAtom(hideModalAtom);
17
+ const isOpen = modal.id === modalId;
18
+ const show = useCallback((...args // one arg otherwise
19
+ ) => {
20
+ // pull props out (if any), cast for the atom
21
+ const props = args[0];
22
+ showModal({ id: modalId, props });
23
+ }, [modalId, showModal]);
24
+ const props = useMemo(() => (modal.props ?? {}), [modal.props]);
25
+ return useMemo(() => ({
26
+ isOpen,
27
+ props,
28
+ show,
29
+ hide,
30
+ }), [isOpen, props, show, hide]);
31
+ }
32
+ //# sourceMappingURL=modals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modals.js","sourceRoot":"","sources":["../../state/modals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAqB,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAuC7C,MAAM,SAAS,GAAG,IAAI,CAAa,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,SAAS,CAAC,UAAU,GAAG,WAAW,CAAC;AAEnC,MAAM,aAAa,GAA4C,IAAI,CACjE,IAAI,EACJ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IACrB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1B,CAAC,CACF,CAAC;AACF,aAAa,CAAC,UAAU,GAAG,eAAe,CAAC;AAE3C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7C,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AACH,aAAa,CAAC,UAAU,GAAG,eAAe,CAAC;AAE3C,MAAM,UAAU,QAAQ,CAAoB,OAAU;IACpD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;IAEpC,MAAM,IAAI,GAAG,WAAW,CACtB,CACE,GAAG,IAE0B,CAAC,oBAAoB;MAClD,EAAE;QACF,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACvB,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAuB,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,OAAO,EAAE,SAAS,CAAC,CACR,CAAC;IAEf,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAqB,EAC7C,CAAC,KAAK,CAAC,KAAK,CAAC,CACd,CAAC;IAEF,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,MAAM;QACN,KAAK;QACL,IAAI;QACJ,IAAI;KACL,CAAC,EACF,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type FileNode, type FolderNode, type Node } from "document-drive";
2
+ import { type Loadable, type NodeKind } from "./types.js";
3
+ /** Returns a loadable of the nodes for a reactor. */
4
+ export declare function useNodes(): Loadable<Node[] | undefined>;
5
+ /** Returns a function that sets the selected node with a node id.
6
+ *
7
+ * If `shouldNavigate` is true, the URL will be updated to the new node.
8
+ * `shouldNavigate` can be overridden by passing a different value to the callback.
9
+ */
10
+ export declare function useSetSelectedNode(shouldNavigate?: boolean): (nodeId: string | undefined, _shouldNavigate?: boolean) => void;
11
+ /** Returns a resolved promise of the nodes for a reactor. */
12
+ export declare function useUnwrappedNodes(): Node[] | undefined;
13
+ /** Returns a resolved promise of a node for a reactor by id. */
14
+ export declare function useNodeById(id: string | null | undefined): Node | undefined;
15
+ /** Returns a resolved promise of the parent folder for a node. */
16
+ export declare function useParentFolder(id: string | null | undefined): string | undefined;
17
+ /** Returns a loadable of the path to a node. */
18
+ export declare function useNodePath(id: string | null | undefined): Loadable<Node[] | undefined>;
19
+ /** Returns a loadable of the child nodes for the selected drive or folder. */
20
+ export declare function useChildNodes(): Loadable<Node[] | undefined>;
21
+ /** Returns the kind of a node. */
22
+ export declare function useNodeKind(id: string | null | undefined): NodeKind | undefined;
23
+ /** Sorts nodes by name. */
24
+ export declare function sortNodesByName<TNode extends Node>(nodes: TNode[]): TNode[];
25
+ /** Returns whether a node is a file. */
26
+ export declare function isFileNodeKind(node: Node | null | undefined): node is FileNode;
27
+ /** Returns whether a node is a folder. */
28
+ export declare function isFolderNodeKind(node: Node | null | undefined): node is FolderNode;
29
+ //# sourceMappingURL=nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../state/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAU3E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG1D,qDAAqD;AACrD,wBAAgB,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,UAAO,YAK3C,MAAM,GAAG,SAAS,qCAsB9B;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,uBAEhC;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,oBAGxD;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,sBAG5D;AAED,gDAAgD;AAChD,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC5B,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAyB9B;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAiB5D;AAED,kCAAkC;AAClC,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,wBAMxD;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,CAAC,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAE3E;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAC5B,IAAI,IAAI,QAAQ,CAGlB;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAC5B,IAAI,IAAI,UAAU,CAGpB"}
@@ -0,0 +1,121 @@
1
+ import { useAtomValue, useSetAtom } from "jotai";
2
+ import { useCallback } from "react";
3
+ import { loadableNodesAtom, setSelectedNodeAtom, unwrappedNodesAtom, } from "./atoms.js";
4
+ import { useSelectedDrive } from "./drives.js";
5
+ import { useSelectedFolder } from "./folders.js";
6
+ import { extractDriveFromPath, makeNodeUrlComponent } from "./utils.js";
7
+ /** Returns a loadable of the nodes for a reactor. */
8
+ export function useNodes() {
9
+ return useAtomValue(loadableNodesAtom);
10
+ }
11
+ /** Returns a function that sets the selected node with a node id.
12
+ *
13
+ * If `shouldNavigate` is true, the URL will be updated to the new node.
14
+ * `shouldNavigate` can be overridden by passing a different value to the callback.
15
+ */
16
+ export function useSetSelectedNode(shouldNavigate = true) {
17
+ const nodes = useUnwrappedNodes();
18
+ const setSelectedNode = useSetAtom(setSelectedNodeAtom);
19
+ return useCallback((nodeId, _shouldNavigate = shouldNavigate) => {
20
+ setSelectedNode(nodeId);
21
+ if (typeof window !== "undefined" && _shouldNavigate) {
22
+ const driveSlugFromPath = extractDriveFromPath(window.location.pathname);
23
+ const node = nodes?.find((n) => n.id === nodeId);
24
+ if (!node) {
25
+ window.history.pushState(null, "", `/d/${driveSlugFromPath}`);
26
+ }
27
+ else {
28
+ const nodeSlug = makeNodeUrlComponent(node);
29
+ window.history.pushState(null, "", `/d/${driveSlugFromPath}/${nodeSlug}`);
30
+ }
31
+ }
32
+ }, [setSelectedNode, nodes]);
33
+ }
34
+ /** Returns a resolved promise of the nodes for a reactor. */
35
+ export function useUnwrappedNodes() {
36
+ return useAtomValue(unwrappedNodesAtom);
37
+ }
38
+ /** Returns a resolved promise of a node for a reactor by id. */
39
+ export function useNodeById(id) {
40
+ const unwrappedNodes = useUnwrappedNodes();
41
+ return unwrappedNodes?.find((n) => n.id === id);
42
+ }
43
+ /** Returns a resolved promise of the parent folder for a node. */
44
+ export function useParentFolder(id) {
45
+ const node = useNodeById(id);
46
+ return node?.parentFolder ?? undefined;
47
+ }
48
+ /** Returns a loadable of the path to a node. */
49
+ export function useNodePath(id) {
50
+ const loadableNodes = useNodes();
51
+ const loadableSelectedDrive = useSelectedDrive();
52
+ if (loadableSelectedDrive.state !== "hasData")
53
+ return loadableSelectedDrive;
54
+ if (loadableNodes.state !== "hasData")
55
+ return loadableNodes;
56
+ const nodes = loadableNodes.data;
57
+ const selectedDrive = loadableSelectedDrive.data;
58
+ if (!nodes || !selectedDrive)
59
+ return { state: "hasData", data: undefined };
60
+ const driveFolderNode = {
61
+ id: selectedDrive.header.id,
62
+ name: selectedDrive.state.global.name,
63
+ kind: "FOLDER",
64
+ parentFolder: null,
65
+ };
66
+ const path = [driveFolderNode];
67
+ let current = nodes.find((n) => n.id === id);
68
+ while (current) {
69
+ path.unshift(current);
70
+ if (!current.parentFolder)
71
+ break;
72
+ current = nodes.find((n) => n.id === current?.parentFolder);
73
+ }
74
+ return { state: "hasData", data: path.reverse() };
75
+ }
76
+ /** Returns a loadable of the child nodes for the selected drive or folder. */
77
+ export function useChildNodes() {
78
+ const nodes = useNodes();
79
+ const selectedFolder = useSelectedFolder();
80
+ if (nodes.state !== "hasData")
81
+ return nodes;
82
+ if (selectedFolder.state !== "hasData")
83
+ return selectedFolder;
84
+ const selectedFolderId = selectedFolder.data?.id;
85
+ if (!selectedFolderId)
86
+ return {
87
+ state: "hasData",
88
+ data: sortNodesByName(nodes.data ?? []),
89
+ };
90
+ return {
91
+ state: "hasData",
92
+ data: sortNodesByName(nodes.data?.filter((n) => n.parentFolder === selectedFolderId) ?? []),
93
+ };
94
+ }
95
+ /** Returns the kind of a node. */
96
+ export function useNodeKind(id) {
97
+ const unwrappedNodes = useUnwrappedNodes();
98
+ if (!unwrappedNodes)
99
+ return undefined;
100
+ const node = unwrappedNodes.find((n) => n.id === id);
101
+ if (!node)
102
+ return undefined;
103
+ return node.kind.toUpperCase();
104
+ }
105
+ /** Sorts nodes by name. */
106
+ export function sortNodesByName(nodes) {
107
+ return nodes.toSorted((a, b) => a.name.localeCompare(b.name));
108
+ }
109
+ /** Returns whether a node is a file. */
110
+ export function isFileNodeKind(node) {
111
+ if (!node)
112
+ return false;
113
+ return node.kind.toUpperCase() === "FILE";
114
+ }
115
+ /** Returns whether a node is a folder. */
116
+ export function isFolderNodeKind(node) {
117
+ if (!node)
118
+ return false;
119
+ return node.kind.toUpperCase() === "FOLDER";
120
+ }
121
+ //# sourceMappingURL=nodes.js.map