From bd2c17745536288444c8927cff8c40a22b085538 Mon Sep 17 00:00:00 2001 From: Build Automaion Date: Wed, 15 Oct 2025 09:45:42 +0530 Subject: [PATCH 01/16] Integrated latest changes at 10-15-2025 7:30:14 AM --- ej2-vue/Release-notes/31.2.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ej2-vue/Release-notes/31.2.2.md b/ej2-vue/Release-notes/31.2.2.md index f69756da3..a13b6d518 100644 --- a/ej2-vue/Release-notes/31.2.2.md +++ b/ej2-vue/Release-notes/31.2.2.md @@ -7,7 +7,7 @@ documentation: ug # Essential Studio for Vue - v31.2.2 Release Notes -{% include release-info.html date="October 14, 2025" version="v31.2.2" passed="63079" failed="0" %} +{% include release-info.html date="October 15, 2025" version="v31.2.2" passed="63079" failed="0" %} {% directory path: _includes/release-notes/v31.2.2 %} From 6a3cf17f6c0e0747e1c268228052627c9638fb9e Mon Sep 17 00:00:00 2001 From: Build Automaion Date: Thu, 16 Oct 2025 09:47:46 +0530 Subject: [PATCH 02/16] Integrated latest changes at 10-16-2025 7:30:45 AM --- ej2-vue-toc.html | 6 +- .../ai-integrations/gemini-integration.md | 59 ++++++++---------- .../ai-integrations/ollama-llm-integration.md | 52 +++++++--------- .../ai-integrations/openai-integration.md | 60 ++++++++----------- .../integration-with-bot-framework.md | 32 +++++----- .../integration-with-dialogflow.md | 34 +++++------ .../open-ai/app-composition.vue | 1 - .../file-manager/flat-data-cs1/app.vue | 6 +- 8 files changed, 107 insertions(+), 143 deletions(-) diff --git a/ej2-vue-toc.html b/ej2-vue-toc.html index 0b21825a8..27e073285 100644 --- a/ej2-vue-toc.html +++ b/ej2-vue-toc.html @@ -176,7 +176,7 @@ Google Gemini
  • - Azure Open AI + Azure OpenAI
  • Ollama LLM @@ -571,10 +571,10 @@
  • Chat Bot Integrations
  • diff --git a/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md b/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md index 52d07bc54..91c321e1d 100644 --- a/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md +++ b/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md @@ -8,58 +8,63 @@ documentation: ug domainurl: ##DomainURL## --- +# Integrate Gemini AI with Vue AI AssistView component -# Gemini AI with Vue AI AssistView component +The AI AssistView component integrates with Google’s [Gemini](https://ai.google.dev/gemini-api/docs) API to deliver intelligent conversational interfaces. It leverages advanced natural language understanding to interpret user input, maintain context throughout interactions, and provide accurate, relevant responses. By configuring secure authentication and data handling, developers can unlock powerful AI-driven communication features that elevate user engagement and streamline support experiences. -The Syncfusion AI AssistView supports integration with [Gemini](https://ai.google.dev/gemini-api/docs), enabling advanced conversational AI features in your Vue applications. +## Prerequisites -## Getting Started with the AI AssistView component +* **Node.js**: Version 16 or higher with npm. -Before integrating Gemini AI, ensure that the Syncfusion AI AssistView component is correctly rendered in your Vue app: +* **Google Account**: For generating a Gemini API key. -[Vue Getting Started Guide](../getting-started) +* **Syncfusion AI AssistView**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed. -## Prerequisites +* **Marked Library**: For parsing Markdown responses (`npm install marked --save`). -* Requires `Node.js` (v16 or higher) and `npm`. -* Google account to generate API key on accessing [Gemini](https://ai.google.dev/gemini-api/docs). -* Syncfusion AI AssistView for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your project. +## Set Up the Vue Environment + +Follow the Syncfusion AI AssistView [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your Vue application. ## Install Dependencies -Install the Syncfusion AI AssistView in your project +Install the required packages: + +1. Google Generative AI SDK: -```bash +```bash -npm install @syncfusion/ej2-vue-interactive-chat --save +npm install @google/generative-ai ``` -Install the Gemini AI dependencies +2. Marked Library: ```bash -npm install @google/generative-ai +npm install marked --save ``` ## Generate API Key -1. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and sign in with your google account. If you don’t have one, create a new account. +1. **Access Google AI Studio**: Instructs users to sign into [Google AI Studio](https://aistudio.google.com/app/apikey) with a Google account or create a new account if needed. -2. Once logged in, click on `Get API Key` from the left-hand menu or the top-right corner of the dashboard. +2. **Navigate to API Key Creation**: Go to the `Get API Key` option in the left-hand menu or top-right corner of the dashboard. Click the `Create API Key` button. -3. Click the `Create API Key` button. You’ll be prompted to either select an existing Google Cloud project or create a new one. Choose the appropriate option and proceed. +3. **Project Selection**: Choose an existing Google Cloud project or create a new one. -4. After selecting or creating a project, your API key will be generated and displayed. Copy the key and store it securely, as it will only be shown once. +4. **API Key Generation**: After project selection, the API key is generated. Users are instructed to copy and store the key securely, as it is shown only once. -> `Security Note`: Never commit the API key to version control. Use environment variables or a secret manager for production. +> `Security Note`: Advises against committing the API key to version control and recommends using environment variables or a secret manager in production. ## Configure Gemini AI with AI AssistView -Create `src/App.Vue` to integrate the Gemini AI with AI AssistView component +To integrate Gemini AI with the Syncfusion AI AssistView component in your application: + +* Modify the `src/App.Vue` file to host the integration logic. -* Add your generated `API Key` at the line +* Add your Gemini API key securely in the configuration: ```bash @@ -77,15 +82,3 @@ const geminiApiKey = 'Place your API key here'; {% endtabs %} {% previewsample "page.domainurl/code-snippet/ai-assistview/ai-integrations/gemini-ai" %} - -## Run and Test - -Run the application in the browser using the following command. - -```bash - -npm run dev - -``` - -Open the hosted link to interact with the Gemini AI for dynamic response diff --git a/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md b/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md index c94687b0f..d961cdeb5 100644 --- a/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md +++ b/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md @@ -8,31 +8,33 @@ documentation: ug domainurl: ##DomainURL## --- -# LLM via Ollama with Vue AI AssistView component +# Integrate LLM via Ollama with Vue AI AssistView component -The Syncfusion AI AssistView supports integration with [LLM via Ollama](https://ollama.com), enabling advanced conversational AI features in your applications. The component acts as a UI for a support bot, where user prompts are sent to the selected AI service via API calls. +The AI AssistView component integrates with [LLM via Ollama](https://ollama.com) to enable advanced conversational AI features in your Vue application. The component acts as a user interface where user prompts are sent to the selected LLM model via API calls, providing natural language understanding and context-aware responses. ## Prerequisites -* Requires `Node.js` (v16 or higher) and `npm`. -* [Ollama](https://ollama.com) application should be installed to run and manage LLM models locally. -* Syncfusion AI AssistView for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your react project. +Before starting, ensure you have the following: -## Step 1: Getting Started with the AI AssistView component +* **Node.js**: Version 16 or higher with npm. -Before integrating LLM model, ensure that the Syncfusion AI AssistView component is correctly rendered in your application: +* [Ollama](https://ollama.com) installed to run and manage LLM models locally. -[ Vue Getting Started Guide](../getting-started) +* **Syncfusion AI AssistView**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed. -## Step 2: Install Dependencies +* **Marked Library**: For parsing Markdown responses (`npm install marked --save`). -* Install the Syncfusion AI AssistView in your project +## Set Up the Vue Environment -```bash +Follow the Syncfusion AI AssistView [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application. -npm install @syncfusion/ej2-vue-interactive-chat --save +## Install Dependency -``` +To install the marked library, run `npm install marked --save` in your project directory to add it as a dependency in your package.json file. + +## Configuring Ollama + +Install Ollama for your operating system: * Download and install `Ollama` based on your operating system: @@ -45,7 +47,7 @@ npm install @syncfusion/ej2-vue-interactive-chat --save {% endhighlight %} -{% highlight ts tabtitle="MAC" %} +{% highlight ts tabtitle="macOS" %} 1. Visit [macOS](https://ollama.com/download/mac) 2. Click `Download for macOS` to get `.dmg file` @@ -67,9 +69,9 @@ curl -fSSL https://ollama.com/install.sh | sh {% endhighlight %} {% endtabs %} -## Step 3: Install and Run an Ollama Model +## Download and run an Ollama model -1. Download and run a model using the following command. Replace with your preferred model (e.g., `llama3`, `phi4`). See the [Ollama model](https://ollama.com/search) library for available models +1. Download and run a model using the following command. Replace with your preferred model (e.g., `llama3`, `phi4`). See the [Ollama model](https://ollama.com/search) library for available models. ```bash @@ -77,7 +79,7 @@ ollama run deepseek-r1 ``` -2. Once the model download is complete, start the Ollama server to make the model accessible: +2. After the model download completes, start the Ollama server to make the model accessible: ```bash @@ -85,9 +87,9 @@ ollama serve ``` -## Step 4: Configure AI AssistView in React +## Configure AI AssistView with Ollama -Create `src/App.js` to connect the Syncfusion AI AssistView to the LLM model: +Modify the `src/App.js` file to connect the Syncfusion AI AssistView to the LLM model: {% tabs %} {% highlight html tabtitle="Composition API (~/src/App.vue)" %} @@ -99,15 +101,3 @@ Create `src/App.js` to connect the Syncfusion AI AssistView to the LLM model: {% endtabs %} {% previewsample "page.domainurl/code-snippet/ai-assistview/ai-integrations/llm-model" %} - -## Step 5: Run and Test - -Run the application in the browser using the following command. - -```bash - -npm run dev - -``` - -Open the hosted link to interact with your AI model where you can enter prompts and receive responses from the Ollama model. \ No newline at end of file diff --git a/ej2-vue/ai-assistview/ai-integrations/openai-integration.md b/ej2-vue/ai-assistview/ai-integrations/openai-integration.md index 57bf1f9e5..8e9980098 100644 --- a/ej2-vue/ai-assistview/ai-integrations/openai-integration.md +++ b/ej2-vue/ai-assistview/ai-integrations/openai-integration.md @@ -1,56 +1,56 @@ --- layout: post -title: Azure Open AI With Vue AI AssistView component | Syncfusion -description: Checkout and learn about Integration of Azure Open AI With Vue AI AssistView component of Syncfusion Essential JS 2 and more details. +title: Azure OpenAI With Vue AI AssistView component | Syncfusion +description: Checkout and learn about Integration of Azure OpenAI With Vue AI AssistView component of Syncfusion Essential JS 2 and more details. platform: ej2-vue control: AI AssistView documentation: ug domainurl: ##DomainURL## --- -# Azure Open AI with Vue AI AssistView component +# Integrate Azure OpenAI with Vue AI AssistView component -The Syncfusion AI AssistView supports integration with [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai), enabling advanced conversational AI features in your Vue applications. +The AI AssistView component integrates with [Azure OpenAI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai) to enable advanced conversational AI features in your applications. The component acts as a user interface, where user prompts are sent to the Azure OpenAI service via API calls, providing natural language understanding and context-aware responses. -## Getting Started with the AI AssistView component - -Before integrating Azure Open AI, ensure that the Syncfusion AI AssistView component is correctly rendered in your Vue app: +## Prerequisites -[Vue Getting Started Guide](../getting-started) +* **Node.js**: Version 16 or higher with npm. -## Prerequisites +* **Azure Account**: With access to Azure OpenAI services and a generated API key. -* Requires `Node.js` (v16 or higher) and `npm`. -* An Azure account with access to [Azure Open AI](https://microsoft.github.io/PartnerResources/skilling/ai-ml-academy/resources/openai) services and a generated API key.I -* Syncfusion AI AssistView for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your project. +* **Syncfusion AI AssistView**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed. -## Install Dependencies +* **Marked Library**: For parsing Markdown responses (`npm install marked --save`). -Install the Syncfusion AI AssistView in your project +## Set Up the vue Environment -```bash +Follow the Syncfusion AI AssistView [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application. -npm install @syncfusion/ej2-vue-interactive-chat --save +## Install Dependency -``` +To install the marked library, run `npm install marked --save` in your project directory to add it as a dependency in your package.json file. -## Generate Azure API Key +## Configure Azure OpenAI -1. Log in to the [Azure Portal](https://portal.azure.com/#home) and navigate to your Azure Open AI resource. +1. Log in to the [Azure Portal](https://portal.azure.com/#home) and navigate to your Azure OpenAI resource. -2. Under Resource Management, select Keys and Endpoint to retrieve your API key and endpoint URL. +2. Under resource Management, select keys and endpoint to retrieve your API key and endpoint URL. -3. Copy the API key, endpoint, and deployment name (e.g., gpt-4o-mini). Ensure the API version matches your resource configuration. +3. Note the following values: + - API key + - Endpoint + - API version (must be supported by your resource) + - Deployment name (for example, gpt-4o-mini) 4. Store these values securely, as they will be used in your application. > `Security Note`: Never expose your API key in client-side code for production applications. Use a server-side proxy or environment variables to manage sensitive information securely. -## Configure Open AI with AI AssistView +## Configure OpenAI with AI AssistView -Create `src/App.js` to integrate the Azure Open AI with AI AssistView component +Modify the `src/App.js` file to integrate the Azure OpenAI with AI AssistView component -* Update the following configuration values with your Azure Open AI details: +* Update the following configuration values with Azure OpenAI details: ```bash @@ -71,15 +71,3 @@ const azureDeploymentName = 'Your_Deployment_Name'; {% endtabs %} {% previewsample "page.domainurl/code-snippet/ai-assistview/ai-integrations/open-ai" %} - -## Run and Test - -Run the application in the browser using the following command. - -```bash - -npm run dev - -``` - -Open the hosted link to interact with your Azure Open AI for dynamic response. diff --git a/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md b/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md index a7a3cb0c6..011dc9fb5 100644 --- a/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md +++ b/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md @@ -8,34 +8,30 @@ documentation: ug domainurl: ##DomainURL## --- -# Microsoft Bot Framework with Vue Chat UI component +# Integrate Microsoft Bot Framework with Vue Chat UI component -The Syncfusion vue Chat UI supports integration with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring the bot in Azure, and integrating the Syncfusion Chat UI in a vue application. +The Chat UI component integrates seamlessly with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring Direct Line in Azure, and integrating the Chat UI in the application. -## Getting Started with the Chat UI Component - -Before integrating Microsoft Bot Framework, ensure that the Syncfusion Chat UI component is correctly rendered in your vue app: +## Prerequisites -[Vue Getting Started Guide](../getting-started) +Before starting, ensure you have the following: -## Prerequisites +* **Node.js**: Version 16 or higher with npm. * [Microsoft Azure Account](https://portal.azure.com/#home): Required to create and host the bot. -* Node.js Environment: The backend portion requires Node.js and npm. -* Syncfusion Chat UI for Vue: Install `@syncfusion/ej2-vue-interactive-chat` in your Vue project. -* Deployed Azure Bot: A bot should be created and published using the Bot Framework, which is accessible via an Azure App Service. Refer to Microsoft's Bot Creation Guide. + +* **Syncfusion Chat UI**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed. + +* **Deployed Azure Bot**: A bot should be created and published using the [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0), which is accessible via an Azure App Service. Refer to Microsoft's Bot Creation Guide. ## Install Dependencies -* Install `frontend` dependencies for bot communication and the Syncfusion Chat UI: +Install the required packages: - * Install `directline-js` package to handle communication with the Bot Framework. - - * Install `axios` for the HTTP requests. +* Install `frontend` dependencies for bot communication and the Syncfusion Chat UI: ```bash -npm install @syncfusion/ej2-vue-interactive-chat --save npm install directline-js axios --save ``` @@ -112,7 +108,7 @@ app.listen(port, () => console.log(`Token server running on http://localhost:${p ## Configure ChatUI -Create `src/App.vue` to connect the Syncfusion Chat UI to the bot via the direct line API: +Modify the `src/App.vue` file to connect the Syncfusion Chat UI to the bot via the direct line API: {% tabs %} {% highlight html tabtitle="Options API (~/src/App.vue)" %} @@ -209,14 +205,14 @@ const messageSend = (args) => { ### Start the Token Server -Navigate to the token-server folder and run the following command to start the server: +Navigate to the `token-server` folder and run the following command to start the server: ```bash node index.js ``` -## Start the Vue frontend +### Start the Vue frontend In a separate terminal window, navigate to your Vue project folder and start the development server: diff --git a/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md b/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md index 5f6dddc29..77ce5de71 100644 --- a/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md +++ b/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md @@ -8,46 +8,41 @@ documentation: ug domainurl: ##DomainURL## --- -# Google Dialogflow With Vue Chat UI component +# Integrate Google Dialogflow With Vue Chat UI component -The Syncfusion Chat UI supports integration with Google Dialogflow, enabling advanced conversational AI features in your Vue applications. +The Chat UI component integrates with [Google Dialogflow](https://cloud.google.com/dialogflow/docs) to enable advanced conversational AI features in your vue applications. The component acts as a user interface for a support bot, where user prompts are sent to the Dialogflow service via API calls, providing natural language understanding and context-aware responses. -## Getting Started With the ChatUI Component +## Prerequisites -Before integrating Dialogflow, ensure that the Syncfusion Chat UI component is correctly rendered in your Vue app: +* **Node.js**: Version 16 or higher with npm. -[Vue Getting Started Guide](../getting-started) +* **Google Account**: To access [Google Dialogflow](https://cloud.google.com/dialogflow/docs) and [Google Cloud Console](https://console.cloud.google.com/). -## Prerequisites +* **Syncfusion Chat UI**: Package [@syncfusion/ej2-vue-interactive-chat](https://www.npmjs.com/package/@syncfusion/ej2-vue-interactive-chat) installed. -* Google account to access [Google Dialogflow](https://cloud.google.com/dialogflow/docs) and [Google Cloud Console](https://console.cloud.google.com/). -* Backend requires `Node.js` (v16 or higher) and `npm`. -* Syncfusion Chat UI for Vue `@syncfusion/ej2-vue-interactive-chat` installed in your Vue project. * Dialogflow Service Account with the `Dialogflow API Client` role and its JSON key file. -## Install Dependencies +## Set Up the vue Environment -* Install `backend` dependencies for Dialogflow and server setup: +Follow the Syncfusion Chat UI [Getting Started](../getting-started) guide to configure and render the Chat UI component in your vue application. -```bash +## Install Dependency -npm install express body-parser dialogflow cors - -``` -* Install the Syncfusion Chat UI in your Vue project: +`Backend` dependencies for Dialogflow and server setup: ```bash -npm install @syncfusion/ej2-vue-interactive-chat --save +npm install express body-parser dialogflow cors ``` + ## Set Up the Dialogflow Agent 1. In the dialogflow console, create an [agent](https://cloud.google.com/agent-assist/docs), set a name (e.g., `MyChatBot`), and configure the default language (e.g., English - `en`). 2. Add intents with training phrases and responses (e.g., greetings, FAQs). Test using the dialogflow simulator. -3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a Service Account with the dialogflow API client role, and download the JSON key file. +3. In the Google Cloud Console, go to `APIs & Services` > `Credentials`, create a service account with the dialogflow API client role, and download the JSON key file. > `Security Note`: Never commit the JSON key file to version control. Use environment variables or a secret manager (e.g., Google Cloud Secret Manager) for production. @@ -122,6 +117,7 @@ app.listen(5000, () => console.log('Backend running on http://localhost:5000')); > Use a unique `sessionId` (e.g., UUID) for each user to maintain conversation context. ## Configure message send + Use the Chat UI `messageSend` event to exchanges message. Each time a user sends a message, this event will be invoked with details of the sent message. ### Forward Message to backend: @@ -130,7 +126,7 @@ Upon message submission, a POST request is sent to your backend API endpoint (`/ ### Displaying Bot response: -Create `src/App.vue` to integrate the Syncfusion Chat UI with the dialogflow backend: +Modify the `src/App.vue` file to integrate the Syncfusion Chat UI with the dialogflow backend: {% tabs %} {% highlight html tabtitle="Options API (~/src/App.vue)" %} diff --git a/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue b/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue index 07e5e858c..2046bb026 100644 --- a/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue +++ b/ej2-vue/code-snippet/ai-assistview/ai-integrations/open-ai/app-composition.vue @@ -21,7 +21,6 @@ + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/chat-ui/stt/app.vue b/ej2-vue/code-snippet/chat-ui/stt/app.vue new file mode 100644 index 000000000..cb756458a --- /dev/null +++ b/ej2-vue/code-snippet/chat-ui/stt/app.vue @@ -0,0 +1,200 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/chat-ui/stt/index.css b/ej2-vue/code-snippet/chat-ui/stt/index.css new file mode 100644 index 000000000..88ae03492 --- /dev/null +++ b/ej2-vue/code-snippet/chat-ui/stt/index.css @@ -0,0 +1,74 @@ +.integration-speechtotext-section { + height: 350px; + width: 650px; + margin: 0 auto; +} + +.integration-speechtotext-section .e-view-container { + margin: auto; +} +.integration-speechtotext-section .e-banner-view { + margin-left: 0; +} +.integration-speechtotext-section .banner-content .e-listen-icon:before { + font-size: 25px; +} + +.integration-speechtotext-section .banner-content { + display: flex; + flex-direction: column; + gap: 10px; + text-align: center; +} + +.integration-speechtotext-section #assistview-sendButton { + width: 40px; + height: 40px; + font-size: 20px; + border: none; + background: none; + cursor: pointer; +} + +.integration-speechtotext-section #speechToText.visible, +.integration-speechtotext-section #assistview-sendButton.visible { + display: inline-block; +} + +.integration-speechtotext-section #speechToText, +.integration-speechtotext-section #assistview-sendButton { + display: none; +} + +@media only screen and (max-width: 750px) { + .integration-speechtotext-section { + width: 100%; + } +} + +.integration-speechtotext-section .e-footer-wrapper { + display: flex; + border: 1px solid #c1c1c1; + padding: 5px 5px 5px 10px; + margin: 5px 5px 0 5px; + border-radius: 30px; +} + +.integration-speechtotext-section .content-editor { + width: 100%; + overflow-y: auto; + font-size: 14px; + min-height: 25px; + max-height: 200px; + padding: 10px; +} + +.integration-speechtotext-section .content-editor[contentEditable='true']:empty:before { + content: attr(placeholder); + color: #6b7280; + font-style: italic; +} + +.integration-speechtotext-section .option-container { + align-self: flex-end; +} diff --git a/ej2-vue/code-snippet/chat-ui/stt/index.html b/ej2-vue/code-snippet/chat-ui/stt/index.html new file mode 100644 index 000000000..0d0e060ee --- /dev/null +++ b/ej2-vue/code-snippet/chat-ui/stt/index.html @@ -0,0 +1,22 @@ + + + + + + EJ2 Vue Sample + + + + + + + + + + + + +
    Loading....
    + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/chat-ui/stt/index.js b/ej2-vue/code-snippet/chat-ui/stt/index.js new file mode 100644 index 000000000..d0a03905b --- /dev/null +++ b/ej2-vue/code-snippet/chat-ui/stt/index.js @@ -0,0 +1,127 @@ +import Vue from 'vue'; +import { ChatUIPlugin } from "@syncfusion/ej2-vue-interactive-chat"; +Vue.use(ChatUIPlugin); + +new Vue({ + el: '#app', + template: ` + +`, + + data: function () { + return { + currentUser: { + id: "user1", + user: "Albert" + }, + michaleUser: { + id: "user2", + user: "Michale Suyama" + } + }; + }, + mounted() { + // Defer initial toggleButtons call until after mount + this.$nextTick(() => { + this.toggleButtons(); + }); + }, + methods: { + // Updates the footer input with the latest speech transcript + onTranscriptChange(args) { + this.$refs.chatUIFooter.innerText = args.transcript; + }, + // Toggles button visibility when speech-to-text listening stops + onListeningStop() { + this.toggleButtons(); + }, + // Initializes button visibility when the speech-to-text component is created + created() { + this.toggleButtons(); + }, + // Handles Enter key press in the input to send the prompt without Shift + handleEvent(e) { + if (e.key === 'Enter' && !e.shiftKey) { + this.sendIconClicked(); + e.preventDefault(); + } + }, + // Toggles visibility of send and speech buttons based on whether the input has text + toggleButtons() { + const chatUIFooter = this.$refs.chatUIFooter; + const sendButton = this.$refs.chatUISendButton?.$el; + const speechButton = this.$refs.speechToTextObj?.$el; + if (!chatUIFooter || !sendButton || !speechButton) { + return; + } + const hasText = chatUIFooter.innerText.trim() !== ''; + sendButton.classList.toggle('visible', hasText); + speechButton.classList.toggle('visible', !hasText); + if ( + !hasText && + (chatUIFooter.innerHTML === '
    ' || + chatUIFooter.innerHTML.trim() === '') + ) { + chatUIFooter.innerHTML = ''; + } + }, + // Executes the current prompt from the footer input and clears it + sendIconClicked() { + const editor = this.$refs.chatUIFooter; + const messageContent = editor?.innerText || ''; + if (messageContent.trim()) { + this.$refs.chatUIInstance.addMessage({ + author: this.currentUserModel, + text: messageContent + }); + editor.innerText = ''; + this.toggleButtons(); + } + } + }, +}); \ No newline at end of file diff --git a/ej2-vue/code-snippet/chat-ui/stt/systemjs.config.js b/ej2-vue/code-snippet/chat-ui/stt/systemjs.config.js new file mode 100644 index 000000000..ddac8ee2e --- /dev/null +++ b/ej2-vue/code-snippet/chat-ui/stt/systemjs.config.js @@ -0,0 +1,39 @@ +System.config({ + transpiler: "typescript", + typescriptOptions: { + compilerOptions: { + target: "umd", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/" + }, + map: { + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", + vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-interactive-chat": "syncfusion:ej2-interactive-chat/dist/ej2-interactive-chat.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-notifications": "syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js", + "@syncfusion/ej2-vue-interactive-chat": "syncfusion:ej2-vue-interactive-chat/dist/ej2-vue-interactive-chat.umd.min.js", + "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js", + "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js", + "@syncfusion/ej2-vue-notifications": "syncfusion:ej2-vue-notifications/dist/ej2-vue-notifications.umd.min.js", + "marked": "https://cdn.jsdelivr.net/npm/marked/marked.min.js", + "@google/generative-ai": "https://cdn.jsdelivr.net/npm/@google/generative-ai@0.24.1/dist/index.min.js" + } +}); + +System.import('index.js'); From ead2612d58f0feb7178840a05084e50538199ecd Mon Sep 17 00:00:00 2001 From: Build Automaion Date: Tue, 28 Oct 2025 07:51:38 +0530 Subject: [PATCH 06/16] Integrated latest changes at 10-28-2025 7:30:05 AM --- ej2-vue-toc.html | 1 + ...d-appearance-for-file-manager-component.md | 206 ++++++++++++++++++ .../file-manager/images/customize_dialog.png | Bin 0 -> 42531 bytes .../file-manager/images/customize_layout.png | Bin 0 -> 47268 bytes .../images/customize_navigation_pane.png | Bin 0 -> 48557 bytes .../images/customize_selected_file.png | Bin 0 -> 37233 bytes .../images/customize_thumbnail.png | Bin 0 -> 19278 bytes .../file-manager/images/customize_toolbar.png | Bin 0 -> 37776 bytes 8 files changed, 207 insertions(+) create mode 100644 ej2-vue/file-manager/add-style-and-appearance-for-file-manager-component.md create mode 100644 ej2-vue/file-manager/images/customize_dialog.png create mode 100644 ej2-vue/file-manager/images/customize_layout.png create mode 100644 ej2-vue/file-manager/images/customize_navigation_pane.png create mode 100644 ej2-vue/file-manager/images/customize_selected_file.png create mode 100644 ej2-vue/file-manager/images/customize_thumbnail.png create mode 100644 ej2-vue/file-manager/images/customize_toolbar.png diff --git a/ej2-vue-toc.html b/ej2-vue-toc.html index 0d45536e2..b2a5d0a58 100644 --- a/ej2-vue-toc.html +++ b/ej2-vue-toc.html @@ -1122,6 +1122,7 @@
  • Localization
  • Accessibility
  • Upload
  • +
  • Style and Appearance
  • How To
    • Adding Custom Item To Context Menu
    • diff --git a/ej2-vue/file-manager/add-style-and-appearance-for-file-manager-component.md b/ej2-vue/file-manager/add-style-and-appearance-for-file-manager-component.md new file mode 100644 index 000000000..0404a829d --- /dev/null +++ b/ej2-vue/file-manager/add-style-and-appearance-for-file-manager-component.md @@ -0,0 +1,206 @@ +--- +layout: post +title: Style Customize in Vue File Manager control | Syncfusion +description: Learn here all about How to add style and appearance in Vue File Manager control of Syncfusion Essential JS 2 and more. +platform: ej2-vue +control: File Manager +documentation: ug +domainurl: ##DomainURL## +--- + +# How to customize style and appearance in Vue File Manager + +The following content provides the exact CSS structure that can be used to modify the control's appearance based on the user preference. + +## Customizing the File Manager navigation pane + +To customize the File Manager navigation pane, use the `.e-navigation` selector and apply styles. + +The following example shows customize the navigation pane for these sections. + +```css +.sample-container { + margin: 10px 10px 10px 10px; +} + +/* + Set background color for the File Manager navigation pane */ +.e-filemanager .e-navigation { + background: #3a0647; +} + +/* Highlight the active item in the TreeView inside the navigation pane */ +.e-filemanager .e-treeview .e-list-item.e-active > .e-fullrow { + background: #c3d3f9a1; +} + +/* Set text color for TreeView items in the navigation pane */ +.e-filemanager .e-treeview .e-list-text { + color: #fff; +} +``` + +![Vue File Manager Customization Navigation Pane](./images/customize_navigation_pane.png) + +## Customizing the File Manager layout + +To customize the File Manager layout, use the `.e-layout-content` selector and apply styles. + +```css + +.sample-container { + margin: 10px 10px 10px 10px; +} + +/* Style for breadcrumb (address bar) */ +.e-filemanager .e-layout-content .e-address { + background: #dee2e6; +} + +/* Customize the background for the Large Icons view */ +.e-filemanager .e-layout-content .e-large-icons { + background: #f8f9fa; +} + +/* Customize the background for the Details view table and content area */ +.e-filemanager .e-layout-content .e-grid .e-table, +.e-filemanager .e-grid .e-gridcontent .e-content { + background: #f8f9fa; +} + +``` + +![Vue File Manager Customization Layout](./images/customize_layout.png) + +## Customizing the File Manager thumbnail + +To customize the thumbnails in the File Manager, you can apply background-image styles to specific CSS selectors that represent different file types, as listed in the table below. + +|File Type|CSS Selector| +|----|----| +|Image|.e-fe-image| +|Music|.e-fe-music| +|Excel|.e-fe-xlsx| +|Video|.e-fe-video| +|PowerPoint|.e-fe-pptx| +|RAR|.e-fe-rar| +|ZIP|.e-fe-zip| +|Text|.e-fe-txt| +|JavaScript|.e-fe-js| +|CSS|.e-fe-css| +|HTML|.e-fe-html| +|Unknown|.e-fe-unknown| +|Executable|.e-fe-exe| +|MSI|.e-fe-msi| +|PHP|.e-fe-php| +|Word|.e-fe-doc| +|Word(docx)|.e-fe-docx| +|XML|.e-fe-xml| +|Folder|.e-fe-folder| + +The following example demonstrates how to customize the File Manager's thumbnail icon for folders: + +```css + +/* Applies to both Large Icons view and Details view in the File Manager */ + +.e-filemanager .e-large-icons .e-fe-folder, .e-filemanager .e-grid .e-fe-folder { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uc3Qwe2ZpbGw6I0ZGOTI5Mjt9LnN0MXtmaWxsOiNFODdFN0U7fS5zdDJ7ZmlsbDojRkZDM0MzO30uc3Qze2ZpbGw6IzkxRDRGRTt9LnN0NHtmaWxsOiM2M0E3RDM7fS5zdDV7ZmlsbDojQzFFN0ZGO30uc3Q2e2ZpbGw6I0ZGRkZGRjt9LnN0N3tmaWxsOiM4M0Q2Qjk7fS5zdDh7ZmlsbDojNDZDNjhDO30uc3Q5e2ZpbGw6I0JCRThEODt9LnN0MTB7ZmlsbDojRkVCMTdEO30uc3QxMXtmaWxsOiNERDk2NjY7fS5zdDEye2ZpbGw6I0ZFRDRCNzt9LnN0MTN7ZmlsbDojRjJBMkEyO30uc3QxNHtmaWxsOiNGMUM1QzU7fS5zdDE1e2ZpbGw6I0RCQjY2Mzt9LnN0MTZ7ZmlsbDojQ0VBMTUxO30uc3QxN3tmaWxsOiNFQkQ3QTk7fS5zdDE4e2ZpbGw6I0NFQ0VDRTt9LnN0MTl7ZmlsbDojQjdCN0I3O30uc3QyMHtmaWxsOiNFNEU0RTQ7fS5zdDIxe2ZpbGw6IzY1QUFEMTt9LnN0MjJ7ZmlsbDojRTU3QTdBO30uc3QyM3tmaWxsOiNFNkE2RTg7fS5zdDI0e2ZpbGw6I0Q2OEFENjt9LnN0MjV7ZmlsbDojRkZDQ0ZFO30uc3QyNntmaWxsOiM5OENFNUY7fS5zdDI3e2ZpbGw6IzhDQUYyQzt9LnN0Mjh7ZmlsbDojQzZFM0E3O30uc3QyOXtmaWxsOiNGRkI1Nzg7fS5zdDMwe2ZpbGw6I0VEOUY2NDt9LnN0MzF7ZmlsbDojRkZENkI1O30uc3QzMntmaWxsOiNGNEExRUY7fS5zdDMze2ZpbGw6I0REODdERDt9LnN0MzR7ZmlsbDojRjlDQkY2O30uc3QzNXtmaWxsOiNBOEEyRjQ7fS5zdDM2e2ZpbGw6Izg4ODVFODt9LnN0Mzd7ZmlsbDojQ0ZDQ0Y4O30uc3QzOHtmaWxsOiNCQ0JDQkM7fS5zdDM5e2ZpbGw6I0E4QThBODt9LnN0NDB7ZmlsbDojREFEQURBO30uc3Q0MXtmaWxsOiM3N0NDREI7fS5zdDQye2ZpbGw6IzREQkNDMTt9LnN0NDN7ZmlsbDojQjRFM0VCO30uc3Q0NHtmaWxsOiNGRkI3QTQ7fS5zdDQ1e2ZpbGw6I0Y2OUE3Qjt9LnN0NDZ7ZmlsbDojRkZEN0NEO30uc3Q0N3tmaWxsOiM3MUM4RjQ7fS5zdDQ4e2ZpbGw6IzhEQzk3Nzt9LnN0NDl7ZmlsbDojN0NBODUxO30uc3Q1MHtvcGFjaXR5OjAuNDU7ZmlsbDojRkZGRkZGO308L3N0eWxlPjxnPjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOS41LDI3LjVoLTI3Yy0xLjEsMC0yLTAuOS0yLTJ2LTE5YzAtMS4xLDAuOS0yLDItMmgxMC40bDMuNSwzLjFoMTMuMmMxLjEsMCwyLDAuOSwyLDJ2MTUuOUMzMS41LDI2LjYsMzAuNiwyNy41LDI5LjUsMjcuNXoiLz48cGF0aCBjbGFzcz0ic3Q0IiBkPSJNMjkuNSwyOGgtMjdDMS4xLDI4LDAsMjYuOSwwLDI1LjV2LTE5QzAsNS4xLDEuMSw0LDIuNSw0aDEwLjZsMy41LDMuMWgxM2MxLjQsMCwyLjUsMS4xLDIuNSwyLjV2MTUuOUMzMiwyNi45LDMwLjksMjgsMjkuNSwyOHogTTIuNSw1QzEuNyw1LDEsNS43LDEsNi41djE5QzEsMjYuMywxLjcsMjcsMi41LDI3aDI3YzAuOCwwLDEuNS0wLjcsMS41LTEuNVY5LjZjMC0wLjgtMC43LTEuNS0xLjUtMS41SDE2LjJMMTIuNyw1SDIuNXoiLz48L2c+PC9zdmc+"); +} + +``` + +![Vue File Manager Customization Thumbnail](./images/customize_thumbnail.png) + +## Customizing the File Manager Toolbar + +To customize the File Manager toolbar items, use the `.e-toolbar` selector and apply styles. + +```css + +.sample-container { + margin: 10px 10px 10px 10px; +} + +/* Style for individual toolbar buttons */ +.e-filemanager .e-toolbar .e-tbar-btn { + background: #0d9cf6; + border: 1px solid #000000; +} + +/* Style for toolbar icons */ +.e-filemanager .e-toolbar .e-tbar-btn .e-icons { + color: #ffffff; +} + +/* Style for toolbar button text */ +.e-filemanager .e-toolbar .e-toolbar-item .e-tbar-btn .e-tbar-btn-text { + color: #ffffff; +} + +``` + +![Vue File Manager Customization Toolbar](./images/customize_toolbar.png) + +## Customizing the File Manager selected files/folders + +To customize the File Manager selected files/folders, use the below selectors and apply styles. + +```css + +.sample-container { + margin: 10px 10px 10px 10px; +} + +/* Highlight for active and hover item in Large Icons view */ +.e-filemanager li.e-list-item.e-large-icon.e-active, +.e-filemanager li.e-list-item.e-large-icon.e-active:hover { + background: #dee2e6; + border: 2px solid #000000; + border-radius: 10%; +} + +/* Color for text */ +.e-filemanager .e-large-icons .e-active { + color: #212529; +} + +/* Highlight for active row in Details view */ +.e-filemanager .e-grid td.e-active { + background: #dee2e6; +} + +``` + +![Vue File Manager Customization Selected File](./images/customize_selected_file.png) + +## Customizing the File Manager Dialog + +To customize the dialog popup in the File Manager, you can apply styles to specific CSS selectors, as listed below. + +|Element|CSS Selector| +|---------|------------| +|Header|`.e-dlg-header-content`| +|Content|`.e-dlg-content`| +|Overlay|`.e-dlg-overlay`| +|Footer|`.e-footer-content`| + +```css + +.sample-container { + margin: 10px 10px 10px 10px; +} + +/* For File Manager Dialog header */ +.e-filemanager .e-dialog .e-dlg-header-content { + background-color: #0d6efd; +} +/* For File Manager Dialog header close icon and text*/ +.e-filemanager .e-dialog .e-icon-dlg-close, +.e-filemanager .e-dialog .e-dlg-header { + color: #fff; +} + + +``` +![Vue File Manager Customization dialog](./images/customize_dialog.png) \ No newline at end of file diff --git a/ej2-vue/file-manager/images/customize_dialog.png b/ej2-vue/file-manager/images/customize_dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..fe94635f266331b4b647e925baa4655624f9f7c5 GIT binary patch literal 42531 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

      ~FNS&U z2y$P{Ay;a#D9mv54korEHxQjlV0ngdRs!wY>o_@ZVt#;ut>VX*EeWCcB<@hiY(G4o6Ycm@X?(+hxyQ6P3Y0bPN4 zipXd*k47`f$jWGL25p)d&CTfNB#jo@=tn_~7TTkAGs=keXx$7t2yC7LSijb{af8nofhSmilRNIfv&kM@{29G@DY~vB z!0DAEg&(-ljqC3NuIgU=d3%~SVtxrSU(*3PXY26;(AroOd*oz+GfwW$^UqF$Py9eF z69CTt2pm7Ck8Zb(6|fi7fA0P)T||EjVy1#0a005YIUdalfr=7f|3q%?e$!|~XA2Sl z4xmk0GVJ@&0!87&3t(5w#;QJhn+Uwc4{>&*1<<_~e07NVHHh60E&^L86(#?!wnEeSdu%doZ@_#auIw_#OYXL!Zk_Jh)GA9|{WUfs~}E5)>5dTPP?PWJDP7o98T! zS5Q!-P*S4LRNSC<8aF1kxHM-m@-6G%*#e1sw46Txe!OG}m zL|O!-UEer@hTAfyRSWMKC08pUY$#rvDwd+3WV;MHg}9BlKi>1_hR&Gezt?F{utNWQ@dZM`X1>0P-hltt)rdk1i^NdS=>L47kwN*blL=DRLI3l%P%x%` zc4#Uo_ug@4Bn5k(EADd!+&>d2i>=&{2u)4XaDT4kU<58 zZwsMyGu{;Pzq{Z9`aB68@a5lg!ZHOuh^W#>*@gS}cz9t+4|aT84gWPvbUbVDf%r6Y z@Tvd5rqTBi47!_3%L2>4#~RK7KFHn074i6Yms?Pw5&3ux?C}0QMsY%D#D<~Mu!$DrQ7yZlK63T6Nmj|l!>WAqymhk~)KxHd9p{&$xr zz-pQypr8i)Ym6=C6i|MgQ{GP`rlv0s=60v6ZRb5Uy1Ka_5wOH_HrFNQu3A^Gx5o~B zmPTA~Giuz*_gxjAvOCp$eue$uZ#^c}he5Ng&Yl4@*xueCbYAKr<VWp^M2oTI9b?ZOcQyG@3HEAcs$(0}bcaiDJqrCSkj! znlv_3^gTEb;yJ!@PCdgf3M*(G`{#RG3#yqtuyec07951hDme~t{)>#c+fJRl1Lp@> zV(z-bs`}lCr-w-WHAa^Vn>y3uH4E<(S}eOhpD!n)?QyUB^XMvz9!istWF>Tz&{@IC zC?;5!qesb3*?;=(q&u5ZS2uD+m?|kF&Sg8ihwCOk(;In@Fq?4t5PnJauO-}&STNm` zXuuM`noFY+W)FO2a*9ckP$#xQiVOCyHIGDhd;fAtzor@qW+i(I=Jv>| zMNqD=6*9ELv85-1n!7i)`(c65(TJ1n;<4#KZEJWi5xk$7V)odr_@0HELG|{lM$!XM z&-_4={Zi_g9i2IT^sQyKCl}hGiJ@hAgcKQ%={qZ>9{X{|FV(+Mmp?o_bSGmsR975Q z7voJpK3iDp!N;u#U{HO|@HlF^Vd@^N-nuJg;-k11W}d8qtZ@VZ0Wh}DX4Ltva!TKz z=FtU`7`*X+f}F;eQJ-S{(C~Nxadv`Z+CSj0^T_fFk!(vuYNP=r0rIHzd4p8ftuzlSREFc5sGOrHZn`pyjN43bW4`Wb`I# zAU=7-3+Bt$+8wTp!+srBU%Rh8Z*m@zEzs0dg*m)O`^bHe7&YLCbb{S#9~3pvo~-|aLpn3b4VZ=pO(6`5U8eIj{eFt@Wo& zVe8ZAZm+zC?t7Qytf~*`oJ&86n#m-;sj@LWvRv~jN{38`1vTftlRRW?6j*keZ_CVy zg~+8;zg)LC?s|S~?Q?M%?g|6fL->Q}wmwXf6zQ)$OWK0T;<2eR#T{+uP5gETZmw|I zIAkFnOVWDGeZDhPuf4{DWWQ=J2Y5oB6n+$y%oZTL`*DCfgIz!D*%&^w( zkNm(q9byxc`7~iokKxv^G`nz`& zeor6gktE9M>i|smQXFhz)r41#2gpnl7S)Dp@I~}u6y%rTwA97J4|;AZ9wLbp{P;GB zGCwIo>+UJ!=SpUs2{sel*NiKu{&q1wA48S$;Yky(6YZX!AG|IQlhU2O*^d;TeFc)@^T@}M!rX^d2`*N7cQqnm z{0hchaf*{Smf1KL8OSKcR8sHlf7cILEwK}N9#9~dyutRQ^CR;4;9xu**5-ta;UQ9t z)<%8xgrc>78%C5OB~Krpko*i@*;}y{5IYDNQ6k?IQD2 z>l_v#Rez|1!xS!CRq>(8Z31yj5>E&OLi3$;w_Ilo*>+0 z2tSve&u}EOFQHN>HM2E+wjifzF*fg6+_w9uq1aaZ-Sf9lI?;Q~R=HxXyQ^je_n+C4 zAFP=q>pO0ov>6L#*~!Q%<_LDd{22iFVUUuBsj^%5mMvGNUvs&*2VhMSR=zfrgJfu z+2Y7~e#WgYeX+O5z31gX3#p6h{*o)+j(V%!zlB{(#Z&N-0AWpyHh6^^^r>!%+#*5^K zjPx^e1I6e@PHWCORY8#yxtyizjBCy-@~msM`j?`dRp(szS4e*2Xjn~uM#f#iLW0db zk%L>fT+7Wh-;4R1Z!>py@jLTdMz*CWB|=m}(q&qGo+@l$-ip9xzGa8yZ$TSh!D{eE z-%I?hLJwim~N5!^v?Ne zj@MR-o%Dvpv+-i?SEA1p5iU!1c+Jc8`;i*FRS_L;0}ZR&Hd_54W~WcT5<%jk>PEIb zq@ulbF>do)_9R+HZ#&(e+0U@DjEa}omE^)G)HGfuF?mvu9~fn_h>t4q97xe!OF*Grw57Ff;{MJ)M*t_|K;f4BpYTUAIZSBRwKXb;}b!#KA zn_*=hW3>CCqrO^y8;naVI}@tc6ThkCH?Ds(MBf+ov4+`yTs`iwQYy*W`}|L$uPbxs z6;5ik7BUCZAL^KXX6(|42 zij}`q}5{%v!_w2lX7=jr}LDyh;nt zDCVjtehhKjR1tPAVSY4NqCaMGYcn@YbCe1iPEMQDT0r9K%hgM{sJxr*4y}{Cv4 z*P;48cRF7L(0N&+dXYeUKF`c~YEB`G>FcuGGqyFg#CJ(;)@ulk*7M1JAJVKB;v-n? zSE6UBHontk?08%(L;P01>#z0qdm;%%n4#S}o&)J) z3zomU@|@ITdip}M9|7pFna_2E!SAnEU)yoxOsEOYhmfEnHFSL&u0l|IP&cBKD*sK_ zO=(iD$m-O$vZeeZcRbn5sxCzRFsvjxf~t4gP4>yYqk#ub-wm@|7YAixggB}(L)P{( zn^-FX;#0_%^Vk6LAS#Vhs)OUhUMdQI$c^k7>hG9^)D{L!RnFPjY-=jebsJ3;cWcKc zp*PF)W+czyL;&ekV`kGvfqZ>qME{G^bi&?}J|@B(_e&K5>)bD)75jPlqLZOWh%cxa zMVNvJH(x3e&6@GrDe5Q+j<#GvuJfmn?hg<_RXCGqA@O-XZXh{QOLg^kG01f+J1PIP z>NH0m^Kf+g#3dC>B~AGC<4W^}C!AN0(y8t#=62o6cxj- z;H@}%O2x9lrp4kD`?~K7k(70<-Bqm9L;U%p9I%;l4fZ)Eu5U_4vWnSlo#t$L9eAfH zzvH@jik@C(mj#)x?O9?~a@e}cX4ngdqrT|A z+cTC(m_JC5xc~Ki%+|1*xAEE+kG^-BZ6)h!YXrniOhpy=oXz3h?CfyAbJLa)q#3@L zj_vpWIZp{&@3hK(jMi9ZqlF>00N5V~YblL~USxhZs4uSOcup2xyk^373)mrIazyr< zdyS@xQST@-9jr#%JX?FbZH8JbZ&tErZoU!L%il12p*yt4-V+veRxv9!UpYtI(8x1_ zp8j_}LTdRl6JL~Y)BI+tG}by?M|SxJ-L33qXow5LZ~H|55xUD_T1{CpQyckL3C!O; z{>ffC`2eMO;)5Jc05wm4)}fn;Ecb$DH6oSxZT4R#3t*@PQvg70;KP^x%|8rk0DpOa zYw_(raFq=;z)7Ypw8a0oAwX2YVE}X3#fbC&;|~AtCjW!!a)Hw$6!`ZvLcsu#M04R5 zFQ$+D@2L?Kj2A3kGX@M=*+bYBN#7^m1dzq=|6Z+@KG^Ux zU*9W4$(fVzc|<=NiFG~dXO!$OV3AmY=?#bf3PtT0q0i4x%`p)1sB9cMZ39~ZTJAw} zV;Z2Sw&lgZ{Wfb0S}^EXq@*G+n4H|poWcv;L$xHWEf|G~NYI_nsbmQ>{~SgM6{*NN zu^bF^Xj=LqA=v@xfsjxnES^XLi-ob@Z<S%l-tWIxi_-$W>Ae9Y*Y zZhSDo3X%Pdvi_3horwQsRxtY;^-6CKAtbK*bB%guc?AXIV`DEXwL)d0;b54^e%>cH z98T{_y&LJ$`fBp(1hH=RJppX+>;Js#r}fDBT1Ogwe*U(ta*L7tu`x9d^+hhkn!sP9 zcffJeE~}opq%@%tS+*8m82a*SF;PuT%*<{FZm*)Wir2VG^77ip$E(55R!e(=Kfq!* z9Sq0pVSj&rl)yzuNd3;v&eYTtn_0i-`D#*3ObiAF28rhZG<&9;4c7)e3?@g{Sp+M% zo1lDE!T#B@R7!VR6p8{VT%~VI2>Q>hVWB1=At5B>TRLhslp_YZOvquC{M2$R;judD z0qqmYKh~y&8rm{Sr*wROx;hH6mc-{u(NoyWY<;X)n}VD?HZE>|zL~jSm;hEsvSqDN z8kN;MR|hULzJZW-e>r|7>Xc_OzWI^kE@#-Jpx<2|OzD&eZsHw`DM%Q2j<$|0n?t!n z2k{Y6kbmyNR8tJUYP-d@(n}xt3?379f=vr_HzRDxKOm~_Q)tTqop(xJ2dxPAgO+wC z%g1T~2Z)M@hzJSca$E~{W^xn-2_TR2%aMG!BK6Y9@Nija>5IkJBq;Fr98-Im1>6ou zxw+4~Vkqt~bB8q62~dKsFMmjgimt4$Yp=6P zL=yAYnf9gLLqOGO_HHaLwjM9h9U2-cP{=ZscRW`wfYnn{8jc|3tP>?EKIldl&?V3;}-6&F0M$`hMAQrc8@H5x}q`WWh{P}96exA9$*oSV5i;K|E z(2pKH8pGfNebCV0vK(X3*Vh*mZ0_xqEmo6xGy1YJB_+k%+ne$+8CiBg!RxV*-&GGc zN@z><`ics6a&mHJ<^i5CA~G6qXaqga2IsiNb3fPD^8&iX$(a~Nar|wAcsqbPdh0N(k9S8(L z+;&Y^qm#I9Mv64@$GM!jY(B|HoZbfO&9}Q>vs`v?gYAzXFI>MVTnZYttjC_xZ5QV3 zviQNmKui5HFMR~*Eo>>W`1ttCkSP6Xo7r)FpN!~e7Mq!xK0rKP3L2*RZ3 zXrc14kD4!7@XX&y{*l7^u48<184UIA>F*!gJ{hYO&pkXlTn6Wio10suc9O5SsL1mA z;^gwjeszi^JAsFXM-(wX0U=@itCOv>v$M4|Q-}Ok11_(N@8AwN_r;u?zRxv!ghEjW zKc=BE+a456gao!D zxVL9LgtyoFKG)l~+}Vfl5AE({Eb93c^jMVMB=cuI4%)H*3xi$7Xa~Zr7eH zzkQfi!JH5~4bc`f5cC~as+4_pRpv_GBu_;UVM zfRVA!m^CH`ScELE)5*29HDIb*T3SARVu>{Y^Srz)^{^Nl=?|}Pzy~uXe;S00i+x{A zM`xy3yZWPJw{KENNXXKX(YDSZMuvQ~<#vD=3*_)Hkku2Lfi~4 zQ?#5}x30ovcM6=!nL6j9!a{luj?*yars%PjvE5b-VWGA`yyl^&Fw9RJzWCo>6g`MA zQ*;G0fBWM{S1Hkt9)wuid+WS<>SgGy+kyzCEZWf;OYbwdbRQm7TP|}FSJPIDAgdp4 zms;_q5~aAUa)$Z1O=DJu$y%Q6_t6B=dCFHHY@xyivmiuiipHV#RL~qKDJw&wNU}0B z<<(84;qx19g zr*x=H!2aze;=|m)lGtsx2sI_)b}$A9NLN=k@5#K^kBl1J71A4*Xy3quTCoKxTY;A% z%Ma9M!5f}WzJwbnG_VN~s_cD5CU3+tXfu3FhnFngHYEALM7ix(7{GkLkW%OeVcl^sQpwD5 zFYAOpHSfWlU6Wx?6FqR*nHZXydim&cMW;UnCM@O0a9|U$S}9%@W_3=R6Q^ui?L=Zf zjrJtunwRo3^N7KTd5>iq7kwUZQgz=c<>BgHYD>cIEz?f@L6+sqIcBFEs{S4*?7a`a zg0|GB=6({no)xtAIn~wGIXS>?`!iIQ*)NOtwqhMWBlsC{wj3i)IF&i`=-S&qncUz5 z*KlxfFfm0+)`x^31_^%#rzbJ-A>?W1komXmlZ1o>a6GB*;YJa0=X|!o`RGgfgWKV^#qv<11 zk{X(a&u>Wk(L^p^yOIhTIofU6P?9UIrN;fK1&~K-xMEXawDI9q*V0-M+b=o1C7d;R zc455Y4<+(@p|RXTLqkvVM^8>qU4XScJ&mPDfe#SQcDvXtNJ~xqr)gh*Nr)2M+1Yur zJ+7RBi-GYOINh?cGBB)|;sa@E>GWYY$~E!8vCWZ!1Zk>Ax^y<3*&?q6t`5FjT)e_W za8!jIpn_4znXEu=Y-|MP2JDL7uCBND|JV}E{s zch_Xe0Y1QRzR8P&!c9DP=oMc7h*!v-M^J#5{WODX|h{q>G5q zNFpz;#K)2O$~%#rY*cZ?10GP$!}purkH6SzXpxDOT~hD&v^nk$3Ah~JDY^M_t9v}_ z=6O71Z1R2GVSsxDDF^+uPeqn{QqLvpv9f+zWmgT6{q3_(%N87wZe);R!bwn1YN<+?X49 zbGs6!5HG!YxD448UkAJK-Me??_@Ip!3{L z8_`i2$F=4ql2JE{Ksx zNPI57Thv9beR+-6d~>lqF`)s@z0GW$ZPR&hc=z4z%jEaS2^=`xodyfhZ6I&yXU0x2 z`qEiTiy-B+%4{IB-gSTY0nQBBLAZEsqbWFFg@uJ^f>+U2^Ady<5g4@`NRk@(VCXUn z4~8)2FYJ$m?#uJ|OrsO}_B=B%{x5lL+FoSh1xXgqif{UGlP)-Oj3O-viJ@50ua#NgoSOY-M^O^g(cL2@kbM?3)TXuM7OFA zZ8xn~p{_;}CuFY{YlvWHM1NWo@rS=P9ln-GTuau=MCf>?fBdP&f}s*VVz}Y2z54e& z)*$(js|o@PFadw$o)dEhD9A{haBrXQp#PU4N;Fuf--G!g`#bYRIZkiaCycXg@>h|DPNg&lK`#)X$d!mhu-jh|6`{hlZwg zGW>57`9E({uzdlI=?Bz*PE`wrE#bOv3k%jCQ-ubD_LGAExBZW~uK-%CBZ@x;lS!1} zfrcoQjVwa>FEjvvngIir!5u#MJ&BMbHe@e^KWlc-=+UGtf6$88cvr2f#6tgCX@ECC zlJ@hOU!3BI@GRotpVR}S23_&K8uO<}d_Mc=SJ0qAB=Sww)Rstoh~0V;hl|FJ9| zpecU4s$Wr;5zK!guK(6X=V#gje-eF`+YjT#x4q{bVH6vKxi8Vtu?$cW2oAcaLHt`f zd2#i9M1f+O<=dY~9}4D0BGfWxB)4C+(V}40)VXM5y~`eR_96OkJRCS{s|PLgj~|!6 z;L!%&!IlMYWl*vL`fj4EFyEJy+?-C^TAMDC-dTfi7tm9#HCR2Pwuc__ccyl{iG=ru zz8)rmQZ&3D#vQIA%H*Y^qr9I(fxifo1(u=oc)csX6)WgEEa=s?*tlVO)3n z%F<(zh1VqB&uOtYH#d1Q`i)snzJCwVU)*%6qmYPf@9d<A1aG#%Jv3UfA2`fY9fH`HHh$Z<|vg& zF&y;t^q8Bkj)1eXU_^JrhQlOf;Xq23&7ZAzMLKe1RSt) z@0;%Fj-G*uh)u!(vE^)yJw*fxCp)_x5oE@@r0^R>k74FLbhrMR_ieTE8wk%9M#TrC zbFEr_E?iq@&;1IX)1p4&p|ojME0U9vvQKEi zO6s*wM^;Ti4l^PMEzJ$`Z8bRCDIWky`Lk!x?(0V&l>w1H9rk?!c49^^{6iPkJFAs| z#WUzfhS-39D;1Q4LZq&5Ku5_=SD-7>sfNeSNq@ghjI8t^Z(p0Yk28GD$YjmxnXc$J z3$Bu6lYvna`eAlM%H=$e45&Gm8-AgYo641VZ~9czIP}+6N-BA zRqB+Zv!nr2D5)|Zp4`ll`Ln-sE!E6zx-c~i_^MM=Qhq)0^|?&5Iin;>EI_f?*ND{c zW#N9uv)|mvSBTwLFu)`gWWL%0nQ$Jt_yX9o)&O(@d`gQya6TkK5@VMoo{NNn;<@t~ z;^5%0)}OJxx_VNcbA2q3-=D2dLfx(dDfHH8kDQU6qzq+*}as`q5140f_2?_mrmxwuUo(%abB@s`OSW7wTk-L6&(_}^4X9B_n z#`)--2K>0yT|t3x;;~7;o$!}W7!Bw?`-3kSiChbq#Lykm-qdl+kE<#sSFj7P6=X#1 zscOL6-4~W0(MYUi7oc0bB-DzuELvHe7lMfzapBzQQe)~9(CLw3&q$2FwQ%{Y1+mxd zAc;GDZC1U_H5(x^`So4aLlsLdc~^@x(t$G$$C-@NH-QQXPdbu#xcdi{Sm;(p1v}}I z98e1i!yBCZ@bXzA<1NoC3cl9U1JY1HpyQ<-2 zC`(0_(;_ky!ZxQnlK_b6gJo@NYYV}|LT&(yfP_U2*0V2#&8$0?>h_}aR(gOEW}v5M zJ4S-|{G`<9dV2n5Oy=zBvibIMz~|Kx#exRx#n5--s) ziR?^!kbNH}1EgK5LNAqy;RdKY4h|03i1&kpKd7v&uV)E(fnRGCbFi@~XFmrHBEO(O zLQISf`wbS2yd9AlYYOE{`>IQ>c{apBL}21FPgInsjb>(NuSeDOaWn*0`h=~l7~Df& zc)g~frjDeGfZT;c^7S9&&5;OUm{$(O!dkF$-0QaZc&KcZ?KvUN>Wr(-2G95*7OAX^ z1Z$(;9(r4?7XsmGgukQ=GV+@sydE$ZfUdgLz z@_{O(lT?Y6H@QJ-jG?sk-zJ=rZTW6$e8G`*aEs@)rdPwQ`GBj^H99(aeOlcNl6UH` z?2%=H2x>aI?w%e?aAu94k5$imZ}0A2gUoFXxPjSHsI&&nzpvKQIU~zpA5fPFH$J>4EpHD zvq&Qia=QVf56Ch2xPVN5`!eEGF?T51?mO6jT#*#j{Ec5C#9w%OHwkB-0Svi8MV$3B zetJyf^!A=SBA$gGZUM)%=Snlc9;(&VfQ2JTqI6Y1&!?TH(c|+2S z%gEYbIGAThVF&t`1CiX&_@FWz(>PZB0ACUKl()}mK`haIg;+LW`ts#VTU%xe4(`~L z6sf&w!|fhKwf4Jxf6wDxFFuE862IVFa0}Lhp^BIug&Zt##UrHYZPhx_g+oL&`YaT-+GC(mz*Ps1n{yBQYoZaVY znFP#UmDMDsuK|p6-bE4BaP;-Dtu`o| z2!N>r*7qMfRJ1v!X7Yn_fj7WdGc!76C2L^&S-?iMZ=deX$~<`!l;T`6QS`8&ST&`F zC_=m(Gz%^;Gc(f;9>TGjs*uWlo(@90x`$INl${LF8S<`sGu*79^4ZVhlakV8sn<>^ z?7GZ*0|Q~}pqBw)!oJ@DeAGrnQbtB2sAX7BSA~v`omy4hh3M-QXfY`o58REo_2O}(wL{5ot<6b_jl8M=zzxNnjxJ1HVnlb zo@i6=XNLAW*14Ic z@Ht@JLDG=-0MP1M~V(^s>xhn~4?uxnOI!dSy$rf)9JJfX= z8G2zGKEp1qlh#;`-BB{Y@7?^=a*QfPx2WE~Q^@d8ZS$kmJLQ`^*tvqr3=k%~GZ=+@ z#TB{2Rhe7h$|&5llWlOo30?Sb`90IDn~}!b3D-IOi3&GgA)W|cyE=$%G2DzF&w;S* zjp&3VEI4#}&)2UTc=E6E5oqqz90L}dqe%K$xH4WOx@I1u96c_Mrud{&;r%a38k*@I z_gyaFJLx6_ts$nlb`?GD**GM`Nl4n`B57T=^ii*X%PJ|V>TM9qjBi0kQm`I6VA~5k z;p=1EoJJ@WJ}<$t)1eIHs}%2ierb~%Bg6g6d+v_GL@n1edi;pZI1Fi-E;mCP^?7GSHG;jO%$spboJUM1V74EKv_3@!{j;y#&dl*GkM?IeqJ6%QDwqYXAa3 zz0DV+pmNzj?Dc)<_Im#IU42pghp1n309c40h@Vi2`Do|R!N!xfcG6Q<$Hl^8L-dn? zwqdFpQuA`*)Lv;;|SIsSo)H2J;&RqhM3QH+2tY3?P9=6j3xzSbw8JEt)@J z%Ox$QTG#-QV?53k;yQf619fHF+WDf2x$gn-_rq>ikqPRY$Hb zbZJnu;BDc#^JS;~{i6PVqNj{X$8@ycnkX=>EaHfNpt#G=4~vC;iUFeiUyNpsCo_QJ zMFa>6UaTAj+We`A1n7uM<`)zE$@8WT06YBKrZXRcL?;2@d>tI&|MxQr$!S6UbSL-iU+s%0zYMw2Al8=!9BmQ2c)vtwkvD8&VsdI_e0y^Z z3W9kA!LRU{j-ei6Y_B8YQ> z@q>WQfELFkv)Fgi#vm>n_!u9Ljl_0-)Wdx8>iVF%yrAGti`JAl@KLk8th~HZYxkfU z_UYXz0;;u*jSWOZL{PbM)!zkGd%YSvGWS6yotguX(&aJ5bpxons9A1$esOVee!jZ0 zk}ON@(Kq;8$h5Ko!iEvf0H6=i`fSuuW54X_=3+uNJ5D~$B zK9$sgu7CpQ@%n(Rx%u1LB~yhgfoq`nU?GTLPohMD{{rBpl%-i;sxv^jQ%^mLO{81Y z(edQ(@URxFUPuvpX5i~BgG8*a&(Pf}G1%F$={J}nHW2$9>|tOALbH%y20qh72f!O0 zSM>Jwc6N$Gw(R#9$Pebce$1jSD(mR%?C;;sdF%ro%%wiqmGOwlQ@q6c8+c}!r4Fe^ zdqKC!)4eksKaIm$>4OS@M#vzE{bbMzq-5NYyg&(;m8EZEV*?a^ii$&Q1ALA^zmdi+ zM-3X*F)&yF*#r*{kAtHl(2(eBXmr`951D&{8Y^gIVrFJ$Zmvo83~=308LmiW`h@S@ z^C03J9qkCI0LdWma`wxea;fZ_n*~`9ksIP@6hLh>g`Jm^({-smw4ZPh)^YqEJ4KaPs zn){(g=ffScV*gMoBr|SjED4O>(_3MRizsDNBQFOvwM5=j1z0^dH!jBXGxB!Zw+O50 zzAbUbr2$obzE^jPvAVVfkAUFn>WYQ^^y$;P$m^BV2bJL9;Miwa)NxW|p5}Qn;Uz#A z$Hm13gmFY5R_RG%rit1EGAWSqtEs3&e+&+W_wl&}Kkp_TXa^N!WwF&;^XlvCtF5P9 z&W~2XR*Zw$L;@0r(#F#%P|^%($Yac=`TqSogI)vI)29hUo4dQZbxt3YKCE!{>sfAA zO8(S(UUe#Bw^HmKJ%_y1y3FV&wij;EK<2xnc_aT* zyP*0T;2&f?+`7;28Plw)RW1@#nl(paR0o6`y{jC))5gEU?l@~}2 z)y?}$Aigg#P;Fq%|9FB5aUOezF4g&1N?utzy&H|ZxFLJBCb29*)VN7wrf{{UKk>_x z#G>~t${d?q^2&_t9ui@}%T6b7Us(3OAsv;WeB~bX?tCt>V%Vy(_3@oX)&TZKY$*tH zx$tF@n09w}S9h2DGXOMYJ%Y@23D~8`Fq2rrPDQx7jEVVLFU>X}! zLhJ!-2fEB%@Z=4$q$|*%B=>YAp+m1NyjLj%%m<9VVg;}d5CcXRu)j8Ie`)R_1G$^>vCPQQ9a zS@pZhG7Ss5b|itCb^+juUoQ@^7~u44y*W9*r}iWStDPWRFB5?6InE#7zc&CTV7w9~ z{q8<8^5qwjo3~0IxFUI9ecu2=$aFKfr3?+vE?%mwntQ>7^ zZGm$*JYv2d{WAc00*wGS2Lv2IY63n|p&#|wZ)0DYUv@;4dv`ItGx!<`i33p><~LE9x>KexW^-gWGUv|;H9sif zB~E&~DTUltJrrO{`g)tO&gl8>%Tsqh8ZCNdL`dZxx~Td*eX3?<16N*vu*g;8a*>V0 zOotJnw5$p#v#6~%bF6iaD!UYH>AO8U*%|3V!d*)oLY&1Fzq`O6B`O%Y=+i^1eq#Jj zZ=R(aC@f&OW|x&Y0N<3vq)Sc(j3TJA^#IDc(&6ao$%ijZ>HUNuQG2OP3NaF8lPovD zD)ImWO=F3R>FHDF!=(;@yurl)v1b8{BclaYP5wpr5&H4=I&n0|4Jf?_??6KAk03fz=Yv4>y?{6 z&@}GA=x*0>0PR=Ly?V^VB>zq+gU6YkmR6Fe+L*wW@c`63fz&0_^GJ%-mmC;|lx7KO z(nsG(}$CD`7Rtn489?BIl|h8 zkS+R~8qFx=YY;d4j{_47?C3N&Rg4*_e# z%a-D1)OGD0IS#yxqU}_LOyObBV!F+dwe|A%pIk*NvLRXfCMer-Z>r-%BlKBYl>cRa;Pq-EkrMMCuharu^OWAgE{9YN_bd0Ei`}fJ?#9Cc{0}^Ji(U?APqsl2MaU3sQZp+iB>uT~P-j zUXBNW=WbQ&3pn4loFWn{H5!86=D6j(kCQfKc)dw^(T}&q!bbrAu}$j}w}){HJ-oet zWlK?MDR_#4UQ~d~7vI5SE}JBV#pZQExXqi45yQoD*DMk`Nake!AK| z8&ji0)XM9AWbEL;s!7@k5GMo@hmpCIbN9S4-tyg6$XCen2JE>lyRq>aP$NO0&`#Nt zk%)>TLs}A3+fajM_aFcEjoo^Rz0Us~|0ntcdM>VH)WW<1pwb?uA$E_Z$G%?(wP`_V z$eL0GLQHTW>te)ORdqE2EbJghi27!QtCYL@IWU`>bqvOK^#K@s60pSOzBKN(HJ;}V zxkI!=T2mCDV15R2*yRm$H#QQl3)hl~RZme^Vjz2^%l>#uUO!ZOt;!xmiq~v@9}@FU zje+fZFWX^Ah=b%p(Al)USRDI;xRl{qVZ)1rmxjIXF7Q&+Xtc!G=(1z=Jw{jsS<>gL zo{g(^mo}z|lDj$W%Dv~s1*y36Sr+!#Q=Z4`9|x+L95*CFS}5wtK8$X)wF&$9_-qBS zgna}`!a+`maZCb`Go~_>37aLXtgV4uMpaccCiDc5G)L(L4EL1ycqhQ1(l~8{gMvV` zjUOS7K=6eA@ItgtVw5!4yNUioUg-ID0!fpE2zY#U0rxVpdbj8HrG^f5Avks}U zr!byL%g7YSXS_OCcve>I-#8XIJdM9Q%)Liz>VL@5up%^ZwtWfqN(2fsF95@7>_ditX^jPCu;82*{~ z7SD7PPPJo>VlL+8LTJ_ghy|0HX)H!2(=dlT`soY-zQ}HUggDdcT`amES%u{%u^tV! z84WM5c0;8v#WW?DMF5ZE)0k=hgua zg72b}EP>ha@$rEHW;V9Ct5PyOF(BtRH8qWmum*Z*RSgZv`N~PF;u`V1XTQ$WdknV{ zhYKvMDvisGNRr9ePaUd^&$vlRpMl347k!j8#y4tGCU{5cWQl$Oumctt<8iLTrN_i$ z&zulImGBqc)c$-xa@wFE5!rk>u8JwoT_)6`3evKKFS+d)_hJMjP#c8^f5ERA=>-tn z?>8JrQXp5?RN~VT!FFQbMMRD;1M|F;XNPddS+Bg%eSmCif&Ry%RbOBBpNg+&X`n2hIP_F zgYoKbU-U$}fcX#9S11!s67**a;LTr+2$p@O_{M|)Xw<8@I7I%xzMljd-3~n2`FDIu z)fpxHcVNgD^&6iiiNGRR;{opbziEWz|6}jH1F`Pk_u)vT$S6g2S;@}K&MZQq%us~P z5H6c2*)4m8B!pyTlU3Q-TlU_2UBC0qt-8OT?%(Hm?(d(^^UwXqo$GyF@7Fxf<2;Vz z>}V%63Wi|xy3p)Z56a&;lTal^fZBbyZ{ozD^x5Ab#VF~0p~=5MDjaKDIqfa9NB@D(HXr5NRG8kIrF) zWLocVB1Zc6cV^u~(f8G`dF5+2uzy2)L4CFlfm%MLjyX;v`@ee#4Vi%0v?VoEQAUNl z8fboh=U_-1f8)&FzPkmv?XN)tWyn5R^^(N1h9}SI{_R5sRf$lg0c;`Y=E+u z=f^u=+aRdvKkNV?TK0NBMzk%q{k)e5uRl^DQd7?^&7EAz@e2g%BQJrLSllZ#7DQut4PtPA<|2B39 zu=xBTj`f6UjdSTN+Rx$hDN=LMQw&a@-{SKM#JokhCEUN_t-^Y0+fHcVW^f`iwqV!9 z7q7lA_lh6;XnZEQ5Ow?aHAAiQ5;l_mX*c453w{hKedJ%Q#RRc2(|A5tq!z!!AVAIN z3Vf#Hd}7oT;)&Mz1r@K6xs(0^ZVzC6xZgJaVv=pBkJSSXXnIB%I=*%6;%WGtNN#thgw`8M63r&DG-c%QO5AxN_j z>YXI>oY>-oHF?7Q+OM}*w=-YIYE+G@XRJ4A$(jB*)gz@CrZ#)e-g8aiThjE}YLI?{U?MnwB_4>27> z_)E+f3)f{76sSxv4r<#1LI`@w7e}T6AxhKC6-(s^z2=Ee6~%2F1Ogy{gXQJ@zv_Kd ziMW+qTT`>NxJbhQREx->GX=ne@IJ)^BGu8!$xTr8CASzUJ}sw%EIjCl2-+MnX=!Os z>lR4Nk+4(5#TkmbwUDtPq7#;*czD9LGvu|gN5@m2KdBAjDAOv;B!>ta1*gW~yOThg z>9vX;U>IB%o?lGZj8O$XPw!)!e`_|2mlmX+0%Yp#5;F~ zk84#tPb=`AxB|~Z+h3Y+Ov~<2#iNk7-t$>Gug++RCF&Z$Swx*^*{|P>SC}Nyc zB?1!=c0SCR(}i$ii+AO zp{@7cc-v#%r#%KoDvGd;zrz^@1|7vNLht;wD2#Uul1ATuP!YkzLc858qRv)WT~t~ zOzitk0dm{)_vWS{6f8l>9@xDU*3-S&X>+aazcR%fpffolc(Lu6!gb8`WDg<$GU;-8Uqlf&~+>;_Som6g@ivr=&u zun&eBd%C*?tww6Ry^p(q*QW1Jk4KhvZ9*?4mVF6XYsa|e#~^j9l2gx>NzlvOsRPcR`oO*8oNnH_{Pfy zudJ+ClG}oab{F>c^k)WDbLb^2eSnkg>geJpl40=O(;uCA_--2H}Y5B`N~zo$Wg zQV|LXtB@P8-}ww;=les~1qYtC$|iLI0|NkYD2nwV3mug5Nlk!#_V?>3DvOCd(l`>9 zH<%+D3fB>hm?-lc&;yBC)Fr4S0Am_rx*-SBFM9k?D8C`eD%fXq4h`uoT;Bi!x|pYS z=VUb)D_~+`!jH3eZ~$OXCh$a+#kJ`bnSMSHJv@H=7({iJBVAW80Oi1vC9S9^ z9s-mQ9Tg;gCs0p-`rIHB4scwE!Ysj^_5{g5yT#|cx2^9@Q=}%Z>0XX|0ua)t>~DcQ zMA&KD%;NmhU$Ywmt81+eF_qsDCyVc3!l;VhO#lo$2gT}oLjfhqDxr}-Y}eP_)U*if z%ooo^0H}Z@w!nst?Fl{wf4POGgTp4kxKu<$%^hFa^j?LB%Wj>$SV|)(2<8?0bc!~*WQ9qaG|}vzCIch)xaS?-n0b}x`KUHSU%H6_9=TtsyQAc z_3swsPWWdq7u*kZADyL$b5tUE7TOrwlt~q*bR?9~?z(L%!u0qcL`{3)BSROt2$|fHV*Elv z+X$B%6dzx+U>Vb1IBz3du8V?n9ZEMe!I|o&z}~sd;F`xal=1+WOBA0aR2oeT4MR9| z4?87jF*qLfJ46h{XcXKq~}-j)6~f zh2FFzh@u09r=_mm2{6t0YkW&Di8iQHy;G)FS_5Pp&b@nY6&(+O>JKuQIPv~k$EESU z+`GYxgoLPVl}2Bc7k+h-9L|LW#A_SC>6=%AK zYaK#$k|)_p^Gk<7lYY9mprJzlb8N~p`s@9r2i0*-DFY0IkB2uiF`;;#2#$2G&k6bY z4nX9Ff>*1q-`Ev~3CCwiN=i!ie{lH>egbC(=G%F%aF53`6+Dl*Olx^1HFg?y1qTNQ z7mwE!5GKj&E@srF@^b|lCF7!lMd^+NpC3vrjlS2w3~qx`9C zV~-bjXKXxUd?0_U;OvyUbQQ)z92d(VXYCPfrwnr{!Bn(IUUACDDfcR-ywiDoxBGTb zpM_DUzS%||7>K!BLjg%qR-T_!zw02+-PvolTwzb-YxL2nL+`qh9YkFR>) zzI?$36mY`7rZgNbA1f=)OLALpeQR1XiabsmE}o!oQ}6dupe`i9=Njgdk2QwrK%OeV zq$+#a;s;bIcMpLZG;^B6;tcdA>7!2kmX5NYPpf2=|FB%6Qz%b1xPC*bKfj~|zCS)T_G?puwD0$4Uo0#vAXP_ewJXZC^VpOr zVS{`Zox=Qw64X}mq~1PglDtJw8dv@d0cH@*A(9F|Te%!>)weyFba^7V)Y$7RPC*C9 z)uZ>ev?f^YWd|vbryV@fC;w_t269pVDJA!2R#Q^{p}aU^iT>w3&pOy<2YX|MlX9p$eAJK#2Wis}%Up%>l8Si;Jr!oHsz(39KACG7LN)KTcFmf>;W0 z>J9&b4<8yv&N0EX!oHH-HLTG~Nc{5UioOPe?Ewko28#1PaE4|MRFk~Cynsljs-~Yi zfBvb&4_KuP@)0N?`GZ96qwh=9DY-mi@>3|iC0*d8z>NX-%yp>Y5)qZZqxciVtf|-X z4lY83ZUXy8P~_+jSi=C2Ls_m{QA!$YsYIj`$owkd*W}^%l9?Bz1E~4Y_d}s9HpYT4 z9sae1k^bjLJuU{AnU z1;n49okIzDJdcfJITR#RD;-OmN+hBivyCt}IfkBkycDjYD5S;=s5=YOD{o_yjdI5b z@1lJc1owmB=2V73UBp>!FuN=-^B_6$xCqYvVnC9-wy9jivFS z>5q+uMCLCEPM#F63jS_-0+KXh3JRyuItp8Y-OHX*v>(_{K>nc(5T2J}KJ0!L%9W`s zx%#!F_uZu5$cu?#cF>=Ni@%^C0`D{JYq-_NID_cFxL5043=9f-u}llbQad12ePMj^ zTM%G9*~Kj+-FQzAVQlbqA{@(z zdTa;lt3JHameYa0gL^0krMT!WrQu>m=MH*hW`{9}vmTAc-=s*+wn0AvVQ)jJBZaCG z$s7%~{Efu;PLiC=D^fDLZ?{MtWDgs;O38d>#;)*xki%l6?HQjW`?Q2|T=hFn-dQ%z5EwQt>{Mr6XZLLK+h&Dz z-TkTv3Wi6nLWd-Ju9WENAH@(j_SE0VvynCmo7jOuAmUJ!>j6w`YW5UNNR88qHjD)E z%|cttURz+jkP&V6!x9uYy~^pd;x!nZ=Q{SzhU5(}Lhg>{v`5eM7IxtolyXq-ejfgV zcap%G1|z`L)0N_ogmhLJ`$IU*+6h@#5;%%3wc#05{rXc*<^4x1MWbULhq6-hC&@h_ zEAB&=IZeM@`(d1KxP9S;!1B*bk#11pojJBU}j^INa{DwL*FFqRh-@E^I07DiF zd9w^%3y~&+Xuh399C*E}qX~q+{$lj#)4b=d(k0?0{+O|G{N}U+zCS;W#Y~9&>U#f* z?dDMz!#i*P^~bM8I}NNQAa6n!87=ke3nCb(C!{bbG4OXsexl&{Q%3JdWZaPdJcx3AM|Kp2C5Sb39)8-Q)VVtB{eKfJIe~G5_r%IZ^=7dN8#cz?>ULd(RTlCP!(8bHTc7{JV)*gm&2f=u^Uyfq z-c`LYHNU6+f125=#B&#HicZn>`LXQujI_CI1k~5Qr!8sZR}_7yEXyzA_jB`r(-W)& z`1`wW@}-@ZJb7*3*Rh0&MznVct*|w;MVm#R;$d0&mawfGZB2!PKHp1s&r?0G{${XT zKWf1A(v)Eb`;UKG+_TTqXJSre7tebh#kxQ-*W8e+{q>7-7eD{bWQ0tKz{7hIeo+Ek zZi81*GC$hsS^i-K_lmExMDdm6Kqtd??jPCrrp8W+O~-$BLy;swCOy z%tft$EOhcp%#lTB<8P}ESMdGND+lAmDH1LySwFmFA)Xi$WIIctFfmgcxfpP`QiW{6 zVPy(cnpt&}oKvGi{Lf>GRp9wqL(rU_APByBwoi*Jzh_2fIc$?GXlJ^!-OtYRS`6#0 z5~f-5n?_^Bq!-#|-fb^tosE}bBPYc-A8}Q&f3K_Tw^o01mQ_1{wLLdIOR$)Cg)d|D z<4itXo7$h}9jgF!u}6IJ8nwCap@JBz;!cYZ$_^2puy+Fz4)k0iN{qi zlhEZt%TORWb}L%9pP7qt&&w zk*&p2w+rpFK76>2p9zUF2$0)GNsm1Sf3u*-$Z5-5KzjgXp*r?BmIHV!&8@8uhflCxC#!%1QguQbtN*L zBxmsFSyEC`rpLyfwk{|KO_F5aDLV|Uz90&&bV(WProdp6KYvU7fLj$4dk@Ae5CS1? z0pfRl+vN1b1i(7X=g*UnlPk-BtVdW#sIaK0cXZJS-1ZcNmYacgN@L_976YmuNI3!6 zX&qf`foge_P<~9zWyVvuhe2zlsjAuz4AP#S+gv-G7cZXBJsGbI)HJ&xe5w^d;0y0n zgVV$-2n`_s4m;S3P+7l!U%G=--9tG?A=z)lbATtZ23KRFIJnMbmxy7VpxHea9G4UC zrySMuI)Y(7zZMu2x7~Y#yID;>FxrT@%R? zAGb1TY-$}Uw{biaq||0PU9+o`N@m8!P!A}olZCej;0jEnZpb_qi(wfQA!L}}axU(g zPEAW|^TTp41*XVkOg^C+-f5TsP_m3yTKi6^MsIh=8vi_wv`y}6*y z1o75eGOk;x@7}2bSs%pS4-2^b%T-HJ7Ql%xh_cfMhc2lSpO`x)6*yQY*pT7q^^k43 zdbmJsHj0d7(>g%=9izeALou?#mGNHfsdw8}2I%(dcC(X>vUtlExI6poV{NAWWrW;q zXYE+ty7ErOBpB|b=zeK;#FRFkJ(Hp*K-hTWq==%&ti|WsbSCa|JPAd#aMUIyGM+!* zo@K0JWRz4re1Vm9XCgVxc{RT;-WR&f=%ce%5f05W#6;3IOI5c)4aFcb|`7U0(JGBbv5HG8NclH**vKtEtuqYrubvmF_ z6>|uS;L2ePE9BeNaxLR2yB{9=ZfUshIzIOZ-U zDbsL}9)EH~(1{j+T8LS{zkDf^2q-+bN+zbJroz6)MoH0ZJdQaVw0PPL3kL}iiEnub z8Wws-I*<+UauE_YsIx#69e7>B;QZ4NVI+>5LIeokDc*Iym;#k*~ma{FDv zn;Hyr3;79u@s!o#BWY>*@s4F!{x1y;L@;3N1+PhT_r%#(#)$;9PZ1GMkmwg(uNqzK zDRfX_;0><631&K7U0u!1ucD%$0@W?DJ+4rxv7MvmMB}NI5+6^;z>okYwIsN(r{?D7 z0O+%FI`q74l7*Gkc_h@JK+9ZKwt8!Q5o%?zui(tO4eY+gIBEA%9k5%_($WGySIE|Z z74?Enc4=6gFc<)=(?mp|nRO`a1@^wkYPS_|u%b5T-YR+Avx0ks5!2#uL1tzq5FWvR zFs&^g92T8I?`6(k=*;yLi~06VX4{ixkvg$0K%^ghZLC1)V&9sYp590v9eYS{kse+` z4Hi4FSU17uV4`cq-rhcz!U|O~IX0&HLC4L)Yvj=(91y&`ezgHgLQuaJtqtH%Twa~( zSo|)_b{r2+3J0a{XXs#X3DXN=bKUQU3cMrDh4S$HiYhe(`p)s41$HxxEGK_?uk4Z; z;VeUXS9Etm-e>kcqgl(`rD$hkBO_m*2TR%?{c=W<-OG)DJ$w6u&ShKMoLrmxrl#DF zA{4*PuA(Q4cZ@+uTlDA(`qVmr(V$q@c3zMF)cr0e2g&(!b1!vT-mWEwbROrSwKZY` z>dKqzLe+lEjh5&sXMb(9NO4Mv+$I;0p0}5pZV!r#RMYs)UmzU>Pd-0BJxbc;4U5Bq z+wCuaj6dP|zWn4|IX!4foS`%dYKW0#dpHooqod8Ea)^#lQO=3QG;Gcmqsvb!jG=9m zRa89jb2kRAQEb7mW;|(UglpvkTq`eG`%N!w-79D@e6!56HAQ^%{7lCoi2UeLAx}T$ zU!k~rxB489K*i&{&rebKQRlfKSFSlF`gJWJYK)VOR|dms`kdHne;@k(RmQa*B5o-V!HL}?N{=jg$ z!?~Af!FaA8%7j1_g(}O^ZJUwHifL?8Jx~3xFx}v-^LotE+LBdJdL=l05}DnttwB*y zX5}jLi5y8})nL>z2=_4fmgumr!LczqJPbF?ndk{0P8IM?0z2Lv_+=~Wj)1R1;TXJJ zE3?vM7-R1AMzmqmYVC!~mijC<=ubN93b*72s34Tbro^U|5`~)}far%qgldRSrVT1w zNqeFFVDI|k=yG3ikJ&2VWPyrMv;e??i*nI4LN{~R{xKX4h))hU-GqZD5fG=(3CEWh zdJ{ti;Chxl(3RLh^P)}6s|EW)P|1!oUhQ)S7gn?PD_>lRk39xAmX|P*Zv>q1wQk)4 z#(uDwbhN((zE-)MuaH!?gyRLws3Mno$4MP)>*bI4s*AQ)G<3_J=C%!6p0VA2Y)sO% zfaz8RadM>|F3O9sp#uj~iI9L|IUV=(-Gt}oy2^vR4zt)9UoGKe?NOHD=Hk-3cdx?E z>+L*q5aK!jHVosFlS(qyHa7ZtdL#-SoboV@ATcrRE9zMrC<3%;WO#V|t*@z_8zlQA zn5L$tVC(@z@@846J0exyrLh}MS0CAla;9n$oUIBe_2FSXv-zE^Kr5|lnuj%sOE~4- zJ9ZI6#F+=YVZ2sW8J)7kq@vVk9+w zoKLh{xftcjpiU5MDAh!uF@M@k;uvz;^3p`dhy)ImWOItagh}`lHm-1|vlHK+He^w_ zmy3rQILox*ML%HvRVpUV)}Tm&la5YO#4*0GPzc;opzyjPehU~DH7;(wIp)#T!}iCIHA{xo? z%ZZM8B^Z)okGK+xm#Ib*?`;AsK}I@C}||Ky;yL}ttMn2mYiHI7(epS z>llqxiALVTaWDWf-sZ|)E2b~yL(MM{38mzKJIwYnE=bNnd{@cBL>Nq_{j%RO*Llsq zk0ijI)8-ovT-y2=i?3sfKS>(HrUn;*!HySjB=}Lx-St&DY_6*tN1}V1HMr>LC8A@H z5d}eQc=n&NVNh4*KjGJOe^!T&1HZaN(GqnsWT{m>7JsPxW4u z1ylu2fAGh$TW(P)qv8tmAd0w%d2|>0LO`TU`Qwdiz63BEcMeMUQa~M9j=5f_06b3e zb-8v(M8afBn%XAd{)LNJxKc@{?JtDkSIqK_9i_1UEqLY|a(93_;pRW2;QLFo#g2y1zyrY>chLbIuiZS!hIuBz z+URMefyckbpPn+(<5{XBu;YKiHvgY~`4C@>`t89-!y;;@cIsn`wJ)a73HZ?v6#p4V z{R6@k@;&qMpQpv(TFGXyNLcVn+}0X{Xl#mF`eMrYbu*LsS)SsZCKpH6&TM9B>N|f% zr3P!TQEDRg6X>nT$>^OK^!C?RoLasQSHA@8%#HZBO zSHz^Dh_a5)dhF4NW@bD-LU^#Z%X5^^&*kLmdYZr*dGMu-9lCAw)pZ7@i@h{Tnp1n& zmtIV|EALQZ_l+W(t>}*@DQDj)#;NqGakgF=&bq;EAHQ(p{+;*FXLQSxXipMQ1kU69 zgfS1eJ%!yF!H8j=e)9~QjkC{alh@$_tKy52pPKOn#btU-oLF`~iIw>DeY>N_tMp;`T%lzkgWw;!!GWZPX<=D>29D14PhHpwY$m?7Z}qm zl$8;hIhGaT>(A9hvtF{$mGHCg!r#6tZP($&f17cN!e)JsQzg-f`bC z7FN_n=U>1jHNg!yX*pT@<(BU=rI%?4M$5leq>|Of-}c2@igGZh!omL-Dz9n0W5crH zXZIF+b?l6w)BGrEQe0l_E8|0_dJ&AknqfuPoZcdb0anC*R|=8;nQB7A45$LgSrU*BEgds&|h<|wfW z=6Pn(t$yfY4$3)8{glLRmlPKrM+==yba&#n%|&NIypo{xs`)BL{-k-bp+oy;E)2Q; zUn}x*UWRc=xc`}g5L41n(>rR@(P@6SdF*GN4bn8#@Lz7cQR}qEQM9tTE%e;E2)(me zg;Jg(-Cx%b6~MZF1?w7liU#>SWdYNy#HS8~HY?y>UH*eQpnCG35#89)=se&c8Q0vykNwkhLLw)4bZd z;!;NI)OOm9_$OxM+pjIB{T(<_DfkOfi=V$=6QpUpG0iRk_qikv%Di}c#qHpcqRpB7 za;j0t%b|J+#^F7!t@JB1^QiCNzu!vLyd)^dENnm2rNfQ_O9vnmNvD221{Yt+;HkNF zN8pbj1$kQ%NOc_E*$eFZ0sykiGZ!C zfG=>zK$*L=^svzK_U*{|;8Jim*M~|rh^kqGja!m#f}4NdbCPhtFvVm4dz}S2OkNp#sR@ zK(*+CUUiB7mYxogJ@vB#2+{{546x@8SX~rqnX9O%0PF7Z<oB%->pg`g1 zSunA)n@CKMj~1qwey*UbHE)y}f0WivR>pd7<`uhi0 zJ||(q#m7(6DgS|r`lynw00u(cB@oRamIf-+@jmH{LLFQ{6Ysn`@(6y6C3ipJM;=GG++drT^5TV#|8e8H~~5fOcWVet2JlA0z?;$SFC8I#h#^2KeBX zN(#L1_N|1sz@4g}wt=(;`jx@Njg?WJIn%L^p4#uMkNQ=!#YHw(_z(ks7bu?AQydA* z>8pk;V_d4hj#gJsdSzs43Mtm~Ownqs;@wX?q(>33lHc`=cxJkMIkD7TF5%<&sEsSE zxAT;5-i&8p@Cyu7q@ke!Ji5_hjly;Palrq<+{Rc~w0#&Zh)%UMos!B>$fG*BggmzNa5ZN4318UXaokh`m#Wi zEofOZxeQ&XZfNVD!95K2alRZMKr;_EfUp4?{n?3*-Mn>cqO?^|eq!10EN|yXSMZ`JN812;`f}O)~>^kU}I2q;iZ&nX>VTx^Y%#*^-#8esp)B$cvCYof13y( z5b_Q@vx{h+BojBwtX;O;R>?rHK{wv0FSI2*yw~DBix!GSk<@GIsJ|t|qY3b^u0Qicgp)PvJYzdk(-+q^5sPXh)Bq zD(a5sTnR_JHsC8*xW@y!C8y?2*CzyYSJ2*K2Sm!_t>YG@7kurwh&)+~l&|Y5(&Ps+ zWCMfZ`ARY{DA^EM9Qhm%o8gm&?g{BH^vL~{d93`*T+M0>%;DSkcss!;NKh9u&MzAe z8rfL1gZa*vFJImzCpX=wf|=*`JF8-1=uC!b`t|6A9*O-n70-5LRH2@DuQ$@z zi|c;zYn4Aw)R|$R01(mhnI$0a2@FmQOp z6{={XHu>5P(^&-tg4+^uah(n5bzVvjQ_a{*TwF_KLJWuvU`oIbU{(P=*wD<3=ZK(% ztP>2cnOW)$pKHVY9j7613-J(z|D~`0*7@8k#UvoFg2&7TqtXDrB4BNmDu+loQGl|- zeO7srIgY}&ZPGfwr&2O-_xuKbQz)nw->W`NgF%`+P8@R`nhLPe(1`cV={t7z^hAb- z8{t+V3fkGp9nQ-%|nd5;Kg*It2&;X8I;*97$UEySh-oH(ql3jwNQ4Ngu^2RbeE zu7N|dd2oJ=O#oP(b11UogPm_><#O4YyfK8=k66HM=c;@qtr0E@utV9^I5ZWM7$Ib~8){Ah_!XQoTR=}Y? z6B-#wvBQ0I5A_q-N^d2Hy;0dl3vCcgy0T57y6^2-JA!O=Wh|h-YpJTfGY@5AX67pD zq9(wG`=6{n2pY&4Pq`)(pV9{@$A<9$+IIjG2k;fl&u+7-K=VWh zmY0@56aP4B_F`wFds6P9;Oh98*Si}7SMAniRTRJpsTdg&4P4g*?Ky{57|H5%Lu&6+MzU{MC|qfpZ##pQ(ZIdG8% z7#Fb5^4g$$MwP6L3#4|LRBuF~TT^mc5ox`<2D#lv1QBL{EM+c`V}(-Q&ncagMTkl;$R_5gN*2H$HgP?{`z;QVLbdAc$UJdC8WCuil4>?eDoB^P#Y6>JoC`we(@@`lLtU-;tR0LlOV z+y7zYuT{E^?pTyAM87|VHfZc)3!O=dTp@g_^yjez8W_*1orUT1BE=nZ`O!NE&jc{a zX#h4m@!`(XreE{+0bywVfn!#2sp_*4_O)nO$bXn_AF}8pzl9J zbag}Q&kL!*a{>5Tu?+lYB#ktr11E%ojMR64`6jdM@^SEnAHm!;Lwvd+JvG*USfm4A zAL6GhzBAF6p&pKm(^XMV<>2XX{w!kSG}1Y5y<)?}{cuKQwbkWEmJ;tqrAxJ24B4hg z;c^3A*gdMuB|HGpD8_`8ib@S1I40lNW~*wbUBRc+oXdUds9=D8X7=FWyFumnO9u4! z^e#5&m*X_vSWXK;Oa5eBii+-H>Z{k`@Tip-DDCx3`@S_8niiPXu@P3MGUA#uRPIL@ zzmZD8)OAD4W}>pB-F$jS2xVMp)`hbs)RJG_He;I0V?TSkNX^Hpa`d2d;k2i-g-deL z$_0v{%8cO#7jEU$o*SE^#^N%5T6{}$6|rxrWqLD^>5e5^L@xS$xQ_*yoWGcNC+1EE zh$s&4+zcDEn<~{+0rbpKKP{&s#D&RlnisRTGd-E#oZ>=$PG9pACJgT81+%*M+@7rG zxtnv_Lc%z2qwUO#SFL1Qv{QQwg>E>br#PD{p~-bQ3j1bN;s}9TvP9T|;L|o07MkrPtNB>+=l?bnDH&hH~!|1mSpI ztIE(ddGcT?uHusY;aT;~^pB=#XO2E|<+Xz4=hq&p_H_T)gJTULx6bS3dA4#KO4_`^ za?6CIn0ZmG3@4*fTT{S#cB2Ny5U?`st?7|%9hP~GvQG7Nr4#XH*R3h{x|cOv zwwNM}%s3sa>}(%5yEAPUEW+IrwW_myGzy1|ULIoS4=x8)e?gV5C40x^9@mbG$WN~O zP$~s!vGez>l2b|mh3OuieY{;Lvz$$`=#2k)s2#U=%*9EEpRx%zDqY=Zd?hlvm-NQB zE~Bus*EFwlP*4g)x+0^f^&g|i7Ikg4f&ZjD^9Frh_#j8UW7d%SnSzSp=(Q?E&2opi zrAUWLAymfc;<-f%I^A`aRw0yUou9vrUFBNh70_U*O$~)+Sc!=SV43e3hVR~%4Q0r{=l>Hpr|qwJIZml=FaQiMV_gf`+jdp2 zW+?NHn48$WpDmT`neTU)!xZP0Cnt?A<;>1=iR&qY>UwUmgQ4D5pIgaT!*FZoWBl2k zphW!>+44OS51XGxUYf_*c6L#C6AgKh@cfZ7%3lySV2~CSbvcyY#wQ&YTkCQn!p`%t zX&h~5???R6)NL<0u05b8(DC@SWp_h{mu80%c5mFN#ChhvxeV?03x^-D%b(h>tAd*D z?$UE8YC3|N`iF+x>I)FtLHd|?O$5EbhPK>Vo4dqS=^QYm?6qUAk3qj*;5Y2nJDotcYd__OqJ`WaM2rAV z*$;!FVvx-pfiFOst*EG|$=a55GuhsuD%C+zrec?($TgP_X{?j5_L}qGh>DIz!c&mx zK=(rSN*8)?_XJGF)J&wak#u?y)2$pL5{_|9t-ALWGgQRP=&wmvw+44C+>{2fM(^<= z7!$%ApDIkk{bsZYdX`h35w@kmF+_oN9U#*Qe=m(r-VtGZg^h%Rw5w zB+ZW)rjf9Wp*H|rL5jPTpGnw&+4x`$*!5FvK*9tySMRh9nG2)we?V;cgMi|i!Wi*+ zjjnF?nAtix6|O*!SICXp#BKkt@Y>xin=NOwz-)mP3@K2ouJIba*Sv892v^=<%Q=R+ zPwtieXnp{245W)F^#AldQ(!1oSrKHRB5nPrFjInPZPs= z&i0$rIg1Mm536C>0cV{bH0s!SU5WfiL1_af0wF^Y4 zIrfuq{OI~SS3kmm85Yubc13Hz>p^;(SI^GSE;yI=1vW3w5%~KLU^W4IMSDTYv^EVe zIkw5)+}yOr(7SfPn_m>G09nI`Bo|a?U|kHr7~sgAU0uM%1L9~fv)cE*J`p}X)$7-< z!)KT6*|dwcx~=L>dkfSwxw&$i^qAn-pa$;$pMf?SfBnXlQ^y{I4sH2;B&BmLBh!wn z?czwSq|fPbwR|vPrV(b0{~uhuWVC*cQA-kdlNwerAGV2CmX@vp8lJB#7efB|@%d1E zGjwly6&Sc&L99K7od;+)5GC(Fc+fx&qtt15q|6fQ?bYAY5$mug?nk-Fc58?pHpHXf zfPgnsJ_g;5>d{;E@aj;k=o1VCd^-@3fvt+XeNvsB7{)Bvs%^Y0r{kA0&SSlVntPqz z2_HC$ve>zxb{qqXo`Jxi1hMGQ&o?CaB3820c2wU8qsBmd*x+#_$WAJfidqg;Ki_XiX2F0KMrOU z@hKeB_J=k%3FqhkFDq5$%|ysM9j9OuKieJ3P39th+J`j0j?-MW;Uo{sQ$ zD_?fhNZ*ALMl;6U!}Xu^-sR?Y6i9F90V+Xs489}&%^QS1o0>WUG@%iSd8Bd{g6GC} zP^)~h9@aQv0OGI#&;e3(Va*4K-bv_j*Yt{gp*>pwF6u}4(=s?ZWEB*62a?y6ai?Sw zL6*)(Llc*h!a{=U45%|C@bKA@l!sAU+hAn3+@`(hScI6)OijVQf$K?{G9{Nni{=^o z@5x)U$8iD<8zN-l?)z3UY(GzB_cdmg6lfxvyIU^l)K#gC-e`jb4xSqbW1BFVm)iej z4(!{KH;3Myn7bRGKO+7Y3ywqXFBY6WZf@m?`Ex|araLkiL`3?o*lti30CN}+qQZ~D z6odFiguH~c-g4y$=laJtS8H>| z1Lw+b-to(v=X(Bg5rKjC1cNIE=R?>;xz$_Q=n3Z}a7JXgpw7|m{SV;RE`o!A zUjdx`<4lgwMhZ-`@4*TOuyRs5J}@{K88v|U+(bo10yo==cdX6L)2as5z%hHBF|1Pi zm9;S}3t;vY0JRIW=wQDKM>_OBUIxn+*xz|*-4f=2Vw?RX{Wji;~fn8N2X#b*3 zGHynge}XXDi;D5{Do`L{nIOc^69y$GwO@V!5jNJX*YC00`I~ss#r(&|;UVQvA}cKFHM+anvyPJ(4fC-F+Ve1M9`D z62a!bDz!@ggBrKgPGZ5uX+lOuRyNDuN?Zxd>9=p+PEDBvR|kfM+Vz)U2%Ug+1YJaX zw}ws#-SV+n(r$RA2;Lx|)rXp){ZR8A?iG3{g}?yimBz-#KFv{`RQhLroL^I0{p3ZF zQBD8}+n`qDMf|%MQ*P@DVNumCq+HgehZJ&LUCXefq@=);Nq1)h%QKQX!QJ)v{%BGO zN0+_O0}@ONp7_;WWZi}j#~)r9_KW%eHcF$dbD6rs! zJM@$J`W`^&OTmL{!T&2EyY)8-sd@|g{%_bAP@MKK{GZ{&pKzL=Jk6G*9R-13kKU8b z0(a2qW9==AF71%+0|zMhu1Z{1E<&PDeiM>`hd+NQlqi0m*Q_LT({C7G*}fF^*96`v zBS>)nnJ?=E?#6)oYS5e8(Kf#x{fF84BiQp_2hma3lkO}1zr_%LUc&!w5cltke}{j* zG|l#2JPwF@%fA}9xpnd&+Hg39@W`I<{kFi8cPD0li=<4TGk?v=ueHn2WpZki3{epO zEAaKl;w9#*JpXp>Dr9$DsN>cA@4zvdF&nm@!?|sw)rOKuC~-zgwc}|w?z)c6#{J4{QUc-wWEvBZUP!8%TH<)rd2riaTuw#NAq~Mf;UJF2zoH@hclJx3a|4{(lk|6 z47TpgAub%i2?t}l>S6UPqnmK$n$cF$1A%7)wSOw0P8NGzOOYq zwgZWo%6aV$I|-L?3mc}JC{#0rJ0UoOK4NDQPEQ+3;uJ_y|11FhoPa$l{3)6qp@leL z`S|<$BZPQ6sNAWms~a09H(r7IBZvsVr5sLhaL@TmLo=wf{m7L;6d^=%s_5h$?1dKw zZ{A`EeA3#wT3W#87IF@DKE8La_+54!;TVU!vwjqj=|IAg2<#N;SGbSGpaKMB3;~Cg z_w}QQfwqu?4b)c@FOcAx^%mrQ`0yb)IXOQ+-*C$Sx;<3V%Ot`j3EgFl1(qItN@+B5K6q2FXo7`3Lcyc zf-n{L)E>pfyy$vtN{T5g4SqHVoFPN`Dk>zn4b z)1CKNg<(=5q=d5FD@3PKX^ohM0e1q{DUgYf396~#nkhvTRYi`uJ6{}Io~3U=(_?^$ zcme-e=FkT6n0Csm7cUewH3iw(by{*8kZXed#xMCDhbkZ#V>$fXh%*o1O#{~+f2mv)IGANbN_xKG4c z2>!rOp!y2wGKlb&hTf!qR5aS-;BQvi`^)2o<49R<>z%}T06&r{R&Y!}BL`1X$+<@WH z9ISTOy%YjZAs*oG0qKcV?c*EJ+;-jpxhyE*gp7Fw1q&>PWvsq=|E7kkBYC$hANMcB za5XB+o?>T<`}(@NHWNg)??aXe_4t9=C*6${wGqR6G2MQoup1rFJHNs1)7@ot{4iDj zD1kP;sV%q&PADToLt~r#HE6oi#4RB>*o$;hGKoM~gLMnXl+Q4jw=}BIjhlj|`5k^y za`NOO)TLQ0N*k@SgTrTAnnUQL{oOMx=h>W1p6P0#XvHS_F{-?z&8Xjra#}4$-i@1 zEGlnU;1)>g!hKSeSbF)?TNC~wWvBxpJijRN`LSTWWW?NME4qHs8| z!Gl~|yAL>;eq`)5E^m)N7K5}If^4AYA!ixnx0YwVKXHu}Qq*7iHrqS6%^Rk`(&>{Rhg16h6{RJCZ3Z>eNJ<9!uRT>15{2#uP)6sf zo*Hg?Q}hn3bE#J=X`5YZ0FK(0qc?zd)@;tlDVa0fNZ%yKX6FNc!4?u z3N{JHcO}jBKBtj|Eq&}79nzZxRF@5F>W@e^|H|Kg)NPFs7XF}NYlL$jKK8Y~p7(oX z(GfN#CfPnd(;ee5GtL3}0lqTM7`sD+b4z{8f6v^_>9m4_gVXj9P|&9Xt;3{31M9?Y zn7hx47FHlZ1a0`+_wQ>2cEDVfe6SZ^ zR^D&dQ6@tapzW?{=ixvVxEz3cmkuowfF>q{)7II^51X1s+8?S7WuEvzG_AlxZA?_b z5ea0+-dwAM#6(6B5j1Rrk)Hp%cI~dCnr3-o!GG%32yhSoO|}N%$1BA~o<_`#J1QH= z>vw(2&h<0KugvzDJ67F>zm%7khoksB(Z#4(#-c}v(HIEYfF{$ZolG!oSZnxG%e8Oq zbCi<)+zcz?OceRFRy}JD=x{J%cXG#Z=4&`nGK`CDv|C^qr{{BZ1`=DJ3N`I6Gk;FjBx| zv#7Px)zw{dvfp5u5{tPG5DHjdfjGUUM({zuYj1XJ>}OP1y0FQh8{Np;B_~&VC?~SY zU%d*f7QEziUWg+Zfial^jMs`!-?#*kg8~S4_w@DiG*iLMw6jw^lA%_ik^Ib=L=X=v zD75umXl!WE5qx@2M~8aLu(lWh>`=Rj@9*jCpELNSmwvU{(fuDz4m~9J5c9X(j^fFS z-79qJ!Rft>8hCr~{RJBn$sBK+-&)Ud`HNca>M;M7_x|_veScpYdEOZVZ^v{R%_#+4 zN2^qdI{#mpzW%%2AM<;l)2a7qesf!-yG_`Os<_YmrBeUCztaJXy##z;h4;sl_itP6 zj|uqxBKl+Q1sKt_`Yw|A5-4HLl%EZy7zOtKjH?zpXo_|O1k&Q^v@|TIB@+; zivNgQ{MUi|nH2w#xU)~A{A0=sQ}`<>{#OI{GZ*{=7v+~T)gMz{*a5$i;(s-8Ka=AB zGpwC%*m@?cYo&mTGU0tP>?@uK1suGQPgZ(GjA@b;aPW~Ztb;@Z(<^)=jI4lzkA#tz zUO^*a;Px$90XLe_u`jHG@4_9;=#bSs&_$7>867<2J(|&>sRA;LPOyZ8_0mRbbm&Y< z0c2eqY<6L^Mu(1zLq`8mW+_K&bjYN^0m$6hU~Rg8bUd&*iydjQ23$f+kZ4@N_+HH( zF^30c8T%fXqw@ajgPG#swI1+U5#Xe$8kfL_v`6{9$>5y?a2X{Ife%UxHXsgU1tpjn zolGoyX8wqNJOeSY0vg2O019(x=pfFH1sRjJh=DO*?cX(vG{kHskfqSXz^Ko})eRcc zf=e{c)NnX3yK}#3pCm#M$m&pVIMCg2NC~bGBs(;n{O5nbe+$kHg4NLsK;Y@>=d#Wz Gp$P!jKx$Y3 literal 0 HcmV?d00001 diff --git a/ej2-vue/file-manager/images/customize_selected_file.png b/ej2-vue/file-manager/images/customize_selected_file.png new file mode 100644 index 0000000000000000000000000000000000000000..2e575f90e66278f61607f298cc81c49965e2262a GIT binary patch literal 37233 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�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 literal 0 HcmV?d00001 From e13bb0cacc18e6ab81b31e093d5e803f77fab356 Mon Sep 17 00:00:00 2001 From: Build Automaion Date: Wed, 29 Oct 2025 07:42:51 +0530 Subject: [PATCH 07/16] Integrated latest changes at 10-29-2025 7:30:04 AM --- ej2-vue-toc.html | 4 ++-- .../ai-assistview/ai-integrations/gemini-integration.md | 2 +- .../ai-integrations/ollama-llm-integration.md | 2 +- .../ai-assistview/ai-integrations/openai-integration.md | 4 ++-- .../mcp-server.md | 0 .../overview.md | 2 +- .../bot-integrations/integration-with-bot-framework.md | 8 ++++++-- .../bot-integrations/integration-with-dialogflow.md | 6 +++--- ej2-vue/diagram/getting-started.md | 2 ++ ej2-vue/introduction.md | 2 +- ej2-vue/pivotview/getting-started.md | 4 +++- ej2-vue/rich-text-editor/getting-started.md | 2 ++ ej2-vue/schedule/getting-started.md | 2 ++ 13 files changed, 26 insertions(+), 14 deletions(-) rename ej2-vue/{ai-coding-assistants => ai-coding-assistant}/mcp-server.md (100%) rename ej2-vue/{ai-coding-assistants => ai-coding-assistant}/overview.md (97%) diff --git a/ej2-vue-toc.html b/ej2-vue-toc.html index b2a5d0a58..fd59f9db8 100644 --- a/ej2-vue-toc.html +++ b/ej2-vue-toc.html @@ -35,8 +35,8 @@

    • AI Coding Assistant
    • diff --git a/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md b/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md index e35158af7..33b13d583 100644 --- a/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md +++ b/ej2-vue/ai-assistview/ai-integrations/gemini-integration.md @@ -24,7 +24,7 @@ The AI AssistView component integrates with Google’s [Gemini](https://ai.googl ## Set Up the Vue Environment -Follow the Syncfusion AI AssistView [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your Vue application. +Follow the [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your Vue application. ## Install Dependencies diff --git a/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md b/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md index c6c47ca96..b674d58f4 100644 --- a/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md +++ b/ej2-vue/ai-assistview/ai-integrations/ollama-llm-integration.md @@ -26,7 +26,7 @@ Before starting, ensure you have the following: ## Set Up the Vue Environment -Follow the Syncfusion AI AssistView [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application. +Follow the [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application. ## Install Dependency diff --git a/ej2-vue/ai-assistview/ai-integrations/openai-integration.md b/ej2-vue/ai-assistview/ai-integrations/openai-integration.md index 5246862ce..e93724bf9 100644 --- a/ej2-vue/ai-assistview/ai-integrations/openai-integration.md +++ b/ej2-vue/ai-assistview/ai-integrations/openai-integration.md @@ -24,7 +24,7 @@ The AI AssistView component integrates with [Azure OpenAI](https://microsoft.git ## Set Up the vue Environment -Follow the Syncfusion AI AssistView [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application. +Follow the [Getting Started](../getting-started) guide to configure and render the AI AssistView component in your vue application. ## Install Dependency @@ -46,7 +46,7 @@ To install the marked library, run `npm install marked --save` in your project d > `Security Note`: Never expose your API key in client-side code for production applications. Use a server-side proxy or environment variables to manage sensitive information securely. -## Configure OpenAI with AI AssistView +## Configure AI AssistView with Azure OpenAI Modify the `src/App.js` file to integrate the Azure OpenAI with AI AssistView component diff --git a/ej2-vue/ai-coding-assistants/mcp-server.md b/ej2-vue/ai-coding-assistant/mcp-server.md similarity index 100% rename from ej2-vue/ai-coding-assistants/mcp-server.md rename to ej2-vue/ai-coding-assistant/mcp-server.md diff --git a/ej2-vue/ai-coding-assistants/overview.md b/ej2-vue/ai-coding-assistant/overview.md similarity index 97% rename from ej2-vue/ai-coding-assistants/overview.md rename to ej2-vue/ai-coding-assistant/overview.md index 8a9c4dd77..52815a623 100644 --- a/ej2-vue/ai-coding-assistants/overview.md +++ b/ej2-vue/ai-coding-assistant/overview.md @@ -66,5 +66,5 @@ The Syncfusion® AI Coding Assistant is desi ## See also -* Add the [SyncfusionVueAssistant MCP Server](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistants/mcp-server) to an MCP-enabled client +* Add the [SyncfusionVueAssistant MCP Server](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/mcp-server) to an MCP-enabled client * [Syncfusion® Vue Documentation](https://ej2.syncfusion.com/vue/documentation) diff --git a/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md b/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md index 011dc9fb5..6a1e17492 100644 --- a/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md +++ b/ej2-vue/chat-ui/bot-integrations/integration-with-bot-framework.md @@ -10,7 +10,7 @@ domainurl: ##DomainURL## # Integrate Microsoft Bot Framework with Vue Chat UI component -The Chat UI component integrates seamlessly with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring Direct Line in Azure, and integrating the Chat UI in the application. +The Chat UI component integrates with a [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0) bot hosted on Azure, enabling a custom chat interface for seamless user interaction. The process involves setting up a secure backend token server, configuring Direct Line in Azure, and integrating the Chat UI in the application. ## Prerequisites @@ -24,6 +24,10 @@ Before starting, ensure you have the following: * **Deployed Azure Bot**: A bot should be created and published using the [Microsoft Bot Framework](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0), which is accessible via an Azure App Service. Refer to Microsoft's Bot Creation Guide. +## Set Up the vue Environment + +Follow the [Getting Started](../getting-started) guide to configure and render the Chat UI component in your vue application. + ## Install Dependencies Install the required packages: @@ -108,7 +112,7 @@ app.listen(port, () => console.log(`Token server running on http://localhost:${p ## Configure ChatUI -Modify the `src/App.vue` file to connect the Syncfusion Chat UI to the bot via the direct line API: +Modify the `src/App.vue` file to connect the Chat UI to the bot via the direct line API: {% tabs %} {% highlight html tabtitle="Options API (~/src/App.vue)" %} diff --git a/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md b/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md index 77ce5de71..d8cd6ce88 100644 --- a/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md +++ b/ej2-vue/chat-ui/bot-integrations/integration-with-dialogflow.md @@ -24,7 +24,7 @@ The Chat UI component integrates with [Google Dialogflow](https://cloud.google.c ## Set Up the vue Environment -Follow the Syncfusion Chat UI [Getting Started](../getting-started) guide to configure and render the Chat UI component in your vue application. +Follow the [Getting Started](../getting-started) guide to configure and render the Chat UI component in your vue application. ## Install Dependency @@ -118,7 +118,7 @@ app.listen(5000, () => console.log('Backend running on http://localhost:5000')); ## Configure message send -Use the Chat UI `messageSend` event to exchanges message. Each time a user sends a message, this event will be invoked with details of the sent message. +Use the Chat UI [messageSend](../api/chat-ui/#messagesend) event to exchanges message. Each time a user sends a message, this event will be invoked with details of the sent message. ### Forward Message to backend: @@ -126,7 +126,7 @@ Upon message submission, a POST request is sent to your backend API endpoint (`/ ### Displaying Bot response: -Modify the `src/App.vue` file to integrate the Syncfusion Chat UI with the dialogflow backend: +Modify the `src/App.vue` file to integrate the Chat UI with the dialogflow backend: {% tabs %} {% highlight html tabtitle="Options API (~/src/App.vue)" %} diff --git a/ej2-vue/diagram/getting-started.md b/ej2-vue/diagram/getting-started.md index bb048e6e1..aef95180c 100644 --- a/ej2-vue/diagram/getting-started.md +++ b/ej2-vue/diagram/getting-started.md @@ -12,6 +12,8 @@ domainurl: ##DomainURL## This article provides a step-by-step guide for setting up a Vue 2 project using [Vue-CLI](https://cli.vuejs.org/) and integrating the Syncfusion® Vue Diagram component +> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/overview) + ## Prerequisites [System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements) diff --git a/ej2-vue/introduction.md b/ej2-vue/introduction.md index 49727556f..b6c3d1319 100644 --- a/ej2-vue/introduction.md +++ b/ej2-vue/introduction.md @@ -12,7 +12,7 @@ domainurl: ##DomainURL## Syncfusion® Vue is a modern UI Components library that has been built from the ground up to be lightweight, responsive, modular and touch friendly. It also includes complete support for Angular, React, ASP.NET MVC and ASP.NET Core frameworks. -> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistants/overview) +> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/overview) ## Components list diff --git a/ej2-vue/pivotview/getting-started.md b/ej2-vue/pivotview/getting-started.md index fa2d0df2b..92317ebb0 100644 --- a/ej2-vue/pivotview/getting-started.md +++ b/ej2-vue/pivotview/getting-started.md @@ -12,13 +12,15 @@ domainurl: ##DomainURL## This article provides a step-by-step guide for setting up a Vue 2 project using [Vue-CLI](https://cli.vuejs.org/) and integrating the Syncfusion® Vue Pivotview component +> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/overview) + To quickly get started with Vue Pivot Table, you can refer to this video: {% youtube "https://www.youtube.com/watch?v=P06XgGUwUFc" %} ## Prerequisites -[System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements/) +[System requirements for Syncfusion® Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements) ## Dependencies diff --git a/ej2-vue/rich-text-editor/getting-started.md b/ej2-vue/rich-text-editor/getting-started.md index f4d030ed1..d1e61e879 100644 --- a/ej2-vue/rich-text-editor/getting-started.md +++ b/ej2-vue/rich-text-editor/getting-started.md @@ -12,6 +12,8 @@ domainurl: ##DomainURL## This article provides a step-by-step guide for setting up a Vue 2 project using [Vue-CLI](https://cli.vuejs.org/) and integrating the Syncfusion Vue Rich text editor component +> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/overview) + ## Prerequisites [System requirements for Syncfusion Vue UI components](https://ej2.syncfusion.com/vue/documentation/system-requirements) diff --git a/ej2-vue/schedule/getting-started.md b/ej2-vue/schedule/getting-started.md index d91e0df8d..ab55541e6 100644 --- a/ej2-vue/schedule/getting-started.md +++ b/ej2-vue/schedule/getting-started.md @@ -12,6 +12,8 @@ domainurl: ##DomainURL## This article provides a step-by-step guide for setting up a Vue 2 project using [Vue-CLI](https://cli.vuejs.org/) and integrating the Syncfusion® Vue Schedule component. +> **Ready to streamline your Syncfusion® Vue development?** Discover the full potential of Syncfusion® Vue components with Syncfusion® AI Coding Assistant. Effortlessly integrate, configure, and enhance your projects with intelligent, context-aware code suggestions, streamlined setups, and real-time insights—all seamlessly integrated into your preferred AI-powered IDEs like VS Code, Cursor, Syncfusion® CodeStudio and more. [Explore Syncfusion® AI Coding Assistant](https://ej2.syncfusion.com/vue/documentation/ai-coding-assistant/overview) + Check out this video to see how to develop a Vue Scheduler application: {% youtube "https://www.youtube.com/watch?v=Wak6k6cYPiA" %} From 719719c3b0cb3f6eb4579f11742e0a5dcdf19dd1 Mon Sep 17 00:00:00 2001 From: Build Automaion Date: Thu, 30 Oct 2025 08:49:55 +0530 Subject: [PATCH 08/16] Integrated latest changes at 10-30-2025 7:30:18 AM --- .../llm-model/app-composition.vue | 77 ++++++++++--------- .../ai-integrations/llm-model/app.vue | 2 + .../speech/stt/app-composition.vue | 30 +++++--- .../ai-assistview/speech/stt/app.vue | 14 ++-- .../speech/tts/app-composition.vue | 16 ++-- .../ai-assistview/speech/tts/app.vue | 15 ++-- ej2-vue/grid/filtering/filter-bar.md | 2 +- 7 files changed, 93 insertions(+), 63 deletions(-) diff --git a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue index 8a2893559..2c54781e0 100644 --- a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue +++ b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app-composition.vue @@ -1,21 +1,21 @@ + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue index c170d22dd..0dd1d413c 100644 --- a/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue +++ b/ej2-vue/code-snippet/ai-assistview/ai-integrations/llm-model/app.vue @@ -93,9 +93,11 @@ methods: { diff --git a/ej2-vue/code-snippet/ai-assistview/speech/stt/app-composition.vue b/ej2-vue/code-snippet/ai-assistview/speech/stt/app-composition.vue index 7b4a2d1fe..d75228d2d 100644 --- a/ej2-vue/code-snippet/ai-assistview/speech/stt/app-composition.vue +++ b/ej2-vue/code-snippet/ai-assistview/speech/stt/app-composition.vue @@ -58,12 +58,13 @@ import { SpeechToTextComponent as EjsSpeechtotext } from "@syncfusion/ej2-vue-in import { ButtonComponent as EjsButton } from '@syncfusion/ej2-vue-buttons'; import { marked } from 'marked'; -const azureOpenAIApiKey: '', // YOUR_AZURE_OPENAI_API_KEY -const azureOpenAIEndpoint: '', // YOUR_AZURE_OPENAI_API_ENDPOINT -const azureOpenAIApiVersion: '', // YOUR_AZURE_OPENAI_API_VERSION -const azureDeploymentName: '', // YOUR_DEPLOYMENT_NAME +// Remove the colon after the variable names +const azureOpenAIApiKey = ''; // YOUR_AZURE_OPENAI_API_KEY +const azureOpenAIEndpoint = ''; // YOUR_AZURE_OPENAI_API_ENDPOINT +const azureOpenAIApiVersion = ''; // YOUR_AZURE_OPENAI_API_VERSION +const azureDeploymentName = ''; // YOUR_DEPLOYMENT_NAME -const stopStreaming = false; +const stopStreaming = ref(false); // This should also be ref for reactivity if it changes const toolbarSettings = { items: [ @@ -73,16 +74,18 @@ const toolbarSettings = { tooltip: 'Clear Prompts', }, ], - itemClicked: () => { + // Corrected 'this' context issues for itemClicked + itemClicked: (args) => { aiAssist.value.ej2Instances.prompts = []; stopStreaming.value = true; }, }; const promptToolbarSettings = { + // Corrected 'this' context issues for itemClicked itemClicked: (args) => { if (args.item.iconCss === 'e-icons e-assist-edit') { assistviewFooter.value.innerHTML = aiAssist.value.ej2Instances.prompts[args.dataIndex].prompt; - this.toggleButtons(); + toggleButtons(); // Call the function directly } }, }; @@ -98,7 +101,8 @@ const streamResponse = async (response) => { const responseUpdateRate = 10; let i = 0; const responseLength = response.length; - while (i < responseLength && !this.stopStreaming) { + // Corrected 'this' context issues + while (i < responseLength && !stopStreaming.value) { lastResponse += response[i]; i++; if (i % responseUpdateRate === 0 || i === responseLength) { @@ -159,18 +163,18 @@ const onTranscriptChange = (args) => { // Toggles button visibility when speech-to-text listening stops const onListeningStop = () => { - this.toggleButtons(); + toggleButtons(); // Call the function directly }; // Initializes button visibility when the speech-to-text component is created const created = () => { - this.toggleButtons(); + toggleButtons(); // Call the function directly }; // Handles Enter key press in the input to send the prompt without Shift const handleEvent = (e) => { if (e.key === 'Enter' && !e.shiftKey) { - this.sendIconClicked(); + sendIconClicked(); // Call the function directly e.preventDefault(); } }; @@ -199,9 +203,13 @@ const sendIconClicked = (args) => { \ No newline at end of file diff --git a/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue b/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue index 3e22b0483..2a09af700 100644 --- a/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue +++ b/ej2-vue/code-snippet/ai-assistview/speech/stt/app.vue @@ -208,9 +208,13 @@ export default { }; \ No newline at end of file diff --git a/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue b/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue index 96edc3d0b..6dfd04cc3 100644 --- a/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue +++ b/ej2-vue/code-snippet/ai-assistview/speech/tts/app-composition.vue @@ -24,10 +24,10 @@ import { ref } from 'vue'; import { AIAssistViewComponent as EjsAiassistview } from '@syncfusion/ej2-vue-interactive-chat'; import { marked } from 'marked'; -const azureOpenAIApiKey: '', // YOUR_AZURE_OPENAI_API_KEY -const azureOpenAIEndpoint: '', // YOUR_AZURE_OPENAI_API_ENDPOINT -const azureOpenAIApiVersion: '', // YOUR_AZURE_OPENAI_API_VERSION -const azureDeploymentName: '', // YOUR_DEPLOYMENT_NAME +const azureOpenAIApiKey = ''; // YOUR_AZURE_OPENAI_API_KEY +const azureOpenAIEndpoint = ''; // YOUR_AZURE_OPENAI_API_ENDPOINT +const azureOpenAIApiVersion = ''; // YOUR_AZURE_OPENAI_API_VERSION +const azureDeploymentName = ''; // YOUR_DEPLOYMENT_NAME // YOUR_DEPLOYMENT_NAME const stopStreaming = false; const currentUtterance = null; @@ -52,9 +52,9 @@ const responseToolbarSettings = { { type: 'Button', iconCss: 'e-icons e-assist-dislike', tooltip: 'Need Improvement' }, ], itemClicked: (args) => onResponseToolbarItemClicked(args) -}, +}; -const aiAssist = ref(null); + const aiAssist = ref(null); // Streams the AI response character by character to create a typing effect const streamResponse = async (response) => { @@ -144,9 +144,13 @@ const onResponseToolbarItemClicked = (args) => { \ No newline at end of file diff --git a/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue b/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue index 92a7145e7..bc8922ad3 100644 --- a/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue +++ b/ej2-vue/code-snippet/ai-assistview/speech/tts/app.vue @@ -153,10 +153,15 @@ export default { }, }; + \ No newline at end of file diff --git a/ej2-vue/grid/filtering/filter-bar.md b/ej2-vue/grid/filtering/filter-bar.md index 8e1042a8e..67ed30954 100644 --- a/ej2-vue/grid/filtering/filter-bar.md +++ b/ej2-vue/grid/filtering/filter-bar.md @@ -44,7 +44,7 @@ The following example demonstrates how to activate default filtering in the grid {% previewsample "page.domainurl/code-snippet/grid/filter/filter-bar-cs1" %} -> To enable or dynamically switch the filter type, you must set the [filterSettings.type](https://ej2.syncfusion.com/vue/documentation/api/grid/filtersettings/#type) as **FilterBar**. +> If the [filterSettings.type](https://ej2.syncfusion.com/vue/documentation/api/grid/filtersettings/#type) is not explicitly specified, it defaults to **FilterBar**. ## Filter bar modes From 2a48ef8fd53dff566ebc81a429128881eea062b6 Mon Sep 17 00:00:00 2001 From: Build Automaion Date: Fri, 31 Oct 2025 08:58:53 +0530 Subject: [PATCH 09/16] Integrated latest changes at 10-31-2025 7:36:40 AM --- ej2-vue-toc.html | 3 + .../grid/edit/edit-cs6/app-composition.vue | 17 +- .../code-snippet/grid/edit/edit-cs6/app.vue | 13 +- .../how-to/grid-resize/app-composition.vue | 4 +- .../grid/how-to/grid-resize/app.vue | 4 +- .../grid/how-to/grid-resize/index.js | 5 +- .../fullscreen-mode/app-composition.vue | 25 +++ .../rich-text-editor/fullscreen-mode/app.vue | 37 ++++ .../fullscreen-mode/index.css | 9 + .../fullscreen-mode/index.html | 23 +++ .../rich-text-editor/fullscreen-mode/index.js | 27 +++ .../fullscreen-mode/systemjs.config.js | 50 +++++ .../mail-merge/app-composition.vue | 168 +++++++++++++++++ .../rich-text-editor/mail-merge/app.vue | 177 ++++++++++++++++++ .../rich-text-editor/mail-merge/index.css | 9 + .../rich-text-editor/mail-merge/index.html | 23 +++ .../rich-text-editor/mail-merge/index.js | 27 +++ .../mail-merge/systemjs.config.js | 50 +++++ .../mention-min-length/app-composition.vue | 59 ++++++ .../mention-min-length/app.vue | 49 +++++ .../mention-min-length/index.css | 47 +++++ .../mention-min-length/index.html | 23 +++ .../mention-min-length/index.js | 57 ++++++ .../mention-min-length/systemjs.config.js | 48 +++++ .../app-composition.vue | 59 ++++++ .../mention-suggestion-list/app.vue | 49 +++++ .../mention-suggestion-list/index.css | 47 +++++ .../mention-suggestion-list/index.html | 23 +++ .../mention-suggestion-list/index.js | 57 ++++++ .../systemjs.config.js | 48 +++++ .../nesting-blockquote/app-composition.vue | 31 +++ .../nesting-blockquote/app.vue | 43 +++++ .../nesting-blockquote/index.css | 9 + .../nesting-blockquote/index.html | 23 +++ .../nesting-blockquote/index.js | 27 +++ .../nesting-blockquote/systemjs.config.js | 50 +++++ .../nesting-table/app-composition.vue | 59 ++++++ .../rich-text-editor/nesting-table/app.vue | 71 +++++++ .../rich-text-editor/nesting-table/index.css | 9 + .../rich-text-editor/nesting-table/index.html | 23 +++ .../rich-text-editor/nesting-table/index.js | 27 +++ .../nesting-table/systemjs.config.js | 50 +++++ .../app-composition.vue | 14 +- .../app-composition.vue | 8 +- .../selection/app-composition.vue | 88 +++++++++ .../rich-text-editor/selection/app.vue | 97 ++++++++++ .../rich-text-editor/selection/index.css | 9 + .../rich-text-editor/selection/index.html | 23 +++ .../rich-text-editor/selection/index.js | 29 +++ ej2-vue/grid/module.md | 4 +- .../editor-types/editor-modes.md | 2 +- .../rich-text-editor/images/list-editing.gif | Bin 0 -> 4533811 bytes ej2-vue/rich-text-editor/selection.md | 28 +++ .../smart-editing/mail-merge.md | 26 +++ .../smart-editing/mentions.md | 74 +++++++- ej2-vue/rich-text-editor/style.md | 12 +- ej2-vue/rich-text-editor/table.md | 22 +++ .../rich-text-editor/tools/fullscreen-tool.md | 34 ++++ .../rich-text-editor/tools/text-formatting.md | 31 +++ 59 files changed, 2121 insertions(+), 39 deletions(-) create mode 100644 ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app-composition.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.css create mode 100644 ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.html create mode 100644 ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/systemjs.config.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/mail-merge/app-composition.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/mail-merge/app.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/mail-merge/index.css create mode 100644 ej2-vue/code-snippet/rich-text-editor/mail-merge/index.html create mode 100644 ej2-vue/code-snippet/rich-text-editor/mail-merge/index.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/mail-merge/systemjs.config.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-min-length/app-composition.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-min-length/app.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.css create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.html create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-min-length/systemjs.config.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app-composition.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.css create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.html create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/systemjs.config.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app-composition.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.css create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.html create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/systemjs.config.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-table/app-composition.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-table/app.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-table/index.css create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-table/index.html create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-table/index.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/nesting-table/systemjs.config.js create mode 100644 ej2-vue/code-snippet/rich-text-editor/selection/app-composition.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/selection/app.vue create mode 100644 ej2-vue/code-snippet/rich-text-editor/selection/index.css create mode 100644 ej2-vue/code-snippet/rich-text-editor/selection/index.html create mode 100644 ej2-vue/code-snippet/rich-text-editor/selection/index.js create mode 100644 ej2-vue/rich-text-editor/images/list-editing.gif create mode 100644 ej2-vue/rich-text-editor/selection.md create mode 100644 ej2-vue/rich-text-editor/smart-editing/mail-merge.md create mode 100644 ej2-vue/rich-text-editor/tools/fullscreen-tool.md diff --git a/ej2-vue-toc.html b/ej2-vue-toc.html index fd59f9db8..83af46088 100644 --- a/ej2-vue-toc.html +++ b/ej2-vue-toc.html @@ -2190,6 +2190,7 @@
    • Custom Tools
    • Text formatting and structural
    • Styling Tools
    • +
    • Expanding Editor to Fullscreen View
  • Editor Types @@ -2213,6 +2214,7 @@
  • Mention Integration
  • Slash Commands
  • Emoji Picker
  • +
  • Mail Merge Integration
  • Validation and Security @@ -2225,6 +2227,7 @@
  • Link Manipulation
  • Table Manipulation
  • Code Block
  • +
  • Selection
  • Paste Clean-up
  • Enter Key Configuration
  • Undo and Redo
  • diff --git a/ej2-vue/code-snippet/grid/edit/edit-cs6/app-composition.vue b/ej2-vue/code-snippet/grid/edit/edit-cs6/app-composition.vue index 1f4574d36..d8c8e4cf2 100644 --- a/ej2-vue/code-snippet/grid/edit/edit-cs6/app-composition.vue +++ b/ej2-vue/code-snippet/grid/edit/edit-cs6/app-composition.vue @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app.vue b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app.vue new file mode 100644 index 000000000..655e5c690 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/app.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.css b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.css new file mode 100644 index 000000000..e3c0074c9 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.css @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.html b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.html new file mode 100644 index 000000000..303d777bf --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.html @@ -0,0 +1,23 @@ + + + + + + + EJ2 Vue Sample + + + + + + + + + + + +
    Loading....
    + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.js b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.js new file mode 100644 index 000000000..4b5cc800d --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/index.js @@ -0,0 +1,27 @@ +import Vue from 'vue'; +import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor'; + +Vue.use(RichTextEditorPlugin); + +new Vue({ + el: '#app', + template: ``, + + data() { + return { + toolbarSettings: { + items: ['Bold', 'Italic', 'Underline', 'StrikeThrough', + 'FontName', 'FontSize', 'FontColor', 'BackgroundColor', + 'LowerCase', 'UpperCase', '|', + 'Formats', 'Alignments', 'OrderedList', 'UnorderedList', + 'Outdent', 'Indent', '|', + 'CreateLink', 'Image', '|', 'ClearFormat', + 'SourceCode', 'FullScreen', '|', 'Undo', 'Redo'] + }, + rteValue: `

    The Syncfusion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.

    Key features:

    • Provides <IFRAME> and <DIV> modes.

    • Bulleted and numbered lists.

    • Handles images, hyperlinks, videos, hyperlinks, uploads, etc.

    • Contains undo/redo manager.

    Sky with sun
    `, + } + }, + provide: { + richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar] + } +}); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/systemjs.config.js new file mode 100644 index 000000000..7f1950c45 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/fullscreen-mode/systemjs.config.js @@ -0,0 +1,50 @@ +System.config({ + transpiler: "typescript", + typescriptOptions: { + compilerOptions: { + target: "umd", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/" + }, + map: { + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", +vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js", + "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js", + "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js", + "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js", + "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js", + "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js", + "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js", + "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js", + "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js", + "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js", + "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js", + "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js", + "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js", + "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js", + "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js", + "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js", + "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js" + } +}); + +System.import('index.js'); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app-composition.vue new file mode 100644 index 000000000..ad9112043 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app-composition.vue @@ -0,0 +1,168 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/app.vue b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app.vue new file mode 100644 index 000000000..0d3714fa1 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/app.vue @@ -0,0 +1,177 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.css b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.css new file mode 100644 index 000000000..e3c0074c9 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.css @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.html b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.html new file mode 100644 index 000000000..303d777bf --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.html @@ -0,0 +1,23 @@ + + + + + + + EJ2 Vue Sample + + + + + + + + + + + +
    Loading....
    + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.js b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.js new file mode 100644 index 000000000..4b5cc800d --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/index.js @@ -0,0 +1,27 @@ +import Vue from 'vue'; +import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor'; + +Vue.use(RichTextEditorPlugin); + +new Vue({ + el: '#app', + template: ``, + + data() { + return { + toolbarSettings: { + items: ['Bold', 'Italic', 'Underline', 'StrikeThrough', + 'FontName', 'FontSize', 'FontColor', 'BackgroundColor', + 'LowerCase', 'UpperCase', '|', + 'Formats', 'Alignments', 'OrderedList', 'UnorderedList', + 'Outdent', 'Indent', '|', + 'CreateLink', 'Image', '|', 'ClearFormat', + 'SourceCode', 'FullScreen', '|', 'Undo', 'Redo'] + }, + rteValue: `

    The Syncfusion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.

    Key features:

    • Provides <IFRAME> and <DIV> modes.

    • Bulleted and numbered lists.

    • Handles images, hyperlinks, videos, hyperlinks, uploads, etc.

    • Contains undo/redo manager.

    Sky with sun
    `, + } + }, + provide: { + richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar] + } +}); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mail-merge/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/mail-merge/systemjs.config.js new file mode 100644 index 000000000..7f1950c45 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mail-merge/systemjs.config.js @@ -0,0 +1,50 @@ +System.config({ + transpiler: "typescript", + typescriptOptions: { + compilerOptions: { + target: "umd", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/" + }, + map: { + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", +vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js", + "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js", + "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js", + "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js", + "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js", + "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js", + "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js", + "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js", + "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js", + "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js", + "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js", + "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js", + "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js", + "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js", + "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js", + "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js", + "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js" + } +}); + +System.import('index.js'); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app-composition.vue new file mode 100644 index 000000000..83d689c09 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app-composition.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app.vue b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app.vue new file mode 100644 index 000000000..7e5f4f732 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/app.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.css b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.css new file mode 100644 index 000000000..e6b747476 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.css @@ -0,0 +1,47 @@ +#mention-TemplateList { + position: relative; + display: inline-block; + padding: 2px; +} +.mentionNameList .person, .mentionNameList.email { + display: block; + line-height: 20px; + text-indent: 5px; +} +.mentionNameList .person { + font-size: 16px; +} +.mentionEmpImage { + display: inline-block; + width: 46px; + height: 46px; + padding: 3px; + border-radius: 25px; +} +#mention-TemplateList .e-badge-success { + left: 76%; + bottom: 4px; + top: auto; +} +#mention_integration_rte-edit-view_popup .e-dropdownbase .e-list-item { + line-height: 8px; +} +#mention-TemplateList .e-badge-success { + background-color: #4d841d; + color: #fff; +} +#mention-TemplateList .e-badge-success.away { + background-color: #fedd2d; + color: #fff; +} +#mention-TemplateList .e-badge-success.busy { + background-color: #de1a1a; + color: #fff; +} +#mention-TemplateList .e-badge.e-badge-dot { + height: 10px; + width: 10px; +} +#mention_integration .e-mention-chip{ + cursor: pointer; +} diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.html b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.html new file mode 100644 index 000000000..303d777bf --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.html @@ -0,0 +1,23 @@ + + + + + + + EJ2 Vue Sample + + + + + + + + + + + +
    Loading....
    + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.js b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.js new file mode 100644 index 000000000..5c90d3570 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/index.js @@ -0,0 +1,57 @@ +import Vue from "vue"; +import { RichTextEditorPlugin, Toolbar, Link, Image, QuickToolbar, HtmlEditor } from "@syncfusion/ej2-vue-richtexteditor"; +import { MentionPlugin } from "@syncfusion/ej2-vue-dropdowns"; + +Vue.use(MentionPlugin); +Vue.use(RichTextEditorPlugin); + +new Vue({ + el: '#app', + template: ` +
    + + + + + + +
    +`, + + data: function() { + return { + rteValue: `

    Hello @Maria

    Welcome to the mention integration with rich text editor demo. Type @ character and tag user from the suggestion list.

    `, + data: [ + { Name: "Selma Rose", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/2.png", EmailId: "selma@gmail.com" }, + { Name: "Maria", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/1.png", EmailId: "maria@gmail.com" }, + { Name: "Russo Kay", Status: "busy", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/8.png", EmailId: "russo@gmail.com" }, + { Name: "Camden Kate", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/9.png", EmailId: "camden@gmail.com" }, + { Name: "Robert", Status: "busy", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/dp.png", EmailId: "robert@gmail.com" }, + { Name: "Garth", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/7.png", EmailId: "garth@gmail.com" }, + { Name: "Andrew James", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/pic04.png", EmailId: "andrew@gmail.com" }, + { Name: "Olivia", Status: "busy", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/5.png", EmailId: "olivia@gmail.com" }, + { Name: "Sophia", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/6.png", EmailId: "sophia@gmail.com" }, + { Name: "Margaret", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/3.png", EmailId: "margaret@gmail.com" }, + { Name: "Ursula Ann", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/dp.png", EmailId: "ursula@gmail.com" }, + { Name: "Laura Grace", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/4.png", EmailId: "laura@gmail.com" }, + { Name: "Albert", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/pic03.png", EmailId: "albert@gmail.com" }, + { Name: "William", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/8.png", EmailId: "william@gmail.com" } + ], + fieldsData: { text: 'Name' }, + }; + }, + provide:{ + richtexteditor:[Toolbar, Link, Image, QuickToolbar, HtmlEditor] + }, + methods: { + onActionBegin: function(args) { + if (args.requestType === 'EnterAction') { + args.cancel = true; + } + } + } +}); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-min-length/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/systemjs.config.js new file mode 100644 index 000000000..5adcc2fdb --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-min-length/systemjs.config.js @@ -0,0 +1,48 @@ +System.config({ + transpiler: "typescript", + typescriptOptions: { + compilerOptions: { + target: "umd", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/" + }, + map: { + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", +vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js", + "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js", + "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js", + "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js", + "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js", + "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js", + "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js", + "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js", + "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js", + "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js", + "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js", + "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js", + "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js", + "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js", + "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js" + } +}); + +System.import('index.js'); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app-composition.vue new file mode 100644 index 000000000..dae83c2c1 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app-composition.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app.vue b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app.vue new file mode 100644 index 000000000..76c4634a0 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/app.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.css b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.css new file mode 100644 index 000000000..e6b747476 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.css @@ -0,0 +1,47 @@ +#mention-TemplateList { + position: relative; + display: inline-block; + padding: 2px; +} +.mentionNameList .person, .mentionNameList.email { + display: block; + line-height: 20px; + text-indent: 5px; +} +.mentionNameList .person { + font-size: 16px; +} +.mentionEmpImage { + display: inline-block; + width: 46px; + height: 46px; + padding: 3px; + border-radius: 25px; +} +#mention-TemplateList .e-badge-success { + left: 76%; + bottom: 4px; + top: auto; +} +#mention_integration_rte-edit-view_popup .e-dropdownbase .e-list-item { + line-height: 8px; +} +#mention-TemplateList .e-badge-success { + background-color: #4d841d; + color: #fff; +} +#mention-TemplateList .e-badge-success.away { + background-color: #fedd2d; + color: #fff; +} +#mention-TemplateList .e-badge-success.busy { + background-color: #de1a1a; + color: #fff; +} +#mention-TemplateList .e-badge.e-badge-dot { + height: 10px; + width: 10px; +} +#mention_integration .e-mention-chip{ + cursor: pointer; +} diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.html b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.html new file mode 100644 index 000000000..303d777bf --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.html @@ -0,0 +1,23 @@ + + + + + + + EJ2 Vue Sample + + + + + + + + + + + +
    Loading....
    + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.js b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.js new file mode 100644 index 000000000..5c90d3570 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/index.js @@ -0,0 +1,57 @@ +import Vue from "vue"; +import { RichTextEditorPlugin, Toolbar, Link, Image, QuickToolbar, HtmlEditor } from "@syncfusion/ej2-vue-richtexteditor"; +import { MentionPlugin } from "@syncfusion/ej2-vue-dropdowns"; + +Vue.use(MentionPlugin); +Vue.use(RichTextEditorPlugin); + +new Vue({ + el: '#app', + template: ` +
    + + + + + + +
    +`, + + data: function() { + return { + rteValue: `

    Hello @Maria

    Welcome to the mention integration with rich text editor demo. Type @ character and tag user from the suggestion list.

    `, + data: [ + { Name: "Selma Rose", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/2.png", EmailId: "selma@gmail.com" }, + { Name: "Maria", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/1.png", EmailId: "maria@gmail.com" }, + { Name: "Russo Kay", Status: "busy", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/8.png", EmailId: "russo@gmail.com" }, + { Name: "Camden Kate", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/9.png", EmailId: "camden@gmail.com" }, + { Name: "Robert", Status: "busy", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/dp.png", EmailId: "robert@gmail.com" }, + { Name: "Garth", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/7.png", EmailId: "garth@gmail.com" }, + { Name: "Andrew James", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/pic04.png", EmailId: "andrew@gmail.com" }, + { Name: "Olivia", Status: "busy", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/5.png", EmailId: "olivia@gmail.com" }, + { Name: "Sophia", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/6.png", EmailId: "sophia@gmail.com" }, + { Name: "Margaret", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/3.png", EmailId: "margaret@gmail.com" }, + { Name: "Ursula Ann", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/dp.png", EmailId: "ursula@gmail.com" }, + { Name: "Laura Grace", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/4.png", EmailId: "laura@gmail.com" }, + { Name: "Albert", Status: "active", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/pic03.png", EmailId: "albert@gmail.com" }, + { Name: "William", Status: "away", EmployeeImage: "https://ej2.syncfusion.com/demos/src/rich-text-editor/images/8.png", EmailId: "william@gmail.com" } + ], + fieldsData: { text: 'Name' }, + }; + }, + provide:{ + richtexteditor:[Toolbar, Link, Image, QuickToolbar, HtmlEditor] + }, + methods: { + onActionBegin: function(args) { + if (args.requestType === 'EnterAction') { + args.cancel = true; + } + } + } +}); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/systemjs.config.js new file mode 100644 index 000000000..5adcc2fdb --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/mention-suggestion-list/systemjs.config.js @@ -0,0 +1,48 @@ +System.config({ + transpiler: "typescript", + typescriptOptions: { + compilerOptions: { + target: "umd", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/" + }, + map: { + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", +vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js", + "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js", + "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js", + "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js", + "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js", + "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js", + "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js", + "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js", + "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js", + "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js", + "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js", + "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js", + "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js", + "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js", + "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js" + } +}); + +System.import('index.js'); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app-composition.vue new file mode 100644 index 000000000..724629962 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app-composition.vue @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app.vue new file mode 100644 index 000000000..3e8b48567 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/app.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.css b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.css new file mode 100644 index 000000000..e3c0074c9 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.css @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.html b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.html new file mode 100644 index 000000000..303d777bf --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.html @@ -0,0 +1,23 @@ + + + + + + + EJ2 Vue Sample + + + + + + + + + + + +
    Loading....
    + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.js b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.js new file mode 100644 index 000000000..4b5cc800d --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/index.js @@ -0,0 +1,27 @@ +import Vue from 'vue'; +import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor'; + +Vue.use(RichTextEditorPlugin); + +new Vue({ + el: '#app', + template: ``, + + data() { + return { + toolbarSettings: { + items: ['Bold', 'Italic', 'Underline', 'StrikeThrough', + 'FontName', 'FontSize', 'FontColor', 'BackgroundColor', + 'LowerCase', 'UpperCase', '|', + 'Formats', 'Alignments', 'OrderedList', 'UnorderedList', + 'Outdent', 'Indent', '|', + 'CreateLink', 'Image', '|', 'ClearFormat', + 'SourceCode', 'FullScreen', '|', 'Undo', 'Redo'] + }, + rteValue: `

    The Syncfusion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.

    Key features:

    • Provides <IFRAME> and <DIV> modes.

    • Bulleted and numbered lists.

    • Handles images, hyperlinks, videos, hyperlinks, uploads, etc.

    • Contains undo/redo manager.

    Sky with sun
    `, + } + }, + provide: { + richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar] + } +}); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/systemjs.config.js new file mode 100644 index 000000000..7f1950c45 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-blockquote/systemjs.config.js @@ -0,0 +1,50 @@ +System.config({ + transpiler: "typescript", + typescriptOptions: { + compilerOptions: { + target: "umd", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/" + }, + map: { + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", +vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js", + "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js", + "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js", + "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js", + "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js", + "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js", + "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js", + "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js", + "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js", + "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js", + "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js", + "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js", + "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js", + "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js", + "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js", + "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js", + "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js" + } +}); + +System.import('index.js'); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app-composition.vue new file mode 100644 index 000000000..b8ac1353a --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app-composition.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/app.vue b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app.vue new file mode 100644 index 000000000..3cc814bb7 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/app.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.css b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.css new file mode 100644 index 000000000..e3c0074c9 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.css @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.html b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.html new file mode 100644 index 000000000..303d777bf --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.html @@ -0,0 +1,23 @@ + + + + + + + EJ2 Vue Sample + + + + + + + + + + + +
    Loading....
    + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.js b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.js new file mode 100644 index 000000000..4b5cc800d --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/index.js @@ -0,0 +1,27 @@ +import Vue from 'vue'; +import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar } from '@syncfusion/ej2-vue-richtexteditor'; + +Vue.use(RichTextEditorPlugin); + +new Vue({ + el: '#app', + template: ``, + + data() { + return { + toolbarSettings: { + items: ['Bold', 'Italic', 'Underline', 'StrikeThrough', + 'FontName', 'FontSize', 'FontColor', 'BackgroundColor', + 'LowerCase', 'UpperCase', '|', + 'Formats', 'Alignments', 'OrderedList', 'UnorderedList', + 'Outdent', 'Indent', '|', + 'CreateLink', 'Image', '|', 'ClearFormat', + 'SourceCode', 'FullScreen', '|', 'Undo', 'Redo'] + }, + rteValue: `

    The Syncfusion Rich Text Editor, a WYSIWYG (what you see is what you get) editor, is a user interface that allows you to create, edit, and format rich text content. You can try out a demo of this editor here.

    Key features:

    • Provides <IFRAME> and <DIV> modes.

    • Bulleted and numbered lists.

    • Handles images, hyperlinks, videos, hyperlinks, uploads, etc.

    • Contains undo/redo manager.

    Sky with sun
    `, + } + }, + provide: { + richtexteditor: [Toolbar, Link, Image, HtmlEditor, QuickToolbar] + } +}); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/nesting-table/systemjs.config.js b/ej2-vue/code-snippet/rich-text-editor/nesting-table/systemjs.config.js new file mode 100644 index 000000000..7f1950c45 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/nesting-table/systemjs.config.js @@ -0,0 +1,50 @@ +System.config({ + transpiler: "typescript", + typescriptOptions: { + compilerOptions: { + target: "umd", + module: "commonjs", + moduleResolution: "node", + emitDecoratorMetadata: true, + experimentalDecorators: true + } + }, + paths: { + "syncfusion:": "https://cdn.syncfusion.com/ej2/20.3.56/" + }, + map: { + typescript: "https://unpkg.com/typescript@2.2.2/lib/typescript.js", +vue: "https://unpkg.com/vue@2.6.14/dist/vue.min.js", + "@syncfusion/ej2-base": "syncfusion:ej2-base/dist/ej2-base.umd.min.js", + "@syncfusion/ej2-data": "syncfusion:ej2-data/dist/ej2-data.umd.min.js", + "@syncfusion/ej2-buttons": "syncfusion:ej2-buttons/dist/ej2-buttons.umd.min.js", + "@syncfusion/ej2-inputs": "syncfusion:ej2-inputs/dist/ej2-inputs.umd.min.js", + "@syncfusion/ej2-lists": "syncfusion:ej2-lists/dist/ej2-lists.umd.min.js", + "@syncfusion/ej2-popups": "syncfusion:ej2-popups/dist/ej2-popups.umd.min.js", + "@syncfusion/ej2-layouts": "syncfusion:ej2-layouts/dist/ej2-layouts.umd.min.js", + "@syncfusion/ej2-dropdowns": "syncfusion:ej2-dropdowns/dist/ej2-dropdowns.umd.min.js", + "@syncfusion/ej2-grids": "syncfusion:ej2-grids/dist/ej2-grids.umd.min.js", + "@syncfusion/ej2-calendars": "syncfusion:ej2-calendars/dist/ej2-calendars.umd.min.js", + "@syncfusion/ej2-excel-export": "syncfusion:ej2-excel-export/dist/ej2-excel-export.umd.min.js", + "@syncfusion/ej2-pdf-export": "syncfusion:ej2-pdf-export/dist/ej2-pdf-export.umd.min.js", + "@syncfusion/ej2-compression": "syncfusion:ej2-compression/dist/ej2-compression.umd.min.js", + "@syncfusion/ej2-file-utils": "syncfusion:ej2-file-utils/dist/ej2-file-utils.umd.min.js", + "@syncfusion/ej2-splitbuttons": "syncfusion:ej2-splitbuttons/dist/ej2-splitbuttons.umd.min.js", + "@syncfusion/ej2-navigations": "syncfusion:ej2-navigations/dist/ej2-navigations.umd.min.js", + "@syncfusion/ej2-filemanager": "syncfusion:ej2-filemanager/dist/ej2-filemanager.umd.min.js", + "@syncfusion/ej2-richtexteditor": "syncfusion:ej2-richtexteditor/dist/ej2-richtexteditor.umd.min.js", + "@syncfusion/ej2-notifications":"syncfusion:ej2-notifications/dist/ej2-notifications.umd.min.js", + "@syncfusion/ej2-vue-base": "syncfusion:ej2-vue-base/dist/ej2-vue-base.umd.min.js", + "@syncfusion/ej2-vue-data": "syncfusion:ej2-vue-data/dist/ej2-vue-data.umd.min.js", + "@syncfusion/ej2-vue-buttons": "syncfusion:ej2-vue-buttons/dist/ej2-vue-buttons.umd.min.js", + "@syncfusion/ej2-vue-inputs": "syncfusion:ej2-vue-inputs/dist/ej2-vue-inputs.umd.min.js", + "@syncfusion/ej2-vue-lists": "syncfusion:ej2-vue-lists/dist/ej2-vue-lists.umd.min.js", + "@syncfusion/ej2-vue-popups": "syncfusion:ej2-vue-popups/dist/ej2-vue-popups.umd.min.js", + "@syncfusion/ej2-vue-splitbuttons": "syncfusion:ej2-vue-splitbuttons/dist/ej2-vue-splitbuttons.umd.min.js", + "@syncfusion/ej2-vue-dropdowns": "syncfusion:ej2-vue-dropdowns/dist/ej2-vue-dropdowns.umd.min.js", + "@syncfusion/ej2-vue-navigations": "syncfusion:ej2-vue-navigations/dist/ej2-vue-navigations.umd.min.js", + "@syncfusion/ej2-vue-richtexteditor": "syncfusion:ej2-vue-richtexteditor/dist/ej2-vue-richtexteditor.umd.min.js" + } +}); + +System.import('index.js'); \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue b/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue index 883fa130b..f5ecd5ec8 100644 --- a/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue +++ b/ej2-vue/code-snippet/rich-text-editor/richtexteditor-inside-dialog/app-composition.vue @@ -18,17 +18,9 @@ + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/app.vue b/ej2-vue/code-snippet/rich-text-editor/selection/app.vue new file mode 100644 index 000000000..fffa3642a --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/selection/app.vue @@ -0,0 +1,97 @@ + + + + + + \ No newline at end of file diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/index.css b/ej2-vue/code-snippet/rich-text-editor/selection/index.css new file mode 100644 index 000000000..e3c0074c9 --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/selection/index.css @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/index.html b/ej2-vue/code-snippet/rich-text-editor/selection/index.html new file mode 100644 index 000000000..303d777bf --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/selection/index.html @@ -0,0 +1,23 @@ + + + + + + + EJ2 Vue Sample + + + + + + + + + + + +
    Loading....
    + + + + diff --git a/ej2-vue/code-snippet/rich-text-editor/selection/index.js b/ej2-vue/code-snippet/rich-text-editor/selection/index.js new file mode 100644 index 000000000..bb9fa929e --- /dev/null +++ b/ej2-vue/code-snippet/rich-text-editor/selection/index.js @@ -0,0 +1,29 @@ +import Vue from "vue"; +import { RichTextEditorPlugin, Toolbar, Link, Image, HtmlEditor, QuickToolbar, Table, CodeBlock } from "@syncfusion/ej2-vue-richtexteditor"; + +Vue.use(RichTextEditorPlugin); + +new Vue({ + el: '#app', + template: `
    +
    +
    +
    + +
    +
    +
    +
    `, + + data: function() { + return { + toolbarSettings: { + items: ['Checklist', 'Bold', 'Italic', 'StrikeThrough', '|', 'Formats', 'Alignments', 'Blockquote', 'OrderedList', + 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'] + } + }; + }, + provide:{ + richtexteditor:[Toolbar, Link, Image, HtmlEditor, QuickToolbar, Table, CodeBlock] + } +}); \ No newline at end of file diff --git a/ej2-vue/grid/module.md b/ej2-vue/grid/module.md index c84d96a05..14d5a1ff1 100644 --- a/ej2-vue/grid/module.md +++ b/ej2-vue/grid/module.md @@ -1,7 +1,7 @@ --- layout: post title: Module in Vue Grid component | Syncfusion -description: Learn here all about Module in Syncfusion Vue Grid component of Syncfusion Essential JS 2 and more. +description: Learn here all about Modules in Syncfusion Vue Grid component of Syncfusion Essential JS 2, how they extend grid features and more. control: Module platform: ej2-vue documentation: ug @@ -20,7 +20,7 @@ The available grid modules are | [`Sort`](https://ej2.syncfusion.com/vue/documentation/api/grid/sort/)| Inject this module to use sorting feature.| | [`Filter`](https://ej2.syncfusion.com/vue/documentation/api/grid/filter/)| Inject this module to use filtering feature.| | [`Group`](https://ej2.syncfusion.com/vue/documentation/api/grid/group/)| Inject this module to use grouping feature| -| [`Edit`](https://ej2.syncfusion.com/vue/documentation/api/grid/edit/)| Inject this module is use editing feature.| +| [`Edit`](https://ej2.syncfusion.com/vue/documentation/api/grid/edit/)| Inject this module to use editing feature.| | `Aggregate`| Inject this module to use aggregate feature.| | [`ColumnChooser`](https://ej2.syncfusion.com/vue/documentation/api/grid/columnChooser/)| Inject this module to use column chooser feature.| | `ColumnMenu`| Inject this module to use column menu feature.| diff --git a/ej2-vue/rich-text-editor/editor-types/editor-modes.md b/ej2-vue/rich-text-editor/editor-types/editor-modes.md index 015a6557c..55354c353 100644 --- a/ej2-vue/rich-text-editor/editor-types/editor-modes.md +++ b/ej2-vue/rich-text-editor/editor-types/editor-modes.md @@ -17,7 +17,7 @@ The Rich Text Editor component used to create, edit and return the content in va ## HTML editor -Rich Text Editor is a WYSIWYG editing control for formatting the word content as HTML. +Rich Text Editor is a WYSIWYG editing component for formatting the word content as HTML. The HTML editing mode is the default mode of Rich Text Editor. Which is used for format the content through the available toolbar items and returns the valid HTML markup. Set the [editorMode](https://ej2.syncfusion.com/vue/documentation/api/rich-text-editor/#editormode) property as `HTML`. diff --git a/ej2-vue/rich-text-editor/images/list-editing.gif b/ej2-vue/rich-text-editor/images/list-editing.gif new file mode 100644 index 0000000000000000000000000000000000000000..2b004d0e7ba2b809f77a662ca68e80c83b070bd3 GIT binary patch literal 4533811 zcmd4YXH*kW`zZQJgV4eddNn}k9gz|cLnu-NLq|YFK&2>#B7&fX5ISOLf(S^L-h+Uk zp-B~KA|fKai2^q4+`Q+1?)h?VIrn_JYwg)+2c{$o}1~OiRgw1!~v9L5Q8Ca7Y)ZpaBM?AdyHgz>W|g37M~5 zg)8CU0EGz(xS2dxdWdjl9-ZD#&#a}>%hm}5*A)6fSxAT-xH|^!3WK{dpzs*jPY3OA z1ZHOmmfqgfJnzi)12ANLrfl7kS?8r39QNC3bTRww3Z@9#t=rkHWV@B}K zoY^G=5U7!nDa9PLal#tADIvR=yD2jo%#R0`xr-aq=pWnlP635o zcfH4U!7-5eN^b?`E!g#Tr88@gu3?t~+J)?P&DaUs*>%-|!ZV=VjGbMIUBByC%Gen5 zERkclNaT77avhgqx0^YZ;+l!e9K(%`dAp8zkBu>7GLL#AnK7ArGMP0PzzjInm6^G| zn@7mY^RBfMK9Ec~ki;EGdLKxFDRy=TGqnLBc9ym42MdIQGVovlJn&9A@Wy3^2#3_t z5Aq@pyuA;+!CDRB-7@-&hMlDXxZ9O-P_}+RSU(71-XUg#eh@-G0O`B`8R~Yft|6|G z%meGl6##-1GjAyDjzRJ&x(_xK^~QtJmU-rl#r?@bNB!pq8%qZ6VvLi-ESgG(GUV;6 z+=rUVMzYnthx06&%U?Xu4cVR_YJT+cAwGs(+_I%&qQpEy@$7I*<c(4yg8c(Q#~ITKN2v z0_!KOA2XZO)}Ow3@_6?>>bf%@s