@bendyline/docblocks-react 1.0.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AppMenu/AppMenu.d.ts +16 -1
- package/dist/AppMenu/AppMenu.d.ts.map +1 -1
- package/dist/AppMenu/AppMenu.js +3 -2
- package/dist/AppMenu/AppMenu.js.map +1 -1
- package/dist/AppMenu/index.d.ts +1 -1
- package/dist/AppMenu/index.d.ts.map +1 -1
- package/dist/DocBlocksShell/DocBlocksShell.d.ts +21 -1
- package/dist/DocBlocksShell/DocBlocksShell.d.ts.map +1 -1
- package/dist/DocBlocksShell/DocBlocksShell.js +930 -98
- package/dist/DocBlocksShell/DocBlocksShell.js.map +1 -1
- package/dist/Export/ExportDialog.d.ts.map +1 -1
- package/dist/Export/ExportDialog.js +104 -5
- package/dist/Export/ExportDialog.js.map +1 -1
- package/dist/Export/ExportToolbarControls.d.ts.map +1 -1
- package/dist/Export/ExportToolbarControls.js +44 -3
- package/dist/Export/ExportToolbarControls.js.map +1 -1
- package/dist/Export/export-options.d.ts +35 -0
- package/dist/Export/export-options.d.ts.map +1 -1
- package/dist/Export/export-options.js +6 -1
- package/dist/Export/export-options.js.map +1 -1
- package/dist/Export/run-export.d.ts.map +1 -1
- package/dist/Export/run-export.js +163 -91
- package/dist/Export/run-export.js.map +1 -1
- package/dist/FileExplorer/FileExplorer.d.ts.map +1 -1
- package/dist/FileExplorer/FileExplorer.js +17 -2
- package/dist/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/FileExplorer/FileTreeNode.d.ts.map +1 -1
- package/dist/FileExplorer/FileTreeNode.js +34 -8
- package/dist/FileExplorer/FileTreeNode.js.map +1 -1
- package/dist/WorkspacePicker/WorkspacePicker.d.ts.map +1 -1
- package/dist/WorkspacePicker/WorkspacePicker.js +9 -3
- package/dist/WorkspacePicker/WorkspacePicker.js.map +1 -1
- package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts +2 -1
- package/dist/WorkspacePicker/WorkspaceSettingsButton.d.ts.map +1 -1
- package/dist/WorkspacePicker/WorkspaceSettingsButton.js +2 -2
- package/dist/WorkspacePicker/WorkspaceSettingsButton.js.map +1 -1
- package/dist/WorkspacePicker/WorkspaceSettingsDialog.d.ts +20 -0
- package/dist/WorkspacePicker/WorkspaceSettingsDialog.d.ts.map +1 -0
- package/dist/WorkspacePicker/WorkspaceSettingsDialog.js +36 -0
- package/dist/WorkspacePicker/WorkspaceSettingsDialog.js.map +1 -0
- package/dist/hooks/useAutoSave.d.ts +8 -2
- package/dist/hooks/useAutoSave.d.ts.map +1 -1
- package/dist/hooks/useAutoSave.js +65 -30
- package/dist/hooks/useAutoSave.js.map +1 -1
- package/dist/icons.d.ts +1 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +3 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/preferences/versioning.d.ts +27 -0
- package/dist/preferences/versioning.d.ts.map +1 -0
- package/dist/preferences/versioning.js +62 -0
- package/dist/preferences/versioning.js.map +1 -0
- package/package.json +10 -8
- package/src/AppMenu/AppMenu.tsx +142 -2
- package/src/AppMenu/index.ts +1 -1
- package/src/DocBlocksShell/DocBlocksShell.tsx +1194 -125
- package/src/Export/ExportDialog.tsx +208 -19
- package/src/Export/ExportToolbarControls.tsx +45 -3
- package/src/Export/export-options.ts +43 -1
- package/src/Export/run-export.ts +190 -91
- package/src/FileExplorer/FileExplorer.tsx +31 -9
- package/src/FileExplorer/FileTreeNode.tsx +68 -26
- package/src/WorkspacePicker/WorkspacePicker.tsx +18 -7
- package/src/WorkspacePicker/WorkspaceSettingsButton.tsx +9 -0
- package/src/WorkspacePicker/WorkspaceSettingsDialog.tsx +121 -0
- package/src/fonts/fonts.css +362 -0
- package/src/fonts/licenses/LICENSE-cormorant-garamond.txt +93 -0
- package/src/fonts/licenses/LICENSE-crimson-text.txt +93 -0
- package/src/fonts/licenses/LICENSE-dm-sans.txt +93 -0
- package/src/fonts/licenses/LICENSE-dm-serif-display.txt +93 -0
- package/src/fonts/licenses/LICENSE-hanken-grotesk.txt +94 -0
- package/src/fonts/licenses/LICENSE-ibm-plex-sans.txt +93 -0
- package/src/fonts/licenses/LICENSE-inter.txt +93 -0
- package/src/fonts/licenses/LICENSE-jetbrains-mono.txt +93 -0
- package/src/fonts/licenses/LICENSE-lora.txt +93 -0
- package/src/fonts/licenses/LICENSE-merriweather.txt +93 -0
- package/src/fonts/licenses/LICENSE-oswald.txt +93 -0
- package/src/fonts/licenses/LICENSE-playfair-display.txt +93 -0
- package/src/fonts/licenses/LICENSE-pt-serif.txt +93 -0
- package/src/fonts/licenses/LICENSE-roboto.txt +93 -0
- package/src/fonts/licenses/LICENSE-source-serif-4.txt +93 -0
- package/src/fonts/woff2/cormorant-garamond-400.woff2 +0 -0
- package/src/fonts/woff2/cormorant-garamond-700.woff2 +0 -0
- package/src/fonts/woff2/crimson-text-400.woff2 +0 -0
- package/src/fonts/woff2/crimson-text-400i.woff2 +0 -0
- package/src/fonts/woff2/crimson-text-700.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-400.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-400i.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-500.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-700.woff2 +0 -0
- package/src/fonts/woff2/dm-serif-display-400.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-400.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-400i.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-500.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-600.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-700.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-400.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-400i.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-500.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-600.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-700.woff2 +0 -0
- package/src/fonts/woff2/inter-400.woff2 +0 -0
- package/src/fonts/woff2/inter-400i.woff2 +0 -0
- package/src/fonts/woff2/inter-500.woff2 +0 -0
- package/src/fonts/woff2/inter-600.woff2 +0 -0
- package/src/fonts/woff2/inter-700.woff2 +0 -0
- package/src/fonts/woff2/jetbrains-mono-400.woff2 +0 -0
- package/src/fonts/woff2/jetbrains-mono-400i.woff2 +0 -0
- package/src/fonts/woff2/jetbrains-mono-700.woff2 +0 -0
- package/src/fonts/woff2/lora-400.woff2 +0 -0
- package/src/fonts/woff2/lora-400i.woff2 +0 -0
- package/src/fonts/woff2/lora-700.woff2 +0 -0
- package/src/fonts/woff2/merriweather-400.woff2 +0 -0
- package/src/fonts/woff2/merriweather-700.woff2 +0 -0
- package/src/fonts/woff2/oswald-400.woff2 +0 -0
- package/src/fonts/woff2/oswald-700.woff2 +0 -0
- package/src/fonts/woff2/playfair-display-400.woff2 +0 -0
- package/src/fonts/woff2/playfair-display-700.woff2 +0 -0
- package/src/fonts/woff2/pt-serif-400.woff2 +0 -0
- package/src/fonts/woff2/pt-serif-700.woff2 +0 -0
- package/src/fonts/woff2/roboto-400.woff2 +0 -0
- package/src/fonts/woff2/roboto-400i.woff2 +0 -0
- package/src/fonts/woff2/roboto-700.woff2 +0 -0
- package/src/fonts/woff2/source-serif-4-400.woff2 +0 -0
- package/src/fonts/woff2/source-serif-4-400i.woff2 +0 -0
- package/src/fonts/woff2/source-serif-4-700.woff2 +0 -0
- package/src/hooks/useAutoSave.ts +87 -29
- package/src/icons.tsx +10 -0
- package/src/index.ts +1 -1
- package/src/preferences/versioning.ts +69 -0
- package/src/styles/docblocks.css +1037 -55
package/src/AppMenu/AppMenu.tsx
CHANGED
|
@@ -3,17 +3,42 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
6
|
+
import type { VersioningPreference } from '../preferences/versioning.js';
|
|
7
|
+
|
|
8
|
+
export type ThemePreference = 'auto' | 'light' | 'dark';
|
|
6
9
|
|
|
7
10
|
export interface AppMenuProps {
|
|
8
11
|
/** URL for the about page. */
|
|
9
12
|
aboutUrl?: string;
|
|
10
13
|
/** Optional logo image URL to display instead of the text label. */
|
|
11
14
|
logoUrl?: string;
|
|
15
|
+
/** Current theme preference. */
|
|
16
|
+
themePreference?: ThemePreference;
|
|
17
|
+
/** Called when the user changes the theme preference. */
|
|
18
|
+
onThemeChange?: (theme: ThemePreference) => void;
|
|
19
|
+
/** Current global versioning preference. */
|
|
20
|
+
versioningPreference?: VersioningPreference;
|
|
21
|
+
/** Called when the user changes the global versioning preference. */
|
|
22
|
+
onVersioningPreferenceChange?: (pref: VersioningPreference) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Called when the user clicks "Download all workspaces". When omitted,
|
|
25
|
+
* the menu item is hidden.
|
|
26
|
+
*/
|
|
27
|
+
onDownloadAllWorkspaces?: () => void | Promise<void>;
|
|
12
28
|
}
|
|
13
29
|
|
|
14
|
-
export function AppMenu({
|
|
30
|
+
export function AppMenu({
|
|
31
|
+
aboutUrl: _aboutUrl = '#about',
|
|
32
|
+
logoUrl,
|
|
33
|
+
themePreference = 'auto',
|
|
34
|
+
onThemeChange,
|
|
35
|
+
versioningPreference = 'browser-only',
|
|
36
|
+
onVersioningPreferenceChange,
|
|
37
|
+
onDownloadAllWorkspaces,
|
|
38
|
+
}: AppMenuProps) {
|
|
15
39
|
const [isOpen, setIsOpen] = useState(false);
|
|
16
40
|
const [showAbout, setShowAbout] = useState(false);
|
|
41
|
+
const [showSettings, setShowSettings] = useState(false);
|
|
17
42
|
const menuRef = useRef<HTMLDivElement>(null);
|
|
18
43
|
|
|
19
44
|
useEffect(() => {
|
|
@@ -53,6 +78,23 @@ export function AppMenu({ aboutUrl: _aboutUrl = '#about', logoUrl }: AppMenuProp
|
|
|
53
78
|
|
|
54
79
|
{isOpen && (
|
|
55
80
|
<div className="db-app-menu-dropdown" role="menu">
|
|
81
|
+
<button
|
|
82
|
+
className="db-app-menu-item"
|
|
83
|
+
role="menuitem"
|
|
84
|
+
onClick={() => handleAction(() => setShowSettings(true))}
|
|
85
|
+
>
|
|
86
|
+
Settings
|
|
87
|
+
</button>
|
|
88
|
+
{onDownloadAllWorkspaces && (
|
|
89
|
+
<button
|
|
90
|
+
className="db-app-menu-item"
|
|
91
|
+
role="menuitem"
|
|
92
|
+
onClick={() => handleAction(() => void onDownloadAllWorkspaces())}
|
|
93
|
+
>
|
|
94
|
+
Download all workspaces
|
|
95
|
+
</button>
|
|
96
|
+
)}
|
|
97
|
+
<div className="db-app-menu-divider" />
|
|
56
98
|
<button
|
|
57
99
|
className="db-app-menu-item"
|
|
58
100
|
role="menuitem"
|
|
@@ -64,6 +106,104 @@ export function AppMenu({ aboutUrl: _aboutUrl = '#about', logoUrl }: AppMenuProp
|
|
|
64
106
|
)}
|
|
65
107
|
</div>
|
|
66
108
|
|
|
109
|
+
{showSettings && (
|
|
110
|
+
<div className="db-dialog-overlay" onClick={() => setShowSettings(false)}>
|
|
111
|
+
<div
|
|
112
|
+
className="db-dialog"
|
|
113
|
+
role="dialog"
|
|
114
|
+
aria-label="Settings"
|
|
115
|
+
onClick={(e) => e.stopPropagation()}
|
|
116
|
+
>
|
|
117
|
+
<div className="db-dialog-header">
|
|
118
|
+
<h2 className="db-dialog-title">Settings</h2>
|
|
119
|
+
<button
|
|
120
|
+
className="db-dialog-close"
|
|
121
|
+
onClick={() => setShowSettings(false)}
|
|
122
|
+
aria-label="Close"
|
|
123
|
+
>
|
|
124
|
+
×
|
|
125
|
+
</button>
|
|
126
|
+
</div>
|
|
127
|
+
<div className="db-dialog-body">
|
|
128
|
+
<fieldset className="db-settings-fieldset">
|
|
129
|
+
<legend className="db-settings-legend">Theme</legend>
|
|
130
|
+
<label className="db-settings-radio">
|
|
131
|
+
<input
|
|
132
|
+
type="radio"
|
|
133
|
+
name="theme"
|
|
134
|
+
value="auto"
|
|
135
|
+
checked={themePreference === 'auto'}
|
|
136
|
+
onChange={() => onThemeChange?.('auto')}
|
|
137
|
+
/>
|
|
138
|
+
System default
|
|
139
|
+
</label>
|
|
140
|
+
<label className="db-settings-radio">
|
|
141
|
+
<input
|
|
142
|
+
type="radio"
|
|
143
|
+
name="theme"
|
|
144
|
+
value="light"
|
|
145
|
+
checked={themePreference === 'light'}
|
|
146
|
+
onChange={() => onThemeChange?.('light')}
|
|
147
|
+
/>
|
|
148
|
+
Light
|
|
149
|
+
</label>
|
|
150
|
+
<label className="db-settings-radio">
|
|
151
|
+
<input
|
|
152
|
+
type="radio"
|
|
153
|
+
name="theme"
|
|
154
|
+
value="dark"
|
|
155
|
+
checked={themePreference === 'dark'}
|
|
156
|
+
onChange={() => onThemeChange?.('dark')}
|
|
157
|
+
/>
|
|
158
|
+
Dark
|
|
159
|
+
</label>
|
|
160
|
+
</fieldset>
|
|
161
|
+
|
|
162
|
+
{onVersioningPreferenceChange && (
|
|
163
|
+
<fieldset className="db-settings-fieldset">
|
|
164
|
+
<legend className="db-settings-legend">Version history</legend>
|
|
165
|
+
<p className="db-settings-hint">
|
|
166
|
+
When on, DocBlocks keeps prior revisions of each document inside a sibling{' '}
|
|
167
|
+
<code><name>_files/.versions/</code> folder. Individual workspaces can
|
|
168
|
+
override this default in their own settings.
|
|
169
|
+
</p>
|
|
170
|
+
<label className="db-settings-radio">
|
|
171
|
+
<input
|
|
172
|
+
type="radio"
|
|
173
|
+
name="versioning"
|
|
174
|
+
value="on"
|
|
175
|
+
checked={versioningPreference === 'on'}
|
|
176
|
+
onChange={() => onVersioningPreferenceChange('on')}
|
|
177
|
+
/>
|
|
178
|
+
On for all workspaces
|
|
179
|
+
</label>
|
|
180
|
+
<label className="db-settings-radio">
|
|
181
|
+
<input
|
|
182
|
+
type="radio"
|
|
183
|
+
name="versioning"
|
|
184
|
+
value="browser-only"
|
|
185
|
+
checked={versioningPreference === 'browser-only'}
|
|
186
|
+
onChange={() => onVersioningPreferenceChange('browser-only')}
|
|
187
|
+
/>
|
|
188
|
+
On in browser workspaces, off for local folders
|
|
189
|
+
</label>
|
|
190
|
+
<label className="db-settings-radio">
|
|
191
|
+
<input
|
|
192
|
+
type="radio"
|
|
193
|
+
name="versioning"
|
|
194
|
+
value="off"
|
|
195
|
+
checked={versioningPreference === 'off'}
|
|
196
|
+
onChange={() => onVersioningPreferenceChange('off')}
|
|
197
|
+
/>
|
|
198
|
+
Off for all workspaces
|
|
199
|
+
</label>
|
|
200
|
+
</fieldset>
|
|
201
|
+
)}
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
)}
|
|
206
|
+
|
|
67
207
|
{showAbout && (
|
|
68
208
|
<div className="db-dialog-overlay" onClick={() => setShowAbout(false)}>
|
|
69
209
|
<div
|
|
@@ -90,7 +230,7 @@ export function AppMenu({ aboutUrl: _aboutUrl = '#about', logoUrl }: AppMenuProp
|
|
|
90
230
|
<p>
|
|
91
231
|
Built on{' '}
|
|
92
232
|
<a
|
|
93
|
-
href="https://github.com/
|
|
233
|
+
href="https://github.com/bendyline/squisq"
|
|
94
234
|
target="_blank"
|
|
95
235
|
rel="noopener noreferrer"
|
|
96
236
|
>
|
package/src/AppMenu/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { AppMenu } from './AppMenu.js';
|
|
2
|
-
export type { AppMenuProps } from './AppMenu.js';
|
|
2
|
+
export type { AppMenuProps, ThemePreference } from './AppMenu.js';
|