@fluentui-copilot/chat-input-plugins 0.4.1 → 0.5.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.
- package/CHANGELOG.json +60 -0
- package/CHANGELOG.md +19 -1
- package/dist/index.d.ts +1 -3
- package/lib/BasicFunctionality/BasicFunctionality.base.js +23 -15
- package/lib/BasicFunctionality/BasicFunctionality.base.js.map +1 -1
- package/lib-commonjs/BasicFunctionality/BasicFunctionality.base.js +18 -16
- package/lib-commonjs/BasicFunctionality/BasicFunctionality.base.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,66 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluentui-copilot/chat-input-plugins",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"date": "Wed, 28 May 2025 23:41:19 GMT",
|
|
6
|
+
"tag": "@fluentui-copilot/chat-input-plugins_v0.5.0",
|
|
7
|
+
"version": "0.5.0",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"author": "owcampbe@microsoft.com",
|
|
12
|
+
"package": "@fluentui-copilot/chat-input-plugins",
|
|
13
|
+
"commit": "914b30d1dd5b9e19a2a156578894a7b8163f9caf",
|
|
14
|
+
"comment": "feat: Filter out SentinelNode and defaultValue changes from onChange."
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"date": "Mon, 19 May 2025 18:04:26 GMT",
|
|
21
|
+
"tag": "@fluentui-copilot/chat-input-plugins_v0.4.2",
|
|
22
|
+
"version": "0.4.2",
|
|
23
|
+
"comments": {
|
|
24
|
+
"none": [
|
|
25
|
+
{
|
|
26
|
+
"author": "hochelmartin@gmail.com",
|
|
27
|
+
"package": "@fluentui-copilot/chat-input-plugins",
|
|
28
|
+
"commit": "442954951d0eca92de20ecb0ff0fa9492431b62d",
|
|
29
|
+
"comment": "fix: exclude story files from production build"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"date": "Wed, 30 Apr 2025 01:47:47 GMT",
|
|
36
|
+
"tag": "@fluentui-copilot/chat-input-plugins_v0.4.2",
|
|
37
|
+
"version": "0.4.2",
|
|
38
|
+
"comments": {
|
|
39
|
+
"none": [
|
|
40
|
+
{
|
|
41
|
+
"author": "tristan.watanabe@gmail.com",
|
|
42
|
+
"package": "@fluentui-copilot/chat-input-plugins",
|
|
43
|
+
"commit": "1391e0a7243d050db30fcc27547fd3e91df0162c",
|
|
44
|
+
"comment": "chore: update tsconfig to remove allowSyntheticDefaultImports to enforce named imports."
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"date": "Fri, 07 Feb 2025 02:02:08 GMT",
|
|
51
|
+
"tag": "@fluentui-copilot/chat-input-plugins_v0.4.2",
|
|
52
|
+
"version": "0.4.2",
|
|
53
|
+
"comments": {
|
|
54
|
+
"patch": [
|
|
55
|
+
{
|
|
56
|
+
"author": "owcampbe@microsoft.com",
|
|
57
|
+
"package": "@fluentui-copilot/chat-input-plugins",
|
|
58
|
+
"commit": "7f530f0f6d24d12c634a1247655aeaa92ddb7561",
|
|
59
|
+
"comment": "feat: Allow disabling the SentinelNode."
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
4
64
|
{
|
|
5
65
|
"date": "Wed, 18 Dec 2024 08:55:41 GMT",
|
|
6
66
|
"tag": "@fluentui-copilot/chat-input-plugins_v0.3.4",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
1
|
# Change Log - @fluentui-copilot/chat-input-plugins
|
|
2
2
|
|
|
3
|
-
This log was last generated on Wed,
|
|
3
|
+
This log was last generated on Wed, 28 May 2025 23:41:19 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## [0.5.0](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/chat-input-plugins_v0.5.0)
|
|
8
|
+
|
|
9
|
+
Wed, 28 May 2025 23:41:19 GMT
|
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentai/compare/@fluentui-copilot/chat-input-plugins_v0.4.2..@fluentui-copilot/chat-input-plugins_v0.5.0)
|
|
11
|
+
|
|
12
|
+
### Minor changes
|
|
13
|
+
|
|
14
|
+
- feat: Filter out SentinelNode and defaultValue changes from onChange. ([PR #3032](https://github.com/microsoft/fluentai/pull/3032) by owcampbe@microsoft.com)
|
|
15
|
+
|
|
16
|
+
## [0.4.2](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/chat-input-plugins_v0.4.2)
|
|
17
|
+
|
|
18
|
+
Fri, 07 Feb 2025 02:02:08 GMT
|
|
19
|
+
[Compare changes](https://github.com/microsoft/fluentai/compare/@fluentui-copilot/chat-input-plugins_v0.3.4..@fluentui-copilot/chat-input-plugins_v0.4.2)
|
|
20
|
+
|
|
21
|
+
### Patches
|
|
22
|
+
|
|
23
|
+
- feat: Allow disabling the SentinelNode. ([PR #2567](https://github.com/microsoft/fluentai/pull/2567) by owcampbe@microsoft.com)
|
|
24
|
+
|
|
7
25
|
## [0.3.4](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/chat-input-plugins_v0.3.4)
|
|
8
26
|
|
|
9
27
|
Wed, 18 Dec 2024 08:55:41 GMT
|
package/dist/index.d.ts
CHANGED
|
@@ -18,8 +18,7 @@ export declare class BasicFunctionalityBase implements IBasicFunctionalityBase {
|
|
|
18
18
|
private __baseHandlersCleanup?;
|
|
19
19
|
private __pasteHandlerCleanup?;
|
|
20
20
|
private __enterHandler;
|
|
21
|
-
constructor(editor: LexicalEditor);
|
|
22
|
-
insertDefaultValue(defaultValue: string): void;
|
|
21
|
+
constructor(editor: LexicalEditor, isSentinelNodeEnabled?: boolean);
|
|
23
22
|
activateContentCallbacks(onContentChange?: ((value: string) => void) | undefined, onCountChanged?: ((count: number) => void) | undefined): void;
|
|
24
23
|
deactivateContentCallbacks(): void;
|
|
25
24
|
activatePasteCallback(onPaste: (event: ClipboardEvent) => void): void;
|
|
@@ -76,7 +75,6 @@ export declare class GhostTextPluginBase<ComponentPropsType> {
|
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
export declare interface IBasicFunctionalityBase {
|
|
79
|
-
insertDefaultValue: (defaultValue: string) => void;
|
|
80
78
|
setIsDisabled: (isDisabled: boolean) => void;
|
|
81
79
|
activateContentCallbacks(onContentChange?: (value: string) => void, onCountChanged?: (count: number) => void): void;
|
|
82
80
|
deactivateContentCallbacks(): void;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
2
|
import { COMMAND_PRIORITY_HIGH } from '@fluentui-copilot/text-editor';
|
|
3
|
-
import { $
|
|
3
|
+
import { $getRoot, $getSelection, $isRangeSelection, INSERT_PARAGRAPH_COMMAND, KEY_ENTER_COMMAND, PASTE_COMMAND, mergeRegister } from '@fluentui-copilot/text-editor';
|
|
4
4
|
import { SENTINEL_VALUE } from './SentinelNode';
|
|
5
5
|
import { registerSentinelNodeHandlers } from './SentinelNodeHandlers';
|
|
6
6
|
function isClipboardEvent(event) {
|
|
7
7
|
return event.type === 'paste';
|
|
8
8
|
}
|
|
9
|
+
function getTextFromEditorState(state) {
|
|
10
|
+
// Remove the sentinel node whenever getting the text
|
|
11
|
+
return state.read(() => $getRoot().getTextContent()).replace(SENTINEL_VALUE, '');
|
|
12
|
+
}
|
|
9
13
|
export class BasicFunctionalityBase {
|
|
10
14
|
__enterHandler(event) {
|
|
11
15
|
const selection = $getSelection();
|
|
@@ -22,20 +26,21 @@ export class BasicFunctionalityBase {
|
|
|
22
26
|
// Mark event handled to override default behavior
|
|
23
27
|
return true;
|
|
24
28
|
}
|
|
25
|
-
insertDefaultValue(defaultValue) {
|
|
26
|
-
if (defaultValue) {
|
|
27
|
-
this.__editor.update(() => {
|
|
28
|
-
$insertNodes([$createTextNode(defaultValue)]);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
29
|
activateContentCallbacks(onContentChange, onCountChanged) {
|
|
33
30
|
this.deactivateContentCallbacks();
|
|
34
|
-
this.__contentChangeCleanup = this.__editor.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
this.__contentChangeCleanup = this.__editor.registerUpdateListener(({
|
|
32
|
+
editorState,
|
|
33
|
+
prevEditorState,
|
|
34
|
+
tags
|
|
35
|
+
}) => {
|
|
36
|
+
const prevText = getTextFromEditorState(prevEditorState);
|
|
37
|
+
const newText = getTextFromEditorState(editorState);
|
|
38
|
+
// If the text has not changed, don't trigger callbacks
|
|
39
|
+
if (prevText === newText) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
onContentChange === null || onContentChange === void 0 ? void 0 : onContentChange(newText);
|
|
43
|
+
onCountChanged === null || onCountChanged === void 0 ? void 0 : onCountChanged(newText.length);
|
|
39
44
|
});
|
|
40
45
|
}
|
|
41
46
|
deactivateContentCallbacks() {
|
|
@@ -92,14 +97,17 @@ export class BasicFunctionalityBase {
|
|
|
92
97
|
(_this___baseHandlersCleanup = (_this = this).__baseHandlersCleanup) === null || _this___baseHandlersCleanup === void 0 ? void 0 : _this___baseHandlersCleanup.call(_this);
|
|
93
98
|
this.__baseHandlersCleanup = undefined;
|
|
94
99
|
}
|
|
95
|
-
constructor(editor) {
|
|
100
|
+
constructor(editor, isSentinelNodeEnabled = true) {
|
|
96
101
|
_define_property(this, "__editor", void 0);
|
|
97
102
|
_define_property(this, "__contentChangeCleanup", void 0);
|
|
98
103
|
_define_property(this, "__trimWhitespaceCleanup", void 0);
|
|
99
104
|
_define_property(this, "__baseHandlersCleanup", void 0);
|
|
100
105
|
_define_property(this, "__pasteHandlerCleanup", void 0);
|
|
101
106
|
this.__editor = editor;
|
|
102
|
-
this.__baseHandlersCleanup = mergeRegister(this.__editor.registerCommand(KEY_ENTER_COMMAND, this.__enterHandler.bind(this), COMMAND_PRIORITY_HIGH), registerSentinelNodeHandlers(editor));
|
|
107
|
+
this.__baseHandlersCleanup = mergeRegister(this.__editor.registerCommand(KEY_ENTER_COMMAND, this.__enterHandler.bind(this), COMMAND_PRIORITY_HIGH), isSentinelNodeEnabled ? registerSentinelNodeHandlers(editor) : noop);
|
|
103
108
|
}
|
|
104
109
|
}
|
|
110
|
+
function noop() {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
105
113
|
//# sourceMappingURL=BasicFunctionality.base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BasicFunctionality.base.ts"],"sourcesContent":["import type { LexicalEditor } from '@fluentui-copilot/text-editor';\nimport { COMMAND_PRIORITY_HIGH } from '@fluentui-copilot/text-editor';\nimport {\n $
|
|
1
|
+
{"version":3,"sources":["BasicFunctionality.base.ts"],"sourcesContent":["import type { EditorState, LexicalEditor } from '@fluentui-copilot/text-editor';\nimport { COMMAND_PRIORITY_HIGH } from '@fluentui-copilot/text-editor';\nimport {\n $getRoot,\n $getSelection,\n $isRangeSelection,\n INSERT_PARAGRAPH_COMMAND,\n KEY_ENTER_COMMAND,\n PASTE_COMMAND,\n mergeRegister,\n} from '@fluentui-copilot/text-editor';\nimport { SENTINEL_VALUE } from './SentinelNode';\nimport { registerSentinelNodeHandlers } from './SentinelNodeHandlers';\n\nfunction isClipboardEvent(event: ClipboardEvent | KeyboardEvent | InputEvent): event is ClipboardEvent {\n return event.type === 'paste';\n}\n\nexport interface IBasicFunctionalityBase {\n setIsDisabled: (isDisabled: boolean) => void;\n activateContentCallbacks(onContentChange?: (value: string) => void, onCountChanged?: (count: number) => void): void;\n deactivateContentCallbacks(): void;\n activateTrimWhitespace(): void;\n deactivateTrimWhitespace(): void;\n activatePasteCallback(onPaste: (event: ClipboardEvent) => void): void;\n deactivatePasteCallback(): void;\n cleanup(): void;\n}\n\nfunction getTextFromEditorState(state: EditorState): string {\n // Remove the sentinel node whenever getting the text\n return state.read(() => $getRoot().getTextContent()).replace(SENTINEL_VALUE, '');\n}\n\nexport class BasicFunctionalityBase implements IBasicFunctionalityBase {\n private __editor: LexicalEditor;\n private __contentChangeCleanup?: () => void;\n private __trimWhitespaceCleanup?: () => void;\n private __baseHandlersCleanup?: () => void;\n private __pasteHandlerCleanup?: () => void;\n\n private __enterHandler(event: KeyboardEvent) {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return false;\n }\n\n if (event === null) {\n return false;\n }\n\n event.preventDefault();\n\n if (event.shiftKey) {\n return this.__editor.dispatchCommand(INSERT_PARAGRAPH_COMMAND, undefined);\n }\n\n // Mark event handled to override default behavior\n return true;\n }\n\n constructor(editor: LexicalEditor, isSentinelNodeEnabled = true) {\n this.__editor = editor;\n\n this.__baseHandlersCleanup = mergeRegister(\n this.__editor.registerCommand(KEY_ENTER_COMMAND, this.__enterHandler.bind(this), COMMAND_PRIORITY_HIGH),\n isSentinelNodeEnabled ? registerSentinelNodeHandlers(editor) : noop,\n );\n }\n\n activateContentCallbacks(\n onContentChange?: ((value: string) => void) | undefined,\n onCountChanged?: ((count: number) => void) | undefined,\n ) {\n this.deactivateContentCallbacks();\n this.__contentChangeCleanup = this.__editor.registerUpdateListener(({ editorState, prevEditorState, tags }) => {\n const prevText = getTextFromEditorState(prevEditorState);\n const newText = getTextFromEditorState(editorState);\n\n // If the text has not changed, don't trigger callbacks\n if (prevText === newText) {\n return;\n }\n\n onContentChange?.(newText);\n onCountChanged?.(newText.length);\n });\n }\n\n deactivateContentCallbacks() {\n this.__contentChangeCleanup?.();\n this.__contentChangeCleanup = undefined;\n }\n\n activatePasteCallback(onPaste: (event: ClipboardEvent) => void) {\n this.__pasteHandlerCleanup = this.__editor.registerCommand(\n PASTE_COMMAND,\n (event: ClipboardEvent | KeyboardEvent | InputEvent) => {\n if (!isClipboardEvent(event)) {\n return false;\n }\n\n onPaste(event);\n\n if (event.defaultPrevented) {\n return true;\n }\n\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n );\n }\n\n deactivatePasteCallback() {\n this.__pasteHandlerCleanup?.();\n this.__pasteHandlerCleanup = undefined;\n }\n\n activateTrimWhitespace() {\n this.deactivateTrimWhitespace();\n this.__trimWhitespaceCleanup = this.__editor.registerTextContentListener(text => {\n if (text.trim() === '') {\n this.__editor.update(\n () => {\n $getRoot()\n .getAllTextNodes()\n .forEach(node => {\n node.remove();\n });\n },\n // Don't allow undoing this action\n { tag: 'historic' },\n );\n }\n });\n }\n\n deactivateTrimWhitespace() {\n this.__trimWhitespaceCleanup?.();\n this.__trimWhitespaceCleanup = undefined;\n }\n\n setIsDisabled(isDisabled: boolean) {\n this.__editor.setEditable(!isDisabled);\n }\n\n cleanup() {\n this.deactivateContentCallbacks();\n this.deactivateTrimWhitespace();\n this.deactivatePasteCallback();\n this.__baseHandlersCleanup?.();\n this.__baseHandlersCleanup = undefined;\n }\n}\n\nfunction noop() {\n return;\n}\n"],"names":["COMMAND_PRIORITY_HIGH","$getRoot","$getSelection","$isRangeSelection","INSERT_PARAGRAPH_COMMAND","KEY_ENTER_COMMAND","PASTE_COMMAND","mergeRegister","SENTINEL_VALUE","registerSentinelNodeHandlers","isClipboardEvent","event","type","getTextFromEditorState","state","read","getTextContent","replace","BasicFunctionalityBase","__enterHandler","selection","preventDefault","shiftKey","__editor","dispatchCommand","undefined","activateContentCallbacks","onContentChange","onCountChanged","deactivateContentCallbacks","__contentChangeCleanup","registerUpdateListener","editorState","prevEditorState","tags","prevText","newText","length","activatePasteCallback","onPaste","__pasteHandlerCleanup","registerCommand","defaultPrevented","deactivatePasteCallback","activateTrimWhitespace","deactivateTrimWhitespace","__trimWhitespaceCleanup","registerTextContentListener","text","trim","update","getAllTextNodes","forEach","node","remove","tag","setIsDisabled","isDisabled","setEditable","cleanup","__baseHandlersCleanup","constructor","editor","isSentinelNodeEnabled","bind","noop"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -15,6 +15,10 @@ const _SentinelNodeHandlers = require("./SentinelNodeHandlers");
|
|
|
15
15
|
function isClipboardEvent(event) {
|
|
16
16
|
return event.type === 'paste';
|
|
17
17
|
}
|
|
18
|
+
function getTextFromEditorState(state) {
|
|
19
|
+
// Remove the sentinel node whenever getting the text
|
|
20
|
+
return state.read(()=>(0, _texteditor.$getRoot)().getTextContent()).replace(_SentinelNode.SENTINEL_VALUE, '');
|
|
21
|
+
}
|
|
18
22
|
class BasicFunctionalityBase {
|
|
19
23
|
__enterHandler(event) {
|
|
20
24
|
const selection = (0, _texteditor.$getSelection)();
|
|
@@ -31,22 +35,17 @@ class BasicFunctionalityBase {
|
|
|
31
35
|
// Mark event handled to override default behavior
|
|
32
36
|
return true;
|
|
33
37
|
}
|
|
34
|
-
insertDefaultValue(defaultValue) {
|
|
35
|
-
if (defaultValue) {
|
|
36
|
-
this.__editor.update(()=>{
|
|
37
|
-
(0, _texteditor.$insertNodes)([
|
|
38
|
-
(0, _texteditor.$createTextNode)(defaultValue)
|
|
39
|
-
]);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
38
|
activateContentCallbacks(onContentChange, onCountChanged) {
|
|
44
39
|
this.deactivateContentCallbacks();
|
|
45
|
-
this.__contentChangeCleanup = this.__editor.
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
this.__contentChangeCleanup = this.__editor.registerUpdateListener(({ editorState, prevEditorState, tags })=>{
|
|
41
|
+
const prevText = getTextFromEditorState(prevEditorState);
|
|
42
|
+
const newText = getTextFromEditorState(editorState);
|
|
43
|
+
// If the text has not changed, don't trigger callbacks
|
|
44
|
+
if (prevText === newText) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
onContentChange === null || onContentChange === void 0 ? void 0 : onContentChange(newText);
|
|
48
|
+
onCountChanged === null || onCountChanged === void 0 ? void 0 : onCountChanged(newText.length);
|
|
50
49
|
});
|
|
51
50
|
}
|
|
52
51
|
deactivateContentCallbacks() {
|
|
@@ -102,13 +101,16 @@ class BasicFunctionalityBase {
|
|
|
102
101
|
(_this___baseHandlersCleanup = (_this = this).__baseHandlersCleanup) === null || _this___baseHandlersCleanup === void 0 ? void 0 : _this___baseHandlersCleanup.call(_this);
|
|
103
102
|
this.__baseHandlersCleanup = undefined;
|
|
104
103
|
}
|
|
105
|
-
constructor(editor){
|
|
104
|
+
constructor(editor, isSentinelNodeEnabled = true){
|
|
106
105
|
(0, _define_property._)(this, "__editor", void 0);
|
|
107
106
|
(0, _define_property._)(this, "__contentChangeCleanup", void 0);
|
|
108
107
|
(0, _define_property._)(this, "__trimWhitespaceCleanup", void 0);
|
|
109
108
|
(0, _define_property._)(this, "__baseHandlersCleanup", void 0);
|
|
110
109
|
(0, _define_property._)(this, "__pasteHandlerCleanup", void 0);
|
|
111
110
|
this.__editor = editor;
|
|
112
|
-
this.__baseHandlersCleanup = (0, _texteditor.mergeRegister)(this.__editor.registerCommand(_texteditor.KEY_ENTER_COMMAND, this.__enterHandler.bind(this), _texteditor.COMMAND_PRIORITY_HIGH), (0, _SentinelNodeHandlers.registerSentinelNodeHandlers)(editor));
|
|
111
|
+
this.__baseHandlersCleanup = (0, _texteditor.mergeRegister)(this.__editor.registerCommand(_texteditor.KEY_ENTER_COMMAND, this.__enterHandler.bind(this), _texteditor.COMMAND_PRIORITY_HIGH), isSentinelNodeEnabled ? (0, _SentinelNodeHandlers.registerSentinelNodeHandlers)(editor) : noop);
|
|
113
112
|
}
|
|
113
|
+
}
|
|
114
|
+
function noop() {
|
|
115
|
+
return;
|
|
114
116
|
} //# sourceMappingURL=BasicFunctionality.base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BasicFunctionality.base.ts"],"sourcesContent":["import type { LexicalEditor } from '@fluentui-copilot/text-editor';\nimport { COMMAND_PRIORITY_HIGH } from '@fluentui-copilot/text-editor';\nimport {\n $
|
|
1
|
+
{"version":3,"sources":["BasicFunctionality.base.ts"],"sourcesContent":["import type { EditorState, LexicalEditor } from '@fluentui-copilot/text-editor';\nimport { COMMAND_PRIORITY_HIGH } from '@fluentui-copilot/text-editor';\nimport {\n $getRoot,\n $getSelection,\n $isRangeSelection,\n INSERT_PARAGRAPH_COMMAND,\n KEY_ENTER_COMMAND,\n PASTE_COMMAND,\n mergeRegister,\n} from '@fluentui-copilot/text-editor';\nimport { SENTINEL_VALUE } from './SentinelNode';\nimport { registerSentinelNodeHandlers } from './SentinelNodeHandlers';\n\nfunction isClipboardEvent(event: ClipboardEvent | KeyboardEvent | InputEvent): event is ClipboardEvent {\n return event.type === 'paste';\n}\n\nexport interface IBasicFunctionalityBase {\n setIsDisabled: (isDisabled: boolean) => void;\n activateContentCallbacks(onContentChange?: (value: string) => void, onCountChanged?: (count: number) => void): void;\n deactivateContentCallbacks(): void;\n activateTrimWhitespace(): void;\n deactivateTrimWhitespace(): void;\n activatePasteCallback(onPaste: (event: ClipboardEvent) => void): void;\n deactivatePasteCallback(): void;\n cleanup(): void;\n}\n\nfunction getTextFromEditorState(state: EditorState): string {\n // Remove the sentinel node whenever getting the text\n return state.read(() => $getRoot().getTextContent()).replace(SENTINEL_VALUE, '');\n}\n\nexport class BasicFunctionalityBase implements IBasicFunctionalityBase {\n private __editor: LexicalEditor;\n private __contentChangeCleanup?: () => void;\n private __trimWhitespaceCleanup?: () => void;\n private __baseHandlersCleanup?: () => void;\n private __pasteHandlerCleanup?: () => void;\n\n private __enterHandler(event: KeyboardEvent) {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return false;\n }\n\n if (event === null) {\n return false;\n }\n\n event.preventDefault();\n\n if (event.shiftKey) {\n return this.__editor.dispatchCommand(INSERT_PARAGRAPH_COMMAND, undefined);\n }\n\n // Mark event handled to override default behavior\n return true;\n }\n\n constructor(editor: LexicalEditor, isSentinelNodeEnabled = true) {\n this.__editor = editor;\n\n this.__baseHandlersCleanup = mergeRegister(\n this.__editor.registerCommand(KEY_ENTER_COMMAND, this.__enterHandler.bind(this), COMMAND_PRIORITY_HIGH),\n isSentinelNodeEnabled ? registerSentinelNodeHandlers(editor) : noop,\n );\n }\n\n activateContentCallbacks(\n onContentChange?: ((value: string) => void) | undefined,\n onCountChanged?: ((count: number) => void) | undefined,\n ) {\n this.deactivateContentCallbacks();\n this.__contentChangeCleanup = this.__editor.registerUpdateListener(({ editorState, prevEditorState, tags }) => {\n const prevText = getTextFromEditorState(prevEditorState);\n const newText = getTextFromEditorState(editorState);\n\n // If the text has not changed, don't trigger callbacks\n if (prevText === newText) {\n return;\n }\n\n onContentChange?.(newText);\n onCountChanged?.(newText.length);\n });\n }\n\n deactivateContentCallbacks() {\n this.__contentChangeCleanup?.();\n this.__contentChangeCleanup = undefined;\n }\n\n activatePasteCallback(onPaste: (event: ClipboardEvent) => void) {\n this.__pasteHandlerCleanup = this.__editor.registerCommand(\n PASTE_COMMAND,\n (event: ClipboardEvent | KeyboardEvent | InputEvent) => {\n if (!isClipboardEvent(event)) {\n return false;\n }\n\n onPaste(event);\n\n if (event.defaultPrevented) {\n return true;\n }\n\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n );\n }\n\n deactivatePasteCallback() {\n this.__pasteHandlerCleanup?.();\n this.__pasteHandlerCleanup = undefined;\n }\n\n activateTrimWhitespace() {\n this.deactivateTrimWhitespace();\n this.__trimWhitespaceCleanup = this.__editor.registerTextContentListener(text => {\n if (text.trim() === '') {\n this.__editor.update(\n () => {\n $getRoot()\n .getAllTextNodes()\n .forEach(node => {\n node.remove();\n });\n },\n // Don't allow undoing this action\n { tag: 'historic' },\n );\n }\n });\n }\n\n deactivateTrimWhitespace() {\n this.__trimWhitespaceCleanup?.();\n this.__trimWhitespaceCleanup = undefined;\n }\n\n setIsDisabled(isDisabled: boolean) {\n this.__editor.setEditable(!isDisabled);\n }\n\n cleanup() {\n this.deactivateContentCallbacks();\n this.deactivateTrimWhitespace();\n this.deactivatePasteCallback();\n this.__baseHandlersCleanup?.();\n this.__baseHandlersCleanup = undefined;\n }\n}\n\nfunction noop() {\n return;\n}\n"],"names":["BasicFunctionalityBase","isClipboardEvent","event","type","getTextFromEditorState","state","read","$getRoot","getTextContent","replace","SENTINEL_VALUE","__enterHandler","selection","$getSelection","$isRangeSelection","preventDefault","shiftKey","__editor","dispatchCommand","INSERT_PARAGRAPH_COMMAND","activateContentCallbacks","onContentChange","onCountChanged","deactivateContentCallbacks","__contentChangeCleanup","registerUpdateListener","newText","prevEditorState","editorState","length","activatePasteCallback","_this","registerCommand","PASTE_COMMAND","onPaste","defaultPrevented","COMMAND_PRIORITY_HIGH","deactivatePasteCallback","activateTrimWhitespace","deactivateTrimWhitespace","__pasteHandlerCleanup","_this___pasteHandlerCleanup","call","__trimWhitespaceCleanup","getAllTextNodes","remove","registerTextContentListener","text","update","forEach","node","tag","_this___trimWhitespaceCleanup","isDisabled","cleanup","undefined","_this___baseHandlersCleanup","constructor","isSentinelNodeEnabled","__baseHandlersCleanup","editor","_define_property","noop","mergeRegister","KEY_ENTER_COMMAND","bind","registerSentinelNodeHandlers"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/package.json
CHANGED