@fluentui-copilot/react-chat-input-plugins 0.4.10-hotfix.1 → 0.4.10-hotfix.2
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 +4 -4
- package/CHANGELOG.md +5 -5
- package/lib/BasicFunctionality.js +1 -0
- package/lib/ChatInputEntity.js +1 -0
- package/lib/ChatInputToken.js +1 -0
- package/lib/GhostText.js +1 -0
- package/lib/ImperativeControl.js +1 -0
- package/lib/PasteUnfurling.js +1 -0
- package/lib/components/ChatInputEntity/ChatInputEntity.js +5 -4
- package/lib/components/ChatInputEntity/ChatInputEntity.types.js +3 -2
- package/lib/components/ChatInputEntity/index.js +1 -0
- package/lib/components/ChatInputEntity/renderChatInputEntity.js +8 -9
- package/lib/components/ChatInputEntity/useChatInputEntity.js +44 -40
- package/lib/components/ChatInputEntity/useChatInputEntityStyles.styles.raw.js +35 -31
- package/lib/components/ChatInputToken/ChatInputToken.js +5 -4
- package/lib/components/ChatInputToken/ChatInputToken.node.js +50 -49
- package/lib/components/ChatInputToken/ChatInputToken.types.js +2 -1
- package/lib/components/ChatInputToken/index.js +1 -0
- package/lib/components/ChatInputToken/renderChatInputToken.js +6 -4
- package/lib/components/ChatInputToken/useChatInputToken.js +14 -12
- package/lib/components/ChatInputToken/useChatInputTokenStyles.styles.raw.js +19 -15
- package/lib/components/GhostText/GhostText.js +5 -4
- package/lib/components/GhostText/GhostText.types.js +3 -2
- package/lib/components/GhostText/index.js +1 -0
- package/lib/components/GhostText/renderGhostText.js +8 -9
- package/lib/components/GhostText/useGhostText.js +39 -36
- package/lib/components/GhostText/useGhostTextStyles.styles.raw.js +29 -25
- package/lib/index.js +1 -0
- package/lib/plugins/BasicFunctionality/BasicFunctionality.js +53 -67
- package/lib/plugins/BasicFunctionality/index.js +1 -0
- package/lib/plugins/ChatInputEntity/ChatInputEntity.node.js +68 -67
- package/lib/plugins/ChatInputEntity/ChatInputEntityPlugin.js +38 -37
- package/lib/plugins/ChatInputEntity/ChatInputEntityPlugin.types.js +2 -1
- package/lib/plugins/ChatInputEntity/index.js +1 -0
- package/lib/plugins/GhostText/GhostText.js +37 -43
- package/lib/plugins/GhostText/GhostText.node.js +57 -56
- package/lib/plugins/GhostText/index.js +1 -0
- package/lib/plugins/ImperativeControl/ImperativeControl.js +5 -6
- package/lib/plugins/ImperativeControl/index.js +1 -0
- package/lib/plugins/ManualGhostText/ManualGhostText.js +8 -8
- package/lib/plugins/ManualGhostText/index.js +1 -0
- package/lib/plugins/PasteUnfurling/PasteUnfurling.js +14 -14
- package/lib/plugins/PasteUnfurling/index.js +1 -0
- package/lib-commonjs/BasicFunctionality.js +1 -0
- package/lib-commonjs/ChatInputEntity.js +1 -0
- package/lib-commonjs/ChatInputToken.js +1 -0
- package/lib-commonjs/GhostText.js +1 -0
- package/lib-commonjs/ImperativeControl.js +1 -0
- package/lib-commonjs/PasteUnfurling.js +1 -0
- package/lib-commonjs/components/ChatInputEntity/ChatInputEntity.js +1 -1
- package/lib-commonjs/components/ChatInputEntity/ChatInputEntity.js.map +1 -1
- package/lib-commonjs/components/ChatInputEntity/ChatInputEntity.types.js +1 -0
- package/lib-commonjs/components/ChatInputEntity/ChatInputEntity.types.js.map +1 -1
- package/lib-commonjs/components/ChatInputEntity/index.js +1 -0
- package/lib-commonjs/components/ChatInputEntity/renderChatInputEntity.js +1 -1
- package/lib-commonjs/components/ChatInputEntity/renderChatInputEntity.js.map +1 -1
- package/lib-commonjs/components/ChatInputEntity/useChatInputEntity.js +1 -1
- package/lib-commonjs/components/ChatInputEntity/useChatInputEntity.js.map +1 -1
- package/lib-commonjs/components/ChatInputEntity/useChatInputEntityStyles.styles.raw.js +1 -1
- package/lib-commonjs/components/ChatInputEntity/useChatInputEntityStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ChatInputToken/ChatInputToken.js +1 -1
- package/lib-commonjs/components/ChatInputToken/ChatInputToken.js.map +1 -1
- package/lib-commonjs/components/ChatInputToken/ChatInputToken.node.js +1 -1
- package/lib-commonjs/components/ChatInputToken/ChatInputToken.node.js.map +1 -1
- package/lib-commonjs/components/ChatInputToken/ChatInputToken.types.js +1 -0
- package/lib-commonjs/components/ChatInputToken/index.js +1 -0
- package/lib-commonjs/components/ChatInputToken/renderChatInputToken.js +1 -1
- package/lib-commonjs/components/ChatInputToken/renderChatInputToken.js.map +1 -1
- package/lib-commonjs/components/ChatInputToken/useChatInputToken.js +1 -1
- package/lib-commonjs/components/ChatInputToken/useChatInputToken.js.map +1 -1
- package/lib-commonjs/components/ChatInputToken/useChatInputTokenStyles.styles.raw.js +1 -1
- package/lib-commonjs/components/ChatInputToken/useChatInputTokenStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/GhostText/GhostText.js +1 -1
- package/lib-commonjs/components/GhostText/GhostText.js.map +1 -1
- package/lib-commonjs/components/GhostText/GhostText.types.js +1 -0
- package/lib-commonjs/components/GhostText/GhostText.types.js.map +1 -1
- package/lib-commonjs/components/GhostText/index.js +1 -0
- package/lib-commonjs/components/GhostText/renderGhostText.js +1 -1
- package/lib-commonjs/components/GhostText/renderGhostText.js.map +1 -1
- package/lib-commonjs/components/GhostText/useGhostText.js +1 -1
- package/lib-commonjs/components/GhostText/useGhostText.js.map +1 -1
- package/lib-commonjs/components/GhostText/useGhostTextStyles.styles.raw.js +1 -1
- package/lib-commonjs/components/GhostText/useGhostTextStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/index.js +1 -0
- package/lib-commonjs/plugins/BasicFunctionality/BasicFunctionality.js +1 -1
- package/lib-commonjs/plugins/BasicFunctionality/BasicFunctionality.js.map +1 -1
- package/lib-commonjs/plugins/BasicFunctionality/index.js +1 -0
- package/lib-commonjs/plugins/ChatInputEntity/ChatInputEntity.node.js +1 -1
- package/lib-commonjs/plugins/ChatInputEntity/ChatInputEntity.node.js.map +1 -1
- package/lib-commonjs/plugins/ChatInputEntity/ChatInputEntityPlugin.js +1 -1
- package/lib-commonjs/plugins/ChatInputEntity/ChatInputEntityPlugin.js.map +1 -1
- package/lib-commonjs/plugins/ChatInputEntity/ChatInputEntityPlugin.types.js +1 -0
- package/lib-commonjs/plugins/ChatInputEntity/index.js +1 -0
- package/lib-commonjs/plugins/GhostText/GhostText.js +3 -2
- package/lib-commonjs/plugins/GhostText/GhostText.js.map +1 -1
- package/lib-commonjs/plugins/GhostText/GhostText.node.js +1 -1
- package/lib-commonjs/plugins/GhostText/GhostText.node.js.map +1 -1
- package/lib-commonjs/plugins/GhostText/index.js +1 -0
- package/lib-commonjs/plugins/ImperativeControl/ImperativeControl.js +1 -1
- package/lib-commonjs/plugins/ImperativeControl/ImperativeControl.js.map +1 -1
- package/lib-commonjs/plugins/ImperativeControl/index.js +1 -0
- package/lib-commonjs/plugins/ManualGhostText/ManualGhostText.js +1 -1
- package/lib-commonjs/plugins/ManualGhostText/ManualGhostText.js.map +1 -1
- package/lib-commonjs/plugins/ManualGhostText/index.js +1 -0
- package/lib-commonjs/plugins/PasteUnfurling/PasteUnfurling.js +1 -1
- package/lib-commonjs/plugins/PasteUnfurling/PasteUnfurling.js.map +1 -1
- package/lib-commonjs/plugins/PasteUnfurling/index.js +1 -0
- package/package.json +5 -5
|
@@ -10,40 +10,43 @@ import { $getNodeByKey, useLexicalComposerContext } from '@fluentui-copilot/reac
|
|
|
10
10
|
*
|
|
11
11
|
* @param props - props from this instance of GhostText
|
|
12
12
|
* @param ref - reference to root HTMLElement of GhostText
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
13
|
+
*/
|
|
14
|
+
export const useGhostText_unstable = (props, ref) => {
|
|
15
|
+
const {
|
|
16
|
+
nodeKey,
|
|
17
|
+
onClick,
|
|
18
|
+
...rest
|
|
19
|
+
} = props;
|
|
20
|
+
const [editor] = useLexicalComposerContext();
|
|
21
|
+
const handleClick = React.useCallback(_ev => {
|
|
22
|
+
if (!nodeKey) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
editor.update(() => {
|
|
26
|
+
var _node_getPreviousSibling;
|
|
27
|
+
const node = $getNodeByKey(nodeKey);
|
|
28
|
+
node === null || node === void 0 ? void 0 : (_node_getPreviousSibling = node.getPreviousSibling()) === null || _node_getPreviousSibling === void 0 ? void 0 : _node_getPreviousSibling.selectEnd();
|
|
29
|
+
}, {
|
|
30
|
+
tag: 'historic'
|
|
31
|
+
});
|
|
32
|
+
}, [editor, nodeKey]);
|
|
33
|
+
const mergedOnClick = mergeCallbacks(handleClick, onClick);
|
|
34
|
+
const state = {
|
|
35
|
+
components: {
|
|
36
|
+
root: 'span',
|
|
37
|
+
indicator: 'span'
|
|
38
|
+
},
|
|
39
|
+
root: slot.always(getIntrinsicElementProps('span', {
|
|
40
|
+
ref,
|
|
41
|
+
onClick: mergedOnClick,
|
|
42
|
+
...rest
|
|
43
|
+
}), {
|
|
44
|
+
elementType: 'span'
|
|
45
|
+
}),
|
|
46
|
+
indicator: slot.optional(props.indicator, {
|
|
47
|
+
elementType: 'span'
|
|
48
|
+
})
|
|
49
|
+
};
|
|
50
|
+
return state;
|
|
49
51
|
};
|
|
52
|
+
//# sourceMappingURL=useGhostText.js.map
|
|
@@ -1,35 +1,39 @@
|
|
|
1
1
|
import { makeStyles, mergeClasses, typographyStyles } from '@fluentui/react-components';
|
|
2
2
|
import { tokens } from '@fluentui-copilot/tokens';
|
|
3
3
|
export const ghostTextClassNames = {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
root: 'fai-GhostText',
|
|
5
|
+
indicator: 'fai-GhostText__indicator'
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
8
|
* Styles for the root slot
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
*/
|
|
10
|
+
const useStyles = makeStyles({
|
|
11
|
+
root: {
|
|
12
|
+
color: tokens.colorNeutralForeground4,
|
|
13
|
+
whiteSpace: 'pre-wrap',
|
|
14
|
+
gap: tokens.spacingHorizontalXS
|
|
15
|
+
},
|
|
16
|
+
indicator: {
|
|
17
|
+
...typographyStyles.caption2Strong,
|
|
18
|
+
color: tokens.colorNeutralForeground3,
|
|
19
|
+
backgroundColor: tokens.colorNeutralBackground5,
|
|
20
|
+
padding: `${tokens.spacingVerticalNone} ${tokens.spacingHorizontalSNudge}`,
|
|
21
|
+
borderRadius: tokens.borderRadiusSmall,
|
|
22
|
+
marginLeft: tokens.spacingHorizontalXS,
|
|
23
|
+
merginRight: tokens.spacingHorizontalXS
|
|
24
|
+
}
|
|
24
25
|
});
|
|
25
26
|
/**
|
|
26
27
|
* Apply styling to the GhostText slots based on the state
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
*/
|
|
29
|
+
export const useGhostTextStyles_unstable = state => {
|
|
30
|
+
'use no memo';
|
|
31
|
+
|
|
32
|
+
const styles = useStyles();
|
|
33
|
+
state.root.className = mergeClasses(ghostTextClassNames.root, styles.root, state.root.className);
|
|
34
|
+
if (state.indicator) {
|
|
35
|
+
state.indicator.className = mergeClasses(ghostTextClassNames.indicator, styles.indicator, state.indicator.className);
|
|
36
|
+
}
|
|
37
|
+
return state;
|
|
35
38
|
};
|
|
39
|
+
//# sourceMappingURL=useGhostTextStyles.styles.raw.js.map
|
package/lib/index.js
CHANGED
|
@@ -4,3 +4,4 @@ export { ChatInputToken, ChatInputTokenNode, chatInputTokenClassNames, renderCha
|
|
|
4
4
|
export { BasicFunctionalityPlugin } from './BasicFunctionality';
|
|
5
5
|
export { ImperativeControlPlugin } from './ImperativeControl';
|
|
6
6
|
export { PasteUnfurlingPlugin } from './PasteUnfurling';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -2,71 +2,57 @@ import * as React from 'react';
|
|
|
2
2
|
import { useLexicalComposerContext } from '@fluentui-copilot/react-text-editor';
|
|
3
3
|
import { useIsomorphicLayoutEffect } from '@fluentui/react-components';
|
|
4
4
|
import { BasicFunctionalityBase } from '@fluentui-copilot/chat-input-plugins';
|
|
5
|
-
export const BasicFunctionalityPlugin = React.forwardRef((props, ref)=>{
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
basicFunctionalityImpl,
|
|
58
|
-
editor,
|
|
59
|
-
onPaste
|
|
60
|
-
]);
|
|
61
|
-
React.useEffect(()=>{
|
|
62
|
-
if (trimWhitespace) {
|
|
63
|
-
basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.activateTrimWhitespace();
|
|
64
|
-
}
|
|
65
|
-
return ()=>basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.deactivateTrimWhitespace();
|
|
66
|
-
}, [
|
|
67
|
-
basicFunctionalityImpl,
|
|
68
|
-
editor,
|
|
69
|
-
trimWhitespace
|
|
70
|
-
]);
|
|
71
|
-
return null;
|
|
5
|
+
export const BasicFunctionalityPlugin = React.forwardRef((props, ref) => {
|
|
6
|
+
const {
|
|
7
|
+
defaultValue,
|
|
8
|
+
trimWhitespace,
|
|
9
|
+
onCountChanged,
|
|
10
|
+
onContentChange,
|
|
11
|
+
onPaste,
|
|
12
|
+
isSentinelNodeEnabled
|
|
13
|
+
} = props;
|
|
14
|
+
const [editor] = useLexicalComposerContext();
|
|
15
|
+
const [basicFunctionalityImpl, setBasicFunctionalityImpl] = React.useState(null);
|
|
16
|
+
useIsomorphicLayoutEffect(() => {
|
|
17
|
+
setBasicFunctionalityImpl(new BasicFunctionalityBase(editor, isSentinelNodeEnabled));
|
|
18
|
+
return () => {
|
|
19
|
+
setBasicFunctionalityImpl(prev => {
|
|
20
|
+
prev === null || prev === void 0 ? void 0 : prev.cleanup();
|
|
21
|
+
return null;
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
}, [editor, isSentinelNodeEnabled]);
|
|
25
|
+
React.useImperativeHandle(ref, () => ({
|
|
26
|
+
setIsDisabled(isDisabled) {
|
|
27
|
+
basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.setIsDisabled(isDisabled);
|
|
28
|
+
}
|
|
29
|
+
}), [basicFunctionalityImpl]);
|
|
30
|
+
const setDefaultValue = React.useRef(false);
|
|
31
|
+
// useIsomorphicLayoutEffect is used to avoid flickering on first render
|
|
32
|
+
useIsomorphicLayoutEffect(() => {
|
|
33
|
+
if (basicFunctionalityImpl && !setDefaultValue.current) {
|
|
34
|
+
if (defaultValue) {
|
|
35
|
+
basicFunctionalityImpl.insertDefaultValue(defaultValue);
|
|
36
|
+
}
|
|
37
|
+
setDefaultValue.current = true;
|
|
38
|
+
}
|
|
39
|
+
}, [basicFunctionalityImpl, defaultValue, editor]);
|
|
40
|
+
React.useEffect(() => {
|
|
41
|
+
basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.activateContentCallbacks(onContentChange, onCountChanged);
|
|
42
|
+
return () => basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.deactivateContentCallbacks();
|
|
43
|
+
}, [basicFunctionalityImpl, editor, onContentChange, onCountChanged]);
|
|
44
|
+
React.useEffect(() => {
|
|
45
|
+
if (onPaste) {
|
|
46
|
+
basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.activatePasteCallback(onPaste);
|
|
47
|
+
}
|
|
48
|
+
return () => basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.deactivatePasteCallback();
|
|
49
|
+
}, [basicFunctionalityImpl, editor, onPaste]);
|
|
50
|
+
React.useEffect(() => {
|
|
51
|
+
if (trimWhitespace) {
|
|
52
|
+
basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.activateTrimWhitespace();
|
|
53
|
+
}
|
|
54
|
+
return () => basicFunctionalityImpl === null || basicFunctionalityImpl === void 0 ? void 0 : basicFunctionalityImpl.deactivateTrimWhitespace();
|
|
55
|
+
}, [basicFunctionalityImpl, editor, trimWhitespace]);
|
|
56
|
+
return null;
|
|
72
57
|
});
|
|
58
|
+
//# sourceMappingURL=BasicFunctionality.js.map
|
|
@@ -3,76 +3,77 @@ import * as React from 'react';
|
|
|
3
3
|
import { DecoratorNode } from '@fluentui-copilot/text-editor';
|
|
4
4
|
import { ChatInputEntity } from '../../ChatInputEntity';
|
|
5
5
|
export class ChatInputEntityNode extends DecoratorNode {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
return /*#__PURE__*/ React.createElement(ChatInputEntity, this.__entityProps, this.__text);
|
|
47
|
-
}
|
|
48
|
-
getEntityData() {
|
|
49
|
-
return {
|
|
50
|
-
text: this.__text,
|
|
51
|
-
data: this.__data,
|
|
52
|
-
entityProps: this.__entityProps
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
updateEntityData(data) {
|
|
56
|
-
const writable = this.getWritable();
|
|
57
|
-
writable.__text = data.text;
|
|
58
|
-
writable.__data = data.data;
|
|
59
|
-
writable.__entityProps = data.entityProps;
|
|
60
|
-
}
|
|
61
|
-
constructor(pluginId, text, data, entityProps, key){
|
|
62
|
-
super(key);
|
|
63
|
-
_define_property(this, "__pluginId", void 0);
|
|
64
|
-
_define_property(this, "__text", void 0);
|
|
65
|
-
_define_property(this, "__entityProps", void 0);
|
|
66
|
-
_define_property(this, "__data", void 0);
|
|
67
|
-
this.__pluginId = pluginId;
|
|
68
|
-
this.__text = text;
|
|
69
|
-
this.__data = data;
|
|
70
|
-
this.__entityProps = entityProps;
|
|
6
|
+
static getType() {
|
|
7
|
+
return 'entity';
|
|
8
|
+
}
|
|
9
|
+
static clone(node) {
|
|
10
|
+
return new ChatInputEntityNode(node.__pluginId, node.__text, node.__data, node.__entityProps, node.__key);
|
|
11
|
+
}
|
|
12
|
+
static importJSON(serializedNode) {
|
|
13
|
+
return $createChatInputEntityNode(serializedNode.pluginId, serializedNode.text, serializedNode.data, serializedNode.entityProps);
|
|
14
|
+
}
|
|
15
|
+
isIsolated() {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
isInline() {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
getTextContent() {
|
|
22
|
+
return this.__text;
|
|
23
|
+
}
|
|
24
|
+
exportJSON() {
|
|
25
|
+
return {
|
|
26
|
+
pluginId: this.__pluginId,
|
|
27
|
+
text: this.__text,
|
|
28
|
+
data: this.__data,
|
|
29
|
+
entityProps: this.__entityProps,
|
|
30
|
+
type: ChatInputEntityNode.getType(),
|
|
31
|
+
version: 1
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
createDOM() {
|
|
35
|
+
// eslint-disable-next-line no-restricted-globals
|
|
36
|
+
return document.createElement('span');
|
|
37
|
+
}
|
|
38
|
+
updateDOM() {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
decorate(_editor, config) {
|
|
42
|
+
var _this___entityProps;
|
|
43
|
+
if ((_this___entityProps = this.__entityProps) === null || _this___entityProps === void 0 ? void 0 : _this___entityProps.children) {
|
|
44
|
+
return /*#__PURE__*/React.createElement(ChatInputEntity, this.__entityProps);
|
|
71
45
|
}
|
|
46
|
+
return /*#__PURE__*/React.createElement(ChatInputEntity, this.__entityProps, this.__text);
|
|
47
|
+
}
|
|
48
|
+
getEntityData() {
|
|
49
|
+
return {
|
|
50
|
+
text: this.__text,
|
|
51
|
+
data: this.__data,
|
|
52
|
+
entityProps: this.__entityProps
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
updateEntityData(data) {
|
|
56
|
+
const writable = this.getWritable();
|
|
57
|
+
writable.__text = data.text;
|
|
58
|
+
writable.__data = data.data;
|
|
59
|
+
writable.__entityProps = data.entityProps;
|
|
60
|
+
}
|
|
61
|
+
constructor(pluginId, text, data, entityProps, key) {
|
|
62
|
+
super(key);
|
|
63
|
+
_define_property(this, "__pluginId", void 0);
|
|
64
|
+
_define_property(this, "__text", void 0);
|
|
65
|
+
_define_property(this, "__entityProps", void 0);
|
|
66
|
+
_define_property(this, "__data", void 0);
|
|
67
|
+
this.__pluginId = pluginId;
|
|
68
|
+
this.__text = text;
|
|
69
|
+
this.__data = data;
|
|
70
|
+
this.__entityProps = entityProps;
|
|
71
|
+
}
|
|
72
72
|
}
|
|
73
73
|
export function $createChatInputEntityNode(pluginId, text, data, entityProps, key) {
|
|
74
|
-
|
|
74
|
+
return new ChatInputEntityNode(pluginId, text, data, entityProps, key);
|
|
75
75
|
}
|
|
76
76
|
export function $isChatInputEntityNode(node) {
|
|
77
|
-
|
|
77
|
+
return node instanceof ChatInputEntityNode;
|
|
78
78
|
}
|
|
79
|
+
//# sourceMappingURL=ChatInputEntity.node.js.map
|
|
@@ -2,41 +2,42 @@ import { useLexicalComposerContext } from '@fluentui-copilot/react-text-editor';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { $createChatInputEntityNode, $isChatInputEntityNode, ChatInputEntityNode } from './ChatInputEntity.node';
|
|
4
4
|
import { ChatInputEntityPluginBase } from '@fluentui-copilot/chat-input-plugins';
|
|
5
|
-
export const ChatInputEntityPlugin =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
5
|
+
export const ChatInputEntityPlugin = props => {
|
|
6
|
+
const {
|
|
7
|
+
id,
|
|
8
|
+
controlRef,
|
|
9
|
+
onChatInputEntityAdded,
|
|
10
|
+
onChatInputEntityDeleted,
|
|
11
|
+
skipInitialization
|
|
12
|
+
} = props;
|
|
13
|
+
const [editor] = useLexicalComposerContext();
|
|
14
|
+
const chatInputEntityPluginBase = React.useRef(null);
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
chatInputEntityPluginBase.current = new ChatInputEntityPluginBase(editor, id, ChatInputEntityNode, $createChatInputEntityNode, $isChatInputEntityNode, onChatInputEntityAdded, onChatInputEntityDeleted);
|
|
17
|
+
return () => {
|
|
18
|
+
var _chatInputEntityPluginBase_current;
|
|
19
|
+
return (_chatInputEntityPluginBase_current = chatInputEntityPluginBase.current) === null || _chatInputEntityPluginBase_current === void 0 ? void 0 : _chatInputEntityPluginBase_current.cleanup();
|
|
20
|
+
};
|
|
21
|
+
}, [editor, id, onChatInputEntityAdded, onChatInputEntityDeleted, skipInitialization]);
|
|
22
|
+
React.useImperativeHandle(controlRef, () => ({
|
|
23
|
+
insertChatInputEntity(props) {
|
|
24
|
+
var _chatInputEntityPluginBase_current;
|
|
25
|
+
return (_chatInputEntityPluginBase_current = chatInputEntityPluginBase.current) === null || _chatInputEntityPluginBase_current === void 0 ? void 0 : _chatInputEntityPluginBase_current.insertChatInputEntity(props);
|
|
26
|
+
},
|
|
27
|
+
getActiveEntities() {
|
|
28
|
+
var _chatInputEntityPluginBase_current;
|
|
29
|
+
var _chatInputEntityPluginBase_current_getActiveEntities;
|
|
30
|
+
return (_chatInputEntityPluginBase_current_getActiveEntities = (_chatInputEntityPluginBase_current = chatInputEntityPluginBase.current) === null || _chatInputEntityPluginBase_current === void 0 ? void 0 : _chatInputEntityPluginBase_current.getActiveEntities()) !== null && _chatInputEntityPluginBase_current_getActiveEntities !== void 0 ? _chatInputEntityPluginBase_current_getActiveEntities : [];
|
|
31
|
+
},
|
|
32
|
+
removeChatInputEntity(keyOrPredicate) {
|
|
33
|
+
var _chatInputEntityPluginBase_current;
|
|
34
|
+
(_chatInputEntityPluginBase_current = chatInputEntityPluginBase.current) === null || _chatInputEntityPluginBase_current === void 0 ? void 0 : _chatInputEntityPluginBase_current.removeChatInputEntity(keyOrPredicate);
|
|
35
|
+
},
|
|
36
|
+
updateChatInputEntityProps(keyOrPredicate, props) {
|
|
37
|
+
var _chatInputEntityPluginBase_current;
|
|
38
|
+
(_chatInputEntityPluginBase_current = chatInputEntityPluginBase.current) === null || _chatInputEntityPluginBase_current === void 0 ? void 0 : _chatInputEntityPluginBase_current.updateChatInputEntityProps(keyOrPredicate, props);
|
|
39
|
+
}
|
|
40
|
+
}), []);
|
|
41
|
+
return null;
|
|
42
42
|
};
|
|
43
|
+
//# sourceMappingURL=ChatInputEntityPlugin.js.map
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=ChatInputEntityPlugin.types.js.map
|
|
@@ -4,47 +4,41 @@ import { $createGhostTextNode } from '../../GhostText';
|
|
|
4
4
|
import { GhostTextNode } from './GhostText.node';
|
|
5
5
|
import { GhostTextPluginBase } from '@fluentui-copilot/chat-input-plugins';
|
|
6
6
|
export function GhostTextPlugin(props) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
React.useEffect(()=>{
|
|
44
|
-
ghostTextBase === null || ghostTextBase === void 0 ? void 0 : ghostTextBase.setGetGhostText($getGhostText);
|
|
45
|
-
}, [
|
|
46
|
-
$getGhostText,
|
|
47
|
-
ghostTextBase
|
|
48
|
-
]);
|
|
49
|
-
return null;
|
|
7
|
+
'use no memo';
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
$getGhostText,
|
|
11
|
+
id,
|
|
12
|
+
ghostTextProps,
|
|
13
|
+
exposeText,
|
|
14
|
+
allowCompletion
|
|
15
|
+
} = props;
|
|
16
|
+
const [editor] = useLexicalComposerContext();
|
|
17
|
+
const [ghostTextBase, setGhostTextBase] = React.useState(null);
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
setGhostTextBase(new GhostTextPluginBase(editor, id, $getGhostText, GhostTextNode, $createGhostTextNode, ghostTextProps, exposeText, allowCompletion));
|
|
20
|
+
return () => {
|
|
21
|
+
setGhostTextBase(prev => {
|
|
22
|
+
prev === null || prev === void 0 ? void 0 : prev.cleanup();
|
|
23
|
+
return null;
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
// We can update $getGhostText, $createGhostTextNode, ghostTextProps, exposeText, and allowCompletion without remounting
|
|
28
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
|
+
[editor, id]);
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
ghostTextBase === null || ghostTextBase === void 0 ? void 0 : ghostTextBase.setAllowCompletion(allowCompletion);
|
|
32
|
+
}, [allowCompletion, ghostTextBase]);
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
ghostTextBase === null || ghostTextBase === void 0 ? void 0 : ghostTextBase.setComponentProps(ghostTextProps);
|
|
35
|
+
}, [ghostTextBase, ghostTextProps]);
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
ghostTextBase === null || ghostTextBase === void 0 ? void 0 : ghostTextBase.setExposeText(exposeText);
|
|
38
|
+
}, [exposeText, ghostTextBase]);
|
|
39
|
+
React.useEffect(() => {
|
|
40
|
+
ghostTextBase === null || ghostTextBase === void 0 ? void 0 : ghostTextBase.setGetGhostText($getGhostText);
|
|
41
|
+
}, [$getGhostText, ghostTextBase]);
|
|
42
|
+
return null;
|
|
50
43
|
}
|
|
44
|
+
//# sourceMappingURL=GhostText.js.map
|