@bendyline/docblocks-react 0.1.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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/AppMenu/AppMenu.d.ts +11 -0
  4. package/dist/AppMenu/AppMenu.d.ts.map +1 -0
  5. package/dist/AppMenu/AppMenu.js +27 -0
  6. package/dist/AppMenu/AppMenu.js.map +1 -0
  7. package/dist/AppMenu/index.d.ts +3 -0
  8. package/dist/AppMenu/index.d.ts.map +1 -0
  9. package/dist/AppMenu/index.js +2 -0
  10. package/dist/AppMenu/index.js.map +1 -0
  11. package/dist/DocBlocksShell/DocBlocksShell.d.ts +16 -0
  12. package/dist/DocBlocksShell/DocBlocksShell.d.ts.map +1 -0
  13. package/dist/DocBlocksShell/DocBlocksShell.js +487 -0
  14. package/dist/DocBlocksShell/DocBlocksShell.js.map +1 -0
  15. package/dist/DocBlocksShell/index.d.ts +3 -0
  16. package/dist/DocBlocksShell/index.d.ts.map +1 -0
  17. package/dist/DocBlocksShell/index.js +2 -0
  18. package/dist/DocBlocksShell/index.js.map +1 -0
  19. package/dist/Export/ExportDialog.d.ts +16 -0
  20. package/dist/Export/ExportDialog.d.ts.map +1 -0
  21. package/dist/Export/ExportDialog.js +42 -0
  22. package/dist/Export/ExportDialog.js.map +1 -0
  23. package/dist/Export/ExportToolbarControls.d.ts +17 -0
  24. package/dist/Export/ExportToolbarControls.d.ts.map +1 -0
  25. package/dist/Export/ExportToolbarControls.js +109 -0
  26. package/dist/Export/ExportToolbarControls.js.map +1 -0
  27. package/dist/Export/export-options.d.ts +18 -0
  28. package/dist/Export/export-options.d.ts.map +1 -0
  29. package/dist/Export/export-options.js +44 -0
  30. package/dist/Export/export-options.js.map +1 -0
  31. package/dist/Export/index.d.ts +6 -0
  32. package/dist/Export/index.d.ts.map +1 -0
  33. package/dist/Export/index.js +3 -0
  34. package/dist/Export/index.js.map +1 -0
  35. package/dist/Export/run-export.d.ts +8 -0
  36. package/dist/Export/run-export.d.ts.map +1 -0
  37. package/dist/Export/run-export.js +208 -0
  38. package/dist/Export/run-export.js.map +1 -0
  39. package/dist/FileExplorer/FileExplorer.d.ts +21 -0
  40. package/dist/FileExplorer/FileExplorer.d.ts.map +1 -0
  41. package/dist/FileExplorer/FileExplorer.js +125 -0
  42. package/dist/FileExplorer/FileExplorer.js.map +1 -0
  43. package/dist/FileExplorer/FileTreeNode.d.ts +18 -0
  44. package/dist/FileExplorer/FileTreeNode.d.ts.map +1 -0
  45. package/dist/FileExplorer/FileTreeNode.js +86 -0
  46. package/dist/FileExplorer/FileTreeNode.js.map +1 -0
  47. package/dist/FileExplorer/index.d.ts +6 -0
  48. package/dist/FileExplorer/index.d.ts.map +1 -0
  49. package/dist/FileExplorer/index.js +4 -0
  50. package/dist/FileExplorer/index.js.map +1 -0
  51. package/dist/FileExplorer/useFileTree.d.ts +35 -0
  52. package/dist/FileExplorer/useFileTree.d.ts.map +1 -0
  53. package/dist/FileExplorer/useFileTree.js +124 -0
  54. package/dist/FileExplorer/useFileTree.js.map +1 -0
  55. package/dist/WorkspacePicker/WorkspacePicker.d.ts +17 -0
  56. package/dist/WorkspacePicker/WorkspacePicker.d.ts.map +1 -0
  57. package/dist/WorkspacePicker/WorkspacePicker.js +57 -0
  58. package/dist/WorkspacePicker/WorkspacePicker.js.map +1 -0
  59. package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts +10 -0
  60. package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts.map +1 -0
  61. package/dist/WorkspacePicker/WorkspaceSettingsButton.js +27 -0
  62. package/dist/WorkspacePicker/WorkspaceSettingsButton.js.map +1 -0
  63. package/dist/WorkspacePicker/index.d.ts +3 -0
  64. package/dist/WorkspacePicker/index.d.ts.map +1 -0
  65. package/dist/WorkspacePicker/index.js +2 -0
  66. package/dist/WorkspacePicker/index.js.map +1 -0
  67. package/dist/hooks/index.d.ts +2 -0
  68. package/dist/hooks/index.d.ts.map +1 -0
  69. package/dist/hooks/index.js +2 -0
  70. package/dist/hooks/index.js.map +1 -0
  71. package/dist/hooks/useAutoSave.d.ts +9 -0
  72. package/dist/hooks/useAutoSave.d.ts.map +1 -0
  73. package/dist/hooks/useAutoSave.js +48 -0
  74. package/dist/hooks/useAutoSave.js.map +1 -0
  75. package/dist/icons.d.ts +6 -0
  76. package/dist/icons.d.ts.map +1 -0
  77. package/dist/icons.js +24 -0
  78. package/dist/icons.js.map +1 -0
  79. package/dist/index.d.ts +20 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +19 -0
  82. package/dist/index.js.map +1 -0
  83. package/package.json +65 -0
  84. package/src/AppMenu/AppMenu.tsx +124 -0
  85. package/src/AppMenu/index.ts +2 -0
  86. package/src/DocBlocksShell/DocBlocksShell.tsx +662 -0
  87. package/src/DocBlocksShell/index.ts +2 -0
  88. package/src/Export/ExportDialog.tsx +173 -0
  89. package/src/Export/ExportToolbarControls.tsx +183 -0
  90. package/src/Export/export-options.ts +57 -0
  91. package/src/Export/index.ts +5 -0
  92. package/src/Export/run-export.ts +238 -0
  93. package/src/FileExplorer/FileExplorer.tsx +260 -0
  94. package/src/FileExplorer/FileTreeNode.tsx +172 -0
  95. package/src/FileExplorer/index.ts +5 -0
  96. package/src/FileExplorer/useFileTree.ts +178 -0
  97. package/src/WorkspacePicker/WorkspacePicker.tsx +126 -0
  98. package/src/WorkspacePicker/WorkspaceSettingsButton.tsx +79 -0
  99. package/src/WorkspacePicker/index.ts +2 -0
  100. package/src/hooks/index.ts +1 -0
  101. package/src/hooks/useAutoSave.ts +58 -0
  102. package/src/icons.tsx +60 -0
  103. package/src/index.ts +31 -0
  104. package/src/styles/docblocks.css +961 -0
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @bendyline/docblocks-react — React components for DocBlocks
3
+ */
4
+ // FileExplorer
5
+ export { FileExplorer } from './FileExplorer/index.js';
6
+ export { FileTreeNode } from './FileExplorer/index.js';
7
+ export { useFileTree } from './FileExplorer/index.js';
8
+ // WorkspacePicker
9
+ export { WorkspacePicker } from './WorkspacePicker/index.js';
10
+ // DocBlocksShell
11
+ export { DocBlocksShell } from './DocBlocksShell/index.js';
12
+ // AppMenu
13
+ export { AppMenu } from './AppMenu/index.js';
14
+ // Export
15
+ export { ExportToolbarControls } from './Export/index.js';
16
+ export { ExportDialog } from './Export/index.js';
17
+ // Hooks
18
+ export { useAutoSave } from './hooks/index.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,kBAAkB;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,SAAS;AACT,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@bendyline/docblocks-react",
3
+ "version": "0.1.0",
4
+ "description": "React components for DocBlocks — file explorer, workspace picker, and editor shell",
5
+ "license": "MIT",
6
+ "author": "Bendyline",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/bendyline/docblocks.git",
10
+ "directory": "packages/react"
11
+ },
12
+ "homepage": "https://github.com/bendyline/docblocks",
13
+ "keywords": [
14
+ "docblocks",
15
+ "react",
16
+ "markdown",
17
+ "file-explorer",
18
+ "editor"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "type": "module",
24
+ "main": "./dist/index.js",
25
+ "module": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "files": [
28
+ "dist",
29
+ "src"
30
+ ],
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "import": "./dist/index.js",
35
+ "default": "./dist/index.js"
36
+ },
37
+ "./styles": "./src/styles/docblocks.css"
38
+ },
39
+ "scripts": {
40
+ "build": "tsup",
41
+ "typecheck": "tsc --noEmit"
42
+ },
43
+ "peerDependencies": {
44
+ "react": "^18.0.0 || ^19.0.0",
45
+ "react-dom": "^18.0.0 || ^19.0.0"
46
+ },
47
+ "dependencies": {
48
+ "@bendyline/docblocks": "0.1.0",
49
+ "@bendyline/squisq": "1.2.1",
50
+ "@bendyline/squisq-editor-react": "1.2.1",
51
+ "@bendyline/squisq-formats": "1.2.1",
52
+ "@bendyline/squisq-react": "1.1.1",
53
+ "@bendyline/squisq-video": "1.0.3",
54
+ "@bendyline/squisq-video-react": "1.0.3",
55
+ "monaco-editor": "0.55.1"
56
+ },
57
+ "devDependencies": {
58
+ "@types/react": "18.3.28",
59
+ "@types/react-dom": "18.3.7",
60
+ "react": "18.3.1",
61
+ "react-dom": "18.3.1",
62
+ "tsup": "8.5.1",
63
+ "typescript": "5.9.3"
64
+ }
65
+ }
@@ -0,0 +1,124 @@
1
+ /**
2
+ * AppMenu — top-left dropdown with workspace actions and app links.
3
+ */
4
+
5
+ import { useState, useCallback, useRef, useEffect } from 'react';
6
+
7
+ export interface AppMenuProps {
8
+ /** URL for the about page. */
9
+ aboutUrl?: string;
10
+ /** Optional logo image URL to display instead of the text label. */
11
+ logoUrl?: string;
12
+ }
13
+
14
+ export function AppMenu({ aboutUrl: _aboutUrl = '#about', logoUrl }: AppMenuProps) {
15
+ const [isOpen, setIsOpen] = useState(false);
16
+ const [showAbout, setShowAbout] = useState(false);
17
+ const menuRef = useRef<HTMLDivElement>(null);
18
+
19
+ useEffect(() => {
20
+ if (!isOpen) return;
21
+ function handleOutsideClick(e: MouseEvent) {
22
+ if (menuRef.current && !menuRef.current.contains(e.target as Node)) {
23
+ setIsOpen(false);
24
+ }
25
+ }
26
+ document.addEventListener('mousedown', handleOutsideClick);
27
+ return () => document.removeEventListener('mousedown', handleOutsideClick);
28
+ }, [isOpen]);
29
+
30
+ const handleAction = useCallback((action: () => void) => {
31
+ setIsOpen(false);
32
+ action();
33
+ }, []);
34
+
35
+ return (
36
+ <>
37
+ <div ref={menuRef} className="db-app-menu">
38
+ <button
39
+ className="db-app-menu-btn"
40
+ onClick={() => setIsOpen(!isOpen)}
41
+ aria-expanded={isOpen}
42
+ aria-haspopup="true"
43
+ >
44
+ {logoUrl ? (
45
+ <img src={logoUrl} alt="docblocks" className="db-app-menu-logo" />
46
+ ) : (
47
+ <span className="db-app-menu-label">docblocks</span>
48
+ )}
49
+ <span className={`db-app-menu-caret${isOpen ? ' db-app-menu-caret--open' : ''}`}>
50
+ {'\u25BE'}
51
+ </span>
52
+ </button>
53
+
54
+ {isOpen && (
55
+ <div className="db-app-menu-dropdown" role="menu">
56
+ <button
57
+ className="db-app-menu-item"
58
+ role="menuitem"
59
+ onClick={() => handleAction(() => setShowAbout(true))}
60
+ >
61
+ About
62
+ </button>
63
+ </div>
64
+ )}
65
+ </div>
66
+
67
+ {showAbout && (
68
+ <div className="db-dialog-overlay" onClick={() => setShowAbout(false)}>
69
+ <div
70
+ className="db-dialog"
71
+ role="dialog"
72
+ aria-label="About DocBlocks"
73
+ onClick={(e) => e.stopPropagation()}
74
+ >
75
+ <div className="db-dialog-header">
76
+ <h2 className="db-dialog-title">About DocBlocks</h2>
77
+ <button
78
+ className="db-dialog-close"
79
+ onClick={() => setShowAbout(false)}
80
+ aria-label="Close"
81
+ >
82
+ &times;
83
+ </button>
84
+ </div>
85
+ <div className="db-dialog-body">
86
+ <p>
87
+ <strong>DocBlocks</strong> is a markdown document editor that runs entirely in your
88
+ browser. Your files stay on your device.
89
+ </p>
90
+ <p>
91
+ Built on{' '}
92
+ <a
93
+ href="https://github.com/nicoth-in/squisq"
94
+ target="_blank"
95
+ rel="noopener noreferrer"
96
+ >
97
+ squisq
98
+ </a>{' '}
99
+ by Bendyline.
100
+ </p>
101
+ <p className="db-dialog-links">
102
+ <a
103
+ href="https://github.com/bendyline/docblocks"
104
+ target="_blank"
105
+ rel="noopener noreferrer"
106
+ >
107
+ GitHub
108
+ </a>
109
+ <span className="db-dialog-sep">&middot;</span>
110
+ <a
111
+ href="https://github.com/bendyline/docblocks/blob/main/LICENSE"
112
+ target="_blank"
113
+ rel="noopener noreferrer"
114
+ >
115
+ License (MIT)
116
+ </a>
117
+ </p>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ )}
122
+ </>
123
+ );
124
+ }
@@ -0,0 +1,2 @@
1
+ export { AppMenu } from './AppMenu.js';
2
+ export type { AppMenuProps } from './AppMenu.js';