@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.
@@ -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
- }