@nucleux/md3-prompt-enhancer 0.0.0-stage → 0.7.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nucleux
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,40 @@
1
- # Temporary Holding Version
1
+ # @nucleux/md3-prompt-enhancer
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Material 3 Prompt Enhancer — proposes a clearer version of the request you wrote, every addition marked and explained — Nucleux agentic UI for React.
4
+
5
+ Part of **[Nucleux](https://github.com/intelligaia-open-labs/nucleux)** — agentic UI components for React. Install a single component, or the full kit via [`@nucleux/react`](https://www.npmjs.com/package/@nucleux/react).
6
+
7
+ **Same API as the shadcn twin.** The props, callbacks, states, keyboard model and accessible names are those of [`@nucleux/prompt-enhancer`](https://www.npmjs.com/package/@nucleux/prompt-enhancer) (`PromptEnhancer`) — the props types are re-exported from it and the logic is its `usePromptEnhancer` — so you switch families by changing only the import. Only the look differs: an outlined review card above an `Md3AgentComposer`, primary-container highlights, M3 checkboxes, text/outlined/filled buttons, state layers and motion (reduced under `prefers-reduced-motion`).
8
+
9
+ ## Exports
10
+
11
+ - **`Md3PromptEnhancer`** — the composer with an Enhance tool, the review card and status lines
12
+ - Types: `Md3PromptEnhancerProps`, `Md3PromptEnhancerVariant`, `Md3PromptEnhancerState`, `Md3PromptEnhancerDiffStyle`, `Md3PromptEnhancerChange`, `Md3PromptEnhancerSuggestion`, `Md3PromptEnhancerSegment`, `Md3PromptEnhancerController`
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ pnpm add @nucleux/md3-prompt-enhancer @nucleux/tokens
18
+ ```
19
+
20
+ `react` / `react-dom` are peer dependencies.
21
+
22
+ ## Usage
23
+
24
+ ```tsx
25
+ import { Md3PromptEnhancer } from "@nucleux/md3-prompt-enhancer";
26
+
27
+ <Md3PromptEnhancer
28
+ value={draft}
29
+ onValueChange={setDraft}
30
+ onEnhance={(prompt, { signal }) => api.enhance(prompt, { signal })}
31
+ onSubmit={send}
32
+ />
33
+ ```
34
+
35
+ Requires the theme once in your app: `import "@nucleux/tokens/styles.css";`
36
+ and the Tailwind preset from `@nucleux/tokens/preset`.
37
+
38
+ ## License
39
+
40
+ MIT © Nucleux
package/dist/index.cjs ADDED
@@ -0,0 +1,278 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+ var lucideReact = require('lucide-react');
6
+ var utils = require('@nucleux/utils');
7
+ var promptEnhancer = require('@nucleux/prompt-enhancer');
8
+ var md3AgentComposer = require('@nucleux/md3-agent-composer');
9
+ var md3Button = require('@nucleux/md3-button');
10
+ var md3Card = require('@nucleux/md3-card');
11
+ var md3Checkbox = require('@nucleux/md3-checkbox');
12
+ var md3Switch = require('@nucleux/md3-switch');
13
+ var jsxRuntime = require('react/jsx-runtime');
14
+
15
+ function _interopNamespace(e) {
16
+ if (e && e.__esModule) return e;
17
+ var n = Object.create(null);
18
+ if (e) {
19
+ Object.keys(e).forEach(function (k) {
20
+ if (k !== 'default') {
21
+ var d = Object.getOwnPropertyDescriptor(e, k);
22
+ Object.defineProperty(n, k, d.get ? d : {
23
+ enumerable: true,
24
+ get: function () { return e[k]; }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ n.default = e;
30
+ return Object.freeze(n);
31
+ }
32
+
33
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
34
+
35
+ // src/index.tsx
36
+ var stateLayer = "before:absolute before:inset-0 before:bg-current before:opacity-0 before:transition-opacity before:content-[''] hover:before:opacity-[0.08] focus-visible:before:opacity-[0.12] active:before:opacity-[0.12] motion-reduce:before:transition-none";
37
+ var overline = "flex items-center gap-1.5 text-[11.5px] font-semibold uppercase leading-4 tracking-[0.06em]";
38
+ var textLink = utils.cn(
39
+ "relative inline-flex min-h-8 items-center gap-1 overflow-hidden rounded-full px-2.5 text-[13px] font-medium outline-none focus-visible:ring-2 focus-visible:ring-md-primary disabled:pointer-events-none disabled:opacity-[0.38] [&_svg]:size-4",
40
+ stateLayer
41
+ );
42
+ var Md3PromptEnhancer = React__namespace.forwardRef((props, ref) => {
43
+ const {
44
+ variant = "preview-diff",
45
+ diffStyle = "split",
46
+ showChanges = true,
47
+ explain = true,
48
+ allowEdit = true,
49
+ allowKeepOriginal = true,
50
+ undo = true,
51
+ actionLabel = promptEnhancer.PROMPT_ENHANCER_TEXT.actionLabel,
52
+ heading = promptEnhancer.PROMPT_ENHANCER_TEXT.heading,
53
+ hint,
54
+ placeholder = promptEnhancer.PROMPT_ENHANCER_TEXT.placeholder,
55
+ failureMessage = promptEnhancer.PROMPT_ENHANCER_TEXT.failure,
56
+ composerActions,
57
+ onSubmit
58
+ } = props;
59
+ const { className, ...rest } = promptEnhancer.splitPromptEnhancerProps(props);
60
+ const pe = promptEnhancer.usePromptEnhancer(props);
61
+ const uid = React__namespace.useId();
62
+ const busy = pe.state === "enhancing";
63
+ const listed = showChanges && pe.changes.length > 0;
64
+ const kept = pe.changes.length - pe.removed.length;
65
+ const marked = pe.segments.map((s, i) => {
66
+ if (s.type === "text" || !showChanges) return s.type === "removed" ? null : /* @__PURE__ */ jsxRuntime.jsx(React__namespace.Fragment, { children: s.text }, i);
67
+ if (s.type === "added")
68
+ return /* @__PURE__ */ jsxRuntime.jsxs(
69
+ "ins",
70
+ {
71
+ className: "rounded-md-xs bg-md-primary-container/75 px-0.5 text-md-on-primary-container underline decoration-md-primary/50 decoration-dotted underline-offset-4 [box-decoration-break:clone]",
72
+ children: [
73
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: promptEnhancer.PROMPT_ENHANCER_TEXT.added }),
74
+ s.text
75
+ ]
76
+ },
77
+ i
78
+ );
79
+ return /* @__PURE__ */ jsxRuntime.jsxs("del", { className: "text-md-on-surface-variant line-through", children: [
80
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: promptEnhancer.PROMPT_ENHANCER_TEXT.removed }),
81
+ s.text
82
+ ] }, i);
83
+ });
84
+ const improvedOverline = /* @__PURE__ */ jsxRuntime.jsxs("p", { className: utils.cn(overline, "text-md-primary"), children: [
85
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquareText, { "aria-hidden": true, className: "size-4" }),
86
+ promptEnhancer.PROMPT_ENHANCER_TEXT.enhanced
87
+ ] });
88
+ const review = pe.showReview ? /* @__PURE__ */ jsxRuntime.jsxs(
89
+ md3Card.Md3Card,
90
+ {
91
+ variant: "outlined",
92
+ role: "region",
93
+ "aria-label": promptEnhancer.PROMPT_ENHANCER_TEXT.regionLabel,
94
+ onKeyDown: pe.onReviewKeyDown,
95
+ className: "flex flex-col gap-3.5 rounded-md-lg bg-md-surface px-5 py-[18px] animate-nx-fade-in motion-reduce:animate-none",
96
+ children: [
97
+ listed && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-baseline justify-between gap-3", children: [
98
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-medium leading-6 text-md-on-surface", children: heading }),
99
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-md-on-surface-variant", children: [
100
+ kept,
101
+ " of ",
102
+ pe.changes.length,
103
+ " changes"
104
+ ] })
105
+ ] }),
106
+ pe.state === "editing" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
107
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: `${uid}-edit`, className: "px-1 text-xs font-medium text-md-primary", children: promptEnhancer.PROMPT_ENHANCER_TEXT.editLabel }),
108
+ /* @__PURE__ */ jsxRuntime.jsx(
109
+ "textarea",
110
+ {
111
+ id: `${uid}-edit`,
112
+ rows: 3,
113
+ autoFocus: true,
114
+ value: pe.editText,
115
+ onChange: (e) => pe.setEditText(e.target.value),
116
+ className: "w-full resize-none rounded-md-xs border-2 border-md-primary bg-transparent px-[15px] py-3 text-base leading-6 text-md-on-surface outline-none"
117
+ }
118
+ )
119
+ ] }) : diffStyle === "split" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[repeat(auto-fit,minmax(210px,1fr))] gap-2.5", children: [
120
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 rounded-md-md border border-transparent bg-md-on-surface/[0.04] px-3.5 py-3", children: [
121
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: utils.cn(overline, "text-md-on-surface-variant"), children: promptEnhancer.PROMPT_ENHANCER_TEXT.youWrote }),
122
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[14.5px] leading-[22px] text-md-on-surface", children: pe.original })
123
+ ] }),
124
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 rounded-md-md border border-md-primary/45 bg-md-primary/5 px-3.5 py-3", children: [
125
+ improvedOverline,
126
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[14.5px] leading-[22px] text-md-on-surface", children: marked })
127
+ ] })
128
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
129
+ improvedOverline,
130
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base leading-[26px] text-md-on-surface", children: marked })
131
+ ] }),
132
+ listed && pe.state !== "editing" && /* @__PURE__ */ jsxRuntime.jsx("div", { role: "group", "aria-label": promptEnhancer.PROMPT_ENHANCER_TEXT.changesLabel, className: "flex flex-col border-t border-md-outline-variant", children: pe.changes.map((c) => {
133
+ const on = !pe.removed.includes(c.id);
134
+ const cb = `${uid}-c-${c.id}`;
135
+ const desc = [explain && c.reason ? `${cb}-why` : null, c.assumption ? `${cb}-as` : null].filter(Boolean).join(" ");
136
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2 border-b border-md-outline-variant py-2 last:border-b-0 last:pb-0", children: [
137
+ /* @__PURE__ */ jsxRuntime.jsx(
138
+ md3Checkbox.Md3Checkbox,
139
+ {
140
+ id: cb,
141
+ checked: on,
142
+ onCheckedChange: () => pe.toggleChange(c.id),
143
+ "aria-labelledby": `${cb}-l`,
144
+ "aria-describedby": desc || void 0,
145
+ className: "-ml-2.5 shrink-0"
146
+ }
147
+ ),
148
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-0.5 pt-2.5", children: [
149
+ /* @__PURE__ */ jsxRuntime.jsx(
150
+ "label",
151
+ {
152
+ id: `${cb}-l`,
153
+ htmlFor: cb,
154
+ className: utils.cn(
155
+ "cursor-pointer text-sm font-medium leading-5 text-md-on-surface",
156
+ !on && "text-md-on-surface-variant line-through"
157
+ ),
158
+ children: promptEnhancer.describePromptEnhancerChange(c)
159
+ }
160
+ ),
161
+ explain && c.reason && /* @__PURE__ */ jsxRuntime.jsx("span", { id: `${cb}-why`, className: "text-[12.5px] leading-[18px] text-md-on-surface-variant", children: c.reason }),
162
+ c.assumption && /* @__PURE__ */ jsxRuntime.jsxs(
163
+ "span",
164
+ {
165
+ id: `${cb}-as`,
166
+ className: "mt-1 inline-flex items-center gap-1 self-start rounded-md-sm bg-md-surface-container-high px-2 py-0.5 text-[11.5px] font-medium text-md-on-surface-variant",
167
+ children: [
168
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleHelp, { "aria-hidden": true, className: "size-3.5" }),
169
+ c.assumption
170
+ ]
171
+ }
172
+ )
173
+ ] })
174
+ ] }, c.id);
175
+ }) }),
176
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-x-3 gap-y-2", children: [
177
+ pe.state !== "editing" && allowEdit ? /* @__PURE__ */ jsxRuntime.jsx(md3Button.Md3Button, { variant: "text", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { "aria-hidden": true }), onClick: pe.edit, className: "-ml-1", children: promptEnhancer.PROMPT_ENHANCER_TEXT.edit }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
178
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto inline-flex flex-wrap gap-2", children: [
179
+ pe.state === "editing" ? /* @__PURE__ */ jsxRuntime.jsx(md3Button.Md3Button, { variant: "outlined", onClick: pe.cancelEdit, children: promptEnhancer.PROMPT_ENHANCER_TEXT.cancelEdit }) : allowKeepOriginal && /* @__PURE__ */ jsxRuntime.jsx(md3Button.Md3Button, { variant: "outlined", onClick: pe.keep, children: promptEnhancer.PROMPT_ENHANCER_TEXT.keep }),
180
+ /* @__PURE__ */ jsxRuntime.jsx(md3Button.Md3Button, { variant: "filled", onClick: pe.use, children: pe.state === "editing" ? promptEnhancer.PROMPT_ENHANCER_TEXT.useEdited : promptEnhancer.PROMPT_ENHANCER_TEXT.use })
181
+ ] })
182
+ ] })
183
+ ]
184
+ }
185
+ ) : null;
186
+ const noteRow = "flex flex-wrap items-center gap-2 px-1 text-[13px] leading-5 text-md-on-surface-variant [&>svg]:size-[18px] [&>svg]:shrink-0";
187
+ const note = pe.state === "enhancing" ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: noteRow, children: [
188
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { "aria-hidden": true, className: "animate-spin text-md-primary motion-reduce:animate-none" }),
189
+ promptEnhancer.PROMPT_ENHANCER_TEXT.working
190
+ ] }) : pe.state === "accepted" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: noteRow, children: [
191
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": true, className: "text-md-primary" }),
192
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children: promptEnhancer.PROMPT_ENHANCER_TEXT.accepted }),
193
+ undo && /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", onClick: pe.undoUse, className: utils.cn(textLink, "text-md-primary"), children: [
194
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Undo2, { "aria-hidden": true }),
195
+ promptEnhancer.PROMPT_ENHANCER_TEXT.undo
196
+ ] })
197
+ ] }) : pe.state === "reverted" ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: noteRow, children: [
198
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Undo2, { "aria-hidden": true, className: "text-md-primary" }),
199
+ promptEnhancer.PROMPT_ENHANCER_TEXT.reverted
200
+ ] }) : null;
201
+ const failed = pe.state === "failed" ? /* @__PURE__ */ jsxRuntime.jsxs(
202
+ "div",
203
+ {
204
+ role: "alert",
205
+ className: "flex flex-wrap items-center gap-2 rounded-md-md bg-md-error-container py-2 pl-3 pr-2 text-[13px] leading-5 text-md-on-error-container",
206
+ children: [
207
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { "aria-hidden": true, className: "size-[18px] shrink-0" }),
208
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1", children: failureMessage }),
209
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: pe.enhance, disabled: !pe.canEnhance, className: textLink, children: promptEnhancer.PROMPT_ENHANCER_TEXT.retry }),
210
+ allowKeepOriginal && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: pe.keep, className: textLink, children: promptEnhancer.PROMPT_ENHANCER_TEXT.keep })
211
+ ]
212
+ }
213
+ ) : null;
214
+ const tool = /* @__PURE__ */ jsxRuntime.jsxs(
215
+ "button",
216
+ {
217
+ type: "button",
218
+ onClick: busy ? pe.cancel : pe.enhance,
219
+ disabled: !busy && !pe.canEnhance,
220
+ "aria-label": busy ? promptEnhancer.PROMPT_ENHANCER_TEXT.cancel : `${actionLabel} this prompt with AI`,
221
+ className: utils.cn(
222
+ "relative inline-flex min-h-8 shrink-0 items-center gap-1.5 overflow-hidden rounded-md-sm border py-1 pl-2 pr-2.5 text-[13px] font-medium leading-5 outline-none transition-colors",
223
+ "focus-visible:ring-2 focus-visible:ring-md-primary focus-visible:ring-offset-2 focus-visible:ring-offset-md-surface",
224
+ "disabled:pointer-events-none disabled:opacity-[0.38] motion-reduce:transition-none [&_svg]:size-[18px]",
225
+ stateLayer,
226
+ busy ? "border-transparent bg-md-secondary-container text-md-on-secondary-container" : "border-md-outline-variant bg-transparent text-md-on-surface-variant"
227
+ ),
228
+ children: [
229
+ busy ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { "aria-hidden": true, className: "relative animate-spin motion-reduce:animate-none" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { "aria-hidden": true, className: "relative" }),
230
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative", children: busy ? promptEnhancer.PROMPT_ENHANCER_TEXT.busy : actionLabel })
231
+ ]
232
+ }
233
+ );
234
+ const autoToggle = variant === "auto-enhance-toggle" ? /* @__PURE__ */ jsxRuntime.jsxs(md3Card.Md3Card, { variant: "outlined", className: "flex items-center justify-between gap-4 rounded-md-lg bg-md-surface px-4 py-3", children: [
235
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
236
+ /* @__PURE__ */ jsxRuntime.jsx("p", { id: `${uid}-auto`, className: "text-sm font-medium leading-5 text-md-on-surface", children: promptEnhancer.PROMPT_ENHANCER_TEXT.autoTitle }),
237
+ /* @__PURE__ */ jsxRuntime.jsx("p", { id: `${uid}-auto-d`, className: "mt-0.5 text-xs leading-4 text-md-on-surface-variant", children: promptEnhancer.PROMPT_ENHANCER_TEXT.autoDescription })
238
+ ] }),
239
+ /* @__PURE__ */ jsxRuntime.jsx(
240
+ md3Switch.Md3Switch,
241
+ {
242
+ checked: pe.autoEnhance,
243
+ onCheckedChange: pe.setAutoEnhance,
244
+ "aria-labelledby": `${uid}-auto`,
245
+ "aria-describedby": `${uid}-auto-d`
246
+ }
247
+ )
248
+ ] }) : null;
249
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, "data-state": pe.state, className: utils.cn("flex w-full flex-col gap-3", className), ...rest, children: [
250
+ autoToggle,
251
+ review,
252
+ failed,
253
+ /* @__PURE__ */ jsxRuntime.jsx("div", { role: "status", "aria-live": "polite", className: note ? void 0 : "sr-only", children: note ?? pe.announcement }),
254
+ /* @__PURE__ */ jsxRuntime.jsx(
255
+ md3AgentComposer.Md3AgentComposer,
256
+ {
257
+ value: pe.value,
258
+ onValueChange: pe.setValue,
259
+ onSubmit: pe.submit,
260
+ placeholder,
261
+ leftActions: hint != null ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-1 text-xs text-md-on-surface-variant", children: hint }) : void 0,
262
+ rightActions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
263
+ tool,
264
+ composerActions
265
+ ] }),
266
+ className: utils.cn(
267
+ "rounded-md-xl border border-md-outline-variant bg-md-surface px-4 pb-2 pt-3.5 shadow-md-1 [&>textarea]:text-base",
268
+ !onSubmit && "[&_button[aria-label=Send]]:hidden"
269
+ )
270
+ }
271
+ )
272
+ ] });
273
+ });
274
+ Md3PromptEnhancer.displayName = "Md3PromptEnhancer";
275
+
276
+ exports.Md3PromptEnhancer = Md3PromptEnhancer;
277
+ //# sourceMappingURL=index.cjs.map
278
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx"],"names":["cn","React","PROMPT_ENHANCER_TEXT","splitPromptEnhancerProps","usePromptEnhancer","jsx","jsxs","MessageSquareText","Md3Card","Md3Checkbox","CircleHelp","Md3Button","Pencil","Loader2","Check","Undo2","AlertCircle","Sparkles","Md3Switch","Md3AgentComposer","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["import * as React from \"react\";\nimport { AlertCircle, Check, CircleHelp, Loader2, MessageSquareText, Pencil, Sparkles, Undo2 } from \"lucide-react\";\nimport { cn } from \"@nucleux/utils\";\nimport {\n PROMPT_ENHANCER_TEXT,\n describePromptEnhancerChange,\n splitPromptEnhancerProps,\n usePromptEnhancer,\n type PromptEnhancerChange,\n type PromptEnhancerController,\n type PromptEnhancerDiffStyle,\n type PromptEnhancerProps,\n type PromptEnhancerSegment,\n type PromptEnhancerState,\n type PromptEnhancerSuggestion,\n type PromptEnhancerVariant,\n} from \"@nucleux/prompt-enhancer\";\nimport { Md3AgentComposer } from \"@nucleux/md3-agent-composer\";\nimport { Md3Button } from \"@nucleux/md3-button\";\nimport { Md3Card } from \"@nucleux/md3-card\";\nimport { Md3Checkbox } from \"@nucleux/md3-checkbox\";\nimport { Md3Switch } from \"@nucleux/md3-switch\";\n\n/** Props of {@link Md3PromptEnhancer} — identical to `PromptEnhancerProps` from `@nucleux/prompt-enhancer`. */\nexport type Md3PromptEnhancerProps = PromptEnhancerProps;\n/** \"preview-diff\", \"wand-button\" or \"auto-enhance-toggle\". */\nexport type Md3PromptEnhancerVariant = PromptEnhancerVariant;\n/** \"original\", \"enhancing\", \"enhanced\", \"editing\", \"accepted\", \"reverted\" or \"failed\". */\nexport type Md3PromptEnhancerState = PromptEnhancerState;\n/** \"split\" or \"inline\". */\nexport type Md3PromptEnhancerDiffStyle = PromptEnhancerDiffStyle;\n/** One proposed addition — identical to `PromptEnhancerChange`. */\nexport type Md3PromptEnhancerChange = PromptEnhancerChange;\n/** What `onEnhance` resolves with — identical to `PromptEnhancerSuggestion`. */\nexport type Md3PromptEnhancerSuggestion = PromptEnhancerSuggestion;\n/** A run of the marked suggestion — identical to `PromptEnhancerSegment`. */\nexport type Md3PromptEnhancerSegment = PromptEnhancerSegment;\n/** The shared controller — identical to `PromptEnhancerController`. */\nexport type Md3PromptEnhancerController = PromptEnhancerController;\n\nconst stateLayer =\n \"before:absolute before:inset-0 before:bg-current before:opacity-0 before:transition-opacity before:content-[''] hover:before:opacity-[0.08] focus-visible:before:opacity-[0.12] active:before:opacity-[0.12] motion-reduce:before:transition-none\";\n\nconst overline = \"flex items-center gap-1.5 text-[11.5px] font-semibold uppercase leading-4 tracking-[0.06em]\";\n\nconst textLink = cn(\n \"relative inline-flex min-h-8 items-center gap-1 overflow-hidden rounded-full px-2.5 text-[13px] font-medium outline-none focus-visible:ring-2 focus-visible:ring-md-primary disabled:pointer-events-none disabled:opacity-[0.38] [&_svg]:size-4\",\n stateLayer,\n);\n\n/**\n * The Material 3 Prompt Enhancer: an Improve-style tool in the\n * `Md3AgentComposer` toolbar proposes a clearer version of the request, shown\n * in an outlined card above the composer — what they wrote beside the\n * suggestion, every addition highlighted in primary-container and explained,\n * assumptions labelled, each change removable with a checkbox. Use updates the\n * composer with Undo and sends nothing; Edit, Keep original and a failure line\n * that leaves the original untouched are built in. Same API, states and\n * accessible names as `PromptEnhancer` from `@nucleux/prompt-enhancer`.\n */\nexport const Md3PromptEnhancer = React.forwardRef<HTMLDivElement, Md3PromptEnhancerProps>((props, ref) => {\n const {\n variant = \"preview-diff\",\n diffStyle = \"split\",\n showChanges = true,\n explain = true,\n allowEdit = true,\n allowKeepOriginal = true,\n undo = true,\n actionLabel = PROMPT_ENHANCER_TEXT.actionLabel,\n heading = PROMPT_ENHANCER_TEXT.heading,\n hint,\n placeholder = PROMPT_ENHANCER_TEXT.placeholder,\n failureMessage = PROMPT_ENHANCER_TEXT.failure,\n composerActions,\n onSubmit,\n } = props;\n const { className, ...rest } = splitPromptEnhancerProps(props);\n const pe = usePromptEnhancer(props);\n const uid = React.useId();\n const busy = pe.state === \"enhancing\";\n const listed = showChanges && pe.changes.length > 0;\n const kept = pe.changes.length - pe.removed.length;\n\n const marked = pe.segments.map((s, i) => {\n if (s.type === \"text\" || !showChanges) return s.type === \"removed\" ? null : <React.Fragment key={i}>{s.text}</React.Fragment>;\n if (s.type === \"added\")\n return (\n <ins\n key={i}\n className=\"rounded-md-xs bg-md-primary-container/75 px-0.5 text-md-on-primary-container underline decoration-md-primary/50 decoration-dotted underline-offset-4 [box-decoration-break:clone]\"\n >\n <span className=\"sr-only\">{PROMPT_ENHANCER_TEXT.added}</span>\n {s.text}\n </ins>\n );\n return (\n <del key={i} className=\"text-md-on-surface-variant line-through\">\n <span className=\"sr-only\">{PROMPT_ENHANCER_TEXT.removed}</span>\n {s.text}\n </del>\n );\n });\n\n const improvedOverline = (\n <p className={cn(overline, \"text-md-primary\")}>\n <MessageSquareText aria-hidden className=\"size-4\" />\n {PROMPT_ENHANCER_TEXT.enhanced}\n </p>\n );\n\n const review = pe.showReview ? (\n <Md3Card\n variant=\"outlined\"\n role=\"region\"\n aria-label={PROMPT_ENHANCER_TEXT.regionLabel}\n onKeyDown={pe.onReviewKeyDown}\n className=\"flex flex-col gap-3.5 rounded-md-lg bg-md-surface px-5 py-[18px] animate-nx-fade-in motion-reduce:animate-none\"\n >\n {listed && (\n <div className=\"flex flex-wrap items-baseline justify-between gap-3\">\n <p className=\"text-base font-medium leading-6 text-md-on-surface\">{heading}</p>\n <span className=\"text-xs text-md-on-surface-variant\">\n {kept} of {pe.changes.length} changes\n </span>\n </div>\n )}\n\n {pe.state === \"editing\" ? (\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={`${uid}-edit`} className=\"px-1 text-xs font-medium text-md-primary\">\n {PROMPT_ENHANCER_TEXT.editLabel}\n </label>\n <textarea\n id={`${uid}-edit`}\n rows={3}\n autoFocus\n value={pe.editText}\n onChange={(e) => pe.setEditText(e.target.value)}\n className=\"w-full resize-none rounded-md-xs border-2 border-md-primary bg-transparent px-[15px] py-3 text-base leading-6 text-md-on-surface outline-none\"\n />\n </div>\n ) : diffStyle === \"split\" ? (\n <div className=\"grid grid-cols-[repeat(auto-fit,minmax(210px,1fr))] gap-2.5\">\n <div className=\"flex flex-col gap-2 rounded-md-md border border-transparent bg-md-on-surface/[0.04] px-3.5 py-3\">\n <p className={cn(overline, \"text-md-on-surface-variant\")}>{PROMPT_ENHANCER_TEXT.youWrote}</p>\n <p className=\"text-[14.5px] leading-[22px] text-md-on-surface\">{pe.original}</p>\n </div>\n <div className=\"flex flex-col gap-2 rounded-md-md border border-md-primary/45 bg-md-primary/5 px-3.5 py-3\">\n {improvedOverline}\n <p className=\"text-[14.5px] leading-[22px] text-md-on-surface\">{marked}</p>\n </div>\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {improvedOverline}\n <p className=\"text-base leading-[26px] text-md-on-surface\">{marked}</p>\n </div>\n )}\n\n {listed && pe.state !== \"editing\" && (\n <div role=\"group\" aria-label={PROMPT_ENHANCER_TEXT.changesLabel} className=\"flex flex-col border-t border-md-outline-variant\">\n {pe.changes.map((c) => {\n const on = !pe.removed.includes(c.id);\n const cb = `${uid}-c-${c.id}`;\n const desc = [explain && c.reason ? `${cb}-why` : null, c.assumption ? `${cb}-as` : null].filter(Boolean).join(\" \");\n return (\n <div key={c.id} className=\"flex items-start gap-2 border-b border-md-outline-variant py-2 last:border-b-0 last:pb-0\">\n <Md3Checkbox\n id={cb}\n checked={on}\n onCheckedChange={() => pe.toggleChange(c.id)}\n aria-labelledby={`${cb}-l`}\n aria-describedby={desc || undefined}\n className=\"-ml-2.5 shrink-0\"\n />\n <div className=\"flex min-w-0 flex-col gap-0.5 pt-2.5\">\n <label\n id={`${cb}-l`}\n htmlFor={cb}\n className={cn(\n \"cursor-pointer text-sm font-medium leading-5 text-md-on-surface\",\n !on && \"text-md-on-surface-variant line-through\",\n )}\n >\n {describePromptEnhancerChange(c)}\n </label>\n {explain && c.reason && (\n <span id={`${cb}-why`} className=\"text-[12.5px] leading-[18px] text-md-on-surface-variant\">\n {c.reason}\n </span>\n )}\n {c.assumption && (\n <span\n id={`${cb}-as`}\n className=\"mt-1 inline-flex items-center gap-1 self-start rounded-md-sm bg-md-surface-container-high px-2 py-0.5 text-[11.5px] font-medium text-md-on-surface-variant\"\n >\n <CircleHelp aria-hidden className=\"size-3.5\" />\n {c.assumption}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n {pe.state !== \"editing\" && allowEdit ? (\n <Md3Button variant=\"text\" icon={<Pencil aria-hidden />} onClick={pe.edit} className=\"-ml-1\">\n {PROMPT_ENHANCER_TEXT.edit}\n </Md3Button>\n ) : (\n <span />\n )}\n <span className=\"ml-auto inline-flex flex-wrap gap-2\">\n {pe.state === \"editing\" ? (\n <Md3Button variant=\"outlined\" onClick={pe.cancelEdit}>\n {PROMPT_ENHANCER_TEXT.cancelEdit}\n </Md3Button>\n ) : (\n allowKeepOriginal && (\n <Md3Button variant=\"outlined\" onClick={pe.keep}>\n {PROMPT_ENHANCER_TEXT.keep}\n </Md3Button>\n )\n )}\n <Md3Button variant=\"filled\" onClick={pe.use}>\n {pe.state === \"editing\" ? PROMPT_ENHANCER_TEXT.useEdited : PROMPT_ENHANCER_TEXT.use}\n </Md3Button>\n </span>\n </div>\n </Md3Card>\n ) : null;\n\n const noteRow = \"flex flex-wrap items-center gap-2 px-1 text-[13px] leading-5 text-md-on-surface-variant [&>svg]:size-[18px] [&>svg]:shrink-0\";\n const note =\n pe.state === \"enhancing\" ? (\n <p className={noteRow}>\n <Loader2 aria-hidden className=\"animate-spin text-md-primary motion-reduce:animate-none\" />\n {PROMPT_ENHANCER_TEXT.working}\n </p>\n ) : pe.state === \"accepted\" ? (\n <div className={noteRow}>\n <Check aria-hidden className=\"text-md-primary\" />\n <span className=\"flex-1\">{PROMPT_ENHANCER_TEXT.accepted}</span>\n {undo && (\n <button type=\"button\" onClick={pe.undoUse} className={cn(textLink, \"text-md-primary\")}>\n <Undo2 aria-hidden />\n {PROMPT_ENHANCER_TEXT.undo}\n </button>\n )}\n </div>\n ) : pe.state === \"reverted\" ? (\n <p className={noteRow}>\n <Undo2 aria-hidden className=\"text-md-primary\" />\n {PROMPT_ENHANCER_TEXT.reverted}\n </p>\n ) : null;\n\n const failed =\n pe.state === \"failed\" ? (\n <div\n role=\"alert\"\n className=\"flex flex-wrap items-center gap-2 rounded-md-md bg-md-error-container py-2 pl-3 pr-2 text-[13px] leading-5 text-md-on-error-container\"\n >\n <AlertCircle aria-hidden className=\"size-[18px] shrink-0\" />\n <span className=\"min-w-0 flex-1\">{failureMessage}</span>\n <button type=\"button\" onClick={pe.enhance} disabled={!pe.canEnhance} className={textLink}>\n {PROMPT_ENHANCER_TEXT.retry}\n </button>\n {allowKeepOriginal && (\n <button type=\"button\" onClick={pe.keep} className={textLink}>\n {PROMPT_ENHANCER_TEXT.keep}\n </button>\n )}\n </div>\n ) : null;\n\n const tool = (\n <button\n type=\"button\"\n onClick={busy ? pe.cancel : pe.enhance}\n disabled={!busy && !pe.canEnhance}\n aria-label={busy ? PROMPT_ENHANCER_TEXT.cancel : `${actionLabel} this prompt with AI`}\n className={cn(\n \"relative inline-flex min-h-8 shrink-0 items-center gap-1.5 overflow-hidden rounded-md-sm border py-1 pl-2 pr-2.5 text-[13px] font-medium leading-5 outline-none transition-colors\",\n \"focus-visible:ring-2 focus-visible:ring-md-primary focus-visible:ring-offset-2 focus-visible:ring-offset-md-surface\",\n \"disabled:pointer-events-none disabled:opacity-[0.38] motion-reduce:transition-none [&_svg]:size-[18px]\",\n stateLayer,\n busy\n ? \"border-transparent bg-md-secondary-container text-md-on-secondary-container\"\n : \"border-md-outline-variant bg-transparent text-md-on-surface-variant\",\n )}\n >\n {busy ? (\n <Loader2 aria-hidden className=\"relative animate-spin motion-reduce:animate-none\" />\n ) : (\n <Sparkles aria-hidden className=\"relative\" />\n )}\n <span className=\"relative\">{busy ? PROMPT_ENHANCER_TEXT.busy : actionLabel}</span>\n </button>\n );\n\n const autoToggle =\n variant === \"auto-enhance-toggle\" ? (\n <Md3Card variant=\"outlined\" className=\"flex items-center justify-between gap-4 rounded-md-lg bg-md-surface px-4 py-3\">\n <div className=\"min-w-0\">\n <p id={`${uid}-auto`} className=\"text-sm font-medium leading-5 text-md-on-surface\">\n {PROMPT_ENHANCER_TEXT.autoTitle}\n </p>\n <p id={`${uid}-auto-d`} className=\"mt-0.5 text-xs leading-4 text-md-on-surface-variant\">\n {PROMPT_ENHANCER_TEXT.autoDescription}\n </p>\n </div>\n <Md3Switch\n checked={pe.autoEnhance}\n onCheckedChange={pe.setAutoEnhance}\n aria-labelledby={`${uid}-auto`}\n aria-describedby={`${uid}-auto-d`}\n />\n </Md3Card>\n ) : null;\n\n return (\n <div ref={ref} data-state={pe.state} className={cn(\"flex w-full flex-col gap-3\", className)} {...rest}>\n {autoToggle}\n {review}\n {failed}\n <div role=\"status\" aria-live=\"polite\" className={note ? undefined : \"sr-only\"}>\n {note ?? pe.announcement}\n </div>\n <Md3AgentComposer\n value={pe.value}\n onValueChange={pe.setValue}\n onSubmit={pe.submit}\n placeholder={placeholder}\n leftActions={hint != null ? <span className=\"px-1 text-xs text-md-on-surface-variant\">{hint}</span> : undefined}\n rightActions={\n <>\n {tool}\n {composerActions}\n </>\n }\n className={cn(\n \"rounded-md-xl border border-md-outline-variant bg-md-surface px-4 pb-2 pt-3.5 shadow-md-1 [&>textarea]:text-base\",\n !onSubmit && \"[&_button[aria-label=Send]]:hidden\",\n )}\n />\n </div>\n );\n});\nMd3PromptEnhancer.displayName = \"Md3PromptEnhancer\";\n"]}
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { PromptEnhancerProps, PromptEnhancerChange, PromptEnhancerController, PromptEnhancerDiffStyle, PromptEnhancerSegment, PromptEnhancerState, PromptEnhancerSuggestion, PromptEnhancerVariant } from '@nucleux/prompt-enhancer';
3
+
4
+ /** Props of {@link Md3PromptEnhancer} — identical to `PromptEnhancerProps` from `@nucleux/prompt-enhancer`. */
5
+ type Md3PromptEnhancerProps = PromptEnhancerProps;
6
+ /** "preview-diff", "wand-button" or "auto-enhance-toggle". */
7
+ type Md3PromptEnhancerVariant = PromptEnhancerVariant;
8
+ /** "original", "enhancing", "enhanced", "editing", "accepted", "reverted" or "failed". */
9
+ type Md3PromptEnhancerState = PromptEnhancerState;
10
+ /** "split" or "inline". */
11
+ type Md3PromptEnhancerDiffStyle = PromptEnhancerDiffStyle;
12
+ /** One proposed addition — identical to `PromptEnhancerChange`. */
13
+ type Md3PromptEnhancerChange = PromptEnhancerChange;
14
+ /** What `onEnhance` resolves with — identical to `PromptEnhancerSuggestion`. */
15
+ type Md3PromptEnhancerSuggestion = PromptEnhancerSuggestion;
16
+ /** A run of the marked suggestion — identical to `PromptEnhancerSegment`. */
17
+ type Md3PromptEnhancerSegment = PromptEnhancerSegment;
18
+ /** The shared controller — identical to `PromptEnhancerController`. */
19
+ type Md3PromptEnhancerController = PromptEnhancerController;
20
+ /**
21
+ * The Material 3 Prompt Enhancer: an Improve-style tool in the
22
+ * `Md3AgentComposer` toolbar proposes a clearer version of the request, shown
23
+ * in an outlined card above the composer — what they wrote beside the
24
+ * suggestion, every addition highlighted in primary-container and explained,
25
+ * assumptions labelled, each change removable with a checkbox. Use updates the
26
+ * composer with Undo and sends nothing; Edit, Keep original and a failure line
27
+ * that leaves the original untouched are built in. Same API, states and
28
+ * accessible names as `PromptEnhancer` from `@nucleux/prompt-enhancer`.
29
+ */
30
+ declare const Md3PromptEnhancer: React.ForwardRefExoticComponent<PromptEnhancerProps & React.RefAttributes<HTMLDivElement>>;
31
+
32
+ export { Md3PromptEnhancer, type Md3PromptEnhancerChange, type Md3PromptEnhancerController, type Md3PromptEnhancerDiffStyle, type Md3PromptEnhancerProps, type Md3PromptEnhancerSegment, type Md3PromptEnhancerState, type Md3PromptEnhancerSuggestion, type Md3PromptEnhancerVariant };
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { PromptEnhancerProps, PromptEnhancerChange, PromptEnhancerController, PromptEnhancerDiffStyle, PromptEnhancerSegment, PromptEnhancerState, PromptEnhancerSuggestion, PromptEnhancerVariant } from '@nucleux/prompt-enhancer';
3
+
4
+ /** Props of {@link Md3PromptEnhancer} — identical to `PromptEnhancerProps` from `@nucleux/prompt-enhancer`. */
5
+ type Md3PromptEnhancerProps = PromptEnhancerProps;
6
+ /** "preview-diff", "wand-button" or "auto-enhance-toggle". */
7
+ type Md3PromptEnhancerVariant = PromptEnhancerVariant;
8
+ /** "original", "enhancing", "enhanced", "editing", "accepted", "reverted" or "failed". */
9
+ type Md3PromptEnhancerState = PromptEnhancerState;
10
+ /** "split" or "inline". */
11
+ type Md3PromptEnhancerDiffStyle = PromptEnhancerDiffStyle;
12
+ /** One proposed addition — identical to `PromptEnhancerChange`. */
13
+ type Md3PromptEnhancerChange = PromptEnhancerChange;
14
+ /** What `onEnhance` resolves with — identical to `PromptEnhancerSuggestion`. */
15
+ type Md3PromptEnhancerSuggestion = PromptEnhancerSuggestion;
16
+ /** A run of the marked suggestion — identical to `PromptEnhancerSegment`. */
17
+ type Md3PromptEnhancerSegment = PromptEnhancerSegment;
18
+ /** The shared controller — identical to `PromptEnhancerController`. */
19
+ type Md3PromptEnhancerController = PromptEnhancerController;
20
+ /**
21
+ * The Material 3 Prompt Enhancer: an Improve-style tool in the
22
+ * `Md3AgentComposer` toolbar proposes a clearer version of the request, shown
23
+ * in an outlined card above the composer — what they wrote beside the
24
+ * suggestion, every addition highlighted in primary-container and explained,
25
+ * assumptions labelled, each change removable with a checkbox. Use updates the
26
+ * composer with Undo and sends nothing; Edit, Keep original and a failure line
27
+ * that leaves the original untouched are built in. Same API, states and
28
+ * accessible names as `PromptEnhancer` from `@nucleux/prompt-enhancer`.
29
+ */
30
+ declare const Md3PromptEnhancer: React.ForwardRefExoticComponent<PromptEnhancerProps & React.RefAttributes<HTMLDivElement>>;
31
+
32
+ export { Md3PromptEnhancer, type Md3PromptEnhancerChange, type Md3PromptEnhancerController, type Md3PromptEnhancerDiffStyle, type Md3PromptEnhancerProps, type Md3PromptEnhancerSegment, type Md3PromptEnhancerState, type Md3PromptEnhancerSuggestion, type Md3PromptEnhancerVariant };
package/dist/index.js ADDED
@@ -0,0 +1,256 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ import { MessageSquareText, CircleHelp, Pencil, Loader2, Check, Undo2, AlertCircle, Sparkles } from 'lucide-react';
4
+ import { cn } from '@nucleux/utils';
5
+ import { PROMPT_ENHANCER_TEXT, splitPromptEnhancerProps, usePromptEnhancer, describePromptEnhancerChange } from '@nucleux/prompt-enhancer';
6
+ import { Md3AgentComposer } from '@nucleux/md3-agent-composer';
7
+ import { Md3Button } from '@nucleux/md3-button';
8
+ import { Md3Card } from '@nucleux/md3-card';
9
+ import { Md3Checkbox } from '@nucleux/md3-checkbox';
10
+ import { Md3Switch } from '@nucleux/md3-switch';
11
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
12
+
13
+ // src/index.tsx
14
+ var stateLayer = "before:absolute before:inset-0 before:bg-current before:opacity-0 before:transition-opacity before:content-[''] hover:before:opacity-[0.08] focus-visible:before:opacity-[0.12] active:before:opacity-[0.12] motion-reduce:before:transition-none";
15
+ var overline = "flex items-center gap-1.5 text-[11.5px] font-semibold uppercase leading-4 tracking-[0.06em]";
16
+ var textLink = cn(
17
+ "relative inline-flex min-h-8 items-center gap-1 overflow-hidden rounded-full px-2.5 text-[13px] font-medium outline-none focus-visible:ring-2 focus-visible:ring-md-primary disabled:pointer-events-none disabled:opacity-[0.38] [&_svg]:size-4",
18
+ stateLayer
19
+ );
20
+ var Md3PromptEnhancer = React.forwardRef((props, ref) => {
21
+ const {
22
+ variant = "preview-diff",
23
+ diffStyle = "split",
24
+ showChanges = true,
25
+ explain = true,
26
+ allowEdit = true,
27
+ allowKeepOriginal = true,
28
+ undo = true,
29
+ actionLabel = PROMPT_ENHANCER_TEXT.actionLabel,
30
+ heading = PROMPT_ENHANCER_TEXT.heading,
31
+ hint,
32
+ placeholder = PROMPT_ENHANCER_TEXT.placeholder,
33
+ failureMessage = PROMPT_ENHANCER_TEXT.failure,
34
+ composerActions,
35
+ onSubmit
36
+ } = props;
37
+ const { className, ...rest } = splitPromptEnhancerProps(props);
38
+ const pe = usePromptEnhancer(props);
39
+ const uid = React.useId();
40
+ const busy = pe.state === "enhancing";
41
+ const listed = showChanges && pe.changes.length > 0;
42
+ const kept = pe.changes.length - pe.removed.length;
43
+ const marked = pe.segments.map((s, i) => {
44
+ if (s.type === "text" || !showChanges) return s.type === "removed" ? null : /* @__PURE__ */ jsx(React.Fragment, { children: s.text }, i);
45
+ if (s.type === "added")
46
+ return /* @__PURE__ */ jsxs(
47
+ "ins",
48
+ {
49
+ className: "rounded-md-xs bg-md-primary-container/75 px-0.5 text-md-on-primary-container underline decoration-md-primary/50 decoration-dotted underline-offset-4 [box-decoration-break:clone]",
50
+ children: [
51
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: PROMPT_ENHANCER_TEXT.added }),
52
+ s.text
53
+ ]
54
+ },
55
+ i
56
+ );
57
+ return /* @__PURE__ */ jsxs("del", { className: "text-md-on-surface-variant line-through", children: [
58
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: PROMPT_ENHANCER_TEXT.removed }),
59
+ s.text
60
+ ] }, i);
61
+ });
62
+ const improvedOverline = /* @__PURE__ */ jsxs("p", { className: cn(overline, "text-md-primary"), children: [
63
+ /* @__PURE__ */ jsx(MessageSquareText, { "aria-hidden": true, className: "size-4" }),
64
+ PROMPT_ENHANCER_TEXT.enhanced
65
+ ] });
66
+ const review = pe.showReview ? /* @__PURE__ */ jsxs(
67
+ Md3Card,
68
+ {
69
+ variant: "outlined",
70
+ role: "region",
71
+ "aria-label": PROMPT_ENHANCER_TEXT.regionLabel,
72
+ onKeyDown: pe.onReviewKeyDown,
73
+ className: "flex flex-col gap-3.5 rounded-md-lg bg-md-surface px-5 py-[18px] animate-nx-fade-in motion-reduce:animate-none",
74
+ children: [
75
+ listed && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-baseline justify-between gap-3", children: [
76
+ /* @__PURE__ */ jsx("p", { className: "text-base font-medium leading-6 text-md-on-surface", children: heading }),
77
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-md-on-surface-variant", children: [
78
+ kept,
79
+ " of ",
80
+ pe.changes.length,
81
+ " changes"
82
+ ] })
83
+ ] }),
84
+ pe.state === "editing" ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
85
+ /* @__PURE__ */ jsx("label", { htmlFor: `${uid}-edit`, className: "px-1 text-xs font-medium text-md-primary", children: PROMPT_ENHANCER_TEXT.editLabel }),
86
+ /* @__PURE__ */ jsx(
87
+ "textarea",
88
+ {
89
+ id: `${uid}-edit`,
90
+ rows: 3,
91
+ autoFocus: true,
92
+ value: pe.editText,
93
+ onChange: (e) => pe.setEditText(e.target.value),
94
+ className: "w-full resize-none rounded-md-xs border-2 border-md-primary bg-transparent px-[15px] py-3 text-base leading-6 text-md-on-surface outline-none"
95
+ }
96
+ )
97
+ ] }) : diffStyle === "split" ? /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[repeat(auto-fit,minmax(210px,1fr))] gap-2.5", children: [
98
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 rounded-md-md border border-transparent bg-md-on-surface/[0.04] px-3.5 py-3", children: [
99
+ /* @__PURE__ */ jsx("p", { className: cn(overline, "text-md-on-surface-variant"), children: PROMPT_ENHANCER_TEXT.youWrote }),
100
+ /* @__PURE__ */ jsx("p", { className: "text-[14.5px] leading-[22px] text-md-on-surface", children: pe.original })
101
+ ] }),
102
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 rounded-md-md border border-md-primary/45 bg-md-primary/5 px-3.5 py-3", children: [
103
+ improvedOverline,
104
+ /* @__PURE__ */ jsx("p", { className: "text-[14.5px] leading-[22px] text-md-on-surface", children: marked })
105
+ ] })
106
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
107
+ improvedOverline,
108
+ /* @__PURE__ */ jsx("p", { className: "text-base leading-[26px] text-md-on-surface", children: marked })
109
+ ] }),
110
+ listed && pe.state !== "editing" && /* @__PURE__ */ jsx("div", { role: "group", "aria-label": PROMPT_ENHANCER_TEXT.changesLabel, className: "flex flex-col border-t border-md-outline-variant", children: pe.changes.map((c) => {
111
+ const on = !pe.removed.includes(c.id);
112
+ const cb = `${uid}-c-${c.id}`;
113
+ const desc = [explain && c.reason ? `${cb}-why` : null, c.assumption ? `${cb}-as` : null].filter(Boolean).join(" ");
114
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 border-b border-md-outline-variant py-2 last:border-b-0 last:pb-0", children: [
115
+ /* @__PURE__ */ jsx(
116
+ Md3Checkbox,
117
+ {
118
+ id: cb,
119
+ checked: on,
120
+ onCheckedChange: () => pe.toggleChange(c.id),
121
+ "aria-labelledby": `${cb}-l`,
122
+ "aria-describedby": desc || void 0,
123
+ className: "-ml-2.5 shrink-0"
124
+ }
125
+ ),
126
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-0.5 pt-2.5", children: [
127
+ /* @__PURE__ */ jsx(
128
+ "label",
129
+ {
130
+ id: `${cb}-l`,
131
+ htmlFor: cb,
132
+ className: cn(
133
+ "cursor-pointer text-sm font-medium leading-5 text-md-on-surface",
134
+ !on && "text-md-on-surface-variant line-through"
135
+ ),
136
+ children: describePromptEnhancerChange(c)
137
+ }
138
+ ),
139
+ explain && c.reason && /* @__PURE__ */ jsx("span", { id: `${cb}-why`, className: "text-[12.5px] leading-[18px] text-md-on-surface-variant", children: c.reason }),
140
+ c.assumption && /* @__PURE__ */ jsxs(
141
+ "span",
142
+ {
143
+ id: `${cb}-as`,
144
+ className: "mt-1 inline-flex items-center gap-1 self-start rounded-md-sm bg-md-surface-container-high px-2 py-0.5 text-[11.5px] font-medium text-md-on-surface-variant",
145
+ children: [
146
+ /* @__PURE__ */ jsx(CircleHelp, { "aria-hidden": true, className: "size-3.5" }),
147
+ c.assumption
148
+ ]
149
+ }
150
+ )
151
+ ] })
152
+ ] }, c.id);
153
+ }) }),
154
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-x-3 gap-y-2", children: [
155
+ pe.state !== "editing" && allowEdit ? /* @__PURE__ */ jsx(Md3Button, { variant: "text", icon: /* @__PURE__ */ jsx(Pencil, { "aria-hidden": true }), onClick: pe.edit, className: "-ml-1", children: PROMPT_ENHANCER_TEXT.edit }) : /* @__PURE__ */ jsx("span", {}),
156
+ /* @__PURE__ */ jsxs("span", { className: "ml-auto inline-flex flex-wrap gap-2", children: [
157
+ pe.state === "editing" ? /* @__PURE__ */ jsx(Md3Button, { variant: "outlined", onClick: pe.cancelEdit, children: PROMPT_ENHANCER_TEXT.cancelEdit }) : allowKeepOriginal && /* @__PURE__ */ jsx(Md3Button, { variant: "outlined", onClick: pe.keep, children: PROMPT_ENHANCER_TEXT.keep }),
158
+ /* @__PURE__ */ jsx(Md3Button, { variant: "filled", onClick: pe.use, children: pe.state === "editing" ? PROMPT_ENHANCER_TEXT.useEdited : PROMPT_ENHANCER_TEXT.use })
159
+ ] })
160
+ ] })
161
+ ]
162
+ }
163
+ ) : null;
164
+ const noteRow = "flex flex-wrap items-center gap-2 px-1 text-[13px] leading-5 text-md-on-surface-variant [&>svg]:size-[18px] [&>svg]:shrink-0";
165
+ const note = pe.state === "enhancing" ? /* @__PURE__ */ jsxs("p", { className: noteRow, children: [
166
+ /* @__PURE__ */ jsx(Loader2, { "aria-hidden": true, className: "animate-spin text-md-primary motion-reduce:animate-none" }),
167
+ PROMPT_ENHANCER_TEXT.working
168
+ ] }) : pe.state === "accepted" ? /* @__PURE__ */ jsxs("div", { className: noteRow, children: [
169
+ /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "text-md-primary" }),
170
+ /* @__PURE__ */ jsx("span", { className: "flex-1", children: PROMPT_ENHANCER_TEXT.accepted }),
171
+ undo && /* @__PURE__ */ jsxs("button", { type: "button", onClick: pe.undoUse, className: cn(textLink, "text-md-primary"), children: [
172
+ /* @__PURE__ */ jsx(Undo2, { "aria-hidden": true }),
173
+ PROMPT_ENHANCER_TEXT.undo
174
+ ] })
175
+ ] }) : pe.state === "reverted" ? /* @__PURE__ */ jsxs("p", { className: noteRow, children: [
176
+ /* @__PURE__ */ jsx(Undo2, { "aria-hidden": true, className: "text-md-primary" }),
177
+ PROMPT_ENHANCER_TEXT.reverted
178
+ ] }) : null;
179
+ const failed = pe.state === "failed" ? /* @__PURE__ */ jsxs(
180
+ "div",
181
+ {
182
+ role: "alert",
183
+ className: "flex flex-wrap items-center gap-2 rounded-md-md bg-md-error-container py-2 pl-3 pr-2 text-[13px] leading-5 text-md-on-error-container",
184
+ children: [
185
+ /* @__PURE__ */ jsx(AlertCircle, { "aria-hidden": true, className: "size-[18px] shrink-0" }),
186
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children: failureMessage }),
187
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: pe.enhance, disabled: !pe.canEnhance, className: textLink, children: PROMPT_ENHANCER_TEXT.retry }),
188
+ allowKeepOriginal && /* @__PURE__ */ jsx("button", { type: "button", onClick: pe.keep, className: textLink, children: PROMPT_ENHANCER_TEXT.keep })
189
+ ]
190
+ }
191
+ ) : null;
192
+ const tool = /* @__PURE__ */ jsxs(
193
+ "button",
194
+ {
195
+ type: "button",
196
+ onClick: busy ? pe.cancel : pe.enhance,
197
+ disabled: !busy && !pe.canEnhance,
198
+ "aria-label": busy ? PROMPT_ENHANCER_TEXT.cancel : `${actionLabel} this prompt with AI`,
199
+ className: cn(
200
+ "relative inline-flex min-h-8 shrink-0 items-center gap-1.5 overflow-hidden rounded-md-sm border py-1 pl-2 pr-2.5 text-[13px] font-medium leading-5 outline-none transition-colors",
201
+ "focus-visible:ring-2 focus-visible:ring-md-primary focus-visible:ring-offset-2 focus-visible:ring-offset-md-surface",
202
+ "disabled:pointer-events-none disabled:opacity-[0.38] motion-reduce:transition-none [&_svg]:size-[18px]",
203
+ stateLayer,
204
+ busy ? "border-transparent bg-md-secondary-container text-md-on-secondary-container" : "border-md-outline-variant bg-transparent text-md-on-surface-variant"
205
+ ),
206
+ children: [
207
+ busy ? /* @__PURE__ */ jsx(Loader2, { "aria-hidden": true, className: "relative animate-spin motion-reduce:animate-none" }) : /* @__PURE__ */ jsx(Sparkles, { "aria-hidden": true, className: "relative" }),
208
+ /* @__PURE__ */ jsx("span", { className: "relative", children: busy ? PROMPT_ENHANCER_TEXT.busy : actionLabel })
209
+ ]
210
+ }
211
+ );
212
+ const autoToggle = variant === "auto-enhance-toggle" ? /* @__PURE__ */ jsxs(Md3Card, { variant: "outlined", className: "flex items-center justify-between gap-4 rounded-md-lg bg-md-surface px-4 py-3", children: [
213
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
214
+ /* @__PURE__ */ jsx("p", { id: `${uid}-auto`, className: "text-sm font-medium leading-5 text-md-on-surface", children: PROMPT_ENHANCER_TEXT.autoTitle }),
215
+ /* @__PURE__ */ jsx("p", { id: `${uid}-auto-d`, className: "mt-0.5 text-xs leading-4 text-md-on-surface-variant", children: PROMPT_ENHANCER_TEXT.autoDescription })
216
+ ] }),
217
+ /* @__PURE__ */ jsx(
218
+ Md3Switch,
219
+ {
220
+ checked: pe.autoEnhance,
221
+ onCheckedChange: pe.setAutoEnhance,
222
+ "aria-labelledby": `${uid}-auto`,
223
+ "aria-describedby": `${uid}-auto-d`
224
+ }
225
+ )
226
+ ] }) : null;
227
+ return /* @__PURE__ */ jsxs("div", { ref, "data-state": pe.state, className: cn("flex w-full flex-col gap-3", className), ...rest, children: [
228
+ autoToggle,
229
+ review,
230
+ failed,
231
+ /* @__PURE__ */ jsx("div", { role: "status", "aria-live": "polite", className: note ? void 0 : "sr-only", children: note ?? pe.announcement }),
232
+ /* @__PURE__ */ jsx(
233
+ Md3AgentComposer,
234
+ {
235
+ value: pe.value,
236
+ onValueChange: pe.setValue,
237
+ onSubmit: pe.submit,
238
+ placeholder,
239
+ leftActions: hint != null ? /* @__PURE__ */ jsx("span", { className: "px-1 text-xs text-md-on-surface-variant", children: hint }) : void 0,
240
+ rightActions: /* @__PURE__ */ jsxs(Fragment, { children: [
241
+ tool,
242
+ composerActions
243
+ ] }),
244
+ className: cn(
245
+ "rounded-md-xl border border-md-outline-variant bg-md-surface px-4 pb-2 pt-3.5 shadow-md-1 [&>textarea]:text-base",
246
+ !onSubmit && "[&_button[aria-label=Send]]:hidden"
247
+ )
248
+ }
249
+ )
250
+ ] });
251
+ });
252
+ Md3PromptEnhancer.displayName = "Md3PromptEnhancer";
253
+
254
+ export { Md3PromptEnhancer };
255
+ //# sourceMappingURL=index.js.map
256
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx"],"names":["Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\";\nimport { AlertCircle, Check, CircleHelp, Loader2, MessageSquareText, Pencil, Sparkles, Undo2 } from \"lucide-react\";\nimport { cn } from \"@nucleux/utils\";\nimport {\n PROMPT_ENHANCER_TEXT,\n describePromptEnhancerChange,\n splitPromptEnhancerProps,\n usePromptEnhancer,\n type PromptEnhancerChange,\n type PromptEnhancerController,\n type PromptEnhancerDiffStyle,\n type PromptEnhancerProps,\n type PromptEnhancerSegment,\n type PromptEnhancerState,\n type PromptEnhancerSuggestion,\n type PromptEnhancerVariant,\n} from \"@nucleux/prompt-enhancer\";\nimport { Md3AgentComposer } from \"@nucleux/md3-agent-composer\";\nimport { Md3Button } from \"@nucleux/md3-button\";\nimport { Md3Card } from \"@nucleux/md3-card\";\nimport { Md3Checkbox } from \"@nucleux/md3-checkbox\";\nimport { Md3Switch } from \"@nucleux/md3-switch\";\n\n/** Props of {@link Md3PromptEnhancer} — identical to `PromptEnhancerProps` from `@nucleux/prompt-enhancer`. */\nexport type Md3PromptEnhancerProps = PromptEnhancerProps;\n/** \"preview-diff\", \"wand-button\" or \"auto-enhance-toggle\". */\nexport type Md3PromptEnhancerVariant = PromptEnhancerVariant;\n/** \"original\", \"enhancing\", \"enhanced\", \"editing\", \"accepted\", \"reverted\" or \"failed\". */\nexport type Md3PromptEnhancerState = PromptEnhancerState;\n/** \"split\" or \"inline\". */\nexport type Md3PromptEnhancerDiffStyle = PromptEnhancerDiffStyle;\n/** One proposed addition — identical to `PromptEnhancerChange`. */\nexport type Md3PromptEnhancerChange = PromptEnhancerChange;\n/** What `onEnhance` resolves with — identical to `PromptEnhancerSuggestion`. */\nexport type Md3PromptEnhancerSuggestion = PromptEnhancerSuggestion;\n/** A run of the marked suggestion — identical to `PromptEnhancerSegment`. */\nexport type Md3PromptEnhancerSegment = PromptEnhancerSegment;\n/** The shared controller — identical to `PromptEnhancerController`. */\nexport type Md3PromptEnhancerController = PromptEnhancerController;\n\nconst stateLayer =\n \"before:absolute before:inset-0 before:bg-current before:opacity-0 before:transition-opacity before:content-[''] hover:before:opacity-[0.08] focus-visible:before:opacity-[0.12] active:before:opacity-[0.12] motion-reduce:before:transition-none\";\n\nconst overline = \"flex items-center gap-1.5 text-[11.5px] font-semibold uppercase leading-4 tracking-[0.06em]\";\n\nconst textLink = cn(\n \"relative inline-flex min-h-8 items-center gap-1 overflow-hidden rounded-full px-2.5 text-[13px] font-medium outline-none focus-visible:ring-2 focus-visible:ring-md-primary disabled:pointer-events-none disabled:opacity-[0.38] [&_svg]:size-4\",\n stateLayer,\n);\n\n/**\n * The Material 3 Prompt Enhancer: an Improve-style tool in the\n * `Md3AgentComposer` toolbar proposes a clearer version of the request, shown\n * in an outlined card above the composer — what they wrote beside the\n * suggestion, every addition highlighted in primary-container and explained,\n * assumptions labelled, each change removable with a checkbox. Use updates the\n * composer with Undo and sends nothing; Edit, Keep original and a failure line\n * that leaves the original untouched are built in. Same API, states and\n * accessible names as `PromptEnhancer` from `@nucleux/prompt-enhancer`.\n */\nexport const Md3PromptEnhancer = React.forwardRef<HTMLDivElement, Md3PromptEnhancerProps>((props, ref) => {\n const {\n variant = \"preview-diff\",\n diffStyle = \"split\",\n showChanges = true,\n explain = true,\n allowEdit = true,\n allowKeepOriginal = true,\n undo = true,\n actionLabel = PROMPT_ENHANCER_TEXT.actionLabel,\n heading = PROMPT_ENHANCER_TEXT.heading,\n hint,\n placeholder = PROMPT_ENHANCER_TEXT.placeholder,\n failureMessage = PROMPT_ENHANCER_TEXT.failure,\n composerActions,\n onSubmit,\n } = props;\n const { className, ...rest } = splitPromptEnhancerProps(props);\n const pe = usePromptEnhancer(props);\n const uid = React.useId();\n const busy = pe.state === \"enhancing\";\n const listed = showChanges && pe.changes.length > 0;\n const kept = pe.changes.length - pe.removed.length;\n\n const marked = pe.segments.map((s, i) => {\n if (s.type === \"text\" || !showChanges) return s.type === \"removed\" ? null : <React.Fragment key={i}>{s.text}</React.Fragment>;\n if (s.type === \"added\")\n return (\n <ins\n key={i}\n className=\"rounded-md-xs bg-md-primary-container/75 px-0.5 text-md-on-primary-container underline decoration-md-primary/50 decoration-dotted underline-offset-4 [box-decoration-break:clone]\"\n >\n <span className=\"sr-only\">{PROMPT_ENHANCER_TEXT.added}</span>\n {s.text}\n </ins>\n );\n return (\n <del key={i} className=\"text-md-on-surface-variant line-through\">\n <span className=\"sr-only\">{PROMPT_ENHANCER_TEXT.removed}</span>\n {s.text}\n </del>\n );\n });\n\n const improvedOverline = (\n <p className={cn(overline, \"text-md-primary\")}>\n <MessageSquareText aria-hidden className=\"size-4\" />\n {PROMPT_ENHANCER_TEXT.enhanced}\n </p>\n );\n\n const review = pe.showReview ? (\n <Md3Card\n variant=\"outlined\"\n role=\"region\"\n aria-label={PROMPT_ENHANCER_TEXT.regionLabel}\n onKeyDown={pe.onReviewKeyDown}\n className=\"flex flex-col gap-3.5 rounded-md-lg bg-md-surface px-5 py-[18px] animate-nx-fade-in motion-reduce:animate-none\"\n >\n {listed && (\n <div className=\"flex flex-wrap items-baseline justify-between gap-3\">\n <p className=\"text-base font-medium leading-6 text-md-on-surface\">{heading}</p>\n <span className=\"text-xs text-md-on-surface-variant\">\n {kept} of {pe.changes.length} changes\n </span>\n </div>\n )}\n\n {pe.state === \"editing\" ? (\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={`${uid}-edit`} className=\"px-1 text-xs font-medium text-md-primary\">\n {PROMPT_ENHANCER_TEXT.editLabel}\n </label>\n <textarea\n id={`${uid}-edit`}\n rows={3}\n autoFocus\n value={pe.editText}\n onChange={(e) => pe.setEditText(e.target.value)}\n className=\"w-full resize-none rounded-md-xs border-2 border-md-primary bg-transparent px-[15px] py-3 text-base leading-6 text-md-on-surface outline-none\"\n />\n </div>\n ) : diffStyle === \"split\" ? (\n <div className=\"grid grid-cols-[repeat(auto-fit,minmax(210px,1fr))] gap-2.5\">\n <div className=\"flex flex-col gap-2 rounded-md-md border border-transparent bg-md-on-surface/[0.04] px-3.5 py-3\">\n <p className={cn(overline, \"text-md-on-surface-variant\")}>{PROMPT_ENHANCER_TEXT.youWrote}</p>\n <p className=\"text-[14.5px] leading-[22px] text-md-on-surface\">{pe.original}</p>\n </div>\n <div className=\"flex flex-col gap-2 rounded-md-md border border-md-primary/45 bg-md-primary/5 px-3.5 py-3\">\n {improvedOverline}\n <p className=\"text-[14.5px] leading-[22px] text-md-on-surface\">{marked}</p>\n </div>\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {improvedOverline}\n <p className=\"text-base leading-[26px] text-md-on-surface\">{marked}</p>\n </div>\n )}\n\n {listed && pe.state !== \"editing\" && (\n <div role=\"group\" aria-label={PROMPT_ENHANCER_TEXT.changesLabel} className=\"flex flex-col border-t border-md-outline-variant\">\n {pe.changes.map((c) => {\n const on = !pe.removed.includes(c.id);\n const cb = `${uid}-c-${c.id}`;\n const desc = [explain && c.reason ? `${cb}-why` : null, c.assumption ? `${cb}-as` : null].filter(Boolean).join(\" \");\n return (\n <div key={c.id} className=\"flex items-start gap-2 border-b border-md-outline-variant py-2 last:border-b-0 last:pb-0\">\n <Md3Checkbox\n id={cb}\n checked={on}\n onCheckedChange={() => pe.toggleChange(c.id)}\n aria-labelledby={`${cb}-l`}\n aria-describedby={desc || undefined}\n className=\"-ml-2.5 shrink-0\"\n />\n <div className=\"flex min-w-0 flex-col gap-0.5 pt-2.5\">\n <label\n id={`${cb}-l`}\n htmlFor={cb}\n className={cn(\n \"cursor-pointer text-sm font-medium leading-5 text-md-on-surface\",\n !on && \"text-md-on-surface-variant line-through\",\n )}\n >\n {describePromptEnhancerChange(c)}\n </label>\n {explain && c.reason && (\n <span id={`${cb}-why`} className=\"text-[12.5px] leading-[18px] text-md-on-surface-variant\">\n {c.reason}\n </span>\n )}\n {c.assumption && (\n <span\n id={`${cb}-as`}\n className=\"mt-1 inline-flex items-center gap-1 self-start rounded-md-sm bg-md-surface-container-high px-2 py-0.5 text-[11.5px] font-medium text-md-on-surface-variant\"\n >\n <CircleHelp aria-hidden className=\"size-3.5\" />\n {c.assumption}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n {pe.state !== \"editing\" && allowEdit ? (\n <Md3Button variant=\"text\" icon={<Pencil aria-hidden />} onClick={pe.edit} className=\"-ml-1\">\n {PROMPT_ENHANCER_TEXT.edit}\n </Md3Button>\n ) : (\n <span />\n )}\n <span className=\"ml-auto inline-flex flex-wrap gap-2\">\n {pe.state === \"editing\" ? (\n <Md3Button variant=\"outlined\" onClick={pe.cancelEdit}>\n {PROMPT_ENHANCER_TEXT.cancelEdit}\n </Md3Button>\n ) : (\n allowKeepOriginal && (\n <Md3Button variant=\"outlined\" onClick={pe.keep}>\n {PROMPT_ENHANCER_TEXT.keep}\n </Md3Button>\n )\n )}\n <Md3Button variant=\"filled\" onClick={pe.use}>\n {pe.state === \"editing\" ? PROMPT_ENHANCER_TEXT.useEdited : PROMPT_ENHANCER_TEXT.use}\n </Md3Button>\n </span>\n </div>\n </Md3Card>\n ) : null;\n\n const noteRow = \"flex flex-wrap items-center gap-2 px-1 text-[13px] leading-5 text-md-on-surface-variant [&>svg]:size-[18px] [&>svg]:shrink-0\";\n const note =\n pe.state === \"enhancing\" ? (\n <p className={noteRow}>\n <Loader2 aria-hidden className=\"animate-spin text-md-primary motion-reduce:animate-none\" />\n {PROMPT_ENHANCER_TEXT.working}\n </p>\n ) : pe.state === \"accepted\" ? (\n <div className={noteRow}>\n <Check aria-hidden className=\"text-md-primary\" />\n <span className=\"flex-1\">{PROMPT_ENHANCER_TEXT.accepted}</span>\n {undo && (\n <button type=\"button\" onClick={pe.undoUse} className={cn(textLink, \"text-md-primary\")}>\n <Undo2 aria-hidden />\n {PROMPT_ENHANCER_TEXT.undo}\n </button>\n )}\n </div>\n ) : pe.state === \"reverted\" ? (\n <p className={noteRow}>\n <Undo2 aria-hidden className=\"text-md-primary\" />\n {PROMPT_ENHANCER_TEXT.reverted}\n </p>\n ) : null;\n\n const failed =\n pe.state === \"failed\" ? (\n <div\n role=\"alert\"\n className=\"flex flex-wrap items-center gap-2 rounded-md-md bg-md-error-container py-2 pl-3 pr-2 text-[13px] leading-5 text-md-on-error-container\"\n >\n <AlertCircle aria-hidden className=\"size-[18px] shrink-0\" />\n <span className=\"min-w-0 flex-1\">{failureMessage}</span>\n <button type=\"button\" onClick={pe.enhance} disabled={!pe.canEnhance} className={textLink}>\n {PROMPT_ENHANCER_TEXT.retry}\n </button>\n {allowKeepOriginal && (\n <button type=\"button\" onClick={pe.keep} className={textLink}>\n {PROMPT_ENHANCER_TEXT.keep}\n </button>\n )}\n </div>\n ) : null;\n\n const tool = (\n <button\n type=\"button\"\n onClick={busy ? pe.cancel : pe.enhance}\n disabled={!busy && !pe.canEnhance}\n aria-label={busy ? PROMPT_ENHANCER_TEXT.cancel : `${actionLabel} this prompt with AI`}\n className={cn(\n \"relative inline-flex min-h-8 shrink-0 items-center gap-1.5 overflow-hidden rounded-md-sm border py-1 pl-2 pr-2.5 text-[13px] font-medium leading-5 outline-none transition-colors\",\n \"focus-visible:ring-2 focus-visible:ring-md-primary focus-visible:ring-offset-2 focus-visible:ring-offset-md-surface\",\n \"disabled:pointer-events-none disabled:opacity-[0.38] motion-reduce:transition-none [&_svg]:size-[18px]\",\n stateLayer,\n busy\n ? \"border-transparent bg-md-secondary-container text-md-on-secondary-container\"\n : \"border-md-outline-variant bg-transparent text-md-on-surface-variant\",\n )}\n >\n {busy ? (\n <Loader2 aria-hidden className=\"relative animate-spin motion-reduce:animate-none\" />\n ) : (\n <Sparkles aria-hidden className=\"relative\" />\n )}\n <span className=\"relative\">{busy ? PROMPT_ENHANCER_TEXT.busy : actionLabel}</span>\n </button>\n );\n\n const autoToggle =\n variant === \"auto-enhance-toggle\" ? (\n <Md3Card variant=\"outlined\" className=\"flex items-center justify-between gap-4 rounded-md-lg bg-md-surface px-4 py-3\">\n <div className=\"min-w-0\">\n <p id={`${uid}-auto`} className=\"text-sm font-medium leading-5 text-md-on-surface\">\n {PROMPT_ENHANCER_TEXT.autoTitle}\n </p>\n <p id={`${uid}-auto-d`} className=\"mt-0.5 text-xs leading-4 text-md-on-surface-variant\">\n {PROMPT_ENHANCER_TEXT.autoDescription}\n </p>\n </div>\n <Md3Switch\n checked={pe.autoEnhance}\n onCheckedChange={pe.setAutoEnhance}\n aria-labelledby={`${uid}-auto`}\n aria-describedby={`${uid}-auto-d`}\n />\n </Md3Card>\n ) : null;\n\n return (\n <div ref={ref} data-state={pe.state} className={cn(\"flex w-full flex-col gap-3\", className)} {...rest}>\n {autoToggle}\n {review}\n {failed}\n <div role=\"status\" aria-live=\"polite\" className={note ? undefined : \"sr-only\"}>\n {note ?? pe.announcement}\n </div>\n <Md3AgentComposer\n value={pe.value}\n onValueChange={pe.setValue}\n onSubmit={pe.submit}\n placeholder={placeholder}\n leftActions={hint != null ? <span className=\"px-1 text-xs text-md-on-surface-variant\">{hint}</span> : undefined}\n rightActions={\n <>\n {tool}\n {composerActions}\n </>\n }\n className={cn(\n \"rounded-md-xl border border-md-outline-variant bg-md-surface px-4 pb-2 pt-3.5 shadow-md-1 [&>textarea]:text-base\",\n !onSubmit && \"[&_button[aria-label=Send]]:hidden\",\n )}\n />\n </div>\n );\n});\nMd3PromptEnhancer.displayName = \"Md3PromptEnhancer\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,70 @@
1
1
  {
2
2
  "name": "@nucleux/md3-prompt-enhancer",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.7.0",
4
+ "type": "module",
5
+ "sideEffects": false,
6
+ "description": "Material 3 Prompt Enhancer — proposes a clearer version of the request you wrote, every addition marked and explained — Nucleux agentic UI for React.",
7
+ "keywords": [
8
+ "nucleux",
9
+ "react",
10
+ "ui",
11
+ "components",
12
+ "agentic",
13
+ "ai",
14
+ "tailwind",
15
+ "md3",
16
+ "material",
17
+ "md3-prompt-enhancer",
18
+ "prompt-enhancer",
19
+ "prompt",
20
+ "enhance",
21
+ "prompt-scaffold"
22
+ ],
23
+ "main": "./dist/index.cjs",
24
+ "module": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js",
30
+ "require": "./dist/index.cjs"
31
+ }
32
+ },
33
+ "files": [
34
+ "dist",
35
+ "README.md"
36
+ ],
37
+ "peerDependencies": {
38
+ "react": ">=18",
39
+ "react-dom": ">=18"
40
+ },
41
+ "dependencies": {
42
+ "@nucleux/md3-agent-composer": "0.7.0",
43
+ "@nucleux/md3-button": "0.7.0",
44
+ "@nucleux/md3-card": "0.7.0",
45
+ "@nucleux/md3-checkbox": "0.7.0",
46
+ "@nucleux/md3-switch": "0.7.0",
47
+ "@nucleux/prompt-enhancer": "0.7.0",
48
+ "@nucleux/utils": "0.7.0",
49
+ "lucide-react": "^0.469.0"
50
+ },
51
+ "devDependencies": {
52
+ "tsup": "^8.3.5",
53
+ "typescript": "^5.7.2",
54
+ "@types/react": "^18.3.18",
55
+ "react": "^18.3.1"
56
+ },
57
+ "publishConfig": {
58
+ "access": "public"
59
+ },
60
+ "license": "MIT",
61
+ "repository": {
62
+ "type": "git",
63
+ "url": "git+https://github.com/intelligaia-open-labs/nucleux.git",
64
+ "directory": "packages/md3-prompt-enhancer"
65
+ },
66
+ "homepage": "https://github.com/intelligaia-open-labs/nucleux#readme",
67
+ "scripts": {
68
+ "build": "tsup"
69
+ }
6
70
  }