@powerhousedao/codegen 6.0.0-dev.109 → 6.0.0-dev.110

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 (153) hide show
  1. package/dist/src/codegen/__tests__/config.d.ts +0 -1
  2. package/dist/src/codegen/__tests__/config.d.ts.map +1 -1
  3. package/dist/src/codegen/__tests__/config.js +0 -1
  4. package/dist/src/codegen/__tests__/config.js.map +1 -1
  5. package/dist/src/codegen/__tests__/generate-doc-model.test.js +0 -1
  6. package/dist/src/codegen/__tests__/generate-doc-model.test.js.map +1 -1
  7. package/dist/src/codegen/__tests__/generate-drive-editor.test.js +0 -5
  8. package/dist/src/codegen/__tests__/generate-drive-editor.test.js.map +1 -1
  9. package/dist/src/codegen/__tests__/generate-editor.test.js +0 -4
  10. package/dist/src/codegen/__tests__/generate-editor.test.js.map +1 -1
  11. package/dist/src/codegen/__tests__/generate-processor.test.js +0 -1
  12. package/dist/src/codegen/__tests__/generate-processor.test.js.map +1 -1
  13. package/dist/src/codegen/__tests__/generate-subgraph.test.d.ts +2 -0
  14. package/dist/src/codegen/__tests__/generate-subgraph.test.d.ts.map +1 -0
  15. package/dist/src/codegen/__tests__/generate-subgraph.test.js +197 -0
  16. package/dist/src/codegen/__tests__/generate-subgraph.test.js.map +1 -0
  17. package/dist/src/codegen/generate.d.ts +10 -17
  18. package/dist/src/codegen/generate.d.ts.map +1 -1
  19. package/dist/src/codegen/generate.js +38 -101
  20. package/dist/src/codegen/generate.js.map +1 -1
  21. package/dist/src/codegen/index.d.ts +0 -1
  22. package/dist/src/codegen/index.d.ts.map +1 -1
  23. package/dist/src/codegen/index.js +0 -1
  24. package/dist/src/codegen/index.js.map +1 -1
  25. package/dist/src/file-builders/index.d.ts +1 -0
  26. package/dist/src/file-builders/index.d.ts.map +1 -1
  27. package/dist/src/file-builders/index.js +1 -0
  28. package/dist/src/file-builders/index.js.map +1 -1
  29. package/dist/src/file-builders/subgraph.d.ts +10 -0
  30. package/dist/src/file-builders/subgraph.d.ts.map +1 -0
  31. package/dist/src/file-builders/subgraph.js +121 -0
  32. package/dist/src/file-builders/subgraph.js.map +1 -0
  33. package/dist/src/templates/index.d.ts +1 -0
  34. package/dist/src/templates/index.d.ts.map +1 -1
  35. package/dist/src/templates/index.js +1 -0
  36. package/dist/src/templates/index.js.map +1 -1
  37. package/dist/src/templates/subgraphs/custom-resolvers.d.ts +5 -0
  38. package/dist/src/templates/subgraphs/custom-resolvers.d.ts.map +1 -0
  39. package/dist/src/{codegen/.hygen/templates/powerhouse/generate-custom-subgraph/resolvers.esm.t → templates/subgraphs/custom-resolvers.js} +6 -6
  40. package/dist/src/templates/subgraphs/custom-resolvers.js.map +1 -0
  41. package/dist/src/templates/subgraphs/custom-schema.d.ts +5 -0
  42. package/dist/src/templates/subgraphs/custom-schema.d.ts.map +1 -0
  43. package/dist/src/templates/subgraphs/custom-schema.js +20 -0
  44. package/dist/src/templates/subgraphs/custom-schema.js.map +1 -0
  45. package/dist/src/templates/subgraphs/document-model-resolvers.d.ts +15 -0
  46. package/dist/src/templates/subgraphs/document-model-resolvers.d.ts.map +1 -0
  47. package/dist/src/{codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/resolvers.esm.t → templates/subgraphs/document-model-resolvers.js} +55 -47
  48. package/dist/src/templates/subgraphs/document-model-resolvers.js.map +1 -0
  49. package/dist/src/templates/subgraphs/document-model-schema.d.ts +12 -0
  50. package/dist/src/templates/subgraphs/document-model-schema.d.ts.map +1 -0
  51. package/dist/src/templates/subgraphs/document-model-schema.js +54 -0
  52. package/dist/src/templates/subgraphs/document-model-schema.js.map +1 -0
  53. package/dist/src/templates/subgraphs/index-file.d.ts +5 -0
  54. package/dist/src/templates/subgraphs/index-file.d.ts.map +1 -0
  55. package/dist/src/{codegen/.hygen/templates/powerhouse/generate-subgraph/index.esm.t → templates/subgraphs/index-file.js} +7 -7
  56. package/dist/src/templates/subgraphs/index-file.js.map +1 -0
  57. package/dist/src/templates/subgraphs/index.d.ts +7 -0
  58. package/dist/src/templates/subgraphs/index.d.ts.map +1 -0
  59. package/dist/src/templates/subgraphs/index.js +7 -0
  60. package/dist/src/templates/subgraphs/index.js.map +1 -0
  61. package/dist/src/templates/subgraphs/lib-file.d.ts +2 -0
  62. package/dist/src/templates/subgraphs/lib-file.d.ts.map +1 -0
  63. package/dist/src/templates/subgraphs/lib-file.js +8 -0
  64. package/dist/src/templates/subgraphs/lib-file.js.map +1 -0
  65. package/dist/src/utils/cli.d.ts +0 -6
  66. package/dist/src/utils/cli.d.ts.map +1 -1
  67. package/dist/src/utils/cli.js +0 -18
  68. package/dist/src/utils/cli.js.map +1 -1
  69. package/dist/src/utils/graphql-type-prefixes.d.ts +10 -0
  70. package/dist/src/utils/graphql-type-prefixes.d.ts.map +1 -0
  71. package/dist/src/utils/graphql-type-prefixes.js +51 -0
  72. package/dist/src/utils/graphql-type-prefixes.js.map +1 -0
  73. package/dist/src/utils/index.d.ts +1 -0
  74. package/dist/src/utils/index.d.ts.map +1 -1
  75. package/dist/src/utils/index.js +1 -0
  76. package/dist/src/utils/index.js.map +1 -1
  77. package/dist/tsconfig.tsbuildinfo +1 -1
  78. package/package.json +9 -18
  79. package/dist/src/codegen/.hygen/package.json +0 -6
  80. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/index.js +0 -10
  81. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/schema.esm.t +0 -20
  82. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/actions.esm.t +0 -16
  83. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/creators.esm.t +0 -9
  84. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/customUtils.esm.t +0 -5
  85. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/document-schema.esm.t +0 -56
  86. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/document-type.esm.t +0 -6
  87. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/documentModel.esm.t +0 -7
  88. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/documentModelTest.esm.t +0 -121
  89. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/hooks.esm.t +0 -49
  90. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.esm.t +0 -23
  91. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.js +0 -127
  92. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/module.esm.t +0 -22
  93. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/ph-factories.esm.t +0 -93
  94. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/reducer.esm.t +0 -46
  95. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/root-utils.esm.t +0 -11
  96. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/rootActions.esm.t +0 -13
  97. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/rootIndex.esm.t +0 -14
  98. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/schema.esm.t +0 -6
  99. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/src-index.esm.t +0 -5
  100. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/types.esm.t +0 -31
  101. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/utils.esm.t +0 -77
  102. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/actions.esm.t +0 -22
  103. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/creators.esm.t +0 -37
  104. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/customTest.esm.t +0 -44
  105. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/error.esm.t +0 -36
  106. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js +0 -71
  107. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/operations.esm.t +0 -17
  108. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.js +0 -119
  109. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/schema.esm.t +0 -44
  110. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/CreateDocument.esm.t +0 -58
  111. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/DriveContents.esm.t +0 -23
  112. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/DriveExplorer.esm.t +0 -32
  113. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/EmptyState.esm.t +0 -19
  114. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/Files.esm.t +0 -29
  115. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FolderTree.esm.t +0 -108
  116. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/Folders.esm.t +0 -28
  117. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/NavigationBreadcrumbs.esm.t +0 -14
  118. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/config.esm.t +0 -11
  119. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/editor.esm.t +0 -20
  120. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.js +0 -25
  121. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/module.esm.t +0 -15
  122. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/editor.esm.t +0 -80
  123. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.js +0 -90
  124. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/module.esm.t +0 -16
  125. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.esm.t +0 -59
  126. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.js +0 -9
  127. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/utils.esm.t +0 -100
  128. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/factory.esm.t +0 -22
  129. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.esm.t +0 -62
  130. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.js +0 -12
  131. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.root.esm.t +0 -10
  132. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.root.inject.esm.t +0 -12
  133. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.esm.t +0 -34
  134. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.inject_call.esm.t +0 -7
  135. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.inject_export.esm.t +0 -7
  136. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.inject_import.esm.t +0 -7
  137. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/factory.esm.t +0 -40
  138. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.esm.t +0 -47
  139. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.js +0 -12
  140. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.root.esm.t +0 -10
  141. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.root.inject.esm.t +0 -12
  142. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.esm.t +0 -34
  143. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.inject_call.esm.t +0 -7
  144. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.inject_export.esm.t +0 -9
  145. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.inject_import.esm.t +0 -7
  146. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/migrations.esm.t +0 -23
  147. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/schema.esm.t +0 -13
  148. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.js +0 -10
  149. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/lib.esm.t +0 -9
  150. package/dist/src/codegen/hygen.d.ts +0 -47
  151. package/dist/src/codegen/hygen.d.ts.map +0 -1
  152. package/dist/src/codegen/hygen.js +0 -230
  153. package/dist/src/codegen/hygen.js.map +0 -1
