@kerebron/extension-menu 0.4.5 → 0.4.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.
- package/README.md +1 -106
- package/assets/custom-menu.css +6 -26
- package/assets/menu.css +2 -2
- package/esm/{extension-menu/src/CustomMenuPlugin.d.ts → CustomMenuPlugin.d.ts} +4 -8
- package/esm/CustomMenuPlugin.d.ts.map +1 -0
- package/esm/{extension-menu/src/CustomMenuPlugin.js → CustomMenuPlugin.js} +10 -111
- package/esm/ExtensionCustomMenu.d.ts +11 -0
- package/esm/ExtensionCustomMenu.d.ts.map +1 -0
- package/esm/ExtensionCustomMenu.js +23 -0
- package/esm/{extension-menu/src/buildMenu.d.ts → buildMenu.d.ts} +1 -1
- package/esm/buildMenu.d.ts.map +1 -0
- package/esm/icons.d.ts.map +1 -0
- package/esm/{extension-menu/src/menu.d.ts → menu.d.ts} +1 -1
- package/esm/menu.d.ts.map +1 -0
- package/esm/{extension-menu/src/mod.d.ts → mod.d.ts} +0 -1
- package/esm/mod.d.ts.map +1 -0
- package/esm/{extension-menu/src/mod.js → mod.js} +0 -1
- package/esm/prompt.d.ts.map +1 -0
- package/package.json +6 -8
- package/esm/_dnt.polyfills.d.ts +0 -101
- package/esm/_dnt.polyfills.d.ts.map +0 -1
- package/esm/_dnt.polyfills.js +0 -127
- package/esm/editor/src/CoreEditor.d.ts +0 -40
- package/esm/editor/src/CoreEditor.d.ts.map +0 -1
- package/esm/editor/src/CoreEditor.js +0 -252
- package/esm/editor/src/DummyEditorView.d.ts +0 -60
- package/esm/editor/src/DummyEditorView.d.ts.map +0 -1
- package/esm/editor/src/DummyEditorView.js +0 -277
- package/esm/editor/src/Extension.d.ts +0 -31
- package/esm/editor/src/Extension.d.ts.map +0 -1
- package/esm/editor/src/Extension.js +0 -53
- package/esm/editor/src/ExtensionManager.d.ts +0 -32
- package/esm/editor/src/ExtensionManager.d.ts.map +0 -1
- package/esm/editor/src/ExtensionManager.js +0 -260
- package/esm/editor/src/Mark.d.ts +0 -23
- package/esm/editor/src/Mark.d.ts.map +0 -1
- package/esm/editor/src/Mark.js +0 -51
- package/esm/editor/src/Node.d.ts +0 -32
- package/esm/editor/src/Node.d.ts.map +0 -1
- package/esm/editor/src/Node.js +0 -60
- package/esm/editor/src/commands/CommandManager.d.ts +0 -23
- package/esm/editor/src/commands/CommandManager.d.ts.map +0 -1
- package/esm/editor/src/commands/CommandManager.js +0 -118
- package/esm/editor/src/commands/baseCommandFactories.d.ts +0 -3
- package/esm/editor/src/commands/baseCommandFactories.d.ts.map +0 -1
- package/esm/editor/src/commands/baseCommandFactories.js +0 -836
- package/esm/editor/src/commands/createChainableState.d.ts +0 -3
- package/esm/editor/src/commands/createChainableState.d.ts.map +0 -1
- package/esm/editor/src/commands/createChainableState.js +0 -29
- package/esm/editor/src/commands/keyCommandFactories.d.ts +0 -3
- package/esm/editor/src/commands/keyCommandFactories.d.ts.map +0 -1
- package/esm/editor/src/commands/keyCommandFactories.js +0 -10
- package/esm/editor/src/commands/mod.d.ts +0 -7
- package/esm/editor/src/commands/mod.d.ts.map +0 -1
- package/esm/editor/src/commands/mod.js +0 -76
- package/esm/editor/src/commands/replaceCommandFactories.d.ts +0 -3
- package/esm/editor/src/commands/replaceCommandFactories.d.ts.map +0 -1
- package/esm/editor/src/commands/replaceCommandFactories.js +0 -94
- package/esm/editor/src/commands/types.d.ts +0 -18
- package/esm/editor/src/commands/types.d.ts.map +0 -1
- package/esm/editor/src/commands/types.js +0 -1
- package/esm/editor/src/mod.d.ts +0 -9
- package/esm/editor/src/mod.d.ts.map +0 -1
- package/esm/editor/src/mod.js +0 -8
- package/esm/editor/src/nodeToTreeString.d.ts +0 -10
- package/esm/editor/src/nodeToTreeString.d.ts.map +0 -1
- package/esm/editor/src/nodeToTreeString.js +0 -74
- package/esm/editor/src/plugins/TrackSelecionPlugin.d.ts +0 -6
- package/esm/editor/src/plugins/TrackSelecionPlugin.d.ts.map +0 -1
- package/esm/editor/src/plugins/TrackSelecionPlugin.js +0 -24
- package/esm/editor/src/plugins/input-rules/InputRulesPlugin.d.ts +0 -23
- package/esm/editor/src/plugins/input-rules/InputRulesPlugin.d.ts.map +0 -1
- package/esm/editor/src/plugins/input-rules/InputRulesPlugin.js +0 -163
- package/esm/editor/src/plugins/keymap/keymap.d.ts +0 -11
- package/esm/editor/src/plugins/keymap/keymap.d.ts.map +0 -1
- package/esm/editor/src/plugins/keymap/keymap.js +0 -125
- package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts +0 -4
- package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts.map +0 -1
- package/esm/editor/src/plugins/keymap/w3c-keyname.js +0 -124
- package/esm/editor/src/types.d.ts +0 -52
- package/esm/editor/src/types.d.ts.map +0 -1
- package/esm/editor/src/types.js +0 -1
- package/esm/editor/src/ui.d.ts +0 -15
- package/esm/editor/src/ui.d.ts.map +0 -1
- package/esm/editor/src/ui.js +0 -16
- package/esm/editor/src/utilities/SmartOutput.d.ts +0 -41
- package/esm/editor/src/utilities/SmartOutput.d.ts.map +0 -1
- package/esm/editor/src/utilities/SmartOutput.js +0 -228
- package/esm/editor/src/utilities/createNodeFromContent.d.ts +0 -9
- package/esm/editor/src/utilities/createNodeFromContent.d.ts.map +0 -1
- package/esm/editor/src/utilities/createNodeFromContent.js +0 -32
- package/esm/editor/src/utilities/getHtmlAttributes.d.ts +0 -9
- package/esm/editor/src/utilities/getHtmlAttributes.d.ts.map +0 -1
- package/esm/editor/src/utilities/getHtmlAttributes.js +0 -47
- package/esm/editor/src/utilities/getShadowRoot.d.ts +0 -2
- package/esm/editor/src/utilities/getShadowRoot.d.ts.map +0 -1
- package/esm/editor/src/utilities/getShadowRoot.js +0 -16
- package/esm/editor/src/utilities/mod.d.ts +0 -6
- package/esm/editor/src/utilities/mod.d.ts.map +0 -1
- package/esm/editor/src/utilities/mod.js +0 -5
- package/esm/editor/src/utilities/toRawTextResult.d.ts +0 -3
- package/esm/editor/src/utilities/toRawTextResult.d.ts.map +0 -1
- package/esm/editor/src/utilities/toRawTextResult.js +0 -21
- package/esm/extension-autocomplete/src/AutocompletePlugin.d.ts +0 -8
- package/esm/extension-autocomplete/src/AutocompletePlugin.d.ts.map +0 -1
- package/esm/extension-autocomplete/src/AutocompletePlugin.js +0 -232
- package/esm/extension-autocomplete/src/DefaultRenderer.d.ts +0 -17
- package/esm/extension-autocomplete/src/DefaultRenderer.d.ts.map +0 -1
- package/esm/extension-autocomplete/src/DefaultRenderer.js +0 -137
- package/esm/extension-autocomplete/src/ExtensionAutocomplete.d.ts +0 -26
- package/esm/extension-autocomplete/src/ExtensionAutocomplete.d.ts.map +0 -1
- package/esm/extension-autocomplete/src/ExtensionAutocomplete.js +0 -30
- package/esm/extension-autocomplete/src/createDefaultMatcher.d.ts +0 -11
- package/esm/extension-autocomplete/src/createDefaultMatcher.d.ts.map +0 -1
- package/esm/extension-autocomplete/src/createDefaultMatcher.js +0 -58
- package/esm/extension-autocomplete/src/createRegexMatcher.d.ts +0 -4
- package/esm/extension-autocomplete/src/createRegexMatcher.d.ts.map +0 -1
- package/esm/extension-autocomplete/src/createRegexMatcher.js +0 -50
- package/esm/extension-autocomplete/src/mod.d.ts +0 -3
- package/esm/extension-autocomplete/src/mod.d.ts.map +0 -1
- package/esm/extension-autocomplete/src/mod.js +0 -2
- package/esm/extension-autocomplete/src/types.d.ts +0 -60
- package/esm/extension-autocomplete/src/types.d.ts.map +0 -1
- package/esm/extension-autocomplete/src/types.js +0 -1
- package/esm/extension-basic-editor/src/ExtensionHtml.d.ts +0 -15
- package/esm/extension-basic-editor/src/ExtensionHtml.d.ts.map +0 -1
- package/esm/extension-basic-editor/src/ExtensionHtml.js +0 -108
- package/esm/extension-lsp/src/DiagnosticPlugin.d.ts +0 -32
- package/esm/extension-lsp/src/DiagnosticPlugin.d.ts.map +0 -1
- package/esm/extension-lsp/src/DiagnosticPlugin.js +0 -131
- package/esm/extension-lsp/src/ExtensionLsp.d.ts +0 -25
- package/esm/extension-lsp/src/ExtensionLsp.d.ts.map +0 -1
- package/esm/extension-lsp/src/ExtensionLsp.js +0 -126
- package/esm/extension-lsp/src/LSPClient.d.ts +0 -56
- package/esm/extension-lsp/src/LSPClient.d.ts.map +0 -1
- package/esm/extension-lsp/src/LSPClient.js +0 -449
- package/esm/extension-lsp/src/LspStatus.d.ts +0 -34
- package/esm/extension-lsp/src/LspStatus.d.ts.map +0 -1
- package/esm/extension-lsp/src/LspStatus.js +0 -127
- package/esm/extension-lsp/src/computeIncrementalChanges.d.ts +0 -8
- package/esm/extension-lsp/src/computeIncrementalChanges.d.ts.map +0 -1
- package/esm/extension-lsp/src/computeIncrementalChanges.js +0 -82
- package/esm/extension-lsp/src/createLspAutocomplete.d.ts +0 -23
- package/esm/extension-lsp/src/createLspAutocomplete.d.ts.map +0 -1
- package/esm/extension-lsp/src/createLspAutocomplete.js +0 -68
- package/esm/extension-lsp/src/workspace.d.ts +0 -62
- package/esm/extension-lsp/src/workspace.d.ts.map +0 -1
- package/esm/extension-lsp/src/workspace.js +0 -168
- package/esm/extension-markdown/src/DocumentMarkdownInlineTokenizer.d.ts +0 -36
- package/esm/extension-markdown/src/DocumentMarkdownInlineTokenizer.d.ts.map +0 -1
- package/esm/extension-markdown/src/DocumentMarkdownInlineTokenizer.js +0 -240
- package/esm/extension-markdown/src/DocumentMarkdownTokenizer.d.ts +0 -26
- package/esm/extension-markdown/src/DocumentMarkdownTokenizer.d.ts.map +0 -1
- package/esm/extension-markdown/src/DocumentMarkdownTokenizer.js +0 -115
- package/esm/extension-markdown/src/ExtensionMarkdown.d.ts +0 -22
- package/esm/extension-markdown/src/ExtensionMarkdown.d.ts.map +0 -1
- package/esm/extension-markdown/src/ExtensionMarkdown.js +0 -48
- package/esm/extension-markdown/src/MarkdownParser.d.ts +0 -61
- package/esm/extension-markdown/src/MarkdownParser.d.ts.map +0 -1
- package/esm/extension-markdown/src/MarkdownParser.js +0 -249
- package/esm/extension-markdown/src/MarkdownSerializer.d.ts +0 -42
- package/esm/extension-markdown/src/MarkdownSerializer.d.ts.map +0 -1
- package/esm/extension-markdown/src/MarkdownSerializer.js +0 -325
- package/esm/extension-markdown/src/PositionMapper.d.ts +0 -15
- package/esm/extension-markdown/src/PositionMapper.d.ts.map +0 -1
- package/esm/extension-markdown/src/PositionMapper.js +0 -100
- package/esm/extension-markdown/src/TokenSource.d.ts +0 -11
- package/esm/extension-markdown/src/TokenSource.d.ts.map +0 -1
- package/esm/extension-markdown/src/TokenSource.js +0 -39
- package/esm/extension-markdown/src/mdToPmConverter.d.ts +0 -5
- package/esm/extension-markdown/src/mdToPmConverter.d.ts.map +0 -1
- package/esm/extension-markdown/src/mdToPmConverter.js +0 -111
- package/esm/extension-markdown/src/pmToMdConverter.d.ts +0 -16
- package/esm/extension-markdown/src/pmToMdConverter.d.ts.map +0 -1
- package/esm/extension-markdown/src/pmToMdConverter.js +0 -433
- package/esm/extension-markdown/src/token_handlers/basic_token_handlers.d.ts +0 -4
- package/esm/extension-markdown/src/token_handlers/basic_token_handlers.d.ts.map +0 -1
- package/esm/extension-markdown/src/token_handlers/basic_token_handlers.js +0 -151
- package/esm/extension-markdown/src/token_handlers/footnote_token_handlers.d.ts +0 -3
- package/esm/extension-markdown/src/token_handlers/footnote_token_handlers.d.ts.map +0 -1
- package/esm/extension-markdown/src/token_handlers/footnote_token_handlers.js +0 -34
- package/esm/extension-markdown/src/token_handlers/inline_token_handlers.d.ts +0 -6
- package/esm/extension-markdown/src/token_handlers/inline_token_handlers.d.ts.map +0 -1
- package/esm/extension-markdown/src/token_handlers/inline_token_handlers.js +0 -380
- package/esm/extension-markdown/src/token_handlers/lists_token_handlers.d.ts +0 -3
- package/esm/extension-markdown/src/token_handlers/lists_token_handlers.d.ts.map +0 -1
- package/esm/extension-markdown/src/token_handlers/lists_token_handlers.js +0 -323
- package/esm/extension-markdown/src/token_handlers/table_token_handlers.d.ts +0 -9
- package/esm/extension-markdown/src/token_handlers/table_token_handlers.d.ts.map +0 -1
- package/esm/extension-markdown/src/token_handlers/table_token_handlers.js +0 -308
- package/esm/extension-markdown/src/treeSitterTokenizer.d.ts +0 -5
- package/esm/extension-markdown/src/treeSitterTokenizer.d.ts.map +0 -1
- package/esm/extension-markdown/src/treeSitterTokenizer.js +0 -769
- package/esm/extension-markdown/src/types.d.ts +0 -28
- package/esm/extension-markdown/src/types.d.ts.map +0 -1
- package/esm/extension-markdown/src/types.js +0 -131
- package/esm/extension-markdown/src/utils.d.ts +0 -8
- package/esm/extension-markdown/src/utils.d.ts.map +0 -1
- package/esm/extension-markdown/src/utils.js +0 -86
- package/esm/extension-menu/src/CustomMenuPlugin.d.ts.map +0 -1
- package/esm/extension-menu/src/ExtensionCustomMenu.d.ts +0 -15
- package/esm/extension-menu/src/ExtensionCustomMenu.d.ts.map +0 -1
- package/esm/extension-menu/src/ExtensionCustomMenu.js +0 -58
- package/esm/extension-menu/src/buildMenu.d.ts.map +0 -1
- package/esm/extension-menu/src/icons.d.ts.map +0 -1
- package/esm/extension-menu/src/menu.d.ts.map +0 -1
- package/esm/extension-menu/src/mod.d.ts.map +0 -1
- package/esm/extension-menu/src/prompt.d.ts.map +0 -1
- package/esm/extension-yjs/src/CollaborationStatus.d.ts +0 -59
- package/esm/extension-yjs/src/CollaborationStatus.d.ts.map +0 -1
- package/esm/extension-yjs/src/CollaborationStatus.js +0 -286
- package/esm/tree-sitter-shim/src/main.d.ts +0 -15
- package/esm/tree-sitter-shim/src/main.d.ts.map +0 -1
- package/esm/tree-sitter-shim/src/main.js +0 -25
- package/esm/tree-sitter-shim/src/tree_sitter/node.d.ts +0 -6
- package/esm/tree-sitter-shim/src/tree_sitter/node.d.ts.map +0 -1
- package/esm/tree-sitter-shim/src/tree_sitter/node.js +0 -1
- package/esm/tree-sitter-shim/src/tree_sitter/parser.d.ts +0 -7
- package/esm/tree-sitter-shim/src/tree_sitter/parser.d.ts.map +0 -1
- package/esm/tree-sitter-shim/src/tree_sitter/parser.js +0 -5
- package/esm/tree-sitter-shim/src/tree_sitter/tree.d.ts +0 -6
- package/esm/tree-sitter-shim/src/tree_sitter/tree.d.ts.map +0 -1
- package/esm/tree-sitter-shim/src/tree_sitter/tree.js +0 -1
- package/esm/wasm/src/mod.d.ts +0 -12
- package/esm/wasm/src/mod.d.ts.map +0 -1
- package/esm/wasm/src/mod.js +0 -48
- package/esm/wasm/wasm.d.ts +0 -138
- package/esm/wasm/wasm.d.ts.map +0 -1
- package/esm/wasm/wasm.js +0 -120
- /package/esm/{extension-menu/src/buildMenu.js → buildMenu.js} +0 -0
- /package/esm/{extension-menu/src/icons.d.ts → icons.d.ts} +0 -0
- /package/esm/{extension-menu/src/icons.js → icons.js} +0 -0
- /package/esm/{extension-menu/src/menu.js → menu.js} +0 -0
- /package/esm/{extension-menu/src/prompt.d.ts → prompt.d.ts} +0 -0
- /package/esm/{extension-menu/src/prompt.js → prompt.js} +0 -0
package/README.md
CHANGED
|
@@ -1,108 +1,3 @@
|
|
|
1
1
|
# Menu extension
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Pinnable Tools**: Pin/unpin tools to customize the toolbar
|
|
8
|
-
- **Overflow Menu**: Tools that don't fit in the toolbar appear in an overflow menu
|
|
9
|
-
- **Mobile Responsive**: Automatically limits toolbar to 4 tools on narrow screens (< 768px)
|
|
10
|
-
- **State Persistence**: Pinned tool configuration saved to localStorage
|
|
11
|
-
- **Trailing Elements**: Support for fixed elements on the right side of the toolbar (e.g., status indicators)
|
|
12
|
-
- **Auto YJS Integration**: Automatically adds collaboration status when YJS extension is detected
|
|
13
|
-
- **Auto LSP Integration**: Automatically adds LSP status when LSP extension is detected
|
|
14
|
-
|
|
15
|
-
## Usage
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
import { ExtensionCustomMenu } from '@kerebron/extension-menu';
|
|
19
|
-
|
|
20
|
-
// Basic usage - auto-detects YJS and LSP, adds status indicators
|
|
21
|
-
new Editor({
|
|
22
|
-
extensions: [
|
|
23
|
-
// ... other extensions
|
|
24
|
-
ExtensionYjs({ ydoc, provider }), // Optional: for collaboration
|
|
25
|
-
ExtensionLsp({ getLspTransport }), // Optional: for LSP support
|
|
26
|
-
ExtensionCustomMenu(), // Must come LAST for auto-detection
|
|
27
|
-
],
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// Disable auto status indicators
|
|
31
|
-
new Editor({
|
|
32
|
-
extensions: [
|
|
33
|
-
ExtensionCustomMenu({
|
|
34
|
-
autoAddCollaborationStatus: false,
|
|
35
|
-
autoAddLspStatus: false,
|
|
36
|
-
}),
|
|
37
|
-
// ... other extensions
|
|
38
|
-
],
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
// Custom trailing elements
|
|
42
|
-
import { CollaborationStatusElement } from '@kerebron/extension-yjs/CollaborationStatus';
|
|
43
|
-
import { LspStatusElement } from '@kerebron/extension-lsp/LspStatus';
|
|
44
|
-
|
|
45
|
-
new Editor({
|
|
46
|
-
extensions: [
|
|
47
|
-
ExtensionCustomMenu({
|
|
48
|
-
autoAddCollaborationStatus: false,
|
|
49
|
-
autoAddLspStatus: false,
|
|
50
|
-
trailingElements: [
|
|
51
|
-
new CollaborationStatusElement({ awareness, provider }),
|
|
52
|
-
new LspStatusElement({ lspExtension, label: 'LSP' }),
|
|
53
|
-
],
|
|
54
|
-
}),
|
|
55
|
-
// ... other extensions
|
|
56
|
-
],
|
|
57
|
-
});
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Extension Order
|
|
61
|
-
|
|
62
|
-
**Important**: For auto-detection to work, `ExtensionCustomMenu` must be registered **after** any extensions you want it to detect:
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
extensions: [
|
|
66
|
-
// ... other extensions
|
|
67
|
-
new ExtensionYjs({ ... }), // Register first (if using)
|
|
68
|
-
new ExtensionLsp({ ... }), // Register second (if using)
|
|
69
|
-
new ExtensionCustomMenu(), // Register LAST for auto-detection
|
|
70
|
-
]
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Options
|
|
74
|
-
|
|
75
|
-
| Option | Type | Default | Description |
|
|
76
|
-
|--------|------|---------|-------------|
|
|
77
|
-
| `content` | `MenuElement[][]` | Auto-generated | Custom menu content (pinnable tools) |
|
|
78
|
-
| `trailingElements` | `MenuElement[]` | `[]` | Fixed elements on the right side of toolbar |
|
|
79
|
-
| `autoAddCollaborationStatus` | `boolean` | `true` | Auto-add collaboration status when YJS is detected |
|
|
80
|
-
| `autoAddLspStatus` | `boolean` | `true` | Auto-add LSP status when LSP extension is detected |
|
|
81
|
-
|
|
82
|
-
## CSS Imports
|
|
83
|
-
|
|
84
|
-
Don't forget to import the necessary CSS files:
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
import '@kerebron/extension-menu/assets/custom-menu.css';
|
|
88
|
-
import '@kerebron/extension-yjs/assets/collaboration-status.css'; // If using YJS
|
|
89
|
-
import '@kerebron/extension-lsp/assets/lsp-status.css'; // If using LSP
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## Debug Mode
|
|
93
|
-
|
|
94
|
-
Debug logging is disabled by default. To enable detailed logging for troubleshooting:
|
|
95
|
-
|
|
96
|
-
```javascript
|
|
97
|
-
// Enable debug mode
|
|
98
|
-
localStorage.setItem('kb-custom-menu-debug', 'true');
|
|
99
|
-
|
|
100
|
-
// Disable debug mode
|
|
101
|
-
localStorage.removeItem('kb-custom-menu-debug');
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
After changing the debug flag, refresh the page to see debug output in the console.
|
|
105
|
-
|
|
106
|
-
## Development
|
|
107
|
-
|
|
108
|
-
The custom menu plugin provides a configurable toolbar that adapts to available space and user preferences, with persistent state across sessions.
|
|
3
|
+
Porting prosemirror-menu in progress...
|
package/assets/custom-menu.css
CHANGED
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
padding: 6px var(--kb-space-sm);
|
|
75
75
|
background: var(--kb-color-surface-elevated);
|
|
76
76
|
border-bottom: 1px solid var(--kb-color-border-strong);
|
|
77
|
-
z-index:
|
|
77
|
+
z-index: 1000;
|
|
78
78
|
overflow: visible;
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -188,24 +188,6 @@
|
|
|
188
188
|
margin-left: auto;
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
/* Trailing separator (before trailing elements) */
|
|
192
|
-
.kb-custom-menu__separator--trailing {
|
|
193
|
-
margin-left: 0;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/* Trailing elements group (always visible, not pinnable) */
|
|
197
|
-
.kb-custom-menu__trailing-group {
|
|
198
|
-
display: flex;
|
|
199
|
-
align-items: center;
|
|
200
|
-
gap: var(--kb-space-xs);
|
|
201
|
-
flex-shrink: 0;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
.kb-custom-menu__trailing-item {
|
|
205
|
-
display: inline-flex;
|
|
206
|
-
align-items: center;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
191
|
/* Overflow toggle button (3-dot menu) */
|
|
210
192
|
.kb-custom-menu__overflow-toggle {
|
|
211
193
|
display: inline-flex;
|
|
@@ -244,7 +226,7 @@
|
|
|
244
226
|
border: 1px solid var(--kb-color-border-strong);
|
|
245
227
|
border-radius: var(--kb-radius-lg);
|
|
246
228
|
box-shadow: var(--kb-shadow-lg);
|
|
247
|
-
z-index:
|
|
229
|
+
z-index: 1001;
|
|
248
230
|
max-height: 80vh;
|
|
249
231
|
display: flex;
|
|
250
232
|
flex-direction: column;
|
|
@@ -294,7 +276,7 @@
|
|
|
294
276
|
padding: var(--kb-space-sm) 0;
|
|
295
277
|
border: none;
|
|
296
278
|
background: transparent;
|
|
297
|
-
color: var(--kb-
|
|
279
|
+
color: var(--kb-color-text);
|
|
298
280
|
cursor: pointer;
|
|
299
281
|
border-radius: 0;
|
|
300
282
|
transition: none;
|
|
@@ -379,7 +361,7 @@
|
|
|
379
361
|
/* Overflow item label */
|
|
380
362
|
.kb-custom-menu__overflow-item-label {
|
|
381
363
|
flex: 1;
|
|
382
|
-
color: var(--kb-
|
|
364
|
+
color: var(--kb-color-text);
|
|
383
365
|
font-size: var(--kb-text-sm);
|
|
384
366
|
white-space: nowrap;
|
|
385
367
|
overflow: hidden;
|
|
@@ -392,8 +374,7 @@
|
|
|
392
374
|
align-items: center;
|
|
393
375
|
margin-left: auto;
|
|
394
376
|
padding-left: var(--kb-space-sm);
|
|
395
|
-
color: var(--kb-
|
|
396
|
-
opacity: 0.7;
|
|
377
|
+
color: var(--kb-color-text-muted);
|
|
397
378
|
}
|
|
398
379
|
|
|
399
380
|
.kb-custom-menu__overflow-item-chevron svg {
|
|
@@ -503,7 +484,7 @@
|
|
|
503
484
|
right: 0;
|
|
504
485
|
bottom: 0;
|
|
505
486
|
background: rgba(0, 0, 0, 0.5);
|
|
506
|
-
z-index:
|
|
487
|
+
z-index: 10000;
|
|
507
488
|
display: flex;
|
|
508
489
|
align-items: center;
|
|
509
490
|
justify-content: center;
|
|
@@ -849,7 +830,6 @@
|
|
|
849
830
|
min-width: 200px;
|
|
850
831
|
max-width: 300px;
|
|
851
832
|
background: var(--kb-menu-dropdown-dark-bg) !important;
|
|
852
|
-
color: var(--kb-menu-dropdown-dark-text);
|
|
853
833
|
border: 1px solid var(--kb-color-border-strong);
|
|
854
834
|
border-radius: var(--kb-radius-lg);
|
|
855
835
|
box-shadow: var(--kb-shadow-lg);
|
package/assets/menu.css
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
padding: 4px 8px;
|
|
16
16
|
background: #f9f9f9;
|
|
17
17
|
border-bottom: 1px solid #dadce0;
|
|
18
|
-
z-index: var(--kb-z-dropdown,
|
|
18
|
+
z-index: var(--kb-z-dropdown, 1000);
|
|
19
19
|
overflow: visible;
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
|
|
123
123
|
.kb-menu {
|
|
124
124
|
background-color: var(--kb-color-surface);
|
|
125
|
-
z-index:
|
|
125
|
+
z-index: 10000;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
/* Toolbar items */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EditorState, Plugin } from 'prosemirror-state';
|
|
2
2
|
import { EditorView } from 'prosemirror-view';
|
|
3
|
-
import type { CoreEditor } from '
|
|
3
|
+
import type { CoreEditor } from '@kerebron/editor';
|
|
4
|
+
import { CustomMenuOptions } from './ExtensionCustomMenu.js';
|
|
4
5
|
import type { MenuElement } from './menu.js';
|
|
5
6
|
interface ToolItem {
|
|
6
7
|
id: string;
|
|
@@ -18,7 +19,6 @@ export declare class CustomMenuView {
|
|
|
18
19
|
pinnedDropdownMenu: HTMLElement | null;
|
|
19
20
|
modal: HTMLElement | null;
|
|
20
21
|
tools: ToolItem[];
|
|
21
|
-
trailingElements: MenuElement[];
|
|
22
22
|
root: Document | ShadowRoot;
|
|
23
23
|
resizeHandle: HTMLElement;
|
|
24
24
|
editorContainer: HTMLElement;
|
|
@@ -26,7 +26,7 @@ export declare class CustomMenuView {
|
|
|
26
26
|
private closePinnedDropdownHandler;
|
|
27
27
|
private submenuStack;
|
|
28
28
|
private pinnedDropdownStack;
|
|
29
|
-
constructor(editorView: EditorView, editor: CoreEditor, content: readonly (readonly MenuElement[])[]
|
|
29
|
+
constructor(editorView: EditorView, editor: CoreEditor, content: readonly (readonly MenuElement[])[]);
|
|
30
30
|
private initializeTools;
|
|
31
31
|
/**
|
|
32
32
|
* Generate a stable ID from a label by converting it to a kebab-case slug.
|
|
@@ -54,12 +54,8 @@ export declare class CustomMenuView {
|
|
|
54
54
|
update(view: EditorView, prevState: EditorState): void;
|
|
55
55
|
destroy(): void;
|
|
56
56
|
}
|
|
57
|
-
export interface CustomMenuPluginOptions {
|
|
58
|
-
content: readonly (readonly MenuElement[])[];
|
|
59
|
-
trailingElements?: readonly MenuElement[];
|
|
60
|
-
}
|
|
61
57
|
export declare class CustomMenuPlugin extends Plugin {
|
|
62
|
-
constructor(editor: CoreEditor, options:
|
|
58
|
+
constructor(editor: CoreEditor, options: CustomMenuOptions);
|
|
63
59
|
}
|
|
64
60
|
export {};
|
|
65
61
|
//# sourceMappingURL=CustomMenuPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomMenuPlugin.d.ts","sourceRoot":"","sources":["../src/CustomMenuPlugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAQ7C,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,cAAc;IAkBvB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE;IAnBvD,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,kBAAkB,EAAE,WAAW,GAAG,IAAI,CAAQ;IAC9C,KAAK,EAAE,WAAW,GAAG,IAAI,CAAQ;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAM;IACvB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,YAAY,EAAE,WAAW,CAAC;IAC1B,eAAe,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,0BAA0B,CAA0C;IAC5E,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,mBAAmB,CAEpB;gBAGI,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE;IA6DvD,OAAO,CAAC,eAAe;IA0BvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IAqCnB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,oBAAoB;IA8J5B,OAAO,CAAC,kBAAkB;IA6R1B,OAAO,CAAC,MAAM;IA6Jd,OAAO,CAAC,eAAe;IAyHvB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,WAAW;IAgDnB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW;IAQ/C,OAAO;CA8BR;AAED,qBAAa,gBAAiB,SAAQ,MAAM;gBAC9B,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB;CAO3D"}
|
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
// deno-lint-ignore-file no-window
|
|
2
|
-
import * as dntShim from "
|
|
2
|
+
import * as dntShim from "./_dnt.shims.js";
|
|
3
3
|
import { Plugin } from 'prosemirror-state';
|
|
4
4
|
const CSS_PREFIX = 'kb-custom-menu';
|
|
5
5
|
const MAX_PINNED_ITEMS = 8;
|
|
6
6
|
const STORAGE_KEY = 'kb-custom-menu-pinned';
|
|
7
|
-
const DEBUG_STORAGE_KEY = 'kb-custom-menu-debug';
|
|
8
7
|
// Bootstrap md breakpoint: 768px (mobile is < 768px, desktop is >= 768px)
|
|
9
8
|
const MOBILE_BREAKPOINT = 768;
|
|
10
|
-
// Debug helper function
|
|
11
|
-
function debug(...args) {
|
|
12
|
-
try {
|
|
13
|
-
if (typeof localStorage !== 'undefined' &&
|
|
14
|
-
localStorage.getItem(DEBUG_STORAGE_KEY) === 'true') {
|
|
15
|
-
console.log('[kb-custom-menu]', ...args);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
catch (e) {
|
|
19
|
-
// Ignore localStorage errors
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
9
|
export class CustomMenuView {
|
|
23
|
-
constructor(editorView, editor, content
|
|
10
|
+
constructor(editorView, editor, content) {
|
|
24
11
|
Object.defineProperty(this, "editorView", {
|
|
25
12
|
enumerable: true,
|
|
26
13
|
configurable: true,
|
|
@@ -75,12 +62,6 @@ export class CustomMenuView {
|
|
|
75
62
|
writable: true,
|
|
76
63
|
value: []
|
|
77
64
|
});
|
|
78
|
-
Object.defineProperty(this, "trailingElements", {
|
|
79
|
-
enumerable: true,
|
|
80
|
-
configurable: true,
|
|
81
|
-
writable: true,
|
|
82
|
-
value: []
|
|
83
|
-
});
|
|
84
65
|
Object.defineProperty(this, "root", {
|
|
85
66
|
enumerable: true,
|
|
86
67
|
configurable: true,
|
|
@@ -123,15 +104,10 @@ export class CustomMenuView {
|
|
|
123
104
|
writable: true,
|
|
124
105
|
value: []
|
|
125
106
|
});
|
|
126
|
-
debug('CustomMenuView constructor called');
|
|
127
|
-
debug('Content groups:', content.length);
|
|
128
107
|
this.root = editorView.root;
|
|
129
|
-
// Store trailing elements
|
|
130
|
-
this.trailingElements = trailingElements ? [...trailingElements] : [];
|
|
131
108
|
// Create wrapper
|
|
132
109
|
this.wrapper = document.createElement('div');
|
|
133
110
|
this.wrapper.classList.add(CSS_PREFIX + '__wrapper');
|
|
134
|
-
debug('Wrapper created:', this.wrapper);
|
|
135
111
|
// Create toolbar
|
|
136
112
|
this.toolbar = document.createElement('div');
|
|
137
113
|
this.toolbar.classList.add(CSS_PREFIX);
|
|
@@ -175,11 +151,8 @@ export class CustomMenuView {
|
|
|
175
151
|
}
|
|
176
152
|
}
|
|
177
153
|
initializeTools() {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this.content.forEach((group, groupIndex) => {
|
|
181
|
-
debug(`Processing group ${groupIndex}, elements:`, group.length);
|
|
182
|
-
group.forEach((element, elementIndex) => {
|
|
154
|
+
this.content.forEach((group) => {
|
|
155
|
+
group.forEach((element) => {
|
|
183
156
|
const { dom, update } = element.render(this.editorView);
|
|
184
157
|
// For dropdowns, get the label from the element's options directly
|
|
185
158
|
let label;
|
|
@@ -197,11 +170,8 @@ export class CustomMenuView {
|
|
|
197
170
|
element,
|
|
198
171
|
isPinned: false,
|
|
199
172
|
});
|
|
200
|
-
toolCount++;
|
|
201
|
-
debug(`Tool ${toolCount}: id="${id}", label="${label}"`);
|
|
202
173
|
});
|
|
203
174
|
});
|
|
204
|
-
debug(`Total tools initialized: ${this.tools.length}`);
|
|
205
175
|
}
|
|
206
176
|
/**
|
|
207
177
|
* Generate a stable ID from a label by converting it to a kebab-case slug.
|
|
@@ -264,38 +234,23 @@ export class CustomMenuView {
|
|
|
264
234
|
return 'Unknown Tool';
|
|
265
235
|
}
|
|
266
236
|
loadPinnedState() {
|
|
267
|
-
debug('Loading pinned state from localStorage');
|
|
268
237
|
try {
|
|
269
238
|
const saved = localStorage.getItem(STORAGE_KEY);
|
|
270
|
-
debug('Saved pinned state:', saved);
|
|
271
239
|
if (saved) {
|
|
272
240
|
const pinnedIds = JSON.parse(saved);
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
debug('Saved state is empty array, using default (first 8 tools)');
|
|
277
|
-
this.tools.slice(0, MAX_PINNED_ITEMS).forEach((tool) => {
|
|
278
|
-
tool.isPinned = true;
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
this.tools.forEach((tool) => {
|
|
283
|
-
tool.isPinned = pinnedIds.includes(tool.id);
|
|
284
|
-
});
|
|
285
|
-
}
|
|
241
|
+
this.tools.forEach((tool) => {
|
|
242
|
+
tool.isPinned = pinnedIds.includes(tool.id);
|
|
243
|
+
});
|
|
286
244
|
}
|
|
287
245
|
else {
|
|
288
246
|
// Default pinned items (first 8)
|
|
289
|
-
debug('No saved state, using default (first 8 tools)');
|
|
290
247
|
this.tools.slice(0, MAX_PINNED_ITEMS).forEach((tool) => {
|
|
291
248
|
tool.isPinned = true;
|
|
292
249
|
});
|
|
293
250
|
}
|
|
294
|
-
const pinnedCount = this.tools.filter((t) => t.isPinned).length;
|
|
295
|
-
debug(`Loaded pinned state: ${pinnedCount} tools pinned`);
|
|
296
251
|
}
|
|
297
252
|
catch (e) {
|
|
298
|
-
console.error('
|
|
253
|
+
console.error('Failed to load pinned state:', e);
|
|
299
254
|
// Default to first 8 items
|
|
300
255
|
this.tools.slice(0, MAX_PINNED_ITEMS).forEach((tool) => {
|
|
301
256
|
tool.isPinned = true;
|
|
@@ -442,37 +397,6 @@ export class CustomMenuView {
|
|
|
442
397
|
// Create dropdown menu
|
|
443
398
|
this.pinnedDropdownMenu = document.createElement('div');
|
|
444
399
|
this.pinnedDropdownMenu.classList.add(CSS_PREFIX + '__pinned-dropdown');
|
|
445
|
-
// Inherit theme CSS variables from editor container
|
|
446
|
-
// This ensures dropdowns match the editor's theme even when appended to body
|
|
447
|
-
const editorContainer = this.editorView.dom.closest('.kb-component') ||
|
|
448
|
-
this.editorView.dom.parentElement;
|
|
449
|
-
if (editorContainer) {
|
|
450
|
-
const computedStyle = getComputedStyle(editorContainer);
|
|
451
|
-
const themeVars = [
|
|
452
|
-
// New unified naming
|
|
453
|
-
'--kb-menu-dropdown-bg',
|
|
454
|
-
'--kb-menu-dropdown-border',
|
|
455
|
-
'--kb-menu-dropdown-text',
|
|
456
|
-
// Legacy naming (for backwards compatibility)
|
|
457
|
-
'--kb-menu-dropdown-dark-bg',
|
|
458
|
-
'--kb-menu-dropdown-dark-border',
|
|
459
|
-
'--kb-menu-dropdown-dark-text',
|
|
460
|
-
// General theme colors
|
|
461
|
-
'--kb-color-surface',
|
|
462
|
-
'--kb-color-surface-elevated',
|
|
463
|
-
'--kb-color-surface-hover',
|
|
464
|
-
'--kb-color-border',
|
|
465
|
-
'--kb-color-border-strong',
|
|
466
|
-
'--kb-color-text',
|
|
467
|
-
'--kb-color-text-muted',
|
|
468
|
-
];
|
|
469
|
-
themeVars.forEach((varName) => {
|
|
470
|
-
const value = computedStyle.getPropertyValue(varName).trim();
|
|
471
|
-
if (value) {
|
|
472
|
-
this.pinnedDropdownMenu.style.setProperty(varName, value);
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
}
|
|
476
400
|
// Position it below the trigger element
|
|
477
401
|
const rect = triggerElement.getBoundingClientRect();
|
|
478
402
|
this.pinnedDropdownMenu.style.position = 'absolute';
|
|
@@ -835,28 +759,22 @@ export class CustomMenuView {
|
|
|
835
759
|
}
|
|
836
760
|
}
|
|
837
761
|
render() {
|
|
838
|
-
debug('render() called');
|
|
839
762
|
// Clear toolbar and overflow menu
|
|
840
763
|
this.toolbar.innerHTML = '';
|
|
841
764
|
this.overflowMenu.innerHTML = '';
|
|
842
765
|
const pinnedTools = this.tools.filter((t) => t.isPinned);
|
|
843
766
|
const overflowTools = this.tools.filter((t) => !t.isPinned);
|
|
844
|
-
debug(`Rendering: ${pinnedTools.length} pinned, ${overflowTools.length} unpinned`);
|
|
845
767
|
// Check if we're in mobile view (Bootstrap md breakpoint: < 768px)
|
|
846
768
|
const isMobile = typeof dntShim.dntGlobalThis !== 'undefined' &&
|
|
847
769
|
globalThis.innerWidth < MOBILE_BREAKPOINT;
|
|
848
770
|
const mobileLimit = 4;
|
|
849
|
-
debug(`isMobile: ${isMobile}, window width: ${typeof dntShim.dntGlobalThis !== 'undefined' ? globalThis.innerWidth : 'N/A'}`);
|
|
850
771
|
// In mobile, only show first 4 pinned tools in toolbar
|
|
851
772
|
const visibleTools = isMobile
|
|
852
773
|
? pinnedTools.slice(0, mobileLimit)
|
|
853
774
|
: pinnedTools;
|
|
854
775
|
const mobileOverflowPinned = isMobile ? pinnedTools.slice(mobileLimit) : [];
|
|
855
|
-
debug(`Visible tools in toolbar: ${visibleTools.length}`);
|
|
856
|
-
debug('Visible tool IDs:', visibleTools.map((t) => t.id).join(', '));
|
|
857
776
|
// Render visible pinned tools in toolbar
|
|
858
|
-
visibleTools.forEach((tool
|
|
859
|
-
debug(`Rendering tool ${index + 1}/${visibleTools.length}: "${tool.label}" (${tool.id})`);
|
|
777
|
+
visibleTools.forEach((tool) => {
|
|
860
778
|
const wrapper = document.createElement('span');
|
|
861
779
|
wrapper.classList.add(CSS_PREFIX + '__item');
|
|
862
780
|
wrapper.setAttribute('data-tool-id', tool.id);
|
|
@@ -972,25 +890,6 @@ export class CustomMenuView {
|
|
|
972
890
|
});
|
|
973
891
|
this.toolbar.appendChild(overflowToggle);
|
|
974
892
|
}
|
|
975
|
-
// Render trailing elements (always visible, not pinnable)
|
|
976
|
-
if (this.trailingElements.length > 0) {
|
|
977
|
-
// Add separator before trailing elements
|
|
978
|
-
const separator = document.createElement('div');
|
|
979
|
-
separator.classList.add(CSS_PREFIX + '__separator');
|
|
980
|
-
separator.classList.add(CSS_PREFIX + '__separator--trailing');
|
|
981
|
-
this.toolbar.appendChild(separator);
|
|
982
|
-
// Create a trailing group container
|
|
983
|
-
const trailingGroup = document.createElement('div');
|
|
984
|
-
trailingGroup.classList.add(CSS_PREFIX + '__trailing-group');
|
|
985
|
-
this.trailingElements.forEach((element) => {
|
|
986
|
-
const { dom, update } = element.render(this.editorView);
|
|
987
|
-
const wrapper = document.createElement('span');
|
|
988
|
-
wrapper.classList.add(CSS_PREFIX + '__trailing-item');
|
|
989
|
-
wrapper.appendChild(dom);
|
|
990
|
-
trailingGroup.appendChild(wrapper);
|
|
991
|
-
});
|
|
992
|
-
this.toolbar.appendChild(trailingGroup);
|
|
993
|
-
}
|
|
994
893
|
// Render overflow menu content
|
|
995
894
|
this.renderOverflowMenu();
|
|
996
895
|
}
|
|
@@ -1179,7 +1078,7 @@ export class CustomMenuPlugin extends Plugin {
|
|
|
1179
1078
|
constructor(editor, options) {
|
|
1180
1079
|
super({
|
|
1181
1080
|
view(editorView) {
|
|
1182
|
-
return new CustomMenuView(editorView, editor, options.content
|
|
1081
|
+
return new CustomMenuView(editorView, editor, options.content);
|
|
1183
1082
|
},
|
|
1184
1083
|
});
|
|
1185
1084
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Plugin } from 'prosemirror-state';
|
|
2
|
+
import { Extension } from '@kerebron/editor';
|
|
3
|
+
import { type MenuElement } from './menu.js';
|
|
4
|
+
export interface CustomMenuOptions {
|
|
5
|
+
content: readonly (readonly MenuElement[])[];
|
|
6
|
+
}
|
|
7
|
+
export declare class ExtensionCustomMenu extends Extension {
|
|
8
|
+
name: string;
|
|
9
|
+
getProseMirrorPlugins(): Plugin[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ExtensionCustomMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionCustomMenu.d.ts","sourceRoot":"","sources":["../src/ExtensionCustomMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,MAAM,WAAW,iBAAiB;IAEhC,OAAO,EAAE,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC;CAC9C;AAGD,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,IAAI,SAAgB;IAEX,qBAAqB,IAAI,MAAM,EAAE;CAS3C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Extension } from '@kerebron/editor';
|
|
2
|
+
import { buildMenu } from './buildMenu.js';
|
|
3
|
+
import { CustomMenuPlugin } from './CustomMenuPlugin.js';
|
|
4
|
+
/// Extension for a customizable menu with pinned items
|
|
5
|
+
export class ExtensionCustomMenu extends Extension {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
Object.defineProperty(this, "name", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: 'customMenu'
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
getProseMirrorPlugins() {
|
|
16
|
+
const content = buildMenu(this.editor, this.editor.schema);
|
|
17
|
+
return [
|
|
18
|
+
new CustomMenuPlugin(this.editor, {
|
|
19
|
+
content,
|
|
20
|
+
}),
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from 'prosemirror-model';
|
|
2
|
-
import { type CoreEditor } from '
|
|
2
|
+
import { type CoreEditor } from '@kerebron/editor';
|
|
3
3
|
import { type MenuElement } from './menu.js';
|
|
4
4
|
export declare function buildMenu(editor: CoreEditor, schema: Schema): MenuElement[][];
|
|
5
5
|
//# sourceMappingURL=buildMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildMenu.d.ts","sourceRoot":"","sources":["../src/buildMenu.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAGL,KAAK,WAAW,EAGjB,MAAM,WAAW,CAAC;AAoCnB,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,EAAE,CAgX7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAerC,wBAAgB,OAAO,CACrB,IAAI,EAAE,QAAQ,GAAG,UAAU,EAC3B,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,GAChB,WAAW,CAmCb;AA8BD,eAAO,MAAM,KAAK,EAAE;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;CAyE7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"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"}
|
package/esm/mod.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC;AAEnB,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,QA0EA;AA+BD,8BAAsB,KAAK;IAKvB,QAAQ,CAAC,OAAO,EAAE;QAEhB,KAAK,CAAC,EAAE,GAAG,CAAC;QAGZ,KAAK,EAAE,MAAM,CAAC;QAGd,QAAQ,CAAC,EAAE,OAAO,CAAC;QAInB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;QAGzC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;KAC7B;gBAhBQ,OAAO,EAAE;QAEhB,KAAK,CAAC,EAAE,GAAG,CAAC;QAGZ,KAAK,EAAE,MAAM,CAAC;QAGd,QAAQ,CAAC,EAAE,OAAO,CAAC;QAInB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;QAGzC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;KAC7B;IAIH,QAAQ,CAAC,MAAM,IAAI,WAAW;IAG9B,IAAI,CAAC,GAAG,EAAE,WAAW;IAKrB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI;IAKvC,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI;IAQnC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;CAGvB;AAGD,qBAAa,SAAU,SAAQ,KAAK;IAClC,MAAM;CAQP;AAMD,qBAAa,WAAY,SAAQ,KAAK;IACpC,MAAM;CAWP"}
|
package/package.json
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kerebron/extension-menu",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.6",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"module": "./esm/
|
|
5
|
+
"module": "./esm/mod.js",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
|
-
"import": "./esm/
|
|
8
|
+
"import": "./esm/mod.js"
|
|
9
9
|
},
|
|
10
10
|
"./ExtensionCustomMenu": {
|
|
11
|
-
"import": "./esm/
|
|
11
|
+
"import": "./esm/ExtensionCustomMenu.js"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"scripts": {},
|
|
15
15
|
"dependencies": {
|
|
16
|
+
"@kerebron/editor": "0.4.6",
|
|
16
17
|
"prosemirror-model": "1.25.3",
|
|
17
18
|
"prosemirror-state": "1.4.3",
|
|
18
|
-
"prosemirror-
|
|
19
|
-
"prosemirror-view": "1.40.0",
|
|
20
|
-
"vscode-languageserver-protocol": "3.17.5",
|
|
21
|
-
"web-tree-sitter": "0.24.7"
|
|
19
|
+
"prosemirror-view": "1.40.0"
|
|
22
20
|
},
|
|
23
21
|
"devDependencies": {
|
|
24
22
|
"@types/node": "^20.9.0"
|