@gooddata/sdk-ui-kit 11.23.0 → 11.24.0-alpha.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/esm/@ui/UiInlineTextGenerator/UiInlineTextGenerator.d.ts +30 -0
- package/esm/@ui/UiInlineTextGenerator/UiInlineTextGenerator.d.ts.map +1 -0
- package/esm/@ui/UiInlineTextGenerator/UiInlineTextGenerator.js +172 -0
- package/esm/@ui/UiInlineTextGenerator/UiInlineTextGenerator.js.map +1 -0
- package/esm/index.d.ts +2 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -2
- package/esm/index.js.map +1 -1
- package/esm/sdk-ui-kit.d.ts +40 -35
- package/esm/utils/events.d.ts +9 -0
- package/esm/utils/events.d.ts.map +1 -1
- package/esm/utils/events.js +12 -1
- package/esm/utils/events.js.map +1 -1
- package/package.json +11 -11
- package/src/@ui/UiInlineTextGenerator/UiInlineTextGenerator.scss +41 -0
- package/src/@ui/index.scss +1 -0
- package/styles/css/main.css +31 -43
- package/styles/css/main.css.map +1 -1
- package/styles/scss/main.scss +0 -1
- package/esm/@ui/UiGenerateTextDialog/UiGenerateTextDialog.d.ts +0 -36
- package/esm/@ui/UiGenerateTextDialog/UiGenerateTextDialog.d.ts.map +0 -1
- package/esm/@ui/UiGenerateTextDialog/UiGenerateTextDialog.js +0 -75
- package/esm/@ui/UiGenerateTextDialog/UiGenerateTextDialog.js.map +0 -1
- package/styles/css/generateTextDialog.css +0 -44
- package/styles/css/generateTextDialog.css.map +0 -1
- package/styles/scss/generateTextDialog.scss +0 -56
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// (C) 2026 GoodData Corporation
|
|
3
|
-
import { useCallback, useId, useRef, useState } from "react";
|
|
4
|
-
import cx from "classnames";
|
|
5
|
-
import { Dialog } from "../../Dialog/Dialog.js";
|
|
6
|
-
import { Spinner } from "../../Spinner/Spinner.js";
|
|
7
|
-
import { bem } from "../@utils/bem.js";
|
|
8
|
-
import { UiButton } from "../UiButton/UiButton.js";
|
|
9
|
-
import { UiIconButton } from "../UiIconButton/UiIconButton.js";
|
|
10
|
-
const { b, e } = bem("gd-ui-kit-generate-text-dialog");
|
|
11
|
-
/**
|
|
12
|
-
* Generic AI-generated text action with icon button + editable dialog.
|
|
13
|
-
*
|
|
14
|
-
* @internal
|
|
15
|
-
*/
|
|
16
|
-
export function UiGenerateTextDialog({ buttonLabel, buttonDataTestId, buttonIcon = "ai", buttonSize = "small", buttonVariant = "tertiary", dialogTitle, dialogDisclaimer, acceptLabel, declineLabel, noteLabel, textAreaAriaLabel, initialText, textAreaRows = 7, onGenerate, onAccept, }) {
|
|
17
|
-
const dialogTitleId = useId();
|
|
18
|
-
const dialogDescriptionId = useId();
|
|
19
|
-
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
|
20
|
-
const [generatedText, setGeneratedText] = useState("");
|
|
21
|
-
const [generatedNote, setGeneratedNote] = useState("");
|
|
22
|
-
const [isGenerating, setIsGenerating] = useState(false);
|
|
23
|
-
const latestRequestIdRef = useRef(0);
|
|
24
|
-
const closeDialog = useCallback(() => {
|
|
25
|
-
latestRequestIdRef.current += 1;
|
|
26
|
-
setIsDialogOpen(false);
|
|
27
|
-
setIsGenerating(false);
|
|
28
|
-
}, []);
|
|
29
|
-
const openDialog = useCallback(() => {
|
|
30
|
-
const requestId = latestRequestIdRef.current + 1;
|
|
31
|
-
latestRequestIdRef.current = requestId;
|
|
32
|
-
setIsDialogOpen(true);
|
|
33
|
-
setIsGenerating(true);
|
|
34
|
-
setGeneratedText(initialText ?? "");
|
|
35
|
-
setGeneratedNote("");
|
|
36
|
-
void Promise.resolve()
|
|
37
|
-
.then(onGenerate)
|
|
38
|
-
.then((result) => {
|
|
39
|
-
if (latestRequestIdRef.current !== requestId) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
setGeneratedText(result.text ?? "");
|
|
43
|
-
setGeneratedNote(result.note ?? "");
|
|
44
|
-
})
|
|
45
|
-
.catch(() => {
|
|
46
|
-
// Error handling is delegated to caller.
|
|
47
|
-
})
|
|
48
|
-
.finally(() => {
|
|
49
|
-
if (latestRequestIdRef.current !== requestId) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
setIsGenerating(false);
|
|
53
|
-
});
|
|
54
|
-
}, [initialText, onGenerate]);
|
|
55
|
-
const handleTextChange = useCallback((event) => {
|
|
56
|
-
setGeneratedText(event.target.value);
|
|
57
|
-
}, []);
|
|
58
|
-
const accept = useCallback(() => {
|
|
59
|
-
onAccept(generatedText);
|
|
60
|
-
closeDialog();
|
|
61
|
-
}, [closeDialog, generatedText, onAccept]);
|
|
62
|
-
return (_jsxs(_Fragment, { children: [
|
|
63
|
-
_jsx(UiIconButton, { icon: buttonIcon, size: buttonSize, variant: buttonVariant, dataTestId: buttonDataTestId, label: buttonLabel, onClick: openDialog }), isDialogOpen ? (_jsx(Dialog, { displayCloseButton: true, closeOnEscape: true, onClose: closeDialog, onCancel: closeDialog, accessibilityConfig: {
|
|
64
|
-
titleElementId: dialogTitleId,
|
|
65
|
-
descriptionElementId: dialogDescriptionId,
|
|
66
|
-
isModal: true,
|
|
67
|
-
}, className: b(), children: _jsxs("div", { className: e("content"), children: [
|
|
68
|
-
_jsx("h2", { id: dialogTitleId, className: e("title"), children: dialogTitle }), _jsx("p", { id: dialogDescriptionId, className: e("disclaimer"), children: dialogDisclaimer }), _jsxs("div", { className: e("textarea-wrapper", { isLoading: isGenerating }), children: [
|
|
69
|
-
_jsx("textarea", { className: cx("gd-input-field", "s-textarea-field", e("textarea", { isLoading: isGenerating })), value: generatedText, onChange: handleTextChange, disabled: isGenerating, rows: textAreaRows, "aria-label": textAreaAriaLabel }), isGenerating ? (_jsx("div", { className: e("textarea-loader"), "aria-hidden": true, children: _jsx(Spinner, {}) })) : null] }), generatedNote ? (_jsxs("p", { className: e("note"), children: [
|
|
70
|
-
_jsxs("span", { className: e("note-label"), children: [noteLabel, ": "] }), generatedNote] })) : null, _jsxs("div", { className: e("actions"), children: [
|
|
71
|
-
_jsx(UiButton, { variant: "secondary", label: declineLabel, onClick: closeDialog }), _jsx(UiButton, { variant: "primary", label: acceptLabel, onClick: accept, isDisabled: isGenerating })
|
|
72
|
-
] })
|
|
73
|
-
] }) })) : null] }));
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=UiGenerateTextDialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UiGenerateTextDialog.js","sourceRoot":"","sources":["../../../src/@ui/UiGenerateTextDialog/UiGenerateTextDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
.gd-ui-kit-generate-text-dialog__content {
|
|
2
|
-
display: grid;
|
|
3
|
-
gap: 10px;
|
|
4
|
-
width: 560px;
|
|
5
|
-
max-width: min(560px, 100vw - 40px);
|
|
6
|
-
}
|
|
7
|
-
.gd-ui-kit-generate-text-dialog__title {
|
|
8
|
-
margin: 0;
|
|
9
|
-
}
|
|
10
|
-
.gd-ui-kit-generate-text-dialog__disclaimer {
|
|
11
|
-
margin: 0;
|
|
12
|
-
color: var(--gd-palette-complementary-7, #6d7680);
|
|
13
|
-
}
|
|
14
|
-
.gd-ui-kit-generate-text-dialog__textarea-wrapper {
|
|
15
|
-
position: relative;
|
|
16
|
-
}
|
|
17
|
-
.gd-ui-kit-generate-text-dialog__textarea {
|
|
18
|
-
width: 100%;
|
|
19
|
-
min-height: 130px;
|
|
20
|
-
resize: vertical;
|
|
21
|
-
}
|
|
22
|
-
.gd-ui-kit-generate-text-dialog__textarea--isLoading {
|
|
23
|
-
opacity: 0.35;
|
|
24
|
-
}
|
|
25
|
-
.gd-ui-kit-generate-text-dialog__textarea-loader {
|
|
26
|
-
position: absolute;
|
|
27
|
-
inset: 0;
|
|
28
|
-
display: grid;
|
|
29
|
-
place-items: center;
|
|
30
|
-
pointer-events: none;
|
|
31
|
-
}
|
|
32
|
-
.gd-ui-kit-generate-text-dialog__note {
|
|
33
|
-
margin: 0;
|
|
34
|
-
}
|
|
35
|
-
.gd-ui-kit-generate-text-dialog__note-label {
|
|
36
|
-
font-weight: 700;
|
|
37
|
-
}
|
|
38
|
-
.gd-ui-kit-generate-text-dialog__actions {
|
|
39
|
-
display: flex;
|
|
40
|
-
justify-content: flex-end;
|
|
41
|
-
gap: 10px;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/*# sourceMappingURL=generateTextDialog.css.map */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../scss/generateTextDialog.scss","../scss/variables.scss"],"names":[],"mappings":"AAII;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA,OCeQ;;ADZZ;EACI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA","file":"generateTextDialog.css"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// (C) 2026 GoodData Corporation
|
|
2
|
-
@use "variables";
|
|
3
|
-
|
|
4
|
-
.gd-ui-kit-generate-text-dialog {
|
|
5
|
-
&__content {
|
|
6
|
-
display: grid;
|
|
7
|
-
gap: 10px;
|
|
8
|
-
width: 560px;
|
|
9
|
-
max-width: min(560px, calc(100vw - 40px));
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
&__title {
|
|
13
|
-
margin: 0;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
&__disclaimer {
|
|
17
|
-
margin: 0;
|
|
18
|
-
color: variables.$gd-color-link;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
&__textarea-wrapper {
|
|
22
|
-
position: relative;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
&__textarea {
|
|
26
|
-
width: 100%;
|
|
27
|
-
min-height: 130px;
|
|
28
|
-
resize: vertical;
|
|
29
|
-
|
|
30
|
-
&--isLoading {
|
|
31
|
-
opacity: 0.35;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
&__textarea-loader {
|
|
36
|
-
position: absolute;
|
|
37
|
-
inset: 0;
|
|
38
|
-
display: grid;
|
|
39
|
-
place-items: center;
|
|
40
|
-
pointer-events: none;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
&__note {
|
|
44
|
-
margin: 0;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
&__note-label {
|
|
48
|
-
font-weight: 700;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
&__actions {
|
|
52
|
-
display: flex;
|
|
53
|
-
justify-content: flex-end;
|
|
54
|
-
gap: 10px;
|
|
55
|
-
}
|
|
56
|
-
}
|