@@ -1,23 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/components/DriveContents.tsx"
3
- unless_exists: true
4
- ---
5
- import { CreateDocument } from "./CreateDocument.js";
6
- import { EmptyState } from "./EmptyState.js";
7
- import { Files } from "./Files.js";
8
- import { Folders } from "./Folders.js";
9
- import { NavigationBreadcrumbs } from "./NavigationBreadcrumbs.js";
10
-
11
- /** Shows the documents and folders in the selected drive */
12
- export function DriveContents() {
13
- return (
14
- <div className="space-y-6 px-6">
15
- <NavigationBreadcrumbs />
16
- <Folders />
17
- <Files />
18
- <EmptyState />
19
- <CreateDocument />
20
- </div>
21
- );
22
- }
23
-
@@ -1,32 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/components/DriveExplorer.tsx"
3
- unless_exists: true
4
- ---
5
- import type { EditorProps } from "document-model";
6
- import { FolderTree } from "./FolderTree.js";
7
- import { DriveContents } from "./DriveContents.js";
8
-
9
- /**
10
- * Main drive explorer component with sidebar navigation and content area.
11
- * Layout: Left sidebar (folder tree) + Right content area (files/folders + document editor)
12
- */
13
- export function DriveExplorer({ children }: EditorProps) {
14
- // if a document is selected then it's editor will be passed as children
15
- const showDocumentEditor = !!children;
16
-
17
- return (
18
- <div className="flex h-full">
19
- <FolderTree />
20
- <div className="flex-1 overflow-y-auto p-4">
21
- {/* Conditional rendering: Document editor or folder contents */}
22
- {showDocumentEditor ? (
23
- /* Document editor view */
24
- children
25
- ) : (
26
- /* Folder contents view */
27
- <DriveContents />
28
- )}
29
- </div>
30
- </div>
31
- );
32
- }
@@ -1,19 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/components/EmptyState.tsx"
3
- unless_exists: true
4
- ---
5
- import { useNodesInSelectedDriveOrFolder } from "@powerhousedao/reactor-browser";
6
-
7
- /** Shows a message when the selected drive or folder is empty */
8
- export function EmptyState() {
9
- const nodes = useNodesInSelectedDriveOrFolder();
10
- const hasNodes = nodes.length > 0;
11
- if (hasNodes) return null;
12
-
13
- return (
14
- <div className="py-12 text-center text-gray-500">
15
- <p className="text-lg">This folder is empty</p>
16
- <p className="mt-2 text-sm">Create your first document or folder below</p>
17
- </div>
18
- );
19
- }
@@ -1,29 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/components/Files.tsx"
3
- unless_exists: true
4
- ---
5
- import { FileItem } from "@powerhousedao/design-system/connect";
6
- import {
7
- useNodesInSelectedDriveOrFolder,
8
- isFileNodeKind,
9
- } from "@powerhousedao/reactor-browser";
10
-
11
- /** Shows the files in the selected drive or folder */
12
- export function Files() {
13
- const nodes = useNodesInSelectedDriveOrFolder();
14
- const fileNodes = nodes.filter((n) => isFileNodeKind(n));
15
- const hasFiles = fileNodes.length > 0;
16
-
17
- if (!hasFiles) return null;
18
-
19
- return (
20
- <div>
21
- <h3 className="mb-2 text-sm font-semibold text-gray-600">Documents</h3>
22
- <div className="flex flex-wrap gap-4">
23
- {fileNodes.map((fileNode) => (
24
- <FileItem key={fileNode.id} fileNode={fileNode} />
25
- ))}
26
- </div>
27
- </div>
28
- );
29
- }
@@ -1,108 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/components/FolderTree.tsx"
3
- unless_exists: true
4
- ---
5
- import {
6
- Sidebar,
7
- SidebarProvider,
8
- type SidebarNode,
9
- } from "@powerhousedao/document-engineering";
10
- import {
11
- setSelectedNode,
12
- useNodesInSelectedDrive,
13
- useSelectedDrive,
14
- useSelectedNode,
15
- } from "@powerhousedao/reactor-browser";
16
- import type { Node } from "document-drive";
17
- import { useMemo } from "react";
18
-
19
- function buildSidebarNodes(
20
- nodes: Node[],
21
- parentId: string | null | undefined,
22
- ): SidebarNode[] {
23
- return nodes
24
- .filter((n) => {
25
- if (parentId == null) {
26
- return n.parentFolder == null;
27
- }
28
- return n.parentFolder === parentId;
29
- })
30
- .map((node): SidebarNode => {
31
- if (node.kind === "folder") {
32
- return {
33
- id: node.id,
34
- title: node.name,
35
- icon: "FolderClose" as const,
36
- expandedIcon: "FolderOpen" as const,
37
- children: buildSidebarNodes(nodes, node.id),
38
- };
39
- }
40
- return {
41
- id: node.id,
42
- title: node.name,
43
- icon: "File" as const,
44
- };
45
- });
46
- }
47
-
48
- function transformNodesToSidebarNodes(
49
- nodes: Node[],
50
- driveName: string,
51
- ): SidebarNode[] {
52
- return [
53
- {
54
- id: "root",
55
- title: driveName,
56
- icon: "Drive" as const,
57
- children: buildSidebarNodes(nodes, null),
58
- },
59
- ];
60
- }
61
-
62
- /**
63
- * Hierarchical folder tree navigation component using Sidebar from document-engineering.
64
- * Displays folders and files in a tree structure with expand/collapse functionality, search, and resize support.
65
- */
66
- export function FolderTree() {
67
- const [selectedDrive] = useSelectedDrive();
68
- const nodes = useNodesInSelectedDrive();
69
- const selectedNode = useSelectedNode();
70
- const driveName = selectedDrive.header.name;
71
- // Transform Node[] to hierarchical SidebarNode structure
72
- const sidebarNodes = useMemo(
73
- () => transformNodesToSidebarNodes(nodes || [], driveName),
74
- [nodes, driveName],
75
- );
76
-
77
- const handleActiveNodeChange = (node: SidebarNode) => {
78
- // If root node is selected, pass undefined to match existing behavior
79
- if (node.id === "root") {
80
- setSelectedNode(undefined);
81
- } else {
82
- setSelectedNode(node.id);
83
- }
84
- };
85
- // Map selectedNodeId to activeNodeId (use "root" when undefined)
86
- const activeNodeId =
87
- !selectedNode || selectedNode.id === selectedDrive.header.id
88
- ? "root"
89
- : selectedNode.id;
90
-
91
- return (
92
- <SidebarProvider nodes={sidebarNodes}>
93
- <Sidebar
94
- className="pt-1"
95
- nodes={sidebarNodes}
96
- activeNodeId={activeNodeId}
97
- onActiveNodeChange={handleActiveNodeChange}
98
- sidebarTitle="Drive Explorer"
99
- showSearchBar={true}
100
- resizable={true}
101
- allowPinning={false}
102
- showStatusFilter={false}
103
- initialWidth={256}
104
- defaultLevel={2}
105
- />
106
- </SidebarProvider>
107
- );
108
- }
@@ -1,28 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/components/Folders.tsx"
3
- unless_exists: true
4
- ---
5
- import { FolderItem } from "@powerhousedao/design-system/connect";
6
- import {
7
- useNodesInSelectedDriveOrFolder,
8
- isFolderNodeKind,
9
- } from "@powerhousedao/reactor-browser";
10
-
11
- /** Shows the folders in the selected drive or folder */
12
- export function Folders() {
13
- const nodes = useNodesInSelectedDriveOrFolder();
14
- const folderNodes = nodes.filter((n) => isFolderNodeKind(n));
15
- const hasFolders = folderNodes.length > 0;
16
- if (!hasFolders) return null;
17
-
18
- return (
19
- <div>
20
- <h3 className="mb-2 text-sm font-bold text-gray-600">Folders</h3>
21
- <div className="flex flex-wrap gap-4">
22
- {folderNodes.map((folderNode) => (
23
- <FolderItem key={folderNode.id} folderNode={folderNode} />
24
- ))}
25
- </div>
26
- </div>
27
- );
28
- }
@@ -1,14 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/components/NavigationBreadcrumbs.tsx"
3
- unless_exists: true
4
- ---
5
- import { Breadcrumbs } from "@powerhousedao/design-system/connect";
6
-
7
- /** Shows the navigation breadcrumbs for the selected drive or folder */
8
- export function NavigationBreadcrumbs() {
9
- return (
10
- <div className="border-b border-gray-200 pb-3 space-y-3">
11
- <Breadcrumbs />
12
- </div>
13
- );
14
- }
@@ -1,11 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/config.ts"
3
- unless_exists: true
4
- ---
5
- import type { PHDriveEditorConfig } from "@powerhousedao/reactor-browser";
6
-
7
- /** Editor config for the <%= pascalCaseDriveEditorName %> */
8
- export const editorConfig: PHDriveEditorConfig = {
9
- isDragAndDropEnabled: <%- isDragAndDropEnabled %>,
10
- allowedDocumentTypes: <%- allowedDocumentTypes %>
11
- };
@@ -1,20 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/editor.tsx"
3
- unless_exists: true
4
- ---
5
- import { useSetPHDriveEditorConfig } from "@powerhousedao/reactor-browser";
6
- import type { EditorProps } from "document-model";
7
- import { DriveExplorer } from "./components/DriveExplorer.js";
8
- import { editorConfig } from "./config.js";
9
-
10
- /** Editor component for the <%= pascalCaseDriveEditorName %> drive editor */
11
- export default function Editor(props: EditorProps) {
12
- // set the config for this drive editor
13
- // you can update these configs in `./config.ts`
14
- useSetPHDriveEditorConfig(editorConfig);
15
- return (
16
- <div className="bg-gray-50 p-6">
17
- <DriveExplorer {...props} />
18
- </div>
19
- );
20
- }
@@ -1,25 +0,0 @@
1
- const { pascalCase, kebabCase } = require("change-case");
2
- const path = require("path");
3
-
4
- // @ts-check
5
- module.exports = {
6
- params: ({ args }) => {
7
- const name = args.name;
8
- const rootDir = args.rootDir;
9
- const driveEditorDirName = args.driveEditorDirName || kebabCase(args.name);
10
- const driveEditorDir = path.join(rootDir, driveEditorDirName);
11
- const pascalCaseDriveEditorName = pascalCase(name);
12
- const kebabCaseDriveEditorName = kebabCase(name);
13
-
14
- return {
15
- rootDir,
16
- driveEditorDir,
17
- name: args.name,
18
- appId: args.appId,
19
- isDragAndDropEnabled: args.isDragAndDropEnabled,
20
- allowedDocumentTypes: args.allowedDocumentTypes,
21
- pascalCaseDriveEditorName,
22
- kebabCaseDriveEditorName,
23
- };
24
- },
25
- };
@@ -1,15 +0,0 @@
1
- ---
2
- to: "<%= driveEditorDir %>/module.ts"
3
- force: true
4
- ---
5
- import { type EditorModule } from "document-model";
6
- import { lazy } from "react";
7
-
8
- export const <%= pascalCaseDriveEditorName %>: EditorModule = {
9
- Component: lazy(() => import("./editor.js")),
10
- documentTypes: ["powerhouse/document-drive"],
11
- config: {
12
- id: "<%= appId || paramCaseDriveEditorName %>",
13
- name: "<%= name %>",
14
- },
15
- };
@@ -1,80 +0,0 @@
1
- ---
2
- to: "<%= editorDir %>/editor.tsx"
3
- unless_exists: true
4
- ---
5
- import { DocumentToolbar } from "@powerhousedao/design-system/connect";
6
- import { setName } from "document-model";
7
- import { type FormEvent, useState } from "react";
8
- <% if(!documentType){ %>import { useSelectedDocument } from "@powerhousedao/reactor-browser";<% } else { %>import { <%= useSelectedHookName %> } from "<%= documentModelDir %>";<% } %>
9
-
10
- export default function Editor() {
11
- const [document, dispatch] = <%= useSelectedHookName %>();
12
- const [isEditing, setIsEditing] = useState(false);
13
-
14
- if (!document) return null;
15
-
16
- const handleSubmit = (event: FormEvent<HTMLFormElement>) => {
17
- event.preventDefault();
18
- const form = event.currentTarget;
19
- const nameInput = form.elements.namedItem("name") as HTMLInputElement;
20
- const name = nameInput.value.trim();
21
- if (!name) return;
22
- dispatch(setName(name));
23
- setIsEditing(false);
24
- };
25
-
26
- return (
27
- <div className="min-h-screen bg-gray-50 p-6">
28
- <DocumentToolbar />
29
- <div className="ph-default-styles">
30
- <div className="flex justify-center px-4 py-8">
31
- <div className="w-full max-w-md rounded-xl bg-white p-6 shadow-sm">
32
- <div className="mb-4 text-xs font-medium uppercase tracking-wide text-gray-400">
33
- <%= pascalCaseDocumentType %>
34
- </div>
35
-
36
- {isEditing ? (
37
- <form onSubmit={handleSubmit} className="space-y-4">
38
- <input
39
- type="text"
40
- name="name"
41
- defaultValue={document.header.name}
42
- autoFocus
43
- className="w-full rounded-lg border border-gray-200 px-4 py-3 text-lg font-semibold text-gray-900 outline-none transition-colors focus:border-blue-500 focus:ring-2 focus:ring-blue-100"
44
- placeholder="Enter name..."
45
- />
46
- <div className="flex gap-2">
47
- <button
48
- type="submit"
49
- className="flex-1 rounded-lg bg-blue-600 px-4 py-2.5 text-sm font-medium text-white transition-colors hover:bg-blue-700"
50
- >
51
- Save
52
- </button>
53
- <button
54
- type="button"
55
- onClick={() => setIsEditing(false)}
56
- className="flex-1 rounded-lg border border-gray-200 px-4 py-2.5 text-sm font-medium text-gray-600 transition-colors hover:bg-gray-50"
57
- >
58
- Cancel
59
- </button>
60
- </div>
61
- </form>
62
- ) : (
63
- <div className="flex items-center justify-between gap-4">
64
- <h2 className="truncate text-xl font-semibold text-gray-900">
65
- {document.header.name || "Untitled"}
66
- </h2>
67
- <button
68
- onClick={() => setIsEditing(true)}
69
- className="shrink-0 rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200"
70
- >
71
- Edit
72
- </button>
73
- </div>
74
- )}
75
- </div>
76
- </div>
77
- </div>
78
- </div>
79
- );
80
- }
@@ -1,90 +0,0 @@
1
- const {
2
- pascalCase,
3
- kebabCase,
4
- capitalCase,
5
- camelCase,
6
- } = require("change-case");
7
- const { readdirSync, readFileSync } = require("fs");
8
- const { join } = require("path");
9
-
10
- // @ts-check
11
- module.exports = {
12
- params: ({ args }) => {
13
- const rootDir = args.rootDir;
14
- const editorDirName = args.editorDirName || kebabCase(args.name);
15
- const editorDir = join(rootDir, editorDirName);
16
- const documentTypes = args.documentTypes
17
- .split(",")
18
- .map((type) => type.trim())
19
- .filter((type) => type !== "");
20
- const documentTypesMap = JSON.parse(args.documentTypesMap);
21
-
22
- // if this editor is for a single document type, then the boilerplate will be customized to it
23
- const singleDocumentType =
24
- documentTypes.length === 1 ? documentTypes[0] : undefined;
25
- const documentType = singleDocumentType
26
- ? { ...documentTypesMap[singleDocumentType], type: singleDocumentType }
27
- : undefined;
28
- const packageName = args.packageName;
29
- const pascalCaseEditorName = pascalCase(args.name);
30
- const kebabCaseEditorName = kebabCase(args.name);
31
- const pascalCaseDocumentType = pascalCase(documentType?.name);
32
- const kebabCaseDocumentType = kebabCase(documentType?.name);
33
- const camelCaseDocumentType = camelCase(documentType?.name);
34
- const documentVariableName = documentType
35
- ? `${camelCaseDocumentType}Document`
36
- : "document";
37
- const phDocumentTypeName = documentType
38
- ? `${pascalCaseDocumentType}Document`
39
- : "Document";
40
- const actionTypeName = `${pascalCaseDocumentType}Action`;
41
- const documentModelDir = `${packageName}/document-models/${kebabCaseDocumentType}`;
42
- const hooksDir = `${packageName}/editors/hooks`;
43
- const isDocumentOfTypeFunctionName = `is${phDocumentTypeName}`;
44
- const assertIsDocumentOfTypeFunctionName = `assertIs${phDocumentTypeName}`;
45
- const useByIdHookName = documentType
46
- ? `use${phDocumentTypeName}ById`
47
- : "useDocumentById";
48
- const useSelectedHookName = documentType
49
- ? `useSelected${phDocumentTypeName}`
50
- : "useSelectedDocument";
51
- const useInSelectedDriveHookName = documentType
52
- ? `use${phDocumentTypeName}sInSelectedDrive`
53
- : "useDocumentsInSelectedDrive";
54
- const useInSelectedFolderHookName = documentType
55
- ? `use${phDocumentTypeName}sInSelectedFolder`
56
- : "useDocumentsInSelectedFolder";
57
- const editNameComponentName = "EditName";
58
-
59
- return {
60
- rootDir,
61
- editorDir,
62
- documentModelsDir: args.documentModelsDir,
63
- name: args.name,
64
- pascalCaseEditorName,
65
- kebabCaseEditorName,
66
- pascalCaseDocumentType,
67
- kebabCaseDocumentType,
68
- camelCaseDocumentType,
69
- documentVariableName,
70
- phDocumentTypeName,
71
- actionTypeName,
72
- hooksDir,
73
- documentModelDir,
74
- isDocumentOfTypeFunctionName,
75
- assertIsDocumentOfTypeFunctionName,
76
- useByIdHookName,
77
- useSelectedHookName,
78
- useInSelectedDriveHookName,
79
- useInSelectedFolderHookName,
80
- editNameComponentName,
81
- documentTypes: args.documentTypes
82
- .split(",")
83
- .filter((type) => type !== ""),
84
- documentTypesMap,
85
- editorId: args.editorId,
86
- documentType,
87
- packageName,
88
- };
89
- },
90
- };
@@ -1,16 +0,0 @@
1
- ---
2
- to: "<%= editorDir %>/module.ts"
3
- force: true
4
- ---
5
- import type { EditorModule } from "document-model";
6
- import { lazy } from "react";
7
-
8
- /** Document editor module for the Todo List document type */
9
- export const <%= pascalCaseEditorName %>: EditorModule = {
10
- Component: lazy(() => import("./editor.js")),
11
- documentTypes: [<% if(!documentTypes.length){ %>"*"<% } else { %><% documentTypes.forEach(type => { _%>"<%= type %>", %><% }); _%> <% } %>],
12
- config: {
13
- id: "<%= editorId || paramCaseEditorName %>",
14
- name: "<%= name || pascalCaseEditorName %>",
15
- },
16
- };
@@ -1,59 +0,0 @@
1
- ---
2
- to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/index.ts"
3
- force: true
4
- ---
5
- import { IBaseDocumentDriveServer } from "document-drive";
6
- import { actions } from "document-model";
7
- import {
8
- addDocument,
9
- addFolder,
10
- initReactorWithRemoteDrive
11
- } from "./utils";
12
-
13
- async function main() {
14
- const driveServer = (await initReactorWithRemoteDrive(
15
- "http://localhost:4001/d/powerhouse"
16
- )) as IBaseDocumentDriveServer;
17
-
18
- const driveIds = await driveServer.getDrives();
19
- let drive = await driveServer.getDrive(driveIds[0]);
20
-
21
- // add folder to root
22
- await addFolder(driveServer, driveIds[0], "example-folder", "Example Folder");
23
- drive = await driveServer.getDrive(driveIds[0]);
24
-
25
- // get root folder
26
- const rootDirId = drive.state.global.nodes.find(
27
- (e) => e.name === "Example Folder"
28
- );
29
-
30
- // check if root folder exists and throw error if it doesn't
31
- if (!rootDirId) {
32
- throw new Error("Root directory not found");
33
- }
34
-
35
- // add document to root folder
36
- await addDocument(
37
- driveServer,
38
- driveIds[0],
39
- "example-document",
40
- "Example Document",
41
- "powerhouse/document-model",
42
- rootDirId.id
43
- );
44
-
45
- // set model name to example document
46
- await driveServer.addAction(
47
- driveIds[0],
48
- "example-document",
49
- actions.setModelName({
50
- name: "Example Document",
51
- })
52
- );
53
-
54
- // get document
55
- const document = await driveServer.getDocument(driveIds[0], "example-document");
56
- console.log(document.state.global);
57
-
58
- process.exit(0);
59
- }
@@ -1,9 +0,0 @@
1
- // @ts-check
2
- module.exports = {
3
- params: ({ args }) => {
4
- return {
5
- rootDir: args.rootDir,
6
- name: args.name,
7
- };
8
- },
9
- };