syncfusion-blazor-smart-rich-text-editor について
Syncfusion の AI 搭載リッチテキストエディターを設定する Blazor 開発者向けのスキルです。AI バックエンドの構成と編集時の文章支援に加え、リッチテキスト、メディア、表、ツールバー機能も扱います。
主な機能
- 01OpenAI、Azure OpenAI、Ollama、独自バックエンドの設定
- 02ツールバーから AI の文章操作を実行
- 03プロンプト入力と履歴管理
- 04AI ポップアップとイベントのカスタマイズ
- 05リッチテキスト、メディア、表の設定
活用シーン
- 01Blazor アプリに AI 支援エディターを追加
- 02選択テキストの要約やトーン調整
- 03エディターを独自 AI サービスに接続
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ syncfusion/ blazor-ui-components-skills --skill syncfusion-blazor-smart-rich-text-editorインストール後、Claude Code で/syncfusion-blazor-smart-rich-text-editorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accessibility-globalization.mdai-appearance.mdai-backends.mdai-events.mdai-methods.mdassist-view-settings.mdbuilt-in-tools.mdcustom-tools.mddata-binding.mdeditor-modes.mdevents.mdgetting-started.mdimages-and-media.mdimport-export.mdinline-mode.mdmethods.mdpaste-and-cleanup.mdproperties.mdtables.mdtext-formatting.mdtoolbar.md詳細
Syncfusion Blazor Smart Rich Text Editor
Syncfusion Blazor Smart Rich Text Editor(SfSmartRichTextEditor)の実装と設定を包括的に解説するスキルです。インテリジェントなコンテンツ支援機能を備えた AI 搭載の WYSIWYG エディターで、フル機能の SfRichTextEditor を拡張します。OpenAI、Azure OpenAI、Ollama、カスタム AI バックエンドをサポートしています。スマートアクションのドロップダウンツールバー、AI クエリダイアログ(Alt+Enter)、AssistViewSettings による完全にカスタマイズ可能な AI アシスタントポップアップを提供します。
このスキルを使用する場面
ユーザーが次のことを必要としている場合に、このスキルを使用してください。
- Blazor Server または Web App プロジェクトに
SfSmartRichTextEditorをインストールしてセットアップする - AI バックエンド(OpenAI、Azure OpenAI、Ollama、カスタム
IChatClient)を設定する Program.csでIChatInferenceService/SyncfusionAIServiceを登録する- AI コマンド(要約、拡張、トーンの調整)にスマートアクションのドロップダウンツールバーを使用する
ToolbarItemModelのリストにName = "AI Commands"とName = "AI Query"を追加して、AI ツールバーボタンを表示する- AI クエリダイアログを
Alt+Enterで開き、自由形式の AI プロンプトを入力する AssistViewSettings(Commands、Suggestions、Prompts、Placeholder、MaxPromptHistory、ポップアップのサイズ)を設定する- AI アシスタントポップアップ(
BannerTemplate、HeaderToolbarSettings、PromptToolbarSettings、ResponseToolbarSettings)をカスタマイズする - AI イベント(
AIPromptRequested、AIResponseStopped、AIToolbarItemClicked、AIPopupOpening、AIPopupClosing)を処理する - AI アシスタントのメソッド(
ShowAIPopupAsync、HideAIPopupAsync、ExecuteAIPromptAsync、UpdateAIResponseAsync、GetAIPromptHistoryAsync、ClearAIPromptHistoryAsync)を使用する - AI アシスタントポップアップ(
.e-rte-aiquery-dialog)のスタイルやアニメーションを設定する - 継承される
SfRichTextEditorのすべての機能(ツールバー、画像、テーブル、イベント、メソッド、データバインディング、貼り付け時のクリーンアップ、インポート/エクスポート、アクセシビリティ)を使用する
クイックスタート
1. NuGet パッケージをインストールします。
dotnet add package Syncfusion.Blazor.SmartRichTextEditor
dotnet add package Syncfusion.Blazor.Themes
dotnet add package Microsoft.Extensions.AI
dotnet add package Microsoft.Extensions.AI.OpenAI
2. Program.cs でサービスを登録します。
using Syncfusion.Blazor;
using Syncfusion.Blazor.AI;
using Microsoft.Extensions.AI;
using OpenAI;
builder.Services.AddSyncfusionBlazor();
string openAIApiKey = "YOUR_API_KEY";
string openAIModel = "gpt-4";
OpenAIClient openAIClient = new OpenAIClient(openAIApiKey);
IChatClient chatClient = openAIClient.GetChatClient(openAIModel).AsIChatClient();
builder.Services.AddChatClient(chatClient);
builder.Services.AddSingleton<IChatInferenceService, SyncfusionAIService>();
3. _Imports.razor に追加します。
@using Syncfusion.Blazor
@using Syncfusion.Blazor.SmartRichTextEditor
4. App.razor(Server)または index.html(WASM)に CSS/JS を追加します。
<link href="_content/Syncfusion.Blazor.Themes/tailwind.css" rel="stylesheet" />
<script src="_content/Syncfusion.Blazor.Core/scripts/syncfusion-blazor.min.js"></script>
5. コンポーネントを追加します。
@rendermode InteractiveServer
<SfSmartRichTextEditor>
<h2>Welcome to Smart Rich Text Editor</h2>
<p>Select text and use the Smart Action toolbar, or press Alt+Enter to open the AI Query dialog.</p>
<AssistViewSettings Placeholder="Ask AI to rewrite or generate content." />
</SfSmartRichTextEditor>
ナビゲーションガイド
はじめにと AI サービスのセットアップ
📄 参照: references/getting-started.md
- NuGet のインストール:
Syncfusion.Blazor.SmartRichTextEditor+Syncfusion.Blazor.Themes - Blazor Server App(Visual Studio と VS Code)および Blazor Web App(.NET 8+)の完全なセットアップ
Program.csでの OpenAI、Azure OpenAI、Ollama、カスタムIChatClientの設定- Web App の
AddInteractiveServerComponents()登録パターン - CSS テーマと JS スクリプトの参照(.NET 6 から .NET 10 まで)
AssistViewSettingsを使用したコンポーネントの追加- コンテンツ取得メソッド(
GetTextAsync、GetCharCountAsync) - よくあるセットアップの問題と解決方法
AI バックエンドの設定
📄 参照: references/ai-backends.md
- OpenAI:API キー、サポート対象モデル(
gpt-4-turbo、gpt-4、gpt-3.5-turbo)、OpenAIClientのセットアップ、環境変数と User Secrets - Azure OpenAI:リソースのデプロイ、
AzureOpenAIClient+ApiKeyCredential、appsettings.jsonの設定、マネージド ID(本番環境で推奨)、HIPAA/SOC 2 準拠、監視、コストの最適化 - Ollama:ローカルモデルのインストール(
mistral、llama2)、OllamaApiClient+OllamaSharpNuGet、Docker Compose、GPU アクセラレーション、モデルの推奨 - カスタム
IChatClient:社内または独自の AI 向けのIChatClient実装、Program.csでの登録、ストリーミング応答、再試行ロジック、エラー処理、企業向け AI API の例
AssistViewSettings — プロパティ
📄 参照: references/assist-view-settings.md
Commands(List<AICommands>): ネストされたサブコマンドとアイコン CSS を含むスマートアクションのドロップダウンPopupMaxHeight/PopupWidth:ポップアップのサイズを制御します(CSS 値またはピクセル数)Placeholder:AI プロンプト入力欄のプレースホルダーテキストPrompts(List<AssistViewPrompt>):ポップアップに読み込まれる定義済みのプロンプト/応答テンプレートSuggestions(List<string>):AI ポップアップに表示されるクイック提案チップMaxPromptHistory:保持する会話エントリの最大数(デフォルト:20)BannerTemplate:AI ポップアップのカスタムブランド設定/ヘッダー用RenderFragmentHeaderToolbarSettings/PromptToolbarSettings/ResponseToolbarSettings:AssistViewToolbarItemを使用したツールバーのカスタマイズ
AssistViewSettings — イベント
📄 参照: references/ai-events.md
AIPromptRequested(AssistViewPromptRequestedEventArgs):AI 呼び出しの前にプロンプトをインターセプト/変更します。Cancel=trueを設定すると実行を防止できます。Response、PromptSuggestions、ResponseToolbarItemsを変更できますAIResponseStopped(ResponseStoppedEventArgs):ユーザーが「応答を停止」をクリックしたときに発生します。DataIndexとPromptを提供しますAIToolbarItemClicked(AssistViewToolbarItemClickedEventArgs):カスタムツールバーボタンのクリックを処理します。Item、DataIndex、Eventにアクセスでき、Cancel=trueを設定できますAIPopupOpening(BeforeOpenEventArgs):args.Cancel = trueでポップアップの表示をキャンセルできます。Element参照にアクセスできますAIPopupClosing(BeforeCloseEventArgs):ポップアップを閉じる操作をキャンセルできます。ClosedBy、IsInteracted、PreventFocusにアクセスできます
AssistViewSettings — メソッド
📄 参照: references/ai-methods.md
ShowAIPopupAsync():AI アシスタントのポップアップをプログラムから開きますHideAIPopupAsync():AI アシスタントのポップアップを閉じますExecuteAIPromptAsync(string prompt):プロンプトをプログラムから送信します(ユーザーが入力した場合と同様)UpdateAIResponseAsync(string response, bool isFinalUpdate):AI の応答をストリーミングまたは挿入します。isFinalUpdate=trueにすると「停止」ボタンが非表示になりますGetAIPromptHistoryAsync():保存されたすべてのプロンプト/応答をAssistViewPrompt[]として取得します(時系列順、MaxPromptHistoryで制限)ClearAIPromptHistoryAsync():すべての会話履歴をリセットします@refを使用して、6 つすべてのメソッドを組み合わせた完全な例
AI ポップアップの外観と CSS
📄 参照: references/ai-appearance.md
- AI ポップアップの CSS セレクター:
.e-rte-aiquery-dialog、.e-aiassistview - ポップアップの背景、境界線、ボックスシャドウのカスタマイズ
.e-view-header、.e-view-content .e-toolbar、.e-footerサブセクションを対象にした詳細な制御- ポップアップ全体のカスタムスタイル設定例
ツールバーの設定
📄 参照: references/toolbar.md
RichTextEditorToolbarSettings.Enableによるツールバーの有効化または無効化- ツールバーの種類:Expand、MultiRow、Scrollable、Popup
- フローティングツールバーとオフセットの設定
- ツールバーの位置(上または下)
ToolbarItemModelを使用したツールバー項目の設定- カスタムツールバー項目(テンプレートベース)
組み込みツールバー ツールのリファレンス
📄 参照: references/built-in-tools.md
SfSmartRichTextEditorのデフォルトのツールバー項目- AI 固有のツールバー項目 —
Name = "AI Commands"(スマートアクションのドロップダウン)とName = "AI Query"(AI に質問ボタン)。ToolbarCommand列挙型ではなく、Nameプロパティを使用する必要があります - すべての
ToolbarCommand列挙値の一覧 - テキストの書式設定、フォントとスタイル、配置、リスト、ハイパーリンク
SfSmartRichTextEditorを使用する画像/テーブル/リンクのクイックツールバー項目コマンド- 元に戻す/やり直し、全画面表示、印刷、ソースコード、プレビューツール
- デフォルトのツールバー項目の削除または並べ替え
テキストの書式設定
📄 参照: references/text-formatting.md
- 太字、斜体、下線、取り消し線、下付き文字、上付き文字、インラインコード
- テキストの配置(左揃え、中央揃え、右揃え、両端揃え)
- カスタムの番号・箇条書きスタイルを使った番号付きリスト/箇条書きリスト
- 見出しの書式(H1~H6、段落、引用、コード)
- 行の高さの設定
- 水平線、書式のコピー、書式のクリア
- Markdown の自動書式設定(インラインおよびブロックのショートカット)
画像、動画、音声
📄 参照: references/images-and-media.md
- ローカルマシンまたは URL から画像を挿入
RichTextEditorImageSettings:SaveUrl、Path、AllowedTypes、EnableResize- Base64 とサーバー側アップロード
- 画像のクイックツールバーの設定
- 動画と音声の挿入および設定
テーブル
📄 参照: references/tables.md
CreateTableツールバー項目を使ったテーブルの作成RichTextEditorTableSettings:幅、サイズ変更、カスタムスタイル- テーブルのクイックツールバー:行・列の追加/削除、セルの結合、プロパティ
- 高度なテーブル操作(セル選択、分割、カスタム罫線)
エディターモード
📄 参照: references/editor-modes.md
- HTML エディターモード(既定の WYSIWYG)
- Markdown エディターモード(
EditorMode.Markdown) - IFrame と DIV のレンダリングモード
- ソースコード表示の切り替え
インラインモード
📄 参照: references/inline-mode.md
- インラインツールバーの有効化(
InlineMode) - テキスト選択時にインラインツールバーを表示
- 使用例:コメントエディター、コンテンツのインプレース編集
カスタムツールと実行コマンド
📄 参照: references/custom-tools.md
ToolbarItemModelとテンプレートを使ったカスタムツールバーボタンの追加ExecuteCommandAsyncを使ったプログラムからのコマンド実行- スラッシュコマンド(
/でメニューを起動)の設定 - 書式コピーの詳細設定(
RichTextEditorFormatPainterSettings)
イベント(RTE)
📄 参照: references/events.md
RichTextEditorEvents子コンポーネントの使用方法とイベントの接続パターン- ライフサイクルイベント:
Created、Destroyed - フォーカス/操作:
Focus、Blur、OnToolbarClick、SelectionChanged - コンテンツイベント:
ValueChange、BeforePasteCleanup、AfterPasteCleanup - ツールバーのライフサイクル:
OnActionBegin、OnActionComplete - ダイアログイベント:
OnDialogOpen、DialogOpened、OnDialogClose、DialogClosed - クイックツールバー:
OnQuickToolbarOpen、QuickToolbarOpened、QuickToolbarClosed - 画像イベント:
OnImageSelected、BeforeUploadImage、OnImageUploadSuccess、OnImageUploadFailed、ImageUploadChange、OnImageDrop、ImageDelete - メディアイベント:
FileSelected、FileUploading、FileUploadSuccess、FileUploadFailed、FileUploadChange、OnMediaDrop、MediaDeleted - サイズ変更イベント:
OnResizeStart、OnResizeStop - ツールバーの状態:
UpdatedToolbarStatus - エクスポートイベント:
OnExport、OnExportFailure - スラッシュメニュー:
SlashMenuItemSelecting - すべてのプロパティを含む EventArgs クラスの完全なリファレンス
メソッド(RTE)
📄 参照: references/methods.md
- フォーカスと選択:
FocusAsync、FocusOutAsync、SaveSelectionAsync、RestoreSelectionAsync、SelectAllAsync、GetSelectionAsync - コンテンツの取得:
GetTextAsync、GetSelectedHtmlAsync、GetCharCountAsync、GetXhtmlAsync - コマンド実行:型付き引数を使用するすべての
ExecuteCommandAsyncオーバーロード(画像、リンク、テーブル、動画、音声、コードブロック、書式コピー) - ツールバーの制御:
EnableToolbarItem、DisableToolbarItem、RemoveToolbarItem - ダイアログと UI の制御:
ShowDialogAsync、CloseDialogAsync、ShowFullScreenAsync、PrintAsync、RefreshUIAsync、ShowSourceCodeAsync - 元に戻す/やり直し:
ClearUndoRedoAsync CommandName、ToolbarCommand、DialogTypeの各列挙型の完全なリファレンス
プロパティ(RTE)
📄 参照: references/properties.md
- コンテンツと値:
Value、Placeholder、Readonly、Enabled、MaxLength、ShowCharCount - エディターの動作:
EditorMode、EnterKey、ShiftEnterKey、EnableTabKey、EnableAutoUrl、EnableMarkdownAutoFormat、EnableClipboardCleanup、EnableXhtml、EnableHtmlEncode、EnableResize - 外観とレイアウト:
Height、Width、CssClass、ShowTooltip、FloatingToolbarOffset - IFrame モード:
Enable、Attributes、Resourcesを含む子コンポーネントRichTextEditorIFrameSettings - セキュリティとサニタイズ:
EnableHtmlSanitizer、AdditionalSanitizeAttributes、AdditionalSanitizeTags、DeniedSanitizeSelectors - キーボードとショートカット:デフォルトの
ShortcutKeysバインディング表全体を含むKeyConfigure - 永続化と自動保存:
EnablePersistence、SaveInterval、AutoSaveOnIdle - 元に戻す/やり直しの設定:
UndoRedoSteps、UndoRedoTimer - HTTP 統合:
HttpClientInstance - 38 個すべてのプロパティの概要表
データバインディングと値の管理
📄 参照: references/data-binding.md
@bind-Valueを使用した双方向バインディング- 一方向バインディングとプログラムによる値の更新
- 編集を検出するための
ValueChangeイベント - 読み取り専用モード(
Readonlyプロパティ) - 最大文字数の制限と文字数表示
貼り付け時のクリーンアップ
📄 参照: references/paste-and-cleanup.md
RichTextEditorPasteCleanupSettingsの設定- 貼り付け時に特定の HTML 属性やスタイルを削除/保持
- プレーンテキストとしての貼り付けを強制
- Enter キーの動作(
EnterKey、ShiftEnterKey) - 元に戻す/やり直しマネージャーの設定
インポートとエクスポート
📄 参照: references/import-export.md
- Word 文書をエディターにインポート
- コンテンツを Word(.docx)および PDF にエクスポート
- インポート/エクスポートサービス用の HTTP クライアント設定
- 動的データを使用したメールマージ
- 大きな文書向けの WebAssembly パフォーマンス最適化
アクセシビリティとグローバリゼーション
📄 参照: references/accessibility-globalization.md
- WCAG 2.1 準拠の詳細
- キーボードショートカットとナビゲーションのリファレンス
- ARIA ロールとスクリーンリーダーのサポート
- RTL レイアウト(
EnableRtl) - ローカライズとカルチャの設定
- XHTML 検証
よくあるパターン
AI を搭載した基本的な Smart Rich Text Editor
@rendermode InteractiveServer
@using Syncfusion.Blazor.SmartRichTextEditor
<SfSmartRichTextEditor @bind-Value="@Content">
<AssistViewSettings Placeholder="Ask AI to rewrite or generate content." />
</SfSmartRichTextEditor>
@code {
private string Content { get; set; } = "<p>Start editing...</p>";
}
カスタム Smart Action コマンドを使用した AI
<SfSmartRichTextEditor>
<AssistViewSettings Commands="@MyCommands" Suggestions="@QuickSuggestions" />
</SfSmartRichTextEditor>
@code {
private List<AICommands> MyCommands = new()
{
new AICommands { Text = "Summarize", Prompt = "Summarize this content concisely" },
new AICommands { Text = "Expand", Prompt = "Add more details and examples" },
new AICommands
{
Text = "Translate",
Items = new List<AICommands>
{
new AICommands { Text = "To French", Prompt = "Translate to French" },
new AICommands { Text = "To Spanish", Prompt = "Translate to Spanish" }
}
}
};
private List<string> QuickSuggestions = new()
{
"Fix grammar", "Make shorter", "More formal", "Simplify"
};
}
AI ポップアップのプログラムによる制御
<SfSmartRichTextEditor>
<AssistViewSettings @ref="AssistViewRef" MaxPromptHistory="10" />
</SfSmartRichTextEditor>
<button @onclick="OpenAI">Open AI</button>
<button @onclick="RunPrompt">Run Prompt</button>
@code {
private AssistViewSettings AssistViewRef;
private async Task OpenAI() =>
await AssistViewRef.ShowAIPopupAsync();
private async Task RunPrompt() =>
await AssistViewRef.ExecuteAIPromptAsync("Improve the clarity of this text");
}
文字数表示付きの双方向バインディングエディター
<SfSmartRichTextEditor @bind-Value="@HtmlContent" ShowCharCount="true" MaxLength="2000">
<AssistViewSettings Placeholder="Ask AI for writing help." />
</SfSmartRichTextEditor>
@code {
private string HtmlContent { get; set; } = string.Empty;
}
読み取り専用表示
<SfSmartRichTextEditor Value="@HtmlContent" Readonly="true">
<RichTextEditorToolbarSettings Enable="false" />
</SfSmartRichTextEditor>
Markdown エディターモード
<SfSmartRichTextEditor EditorMode="EditorMode.Markdown" @bind-Value="@MarkdownContent">
<AssistViewSettings Placeholder="Ask AI to help with your Markdown content." />
</SfSmartRichTextEditor>
@code {
private string MarkdownContent { get; set; } = "**Hello** world!";
}
リクエストをインターセプトするための AI プロンプトイベントの処理
<SfSmartRichTextEditor>
<AssistViewSettings AIPromptRequested="OnAIPrompt" />
</SfSmartRichTextEditor>
@code {
private async Task OnAIPrompt(AssistViewPromptRequestedEventArgs args)
{
// Log, validate, or modify args.Prompt before it is sent to AI
Console.WriteLine($"Prompt: {args.Prompt}");
// To cancel: args.Cancel = true;
}
}