0.1.1 • Published 11 months ago

dynamic-prompt-editor v0.1.1

Weekly downloads
-
License
-
Repository
-
Last release
11 months ago

Dynamic Prompt Editor

A flexible and customizable prompt editor for React applications with variable suggestions and autocompletion.

šŸ”— Live Demo

Features

  • šŸš€ Variable suggestions with customizable triggers
  • āŒØļø Keyboard navigation
  • šŸŽØ Custom styling support
  • šŸ”§ Custom rendering capabilities
  • šŸ“ Rich text editing powered by Draft.js

Installation

npm install dynamic-prompt-editor

Basic Usage

import { DraftPromptEditor } from "dynamic-prompt-editor";

function App() {
  const [value, setValue] = useState("Hello {{VISITOR.name}}!");

  const suggestions = [
    {
      id: "visitor.name",
      label: "VISITOR.name",
      value: "VISITOR.name",
      category: "Visitor",
      description: "The visitor's full name",
    },
  ];

  return <DraftPromptEditor value={value} onChange={setValue} suggestions={suggestions} />;
}

Props

PropTypeRequiredDescription
valuestringYesThe editor content
onChange(value: string) => voidYesChange handler
suggestionsBaseEditorItem[]YesArray of suggestion items
placeholderstringNoEditor placeholder
classNamestringNoAdditional CSS class
classNamesEditorClassNamesNoCustom class names object
renderItem(item, isSelected) => ReactNodeNoCustom item renderer
renderCategory(item) => ReactNodeNoCustom category renderer
renderDescription(item) => ReactNodeNoCustom description renderer
minSuggestionWidthnumberNoMin width of suggestion box
maxSuggestionWidthnumberNoMax width of suggestion box
maxSuggestionHeightnumberNoMax height of suggestion box
suggestionTriggerstringNoCustom trigger (default: '{{')
suggestionClosingstringNoCustom closing (default: '}}')

Examples

Custom Styling

<DraftPromptEditor
  value={value}
  onChange={setValue}
  suggestions={suggestions}
  classNames={{
    root: "custom-editor",
    editor: "custom-editor__input",
    variable: "custom-editor__variable",
    suggestions: "custom-editor__suggestions",
    suggestion: "custom-editor__suggestion",
    suggestionSelected: "custom-editor__suggestion--selected",
    category: "custom-editor__category",
    description: "custom-editor__description",
  }}
/>

Custom Rendering

const renderCustomItem = (item, isSelected) => (
  <div
    style={{
      padding: "8px",
      backgroundColor: isSelected ? "#f0f9ff" : "transparent",
    }}
  >
    <div style={{ fontWeight: "bold" }}>{item.label}</div>
    <div style={{ fontSize: "0.9em", color: "#666" }}>{item.description}</div>
  </div>
);

<DraftPromptEditor value={value} onChange={setValue} suggestions={suggestions} renderItem={renderCustomItem} />;

Custom Triggers

<DraftPromptEditor value={value} onChange={setValue} suggestions={suggestions} suggestionTrigger="${" suggestionClosing="}" />

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT

0.1.1

11 months ago

0.1.0

12 months ago

0.0.1

12 months ago