-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+ :logo="item.logo"
+ :name="item.name"
+ :description="item.description"
+ :enabled="item.enabled"
+ />
-
-
+
+
-
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationHelpText.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationHelpText.vue
deleted file mode 100644
index 21b13ca58..000000000
--- a/app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationHelpText.vue
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrationapps/IntegrationHooks.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationHooks.vue
similarity index 100%
rename from app/javascript/dashboard/routes/dashboard/settings/integrationapps/IntegrationHooks.vue
rename to app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationHooks.vue
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationItem.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationItem.vue
new file mode 100644
index 000000000..f8daef2c7
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationItem.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
![]()
+
![]()
+
+
+
+
+
+ {{ name }}
+
+
+ {{ $t('INTEGRATION_APPS.CONFIGURE') }}
+
+
+
+
+ {{ useInstallationName(description, globalConfig.installationName) }}
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrationapps/MultipleIntegrationHooks.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/MultipleIntegrationHooks.vue
similarity index 100%
rename from app/javascript/dashboard/routes/dashboard/settings/integrationapps/MultipleIntegrationHooks.vue
rename to app/javascript/dashboard/routes/dashboard/settings/integrations/MultipleIntegrationHooks.vue
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrationapps/NewHook.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/NewHook.vue
similarity index 100%
rename from app/javascript/dashboard/routes/dashboard/settings/integrationapps/NewHook.vue
rename to app/javascript/dashboard/routes/dashboard/settings/integrations/NewHook.vue
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrationapps/SingleIntegrationHooks.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/SingleIntegrationHooks.vue
similarity index 100%
rename from app/javascript/dashboard/routes/dashboard/settings/integrationapps/SingleIntegrationHooks.vue
rename to app/javascript/dashboard/routes/dashboard/settings/integrations/SingleIntegrationHooks.vue
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrationapps/hookMixin.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/hookMixin.js
similarity index 100%
rename from app/javascript/dashboard/routes/dashboard/settings/integrationapps/hookMixin.js
rename to app/javascript/dashboard/routes/dashboard/settings/integrations/hookMixin.js
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js
index bb70fa4db..c0b2e98cf 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js
+++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js
@@ -1,14 +1,30 @@
import { frontendURL } from '../../../../helper/URLHelper';
-
-const SettingsContent = () => import('../Wrapper.vue');
+const SettingsWrapper = () => import('../SettingsWrapper.vue');
+const IntegrationHooks = () => import('./IntegrationHooks.vue');
+const Index = () => import('./Index.vue');
const Webhook = () => import('./Webhooks/Index.vue');
const DashboardApps = () => import('./DashboardApps/Index.vue');
-const ShowIntegration = () => import('./ShowIntegration.vue');
const Slack = () => import('./Slack.vue');
-const Index = () => import('./Index.vue');
+const SettingsContent = () => import('../Wrapper.vue');
export default {
routes: [
+ {
+ path: frontendURL('accounts/:accountId/settings/integrations'),
+ component: SettingsWrapper,
+ props: {},
+ children: [
+ {
+ path: '',
+ name: 'settings_applications',
+ component: Index,
+ meta: {
+ permissions: ['administrator'],
+ },
+ },
+ ],
+ },
+
{
path: frontendURL('accounts/:accountId/settings/integrations'),
component: SettingsContent,
@@ -26,14 +42,6 @@ export default {
};
},
children: [
- {
- path: '',
- name: 'settings_integrations',
- component: Index,
- meta: {
- permissions: ['administrator'],
- },
- },
{
path: 'webhook',
component: Webhook,
@@ -61,17 +69,14 @@ export default {
},
{
path: ':integration_id',
- name: 'settings_integrations_integration',
- component: ShowIntegration,
+ name: 'settings_applications_integration',
+ component: IntegrationHooks,
meta: {
permissions: ['administrator'],
},
- props: route => {
- return {
- integrationId: route.params.integration_id,
- code: route.query.code,
- };
- },
+ props: route => ({
+ integrationId: route.params.integration_id,
+ }),
},
],
},
diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrationapps/specs/hookMixin.spec.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/specs/hookMixin.spec.js
similarity index 100%
rename from app/javascript/dashboard/routes/dashboard/settings/integrationapps/specs/hookMixin.spec.js
rename to app/javascript/dashboard/routes/dashboard/settings/integrations/specs/hookMixin.spec.js
diff --git a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
index 2829ed1d9..229fe7e3a 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
+++ b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js
@@ -9,7 +9,6 @@ import billing from './billing/billing.routes';
import campaigns from './campaigns/campaigns.routes';
import canned from './canned/canned.routes';
import inbox from './inbox/inbox.routes';
-import integrationapps from './integrationapps/integrations.routes';
import integrations from './integrations/integrations.routes';
import labels from './labels/labels.routes';
import macros from './macros/macros.routes';
@@ -44,7 +43,6 @@ export default {
...campaigns.routes,
...canned.routes,
...inbox.routes,
- ...integrationapps.routes,
...integrations.routes,
...labels.routes,
...macros.routes,
diff --git a/app/javascript/dashboard/routes/dashboard/settings/sla/components/SLAHeader.vue b/app/javascript/dashboard/routes/dashboard/settings/sla/components/SLAHeader.vue
index 498b5c856..8c3f570f5 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/sla/components/SLAHeader.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/sla/components/SLAHeader.vue
@@ -7,14 +7,15 @@ defineProps({
default: true,
},
});
+
+defineEmits(['click']);
-
-
+
diff --git a/app/javascript/dashboard/store/modules/integrations.js b/app/javascript/dashboard/store/modules/integrations.js
index 3183afbe3..4b61e665f 100644
--- a/app/javascript/dashboard/store/modules/integrations.js
+++ b/app/javascript/dashboard/store/modules/integrations.js
@@ -20,21 +20,9 @@ const state = {
},
};
-const isAValidAppIntegration = integration => {
- return [
- 'dialogflow',
- 'dyte',
- 'google_translate',
- 'openai',
- 'linear',
- ].includes(integration.id);
-};
export const getters = {
- getIntegrations($state) {
- return $state.records.filter(item => !isAValidAppIntegration(item));
- },
getAppIntegrations($state) {
- return $state.records.filter(item => isAValidAppIntegration(item));
+ return $state.records;
},
getIntegration: $state => integrationId => {
const [integration] = $state.records.filter(
diff --git a/app/javascript/dashboard/store/modules/specs/integrations/getters.spec.js b/app/javascript/dashboard/store/modules/specs/integrations/getters.spec.js
index 43080a7d8..feb358684 100644
--- a/app/javascript/dashboard/store/modules/specs/integrations/getters.spec.js
+++ b/app/javascript/dashboard/store/modules/specs/integrations/getters.spec.js
@@ -1,60 +1,9 @@
import { getters } from '../../integrations';
describe('#getters', () => {
- it('getIntegrations', () => {
- const state = {
- records: [
- {
- id: 'test1',
- name: 'test1',
- logo: 'test',
- enabled: true,
- },
- {
- id: 'test2',
- name: 'test2',
- logo: 'test',
- enabled: true,
- },
- {
- id: 'dyte',
- name: 'dyte',
- logo: 'test',
- enabled: true,
- },
- {
- id: 'dialogflow',
- name: 'dialogflow',
- logo: 'test',
- enabled: true,
- },
- ],
- };
- expect(getters.getIntegrations(state)).toEqual([
- {
- id: 'test1',
- name: 'test1',
- logo: 'test',
- enabled: true,
- },
- {
- id: 'test2',
- name: 'test2',
- logo: 'test',
- enabled: true,
- },
- ]);
- });
-
it('getAppIntegrations', () => {
const state = {
records: [
- {
- id: 'test1',
- name: 'test1',
- logo: 'test',
- enabled: true,
- },
{
id: 'dyte',
name: 'dyte',
diff --git a/app/javascript/shared/mixins/globalConfigMixin.js b/app/javascript/shared/mixins/globalConfigMixin.js
index bb5a89468..3f0796b59 100644
--- a/app/javascript/shared/mixins/globalConfigMixin.js
+++ b/app/javascript/shared/mixins/globalConfigMixin.js
@@ -1,8 +1,12 @@
+export const useInstallationName = (str, installationName) => {
+ if (str && installationName) {
+ return str.replace(/Chatwoot/g, installationName);
+ }
+ return str;
+};
+
export default {
methods: {
- // eslint-disable-next-line default-param-last
- useInstallationName(str = '', installationName) {
- return str.replace(/Chatwoot/g, installationName);
- },
+ useInstallationName,
},
};
diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index 1fb93c51a..78f77bcf6 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -39,7 +39,7 @@ class Attachment < ApplicationRecord
validate :acceptable_file
validates :external_url, length: { maximum: Limits::URL_LENGTH_LIMIT }
enum file_type: { :image => 0, :audio => 1, :video => 2, :file => 3, :location => 4, :fallback => 5, :share => 6, :story_mention => 7,
- :contact => 8 }
+ :contact => 8, :ig_reel => 9 }
def push_event_data
return unless file_type
diff --git a/app/models/integrations/app.rb b/app/models/integrations/app.rb
index b55687b2a..10e221a80 100644
--- a/app/models/integrations/app.rb
+++ b/app/models/integrations/app.rb
@@ -49,6 +49,8 @@ class Integrations::App
case params[:id]
when 'webhook'
account.webhooks.exists?
+ when 'dashboard_apps'
+ account.dashboard_apps.exists?
else
account.hooks.exists?(app_id: id)
end
diff --git a/config/features.yml b/config/features.yml
index 98c4f608d..07552a238 100644
--- a/config/features.yml
+++ b/config/features.yml
@@ -44,6 +44,7 @@
help_url: https://chwt.app/hc/canned
- name: integrations
enabled: true
+ help_url: https://chwt.app/hc/integrations
- name: voice_recorder
enabled: true
- name: mobile_v2
@@ -80,6 +81,7 @@
- name: sla
enabled: false
premium: true
+ help_url: https://chwt.app/hc/sla
- name: help_center_embedding_search
enabled: false
premium: true
diff --git a/config/integration/apps.yml b/config/integration/apps.yml
index 74a570ab5..cf6730aec 100644
--- a/config/integration/apps.yml
+++ b/config/integration/apps.yml
@@ -16,6 +16,12 @@ webhooks:
action: /webhook
hook_type: account
allow_multiple_hooks: true
+dashboard_apps:
+ id: dashboard_apps
+ logo: dashboard_apps.png
+ i18n_key: dashboard_apps
+ hook_type: account
+ allow_multiple_hooks: true
openai:
id: openai
logo: openai.png
diff --git a/config/locales/en.yml b/config/locales/en.yml
index dae3b36e0..802ed529d 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -202,31 +202,31 @@ en:
online:
delete: "%{contact_name} is Online, please try again later"
integration_apps:
+ dashboard_apps:
+ name: "Dashboard Apps"
+ description: "Dashboard Apps allow you to create and embed applications that display user information, orders, or payment history, providing more context to your customer support agents."
dyte:
name: "Dyte"
- description: "Dyte is tool that helps you to add live audio & video to your application with just a few lines of code. This integration allows you to give an option to your agents to have a video or voice call with your customers from without leaving Chatwoot."
+ description: "Dyte is a product that integrates audio and video functionalities into your application. With this integration, your agents can start video/voice calls with your customers directly from Chatwoot."
meeting_name: "%{agent_name} has started a meeting"
slack:
name: "Slack"
- description: "Slack is a chat tool that brings all your communication together in one place. By integrating Slack, you can get notified of all the new conversations in your account right inside your Slack."
+ description: "Integrate Chatwoot with Slack to keep your team in sync. This integration allows you to receive notifications for new conversations and respond to them directly within Slack's interface."
webhooks:
name: "Webhooks"
- description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks."
+ description: "Webhook events provide real-time updates about activities in your Chatwoot account. You can subscribe to your preferred events, and Chatwoot will send you HTTP callbacks with the updates."
dialogflow:
name: "Dialogflow"
- description: "Build chatbots using Dialogflow and connect them to your inbox quickly. Let the bots handle the queries before handing them off to a customer service agent."
- fullcontact:
- name: "Fullcontact"
- description: "FullContact integration helps to enrich visitor profiles. Identify the users as soon as they share their email address and offer them tailored customer service. Connect your FullContact to your account by sharing the FullContact API Key."
+ description: "Build chatbots with Dialogflow and easily integrate them into your inbox. These bots can handle initial queries before transferring them to a customer service agent."
google_translate:
name: "Google Translate"
- description: "Make it easier for agents to translate messages by adding a Google Translate Integration. Google translate helps to identify the language automatically and convert it to the language chosen by the agent/account admin."
+ description: "Integrate Google Translate to help agents easily translate customer messages. This integration automatically detects the language and converts it to the agent's or admin's preferred language."
openai:
name: "OpenAI"
- description: "Integrate powerful AI features into Chatwoot by leveraging the GPT models from OpenAI."
+ description: "Leverage the power of large language models from OpenAI with the features such as reply suggestions, summarization, message rephrasing, spell-checking, and label classification."
linear:
name: "Linear"
- description: "Create Linear issues from conversations, or link existing ones for seamless tracking."
+ description: "Create issues in Linear directly from your conversation window. Alternatively, link existing Linear issues for a more streamlined and efficient issue tracking process."
public_portal:
search:
search_placeholder: Search for article by title or body...
diff --git a/package.json b/package.json
index cce8ecd32..5e3ae5367 100644
--- a/package.json
+++ b/package.json
@@ -136,7 +136,7 @@
"eslint-plugin-jsx-a11y": "6.7.1",
"eslint-plugin-prettier": "5.0.0",
"eslint-plugin-storybook": "^0.6.14",
- "eslint-plugin-vue": "^9.17.0",
+ "eslint-plugin-vue": "^9.27.0",
"fake-indexeddb": "^6.0.0",
"husky": "^7.0.0",
"jsdom": "^24.1.0",
diff --git a/spec/builders/messages/instagram/message_builder_spec.rb b/spec/builders/messages/instagram/message_builder_spec.rb
index 3db393dab..19631765a 100644
--- a/spec/builders/messages/instagram/message_builder_spec.rb
+++ b/spec/builders/messages/instagram/message_builder_spec.rb
@@ -13,6 +13,7 @@ describe Messages::Instagram::MessageBuilder do
let!(:instagram_inbox) { create(:inbox, channel: instagram_channel, account: account, greeting_enabled: false) }
let!(:dm_params) { build(:instagram_message_create_event).with_indifferent_access }
let!(:story_mention_params) { build(:instagram_story_mention_event).with_indifferent_access }
+ let!(:shared_reel_params) { build(:instagram_shared_reel_event).with_indifferent_access }
let!(:instagram_story_reply_event) { build(:instagram_story_reply_event).with_indifferent_access }
let!(:instagram_message_reply_event) { build(:instagram_message_reply_event).with_indifferent_access }
let(:fb_object) { double }
@@ -79,6 +80,27 @@ describe Messages::Instagram::MessageBuilder do
expect(instagram_inbox.messages.count).to be 1
end
+ it 'creates message for shared reel' do
+ allow(Koala::Facebook::API).to receive(:new).and_return(fb_object)
+ allow(fb_object).to receive(:get_object).and_return(
+ {
+ name: 'Jane',
+ id: 'Sender-id-1',
+ account_id: instagram_inbox.account_id,
+ profile_pic: 'https://chatwoot-assets.local/sample.png'
+ }.with_indifferent_access
+ )
+ messaging = shared_reel_params[:entry][0]['messaging'][0]
+ contact_inbox
+ described_class.new(messaging, instagram_inbox).perform
+
+ message = instagram_channel.inbox.messages.first
+ expect(message.attachments.first.file_type).to eq('ig_reel')
+ expect(message.attachments.first.external_url).to eq(
+ shared_reel_params[:entry][0]['messaging'][0]['message']['attachments'][0]['payload']['url']
+ )
+ end
+
it 'creates message with for reply with story id' do
allow(Koala::Facebook::API).to receive(:new).and_return(fb_object)
allow(fb_object).to receive(:get_object).and_return(
diff --git a/spec/factories/instagram/instagram_message_create_event.rb b/spec/factories/instagram/instagram_message_create_event.rb
index 00ca91e23..76ecb37dc 100644
--- a/spec/factories/instagram/instagram_message_create_event.rb
+++ b/spec/factories/instagram/instagram_message_create_event.rb
@@ -204,6 +204,42 @@ FactoryBot.define do
initialize_with { attributes }
end
+ factory :instagram_shared_reel_event, class: Hash do
+ entry do
+ [
+ {
+ 'id': 'instagram-message-id-1234',
+ 'time': '2021-09-08T06:34:04+0000',
+ 'messaging': [
+ {
+ 'sender': {
+ 'id': 'Sender-id-1'
+ },
+ 'recipient': {
+ 'id': 'chatwoot-app-user-id-1'
+ },
+ 'timestamp': '2021-09-08T06:34:04+0000',
+ 'message': {
+ 'mid': 'message-id-1',
+ 'attachments': [
+ {
+ 'type': 'ig_reel',
+ 'payload': {
+ 'reel_video_id': '1234',
+ 'title': 'Reel title',
+ 'url': 'https://www.example.com/test.jpeg'
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ end
+ initialize_with { attributes }
+ end
+
factory :instagram_story_mention_event, class: Hash do
entry do
[
diff --git a/tailwind.config.js b/tailwind.config.js
index 9e551985b..6600af6a4 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -17,6 +17,7 @@ module.exports = {
extend: {
fontFamily: {
inter: ['Inter', ...defaultTheme.fontFamily.sans],
+ interDisplay: ['Inter Display', ...defaultTheme.fontFamily.sans],
},
},
fontSize: {
diff --git a/yarn.lock b/yarn.lock
index 266537dae..cf72f82f3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10418,17 +10418,18 @@ eslint-plugin-storybook@^0.6.14:
requireindex "^1.1.0"
ts-dedent "^2.2.0"
-eslint-plugin-vue@^9.17.0:
- version "9.17.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz#4501547373f246547083482838b4c8f4b28e5932"
- integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==
+eslint-plugin-vue@^9.27.0:
+ version "9.27.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz#c22dae704a03d9ecefa81364ff89f60ce0481f94"
+ integrity sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
+ globals "^13.24.0"
natural-compare "^1.4.0"
nth-check "^2.1.1"
- postcss-selector-parser "^6.0.13"
- semver "^7.5.4"
- vue-eslint-parser "^9.3.1"
+ postcss-selector-parser "^6.0.15"
+ semver "^7.6.0"
+ vue-eslint-parser "^9.4.3"
xml-name-validator "^4.0.0"
eslint-rule-composer@^0.3.0:
@@ -11561,6 +11562,13 @@ globals@^13.20.0:
dependencies:
type-fest "^0.20.2"
+globals@^13.24.0:
+ version "13.24.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
globalthis@^1.0.0, globalthis@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
@@ -16223,7 +16231,7 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
-postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.4:
+postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.4:
version "6.0.13"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
@@ -16231,6 +16239,14 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-select
cssesc "^3.0.0"
util-deprecate "^1.0.2"
+postcss-selector-parser@^6.0.15:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38"
+ integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
postcss-svgo@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e"
@@ -17830,13 +17846,18 @@ semver@^7.3.2, semver@^7.3.4, semver@^7.3.7:
dependencies:
lru-cache "^6.0.0"
-semver@^7.3.6, semver@^7.5.3, semver@^7.5.4:
+semver@^7.3.6, semver@^7.5.3:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
+semver@^7.6.0:
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
+ integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+
send@0.18.0:
version "0.18.0"
resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
@@ -19976,10 +19997,10 @@ vue-easytable@2.5.5:
vue "^2.6.12"
vue-template-compiler "^2.6.11"
-vue-eslint-parser@^9.3.1:
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz#429955e041ae5371df5f9e37ebc29ba046496182"
- integrity sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==
+vue-eslint-parser@^9.4.3:
+ version "9.4.3"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz#9b04b22c71401f1e8bca9be7c3e3416a4bde76a8"
+ integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==
dependencies:
debug "^4.3.4"
eslint-scope "^7.1.1"