Merge pull request #1151 from frappe/main-hotfix

This commit is contained in:
Shariq Ansari 2025-08-18 23:15:56 +05:30 committed by GitHub
commit de14eb3ffb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
80 changed files with 1379 additions and 1578 deletions

View File

@ -26,8 +26,9 @@ def create_default_manager_dashboard(force=False):
doc.title = "Manager Dashboard" doc.title = "Manager Dashboard"
doc.layout = default_manager_dashboard_layout() doc.layout = default_manager_dashboard_layout()
doc.insert(ignore_permissions=True) doc.insert(ignore_permissions=True)
elif force: else:
doc = frappe.get_doc("CRM Dashboard", "Manager Dashboard") doc = frappe.get_doc("CRM Dashboard", "Manager Dashboard")
doc.layout = default_manager_dashboard_layout() if force:
doc.save(ignore_permissions=True) doc.layout = default_manager_dashboard_layout()
doc.save(ignore_permissions=True)
return doc.layout return doc.layout

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: shariq@frappe.io\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n"
"POT-Creation-Date: 2025-08-03 09:38+0000\n" "POT-Creation-Date: 2025-08-03 09:38+0000\n"
"PO-Revision-Date: 2025-08-04 08:34\n" "PO-Revision-Date: 2025-08-09 10:05\n"
"Last-Translator: shariq@frappe.io\n" "Last-Translator: shariq@frappe.io\n"
"Language-Team: German\n" "Language-Team: German\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -621,16 +621,16 @@ msgstr "Zwischen"
#: frontend/src/components/Settings/General/BrandSettings.vue:40 #: frontend/src/components/Settings/General/BrandSettings.vue:40
msgid "Brand name" msgid "Brand name"
msgstr "" msgstr "Markenname"
#: frontend/src/components/Settings/General/BrandSettings.vue:9 #: frontend/src/components/Settings/General/BrandSettings.vue:9
msgid "Brand settings" msgid "Brand settings"
msgstr "" msgstr "Markeneinstellungen"
#. Label of the branding_tab (Tab Break) field in DocType 'FCRM Settings' #. Label of the branding_tab (Tab Break) field in DocType 'FCRM Settings'
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
msgid "Branding" msgid "Branding"
msgstr "" msgstr "Firmenlogo"
#: frontend/src/components/Modals/EditValueModal.vue:2 #: frontend/src/components/Modals/EditValueModal.vue:2
msgid "Bulk Edit" msgid "Bulk Edit"
@ -1295,7 +1295,7 @@ msgstr "Interessent erstellen"
#: frontend/src/components/Layouts/AppSidebar.vue:344 #: frontend/src/components/Layouts/AppSidebar.vue:344
msgid "Create your first lead" msgid "Create your first lead"
msgstr "" msgstr "Erstellen Sie Ihren ersten Interessenten"
#: frontend/src/components/Layouts/AppSidebar.vue:414 #: frontend/src/components/Layouts/AppSidebar.vue:414
msgid "Create your first note" msgid "Create your first note"
@ -1303,7 +1303,7 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:394 #: frontend/src/components/Layouts/AppSidebar.vue:394
msgid "Create your first task" msgid "Create your first task"
msgstr "" msgstr "Erstellen Sie Ihre erste Aufgabe"
#. Label of the currency (Link) field in DocType 'CRM Deal' #. Label of the currency (Link) field in DocType 'CRM Deal'
#. Label of the currency (Link) field in DocType 'CRM Organization' #. Label of the currency (Link) field in DocType 'CRM Organization'
@ -1334,7 +1334,7 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:536 #: frontend/src/components/Layouts/AppSidebar.vue:536
msgid "Custom branding" msgid "Custom branding"
msgstr "" msgstr "Benutzerdefiniertes Branding"
#: frontend/src/components/Layouts/AppSidebar.vue:585 #: frontend/src/components/Layouts/AppSidebar.vue:585
msgid "Custom fields" msgid "Custom fields"
@ -1568,7 +1568,7 @@ msgstr "Ansicht löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:65 #: frontend/src/components/DeleteLinkedDocModal.vue:65
msgid "Delete all" msgid "Delete all"
msgstr "" msgstr "Alles löschen"
#: frontend/src/components/Activities/AttachmentArea.vue:62 #: frontend/src/components/Activities/AttachmentArea.vue:62
#: frontend/src/components/Activities/AttachmentArea.vue:138 #: frontend/src/components/Activities/AttachmentArea.vue:138
@ -1581,15 +1581,15 @@ msgstr "Kontakt löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:229 #: frontend/src/components/DeleteLinkedDocModal.vue:229
msgid "Delete linked item" msgid "Delete linked item"
msgstr "" msgstr "Verknüpftes Element löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:11 #: frontend/src/components/DeleteLinkedDocModal.vue:11
msgid "Delete or unlink linked documents" msgid "Delete or unlink linked documents"
msgstr "" msgstr "Verknüpfte Dokumente löschen oder ihre Verknüpfung aufheben"
#: frontend/src/components/DeleteLinkedDocModal.vue:23 #: frontend/src/components/DeleteLinkedDocModal.vue:23
msgid "Delete or unlink these linked documents before deleting this document" msgid "Delete or unlink these linked documents before deleting this document"
msgstr "" msgstr "Verknüpfte Dokumente löschen oder ihre Verknüpfung aufheben bevor dieses Dokument gelöscht wird"
#: frontend/src/pages/MobileOrganization.vue:263 #: frontend/src/pages/MobileOrganization.vue:263
msgid "Delete organization" msgid "Delete organization"
@ -1597,11 +1597,11 @@ msgstr "Organisation löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:66 #: frontend/src/components/DeleteLinkedDocModal.vue:66
msgid "Delete {0} item(s)" msgid "Delete {0} item(s)"
msgstr "" msgstr "{0} Element(e) löschen"
#: frontend/src/components/BulkDeleteLinkedDocModal.vue:28 #: frontend/src/components/BulkDeleteLinkedDocModal.vue:28
msgid "Delete {0} items" msgid "Delete {0} items"
msgstr "" msgstr "{0} Element(e) löschen"
#. Label of the description (Text Editor) field in DocType 'CRM Holiday' #. Label of the description (Text Editor) field in DocType 'CRM Holiday'
#. Label of the description (Text Editor) field in DocType 'CRM Lost Reason' #. Label of the description (Text Editor) field in DocType 'CRM Lost Reason'
@ -1676,7 +1676,7 @@ msgstr "Dokumententyp"
#: frontend/src/data/document.js:28 #: frontend/src/data/document.js:28
msgid "Document does not exist" msgid "Document does not exist"
msgstr "" msgstr "Dokument existiert nicht"
#: crm/api/activities.py:19 #: crm/api/activities.py:19
msgid "Document not found" msgid "Document not found"
@ -1684,7 +1684,7 @@ msgstr "Dokument nicht gefunden"
#: frontend/src/data/document.js:42 #: frontend/src/data/document.js:42
msgid "Document updated successfully" msgid "Document updated successfully"
msgstr "" msgstr "Dokument erfolgreich aktualisiert"
#: frontend/src/components/Modals/AboutModal.vue:62 #: frontend/src/components/Modals/AboutModal.vue:62
msgid "Documentation" msgid "Documentation"
@ -1698,7 +1698,7 @@ msgstr "Erledigt"
#: frontend/src/components/Dashboard/AddChartModal.vue:33 #: frontend/src/components/Dashboard/AddChartModal.vue:33
#: frontend/src/components/Dashboard/AddChartModal.vue:71 #: frontend/src/components/Dashboard/AddChartModal.vue:71
msgid "Donut chart" msgid "Donut chart"
msgstr "" msgstr "Donut-Diagramm"
#: frontend/src/components/Activities/AudioPlayer.vue:166 #: frontend/src/components/Activities/AudioPlayer.vue:166
#: frontend/src/components/ViewControls.vue:254 #: frontend/src/components/ViewControls.vue:254
@ -1737,7 +1737,7 @@ msgstr "Ansicht duplizieren"
#: frontend/src/components/Settings/EmailTemplate/NewEmailTemplate.vue:10 #: frontend/src/components/Settings/EmailTemplate/NewEmailTemplate.vue:10
msgid "Duplicate template" msgid "Duplicate template"
msgstr "" msgstr "Vorlage duplizieren"
#. Label of the duration (Duration) field in DocType 'CRM Call Log' #. Label of the duration (Duration) field in DocType 'CRM Call Log'
#. Label of the duration (Duration) field in DocType 'CRM Status Change Log' #. Label of the duration (Duration) field in DocType 'CRM Status Change Log'
@ -1778,11 +1778,11 @@ msgstr "ERPNext ist nicht mit dem CRM integriert"
#: frontend/src/components/Settings/ERPNextSettings.vue:4 #: frontend/src/components/Settings/ERPNextSettings.vue:4
msgid "ERPNext settings" msgid "ERPNext settings"
msgstr "" msgstr "ERPNext-Einstellungen"
#: frontend/src/components/Settings/ERPNextSettings.vue:5 #: frontend/src/components/Settings/ERPNextSettings.vue:5
msgid "ERPNext settings updated" msgid "ERPNext settings updated"
msgstr "" msgstr "ERPNext-Einstellungen aktualisiert"
#: frontend/src/components/FieldLayout/Field.vue:91 #: frontend/src/components/FieldLayout/Field.vue:91
#: frontend/src/components/FieldLayoutEditor.vue:319 #: frontend/src/components/FieldLayoutEditor.vue:319
@ -1803,7 +1803,7 @@ msgstr "Layout der Datenfelder bearbeiten"
#: frontend/src/components/Settings/EmailEdit.vue:6 #: frontend/src/components/Settings/EmailEdit.vue:6
msgid "Edit Email" msgid "Edit Email"
msgstr "" msgstr "E-Mail bearbeiten"
#: frontend/src/components/Modals/SidePanelModal.vue:7 #: frontend/src/components/Modals/SidePanelModal.vue:7
msgid "Edit Field Layout" msgid "Edit Field Layout"
@ -1861,11 +1861,11 @@ msgstr "E-Mail"
#: frontend/src/components/Settings/Settings.vue:107 #: frontend/src/components/Settings/Settings.vue:107
msgid "Email Accounts" msgid "Email Accounts"
msgstr "" msgstr "E-Mail Konten"
#: frontend/src/components/Settings/emailConfig.js:168 #: frontend/src/components/Settings/emailConfig.js:168
msgid "Email ID is required" msgid "Email ID is required"
msgstr "" msgstr "E-Mail ID ist erforderlich"
#. Label of the email_sent_at (Datetime) field in DocType 'CRM Invitation' #. Label of the email_sent_at (Datetime) field in DocType 'CRM Invitation'
#: crm/fcrm/doctype/crm_invitation/crm_invitation.json #: crm/fcrm/doctype/crm_invitation/crm_invitation.json
@ -1879,19 +1879,19 @@ msgstr "E-Mail-Vorlagen"
#: frontend/src/components/Settings/EmailAdd.vue:141 #: frontend/src/components/Settings/EmailAdd.vue:141
msgid "Email account created successfully" msgid "Email account created successfully"
msgstr "" msgstr "E-Mail-Konto erfolgreich erstellt"
#: frontend/src/components/Settings/EmailEdit.vue:208 #: frontend/src/components/Settings/EmailEdit.vue:208
msgid "Email account updated successfully" msgid "Email account updated successfully"
msgstr "" msgstr "E-Mail-Konto erfolgreich aktualisiert"
#: frontend/src/components/Settings/EmailAccountList.vue:7 #: frontend/src/components/Settings/EmailAccountList.vue:7
msgid "Email accounts" msgid "Email accounts"
msgstr "" msgstr "E-Mail-Konten"
#: frontend/src/components/Layouts/AppSidebar.vue:573 #: frontend/src/components/Layouts/AppSidebar.vue:573
msgid "Email communication" msgid "Email communication"
msgstr "" msgstr "E-Mail-Kommunikation"
#: frontend/src/components/EmailEditor.vue:206 #: frontend/src/components/EmailEditor.vue:206
msgid "Email from Lead" msgid "Email from Lead"
@ -1899,11 +1899,11 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:552 #: frontend/src/components/Layouts/AppSidebar.vue:552
msgid "Email template" msgid "Email template"
msgstr "" msgstr "E-Mail-Vorlage"
#: frontend/src/components/Settings/EmailTemplate/EmailTemplates.vue:7 #: frontend/src/components/Settings/EmailTemplate/EmailTemplates.vue:7
msgid "Email templates" msgid "Email templates"
msgstr "" msgstr "E-Mail-Vorlagen"
#: frontend/src/pages/Deal.vue:545 frontend/src/pages/Lead.vue:411 #: frontend/src/pages/Deal.vue:545 frontend/src/pages/Lead.vue:411
#: frontend/src/pages/MobileDeal.vue:437 frontend/src/pages/MobileLead.vue:344 #: frontend/src/pages/MobileDeal.vue:437 frontend/src/pages/MobileLead.vue:344
@ -1929,7 +1929,7 @@ msgstr "ermöglichen"
#. Label of the enable_forecasting (Check) field in DocType 'FCRM Settings' #. Label of the enable_forecasting (Check) field in DocType 'FCRM Settings'
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
msgid "Enable Forecasting" msgid "Enable Forecasting"
msgstr "" msgstr "Vorhersage aktivieren"
#: frontend/src/components/Settings/emailConfig.js:28 #: frontend/src/components/Settings/emailConfig.js:28
msgid "Enable Incoming" msgid "Enable Incoming"
@ -1941,7 +1941,7 @@ msgstr "Ausgehend aktivieren"
#: frontend/src/components/Settings/General/GeneralSettings.vue:19 #: frontend/src/components/Settings/General/GeneralSettings.vue:19
msgid "Enable forecasting" msgid "Enable forecasting"
msgstr "" msgstr "Vorhersage aktivieren"
#. Label of the enabled (Check) field in DocType 'CRM Exotel Settings' #. Label of the enabled (Check) field in DocType 'CRM Exotel Settings'
#. Label of the enabled (Check) field in DocType 'CRM Form Script' #. Label of the enabled (Check) field in DocType 'CRM Form Script'
@ -2185,7 +2185,7 @@ msgstr ""
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
#: frontend/src/components/Settings/General/BrandSettings.vue:81 #: frontend/src/components/Settings/General/BrandSettings.vue:81
msgid "Favicon" msgid "Favicon"
msgstr "" msgstr "Favicon"
#: frontend/src/components/Modals/EditValueModal.vue:5 #: frontend/src/components/Modals/EditValueModal.vue:5
msgid "Field" msgid "Field"
@ -2485,7 +2485,7 @@ msgstr ""
#: frontend/src/components/Settings/emailConfig.js:47 #: frontend/src/components/Settings/emailConfig.js:47
msgid "If enabled, all replies to your company (eg: replies@yourcomany.com) will come to this account. Note: Only one account can be default incoming." msgid "If enabled, all replies to your company (eg: replies@yourcomany.com) will come to this account. Note: Only one account can be default incoming."
msgstr "" msgstr "Falls aktiviert, werden alle Antworten an Ihr Unternehmen (z.B. replies@yourcomany.com) an dieses Konto gesendet. Hinweis: Es kann nur ein Konto als Standard-Eingang festgelegt werden."
#: frontend/src/components/Settings/emailConfig.js:39 #: frontend/src/components/Settings/emailConfig.js:39
msgid "If enabled, outgoing emails can be sent from this account." msgid "If enabled, outgoing emails can be sent from this account."
@ -3299,7 +3299,7 @@ msgstr "Nächste Woche"
#: frontend/src/components/Filter.vue:672 #: frontend/src/components/Filter.vue:672
msgid "Next Year" msgid "Next Year"
msgstr "" msgstr "Nächstes Jahr"
#: frontend/src/components/Controls/Grid.vue:27 #: frontend/src/components/Controls/Grid.vue:27
msgid "No" msgid "No"

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: shariq@frappe.io\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n"
"POT-Creation-Date: 2025-08-03 09:38+0000\n" "POT-Creation-Date: 2025-08-03 09:38+0000\n"
"PO-Revision-Date: 2025-08-04 08:34\n" "PO-Revision-Date: 2025-08-12 11:22\n"
"Last-Translator: shariq@frappe.io\n" "Last-Translator: shariq@frappe.io\n"
"Language-Team: Persian\n" "Language-Team: Persian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -166,7 +166,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_invitation/crm_invitation.js:7 #: crm/fcrm/doctype/crm_invitation/crm_invitation.js:7
msgid "Accept Invitation" msgid "Accept Invitation"
msgstr "" msgstr "پذیرش دعوت نامه"
#. Option for the 'Status' (Select) field in DocType 'CRM Invitation' #. Option for the 'Status' (Select) field in DocType 'CRM Invitation'
#: crm/fcrm/doctype/crm_invitation/crm_invitation.json #: crm/fcrm/doctype/crm_invitation/crm_invitation.json
@ -176,7 +176,7 @@ msgstr "پذیرفته شده"
#. Label of the accepted_at (Datetime) field in DocType 'CRM Invitation' #. Label of the accepted_at (Datetime) field in DocType 'CRM Invitation'
#: crm/fcrm/doctype/crm_invitation/crm_invitation.json #: crm/fcrm/doctype/crm_invitation/crm_invitation.json
msgid "Accepted At" msgid "Accepted At"
msgstr "" msgstr "پذیرفته شده در"
#. Label of the access_key (Data) field in DocType 'FCRM Settings' #. Label of the access_key (Data) field in DocType 'FCRM Settings'
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
@ -189,7 +189,7 @@ msgstr "کلید دسترسی برای ارائه‌دهنده خدمات لاز
#: frontend/src/components/Settings/General/CurrencySettings.vue:97 #: frontend/src/components/Settings/General/CurrencySettings.vue:97
msgid "Access key" msgid "Access key"
msgstr "" msgstr "کلید دسترسی"
#: frontend/src/components/Settings/General/CurrencySettings.vue:101 #: frontend/src/components/Settings/General/CurrencySettings.vue:101
msgid "Access key for Exchangerate Host. Required for fetching exchange rates." msgid "Access key for Exchangerate Host. Required for fetching exchange rates."
@ -245,7 +245,7 @@ msgstr ""
#: frontend/src/components/Kanban/KanbanSettings.vue:84 #: frontend/src/components/Kanban/KanbanSettings.vue:84
#: frontend/src/components/SidePanelLayoutEditor.vue:98 #: frontend/src/components/SidePanelLayoutEditor.vue:98
msgid "Add Field" msgid "Add Field"
msgstr "" msgstr "افزودن فیلد"
#: frontend/src/components/Filter.vue:138 #: frontend/src/components/Filter.vue:138
msgid "Add Filter" msgid "Add Filter"
@ -258,15 +258,15 @@ msgstr "افزودن ردیف"
#: frontend/src/components/FieldLayoutEditor.vue:200 #: frontend/src/components/FieldLayoutEditor.vue:200
#: frontend/src/components/SidePanelLayoutEditor.vue:130 #: frontend/src/components/SidePanelLayoutEditor.vue:130
msgid "Add Section" msgid "Add Section"
msgstr "" msgstr "افزودن بخش"
#: frontend/src/components/SortBy.vue:148 #: frontend/src/components/SortBy.vue:148
msgid "Add Sort" msgid "Add Sort"
msgstr "" msgstr "افزودن مرتب‌سازی"
#: frontend/src/components/FieldLayoutEditor.vue:62 #: frontend/src/components/FieldLayoutEditor.vue:62
msgid "Add Tab" msgid "Add Tab"
msgstr "" msgstr "افزودن تب"
#. Label of the add_weekly_holidays_section (Section Break) field in DocType #. Label of the add_weekly_holidays_section (Section Break) field in DocType
#. 'CRM Holiday List' #. 'CRM Holiday List'
@ -405,7 +405,7 @@ msgstr "درآمد سالانه"
#: frontend/src/components/Modals/DealModal.vue:201 #: frontend/src/components/Modals/DealModal.vue:201
#: frontend/src/components/Modals/LeadModal.vue:142 #: frontend/src/components/Modals/LeadModal.vue:142
msgid "Annual Revenue should be a number" msgid "Annual Revenue should be a number"
msgstr "" msgstr "درآمد سالانه باید یک عدد باشد"
#: frontend/src/components/Settings/General/BrandSettings.vue:69 #: frontend/src/components/Settings/General/BrandSettings.vue:69
msgid "Appears in the left sidebar. Recommended size is 32x32 px in PNG or SVG" msgid "Appears in the left sidebar. Recommended size is 32x32 px in PNG or SVG"
@ -1033,12 +1033,12 @@ msgstr "ستون ها"
#: frontend/src/components/CommunicationArea.vue:19 #: frontend/src/components/CommunicationArea.vue:19
#: frontend/src/components/Layouts/AppSidebar.vue:574 #: frontend/src/components/Layouts/AppSidebar.vue:574
msgid "Comment" msgid "Comment"
msgstr "اظهار نظر" msgstr "دیدگاه"
#: frontend/src/pages/Deal.vue:550 frontend/src/pages/Lead.vue:416 #: frontend/src/pages/Deal.vue:550 frontend/src/pages/Lead.vue:416
#: frontend/src/pages/MobileDeal.vue:442 frontend/src/pages/MobileLead.vue:349 #: frontend/src/pages/MobileDeal.vue:442 frontend/src/pages/MobileLead.vue:349
msgid "Comments" msgid "Comments"
msgstr "نظرات" msgstr "دیدگاه‌ها"
#: crm/api/dashboard.py:884 #: crm/api/dashboard.py:884
msgid "Common reasons for losing deals" msgid "Common reasons for losing deals"
@ -1142,7 +1142,7 @@ msgstr "مخاطب قبلاً اضافه شده است"
#: crm/fcrm/doctype/crm_lead/crm_lead.py:211 #: crm/fcrm/doctype/crm_lead/crm_lead.py:211
msgid "Contact already exists with {0}" msgid "Contact already exists with {0}"
msgstr "" msgstr "مخاطب از قبل با {0} وجود دارد"
#: frontend/src/pages/Contact.vue:282 frontend/src/pages/MobileContact.vue:255 #: frontend/src/pages/Contact.vue:282 frontend/src/pages/MobileContact.vue:255
msgid "Contact image updated" msgid "Contact image updated"
@ -2565,7 +2565,7 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:593 #: frontend/src/components/Layouts/AppSidebar.vue:593
msgid "Integration" msgid "Integration"
msgstr "" msgstr "یکپارچه سازی"
#: crm/integrations/exotel/handler.py:73 #: crm/integrations/exotel/handler.py:73
msgid "Integration Not Enabled" msgid "Integration Not Enabled"
@ -4194,7 +4194,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_deal/crm_deal.json #: crm/fcrm/doctype/crm_deal/crm_deal.json
#: crm/fcrm/doctype/crm_lead/crm_lead.json #: crm/fcrm/doctype/crm_lead/crm_lead.json
msgid "SLA Status" msgid "SLA Status"
msgstr "" msgstr "وضعیت SLA"
#: frontend/src/components/EmailEditor.vue:82 #: frontend/src/components/EmailEditor.vue:82
msgid "SUBJECT" msgid "SUBJECT"
@ -4498,7 +4498,7 @@ msgstr ""
#: frontend/src/components/FieldLayoutEditor.vue:355 #: frontend/src/components/FieldLayoutEditor.vue:355
msgid "Show label" msgid "Show label"
msgstr "" msgstr "نمایش برچسب"
#: frontend/src/components/Controls/GridRowFieldsModal.vue:20 #: frontend/src/components/Controls/GridRowFieldsModal.vue:20
#: frontend/src/components/Modals/DataFieldsModal.vue:20 #: frontend/src/components/Modals/DataFieldsModal.vue:20
@ -4648,7 +4648,7 @@ msgstr ""
#: frontend/src/components/FilesUploader/FilesUploader.vue:49 #: frontend/src/components/FilesUploader/FilesUploader.vue:49
msgid "Switch camera" msgid "Switch camera"
msgstr "" msgstr "تغییر دوربین"
#: frontend/src/pages/Welcome.vue:32 #: frontend/src/pages/Welcome.vue:32
msgid "Sync your contacts,email and calenders" msgid "Sync your contacts,email and calenders"
@ -4678,7 +4678,7 @@ msgstr ""
#: frontend/src/components/Telephony/ExotelCallUI.vue:151 #: frontend/src/components/Telephony/ExotelCallUI.vue:151
msgid "Take a note..." msgid "Take a note..."
msgstr "" msgstr "یادداشت کنید..."
#. Option for the 'Type' (Select) field in DocType 'CRM Notification' #. Option for the 'Type' (Select) field in DocType 'CRM Notification'
#: crm/fcrm/doctype/crm_notification/crm_notification.json #: crm/fcrm/doctype/crm_notification/crm_notification.json
@ -4762,7 +4762,7 @@ msgstr "نام منطقه"
#: crm/fcrm/doctype/crm_service_level_agreement/crm_service_level_agreement.py:46 #: crm/fcrm/doctype/crm_service_level_agreement/crm_service_level_agreement.py:46
msgid "The Condition '{0}' is invalid: {1}" msgid "The Condition '{0}' is invalid: {1}"
msgstr "" msgstr "شرط '{0}' نامعتبر است: {1}"
#. Description of the 'Exchange Rate' (Float) field in DocType 'CRM Deal' #. Description of the 'Exchange Rate' (Float) field in DocType 'CRM Deal'
#: crm/fcrm/doctype/crm_deal/crm_deal.json #: crm/fcrm/doctype/crm_deal/crm_deal.json
@ -4939,7 +4939,7 @@ msgstr "سه‌شنبه"
#. Label of the twiml_sid (Data) field in DocType 'CRM Twilio Settings' #. Label of the twiml_sid (Data) field in DocType 'CRM Twilio Settings'
#: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.json #: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.json
msgid "TwiML SID" msgid "TwiML SID"
msgstr "" msgstr "TwiML SID"
#. Option for the 'Telephony Medium' (Select) field in DocType 'CRM Call Log' #. Option for the 'Telephony Medium' (Select) field in DocType 'CRM Call Log'
#. Label of the twilio (Check) field in DocType 'CRM Telephony Agent' #. Label of the twilio (Check) field in DocType 'CRM Telephony Agent'
@ -4951,7 +4951,7 @@ msgstr ""
#: frontend/src/components/Settings/TelephonySettings.vue:40 #: frontend/src/components/Settings/TelephonySettings.vue:40
#: frontend/src/components/Settings/TelephonySettings.vue:50 #: frontend/src/components/Settings/TelephonySettings.vue:50
msgid "Twilio" msgid "Twilio"
msgstr "" msgstr "Twilio"
#: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.py:59 #: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.py:59
#: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.py:60 #: crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.py:60
@ -4965,7 +4965,7 @@ msgstr ""
#: frontend/src/components/Settings/TelephonySettings.vue:289 #: frontend/src/components/Settings/TelephonySettings.vue:289
msgid "Twilio is not enabled" msgid "Twilio is not enabled"
msgstr "" msgstr "Twilio فعال نیست"
#: frontend/src/components/Settings/TelephonySettings.vue:125 #: frontend/src/components/Settings/TelephonySettings.vue:125
msgid "Twilio settings updated successfully" msgid "Twilio settings updated successfully"
@ -5377,7 +5377,7 @@ msgstr "group_by"
#: frontend/src/components/Activities/CallArea.vue:16 #: frontend/src/components/Activities/CallArea.vue:16
msgid "has made a call" msgid "has made a call"
msgstr "" msgstr "تماس گرفته است"
#: frontend/src/components/Activities/CallArea.vue:15 #: frontend/src/components/Activities/CallArea.vue:15
msgid "has reached out" msgid "has reached out"

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: frappe\n" "Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: shariq@frappe.io\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n"
"POT-Creation-Date: 2025-08-03 09:38+0000\n" "POT-Creation-Date: 2025-08-03 09:38+0000\n"
"PO-Revision-Date: 2025-08-08 10:07\n" "PO-Revision-Date: 2025-08-11 10:38\n"
"Last-Translator: shariq@frappe.io\n" "Last-Translator: shariq@frappe.io\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -208,7 +208,7 @@ msgstr "SID dell'Account"
#: frontend/src/components/Settings/emailConfig.js:165 #: frontend/src/components/Settings/emailConfig.js:165
msgid "Account name is required" msgid "Account name is required"
msgstr "Il nome dell'account è obbligatorio" msgstr "Il nome dell'Account è obbligatorio"
#: frontend/src/components/CustomActions.vue:73 #: frontend/src/components/CustomActions.vue:73
#: frontend/src/components/ViewControls.vue:683 #: frontend/src/components/ViewControls.vue:683
@ -377,7 +377,7 @@ msgstr ""
#: frontend/src/data/document.js:63 #: frontend/src/data/document.js:63
msgid "An error occurred while updating the document" msgid "An error occurred while updating the document"
msgstr "" msgstr "Si è verificato un errore durante l'aggiornamento del documento"
#. Description of the 'Favicon' (Attach) field in DocType 'FCRM Settings' #. Description of the 'Favicon' (Attach) field in DocType 'FCRM Settings'
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
@ -472,7 +472,7 @@ msgstr ""
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.py:193 #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.py:193
msgid "Ask your manager to set up the Exchange Rate Provider, as default provider does not support currency conversion for {0} to {1}." msgid "Ask your manager to set up the Exchange Rate Provider, as default provider does not support currency conversion for {0} to {1}."
msgstr "" msgstr "Chiedi al tuo manager di configurare un fornitore di tassi di cambio, poiché quello predefinito non supporta la conversione da {0} a {1}."
#: frontend/src/components/ListBulkActions.vue:184 #: frontend/src/components/ListBulkActions.vue:184
#: frontend/src/components/Modals/AssignmentModal.vue:5 #: frontend/src/components/Modals/AssignmentModal.vue:5
@ -726,7 +726,7 @@ msgstr ""
#. Name of a DocType #. Name of a DocType
#: crm/fcrm/doctype/crm_lead/crm_lead.json #: crm/fcrm/doctype/crm_lead/crm_lead.json
msgid "CRM Lead" msgid "CRM Lead"
msgstr "" msgstr "Offerta CRM"
#. Name of a DocType #. Name of a DocType
#: crm/fcrm/doctype/crm_lead_source/crm_lead_source.json #: crm/fcrm/doctype/crm_lead_source/crm_lead_source.json
@ -791,7 +791,7 @@ msgstr ""
#. Name of a DocType #. Name of a DocType
#: crm/fcrm/doctype/crm_task/crm_task.json #: crm/fcrm/doctype/crm_task/crm_task.json
msgid "CRM Task" msgid "CRM Task"
msgstr "" msgstr "Attività CRM"
#. Name of a DocType #. Name of a DocType
#: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json #: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json
@ -824,7 +824,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:272 #: frontend/src/components/ViewControls.vue:272
msgid "CSV" msgid "CSV"
msgstr "" msgstr "CSV"
#: frontend/src/components/Modals/CallLogDetailModal.vue:8 #: frontend/src/components/Modals/CallLogDetailModal.vue:8
msgid "Call Details" msgid "Call Details"
@ -966,7 +966,7 @@ msgstr ""
#: frontend/src/components/Controls/Link.vue:62 #: frontend/src/components/Controls/Link.vue:62
msgid "Clear" msgid "Clear"
msgstr "" msgstr "Pulisci"
#: frontend/src/components/ListBulkActions.vue:134 #: frontend/src/components/ListBulkActions.vue:134
#: frontend/src/components/ListBulkActions.vue:142 #: frontend/src/components/ListBulkActions.vue:142
@ -1086,7 +1086,7 @@ msgstr ""
#: frontend/src/components/Settings/General/CurrencySettings.vue:70 #: frontend/src/components/Settings/General/CurrencySettings.vue:70
msgid "Configure the exchange rate provider for your CRM" msgid "Configure the exchange rate provider for your CRM"
msgstr "" msgstr "Configura un exchange rate provider per il tuo CRM"
#: frontend/src/composables/frappecloud.js:29 #: frontend/src/composables/frappecloud.js:29
msgid "Confirm" msgid "Confirm"
@ -1099,7 +1099,7 @@ msgstr ""
#: frontend/src/components/Modals/ChangePasswordModal.vue:18 #: frontend/src/components/Modals/ChangePasswordModal.vue:18
msgid "Confirm Password" msgid "Confirm Password"
msgstr "Conferma Password" msgstr "Ripeti Password"
#: frontend/src/components/Settings/Users.vue:225 #: frontend/src/components/Settings/Users.vue:225
#: frontend/src/components/Settings/Users.vue:228 #: frontend/src/components/Settings/Users.vue:228
@ -1118,7 +1118,7 @@ msgstr ""
#: frontend/src/components/Modals/ConvertToDealModal.vue:65 #: frontend/src/components/Modals/ConvertToDealModal.vue:65
#: frontend/src/pages/MobileLead.vue:147 #: frontend/src/pages/MobileLead.vue:147
msgid "Contact" msgid "Contact"
msgstr "" msgstr "Contatto"
#: crm/fcrm/doctype/crm_lead/crm_lead.py:212 #: crm/fcrm/doctype/crm_lead/crm_lead.py:212
msgid "Contact Already Exists" msgid "Contact Already Exists"
@ -1228,7 +1228,7 @@ msgstr "Copiato negli appunti"
#: crm/api/dashboard.py:607 crm/api/dashboard.py:736 crm/api/dashboard.py:794 #: crm/api/dashboard.py:607 crm/api/dashboard.py:736 crm/api/dashboard.py:794
#: crm/api/dashboard.py:891 #: crm/api/dashboard.py:891
msgid "Count" msgid "Count"
msgstr "" msgstr "Q.tà"
#: frontend/src/components/Modals/AddressModal.vue:99 #: frontend/src/components/Modals/AddressModal.vue:99
#: frontend/src/components/Modals/CallLogModal.vue:102 #: frontend/src/components/Modals/CallLogModal.vue:102
@ -1667,7 +1667,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json #: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json
#: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json #: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json
msgid "DocType" msgid "DocType"
msgstr "Tipo di documento" msgstr "Tipo Documento"
#. Label of the dt (Link) field in DocType 'CRM Fields Layout' #. Label of the dt (Link) field in DocType 'CRM Fields Layout'
#: crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.json #: crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.json
@ -1676,7 +1676,7 @@ msgstr "Tipo Documento"
#: frontend/src/data/document.js:28 #: frontend/src/data/document.js:28
msgid "Document does not exist" msgid "Document does not exist"
msgstr "" msgstr "Il Documento non esiste"
#: crm/api/activities.py:19 #: crm/api/activities.py:19
msgid "Document not found" msgid "Document not found"
@ -1749,7 +1749,7 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:599 #: frontend/src/components/Layouts/AppSidebar.vue:599
#: frontend/src/components/Settings/Settings.vue:135 #: frontend/src/components/Settings/Settings.vue:135
msgid "ERPNext" msgid "ERPNext"
msgstr "" msgstr "ERPNext"
#. Name of a DocType #. Name of a DocType
#: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json
@ -1791,7 +1791,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:1131 #: frontend/src/components/ViewControls.vue:1131
#: frontend/src/pages/Dashboard.vue:19 #: frontend/src/pages/Dashboard.vue:19
msgid "Edit" msgid "Edit"
msgstr "" msgstr "Modifica"
#: frontend/src/components/Modals/CallLogModal.vue:98 #: frontend/src/components/Modals/CallLogModal.vue:98
msgid "Edit Call Log" msgid "Edit Call Log"
@ -1973,7 +1973,7 @@ msgstr ""
#: frontend/src/components/Settings/General/CurrencySettings.vue:122 #: frontend/src/components/Settings/General/CurrencySettings.vue:122
msgid "Enter access key" msgid "Enter access key"
msgstr "" msgstr "Inserisci la chiave di accesso"
#: frontend/src/components/FieldLayout/Field.vue:334 #: frontend/src/components/FieldLayout/Field.vue:334
msgid "Enter {0}" msgid "Enter {0}"
@ -1996,7 +1996,7 @@ msgstr ""
#: frontend/src/pages/Deal.vue:739 frontend/src/pages/Lead.vue:486 #: frontend/src/pages/Deal.vue:739 frontend/src/pages/Lead.vue:486
#: frontend/src/pages/MobileDeal.vue:614 frontend/src/pages/MobileLead.vue:415 #: frontend/src/pages/MobileDeal.vue:614 frontend/src/pages/MobileLead.vue:415
msgid "Error updating field" msgid "Error updating field"
msgstr "" msgstr "Aggiornamento campo non riuscito"
#: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:261 #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:261
msgid "Error while creating customer in ERPNext, check error log for more details" msgid "Error while creating customer in ERPNext, check error log for more details"
@ -2080,7 +2080,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_deal/crm_deal.py:161 #: crm/fcrm/doctype/crm_deal/crm_deal.py:161
msgid "Expected Closure Date is required." msgid "Expected Closure Date is required."
msgstr "" msgstr "Data Chiusura Prevista obbligatoria."
#. Label of the expected_deal_value (Currency) field in DocType 'CRM Deal' #. Label of the expected_deal_value (Currency) field in DocType 'CRM Deal'
#: crm/fcrm/doctype/crm_deal/crm_deal.json #: crm/fcrm/doctype/crm_deal/crm_deal.json
@ -2099,7 +2099,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:203 #: frontend/src/components/ViewControls.vue:203
#: frontend/src/components/ViewControls.vue:251 #: frontend/src/components/ViewControls.vue:251
msgid "Export" msgid "Export"
msgstr "Esportare" msgstr "Esporta"
#: frontend/src/components/ViewControls.vue:282 #: frontend/src/components/ViewControls.vue:282
msgid "Export All {0} Record(s)" msgid "Export All {0} Record(s)"
@ -2150,7 +2150,7 @@ msgstr ""
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.py:205 #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.py:205
msgid "Failed to fetch exchange rate from {0} to {1} on {2}. Please check your internet connection or try again later." msgid "Failed to fetch exchange rate from {0} to {1} on {2}. Please check your internet connection or try again later."
msgstr "" msgstr "Impossibile recuperare il tasso di cambio da {0} a {1} in data {2}. Controlla la tua connessione internet o riprova più tardi."
#: frontend/src/data/script.js:106 #: frontend/src/data/script.js:106
msgid "Failed to load form controller: {0}" msgid "Failed to load form controller: {0}"
@ -2227,7 +2227,7 @@ msgstr "Filtri"
#: frontend/src/components/SortBy.vue:6 frontend/src/components/SortBy.vue:106 #: frontend/src/components/SortBy.vue:6 frontend/src/components/SortBy.vue:106
#: frontend/src/components/SortBy.vue:140 #: frontend/src/components/SortBy.vue:140
msgid "First Name" msgid "First Name"
msgstr "Nome di battesimo" msgstr "Nome"
#: frontend/src/components/Modals/LeadModal.vue:135 #: frontend/src/components/Modals/LeadModal.vue:135
msgid "First Name is mandatory" msgid "First Name is mandatory"
@ -2296,7 +2296,7 @@ msgstr ""
#. Name of a Workspace #. Name of a Workspace
#: crm/fcrm/workspace/frappe_crm/frappe_crm.json #: crm/fcrm/workspace/frappe_crm/frappe_crm.json
msgid "Frappe CRM" msgid "Frappe CRM"
msgstr "" msgstr "CRM Frappe"
#: frontend/src/components/Layouts/AppSidebar.vue:603 #: frontend/src/components/Layouts/AppSidebar.vue:603
msgid "Frappe CRM mobile" msgid "Frappe CRM mobile"
@ -2359,7 +2359,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_deal/crm_deal.json #: crm/fcrm/doctype/crm_deal/crm_deal.json
#: crm/fcrm/doctype/crm_lead/crm_lead.json #: crm/fcrm/doctype/crm_lead/crm_lead.json
msgid "Gender" msgid "Gender"
msgstr "" msgstr "Genere"
#: frontend/src/components/Settings/General/GeneralSettings.vue:5 #: frontend/src/components/Settings/General/GeneralSettings.vue:5
#: frontend/src/components/Settings/Settings.vue:89 #: frontend/src/components/Settings/Settings.vue:89
@ -2414,7 +2414,7 @@ msgstr "Nascosto"
#: frontend/src/components/Activities/Activities.vue:230 #: frontend/src/components/Activities/Activities.vue:230
msgid "Hide" msgid "Hide"
msgstr "" msgstr "Nascosto"
#: frontend/src/components/Controls/Password.vue:19 #: frontend/src/components/Controls/Password.vue:19
msgid "Hide Password" msgid "Hide Password"
@ -2652,7 +2652,7 @@ msgstr ""
#. Label of the is_default (Check) field in DocType 'CRM View Settings' #. Label of the is_default (Check) field in DocType 'CRM View Settings'
#: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json #: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json
msgid "Is Default" msgid "Is Default"
msgstr "È predefinito" msgstr "È Predefinito"
#. Label of the is_erpnext_in_different_site (Check) field in DocType 'ERPNext #. Label of the is_erpnext_in_different_site (Check) field in DocType 'ERPNext
#. CRM Settings' #. CRM Settings'
@ -2690,7 +2690,7 @@ msgstr ""
#. Label of the json (JSON) field in DocType 'CRM Global Settings' #. Label of the json (JSON) field in DocType 'CRM Global Settings'
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json #: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json
msgid "JSON" msgid "JSON"
msgstr "" msgstr "JSON"
#. Label of the job_title (Data) field in DocType 'CRM Deal' #. Label of the job_title (Data) field in DocType 'CRM Deal'
#. Label of the job_title (Data) field in DocType 'CRM Lead' #. Label of the job_title (Data) field in DocType 'CRM Lead'
@ -2711,7 +2711,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:384 #: frontend/src/components/ViewControls.vue:384
#: frontend/src/components/ViewControls.vue:600 frontend/src/utils/view.js:20 #: frontend/src/components/ViewControls.vue:600 frontend/src/utils/view.js:20
msgid "Kanban" msgid "Kanban"
msgstr "" msgstr "Kanban"
#. Label of the kanban_columns (Code) field in DocType 'CRM View Settings' #. Label of the kanban_columns (Code) field in DocType 'CRM View Settings'
#: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json #: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json
@ -2859,7 +2859,7 @@ msgstr ""
#: frontend/src/components/FilesUploader/FilesUploaderArea.vue:43 #: frontend/src/components/FilesUploader/FilesUploaderArea.vue:43
msgid "Library" msgid "Library"
msgstr "" msgstr "Libreria"
#: frontend/src/components/Filter.vue:274 #: frontend/src/components/Filter.vue:274
#: frontend/src/components/Filter.vue:285 #: frontend/src/components/Filter.vue:285
@ -2974,7 +2974,7 @@ msgstr ""
#. Option for the 'Priority' (Select) field in DocType 'CRM Task' #. Option for the 'Priority' (Select) field in DocType 'CRM Task'
#: crm/fcrm/doctype/crm_task/crm_task.json #: crm/fcrm/doctype/crm_task/crm_task.json
msgid "Low" msgid "Low"
msgstr "" msgstr "Bassa"
#: frontend/src/pages/Contact.vue:94 frontend/src/pages/MobileContact.vue:73 #: frontend/src/pages/Contact.vue:94 frontend/src/pages/MobileContact.vue:73
msgid "Make Call" msgid "Make Call"
@ -3091,7 +3091,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_contacts/crm_contacts.json #: crm/fcrm/doctype/crm_contacts/crm_contacts.json
#: crm/fcrm/doctype/crm_lead/crm_lead.json #: crm/fcrm/doctype/crm_lead/crm_lead.json
msgid "Mobile No" msgid "Mobile No"
msgstr "" msgstr "Cellulare"
#: frontend/src/components/Modals/DealModal.vue:209 #: frontend/src/components/Modals/DealModal.vue:209
#: frontend/src/components/Modals/LeadModal.vue:150 #: frontend/src/components/Modals/LeadModal.vue:150
@ -3119,7 +3119,7 @@ msgstr ""
#: frontend/src/pages/MobileOrganization.vue:470 #: frontend/src/pages/MobileOrganization.vue:470
#: frontend/src/pages/Organization.vue:479 #: frontend/src/pages/Organization.vue:479
msgid "Mobile no" msgid "Mobile no"
msgstr "" msgstr "Cellulare"
#. Option for the 'Weekly Off' (Select) field in DocType 'CRM Holiday List' #. Option for the 'Weekly Off' (Select) field in DocType 'CRM Holiday List'
#. Option for the 'Workday' (Select) field in DocType 'CRM Service Day' #. Option for the 'Workday' (Select) field in DocType 'CRM Service Day'
@ -3218,7 +3218,7 @@ msgstr ""
#: frontend/src/components/Activities/ActivityHeader.vue:17 #: frontend/src/components/Activities/ActivityHeader.vue:17
#: frontend/src/components/Activities/ActivityHeader.vue:127 #: frontend/src/components/Activities/ActivityHeader.vue:127
msgid "New Email" msgid "New Email"
msgstr "" msgstr "Nuova E-mail"
#: frontend/src/components/Activities/ActivityHeader.vue:73 #: frontend/src/components/Activities/ActivityHeader.vue:73
msgid "New Message" msgid "New Message"
@ -3236,7 +3236,7 @@ msgstr ""
#: frontend/src/components/Modals/ChangePasswordModal.vue:6 #: frontend/src/components/Modals/ChangePasswordModal.vue:6
msgid "New Password" msgid "New Password"
msgstr "" msgstr "Nuova Password"
#: frontend/src/components/FieldLayoutEditor.vue:203 #: frontend/src/components/FieldLayoutEditor.vue:203
#: frontend/src/components/SidePanelLayoutEditor.vue:133 #: frontend/src/components/SidePanelLayoutEditor.vue:133
@ -3675,7 +3675,7 @@ msgstr ""
#: frontend/src/components/Settings/emailConfig.js:64 #: frontend/src/components/Settings/emailConfig.js:64
msgid "Password" msgid "Password"
msgstr "" msgstr "Password"
#: crm/api/demo.py:21 crm/api/demo.py:29 #: crm/api/demo.py:21 crm/api/demo.py:29
msgid "Password cannot be reset by Demo User {}" msgid "Password cannot be reset by Demo User {}"
@ -3729,7 +3729,7 @@ msgstr ""
#: frontend/src/pages/MobileOrganization.vue:498 #: frontend/src/pages/MobileOrganization.vue:498
#: frontend/src/pages/Organization.vue:507 #: frontend/src/pages/Organization.vue:507
msgid "Phone" msgid "Phone"
msgstr "" msgstr "Telefono"
#. Label of the phone_nos (Table) field in DocType 'CRM Telephony Agent' #. Label of the phone_nos (Table) field in DocType 'CRM Telephony Agent'
#: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json #: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json
@ -4002,7 +4002,7 @@ msgstr "Nome di Riferimento"
#: frontend/src/components/ViewControls.vue:160 #: frontend/src/components/ViewControls.vue:160
#: frontend/src/pages/Dashboard.vue:10 #: frontend/src/pages/Dashboard.vue:10
msgid "Refresh" msgid "Refresh"
msgstr "" msgstr "Ricarica"
#: frontend/src/components/Telephony/TwilioCallUI.vue:104 #: frontend/src/components/Telephony/TwilioCallUI.vue:104
msgid "Reject" msgid "Reject"
@ -4228,7 +4228,7 @@ msgstr ""
#: crm/fcrm/doctype/fcrm_note/fcrm_note.json #: crm/fcrm/doctype/fcrm_note/fcrm_note.json
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
msgid "Sales Manager" msgid "Sales Manager"
msgstr "" msgstr "Responsabile Vendite"
#. Name of a role #. Name of a role
#. Option for the 'Role' (Select) field in DocType 'CRM Invitation' #. Option for the 'Role' (Select) field in DocType 'CRM Invitation'
@ -4302,7 +4302,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:123 #: frontend/src/components/ViewControls.vue:123
#: frontend/src/pages/Dashboard.vue:45 #: frontend/src/pages/Dashboard.vue:45
msgid "Save" msgid "Save"
msgstr "" msgstr "Salva"
#: frontend/src/components/Modals/ViewModal.vue:13 #: frontend/src/components/Modals/ViewModal.vue:13
#: frontend/src/components/ViewControls.vue:57 #: frontend/src/components/ViewControls.vue:57
@ -4486,7 +4486,7 @@ msgstr ""
#: frontend/src/components/Activities/Activities.vue:230 #: frontend/src/components/Activities/Activities.vue:230
msgid "Show" msgid "Show"
msgstr "" msgstr "Mostra"
#: frontend/src/components/Controls/Password.vue:19 #: frontend/src/components/Controls/Password.vue:19
msgid "Show Password" msgid "Show Password"
@ -4515,7 +4515,7 @@ msgstr ""
#. Option for the 'Type' (Select) field in DocType 'CRM Global Settings' #. Option for the 'Type' (Select) field in DocType 'CRM Global Settings'
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json #: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json
msgid "Sidebar Items" msgid "Sidebar Items"
msgstr "" msgstr "Elementi della Barra Laterale"
#. Description of the 'Condition' (Code) field in DocType 'CRM Service Level #. Description of the 'Condition' (Code) field in DocType 'CRM Service Level
#. Agreement' #. Agreement'
@ -4534,7 +4534,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_lead/crm_lead.json #: crm/fcrm/doctype/crm_lead/crm_lead.json
#: frontend/src/components/Modals/EditValueModal.vue:10 #: frontend/src/components/Modals/EditValueModal.vue:10
msgid "Source" msgid "Source"
msgstr "" msgstr "Sorgente"
#. Label of the source_name (Data) field in DocType 'CRM Lead Source' #. Label of the source_name (Data) field in DocType 'CRM Lead Source'
#: crm/fcrm/doctype/crm_lead_source/crm_lead_source.json #: crm/fcrm/doctype/crm_lead_source/crm_lead_source.json
@ -4670,7 +4670,7 @@ msgstr ""
#: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json #: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
msgid "System Manager" msgid "System Manager"
msgstr "" msgstr "Amministratore di Sistema"
#: frontend/src/components/EmailEditor.vue:22 #: frontend/src/components/EmailEditor.vue:22
msgid "TO" msgid "TO"
@ -5564,7 +5564,7 @@ msgstr ""
#: frontend/src/utils/index.js:130 #: frontend/src/utils/index.js:130
msgid "{0} M" msgid "{0} M"
msgstr "" msgstr "{0} mesi"
#: crm/api/todo.py:50 #: crm/api/todo.py:50
msgid "{0} assigned a {1} {2} to you" msgid "{0} assigned a {1} {2} to you"
@ -5572,7 +5572,7 @@ msgstr ""
#: frontend/src/utils/index.js:126 #: frontend/src/utils/index.js:126
msgid "{0} d" msgid "{0} d"
msgstr "" msgstr "{0} giorni"
#: frontend/src/utils/index.js:181 #: frontend/src/utils/index.js:181
msgid "{0} days ago" msgid "{0} days ago"
@ -5616,7 +5616,7 @@ msgstr ""
#: frontend/src/utils/index.js:128 #: frontend/src/utils/index.js:128
msgid "{0} w" msgid "{0} w"
msgstr "" msgstr "{0} settimane"
#: frontend/src/utils/index.js:185 #: frontend/src/utils/index.js:185
msgid "{0} weeks ago" msgid "{0} weeks ago"
@ -5624,7 +5624,7 @@ msgstr ""
#: frontend/src/utils/index.js:132 #: frontend/src/utils/index.js:132
msgid "{0} y" msgid "{0} y"
msgstr "" msgstr "{0} anni"
#: frontend/src/utils/index.js:193 #: frontend/src/utils/index.js:193
msgid "{0} years ago" msgid "{0} years ago"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Frappe CRM VERSION\n" "Project-Id-Version: Frappe CRM VERSION\n"
"Report-Msgid-Bugs-To: shariq@frappe.io\n" "Report-Msgid-Bugs-To: shariq@frappe.io\n"
"POT-Creation-Date: 2025-08-03 09:38+0000\n" "POT-Creation-Date: 2025-08-17 09:36+0000\n"
"PO-Revision-Date: 2025-08-03 09:38+0000\n" "PO-Revision-Date: 2025-08-17 09:36+0000\n"
"Last-Translator: shariq@frappe.io\n" "Last-Translator: shariq@frappe.io\n"
"Language-Team: shariq@frappe.io\n" "Language-Team: shariq@frappe.io\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -473,14 +473,19 @@ msgid "Ask your manager to set up the Exchange Rate Provider, as default provide
msgstr "" msgstr ""
#: frontend/src/components/ListBulkActions.vue:184 #: frontend/src/components/ListBulkActions.vue:184
#: frontend/src/components/Modals/AssignmentModal.vue:5 #: frontend/src/components/Modals/AssignmentModal.vue:4
msgid "Assign To" msgid "Assign To"
msgstr "" msgstr ""
#: frontend/src/components/AssignTo.vue:9 #: frontend/src/components/AssignTo.vue:11
#: frontend/src/components/AssignToBody.vue:5
msgid "Assign to" msgid "Assign to"
msgstr "" msgstr ""
#: frontend/src/components/AssignToBody.vue:65
msgid "Assign to me"
msgstr ""
#. Label of the assigned_to (Link) field in DocType 'CRM Task' #. Label of the assigned_to (Link) field in DocType 'CRM Task'
#: crm/fcrm/doctype/crm_task/crm_task.json #: crm/fcrm/doctype/crm_task/crm_task.json
msgid "Assigned To" msgid "Assigned To"
@ -878,7 +883,7 @@ msgstr ""
#: frontend/src/components/ColumnSettings.vue:132 #: frontend/src/components/ColumnSettings.vue:132
#: frontend/src/components/Dashboard/AddChartModal.vue:40 #: frontend/src/components/Dashboard/AddChartModal.vue:40
#: frontend/src/components/DeleteLinkedDocModal.vue:114 #: frontend/src/components/DeleteLinkedDocModal.vue:114
#: frontend/src/components/Modals/AssignmentModal.vue:9 #: frontend/src/components/Modals/AssignmentModal.vue:69
#: frontend/src/components/Modals/LostReasonModal.vue:43 #: frontend/src/components/Modals/LostReasonModal.vue:43
#: frontend/src/components/Telephony/TwilioCallUI.vue:77 #: frontend/src/components/Telephony/TwilioCallUI.vue:77
#: frontend/src/components/ViewControls.vue:56 #: frontend/src/components/ViewControls.vue:56
@ -1266,12 +1271,12 @@ msgstr ""
msgid "Create New" msgid "Create New"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:384 #: frontend/src/components/Activities/Activities.vue:388
#: frontend/src/components/Modals/NoteModal.vue:15 #: frontend/src/components/Modals/NoteModal.vue:15
msgid "Create Note" msgid "Create Note"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:399 #: frontend/src/components/Activities/Activities.vue:403
#: frontend/src/components/Modals/TaskModal.vue:18 #: frontend/src/components/Modals/TaskModal.vue:18
msgid "Create Task" msgid "Create Task"
msgstr "" msgstr ""
@ -1996,11 +2001,11 @@ msgstr ""
msgid "Error updating field" msgid "Error updating field"
msgstr "" msgstr ""
#: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:261 #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:282
msgid "Error while creating customer in ERPNext, check error log for more details" msgid "Error while creating customer in ERPNext, check error log for more details"
msgstr "" msgstr ""
#: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:173 #: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:194
msgid "Error while creating prospect in ERPNext, check error log for more details" msgid "Error while creating prospect in ERPNext, check error log for more details"
msgstr "" msgstr ""
@ -2410,7 +2415,7 @@ msgstr ""
msgid "Hidden" msgid "Hidden"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:230 #: frontend/src/components/Activities/Activities.vue:234
msgid "Hide" msgid "Hide"
msgstr "" msgstr ""
@ -2418,7 +2423,7 @@ msgstr ""
msgid "Hide Password" msgid "Hide Password"
msgstr "" msgstr ""
#: frontend/src/components/Activities/CallArea.vue:74 #: frontend/src/components/Activities/CallArea.vue:75
msgid "Hide Recording" msgid "Hide Recording"
msgstr "" msgstr ""
@ -2519,7 +2524,7 @@ msgstr ""
msgid "In less than a minute" msgid "In less than a minute"
msgstr "" msgstr ""
#: frontend/src/components/Activities/CallArea.vue:35 #: frontend/src/components/Activities/CallArea.vue:36
msgid "Inbound Call" msgid "Inbound Call"
msgstr "" msgstr ""
@ -2697,8 +2702,9 @@ msgstr ""
msgid "Job Title" msgid "Job Title"
msgstr "" msgstr ""
#: frontend/src/components/AssignToBody.vue:11
#: frontend/src/components/Filter.vue:75 frontend/src/components/Filter.vue:108 #: frontend/src/components/Filter.vue:75 frontend/src/components/Filter.vue:108
#: frontend/src/components/Modals/AssignmentModal.vue:35 #: frontend/src/components/Modals/AssignmentModal.vue:13
#: frontend/src/components/Modals/TaskModal.vue:76 #: frontend/src/components/Modals/TaskModal.vue:76
#: frontend/src/components/Telephony/TaskPanel.vue:47 #: frontend/src/components/Telephony/TaskPanel.vue:47
msgid "John Doe" msgid "John Doe"
@ -2885,7 +2891,7 @@ msgstr ""
msgid "List" msgid "List"
msgstr "" msgstr ""
#: frontend/src/components/Activities/CallArea.vue:74 #: frontend/src/components/Activities/CallArea.vue:75
msgid "Listen" msgid "Listen"
msgstr "" msgstr ""
@ -2914,7 +2920,7 @@ msgstr ""
msgid "Log" msgid "Log"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:803 #: frontend/src/components/Activities/Activities.vue:808
#: frontend/src/components/Activities/ActivityHeader.vue:137 #: frontend/src/components/Activities/ActivityHeader.vue:137
#: frontend/src/components/Activities/ActivityHeader.vue:180 #: frontend/src/components/Activities/ActivityHeader.vue:180
msgid "Log a Call" msgid "Log a Call"
@ -2986,7 +2992,7 @@ msgstr ""
msgid "Make Public" msgid "Make Public"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:807 #: frontend/src/components/Activities/Activities.vue:812
#: frontend/src/components/Activities/ActivityHeader.vue:142 #: frontend/src/components/Activities/ActivityHeader.vue:142
#: frontend/src/components/Activities/ActivityHeader.vue:185 #: frontend/src/components/Activities/ActivityHeader.vue:185
#: frontend/src/pages/Deals.vue:504 frontend/src/pages/Leads.vue:531 #: frontend/src/pages/Deals.vue:504 frontend/src/pages/Leads.vue:531
@ -3202,7 +3208,7 @@ msgstr ""
msgid "New Call Log" msgid "New Call Log"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:394 #: frontend/src/components/Activities/Activities.vue:398
#: frontend/src/components/Activities/ActivityHeader.vue:27 #: frontend/src/components/Activities/ActivityHeader.vue:27
#: frontend/src/components/Activities/ActivityHeader.vue:132 #: frontend/src/components/Activities/ActivityHeader.vue:132
msgid "New Comment" msgid "New Comment"
@ -3212,7 +3218,7 @@ msgstr ""
msgid "New Contact" msgid "New Contact"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:389 #: frontend/src/components/Activities/Activities.vue:393
#: frontend/src/components/Activities/ActivityHeader.vue:17 #: frontend/src/components/Activities/ActivityHeader.vue:17
#: frontend/src/components/Activities/ActivityHeader.vue:127 #: frontend/src/components/Activities/ActivityHeader.vue:127
msgid "New Email" msgid "New Email"
@ -3652,7 +3658,7 @@ msgstr ""
msgid "Others" msgid "Others"
msgstr "" msgstr ""
#: frontend/src/components/Activities/CallArea.vue:36 #: frontend/src/components/Activities/CallArea.vue:37
msgid "Outbound Call" msgid "Outbound Call"
msgstr "" msgstr ""
@ -4488,7 +4494,7 @@ msgstr ""
msgid "Setup your password" msgid "Setup your password"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:230 #: frontend/src/components/Activities/Activities.vue:234
msgid "Show" msgid "Show"
msgstr "" msgstr ""
@ -4527,6 +4533,14 @@ msgstr ""
msgid "Simple Python Expression, Example: doc.status == 'Open' and doc.lead_source == 'Ads'" msgid "Simple Python Expression, Example: doc.status == 'Open' and doc.lead_source == 'Ads'"
msgstr "" msgstr ""
#: frontend/src/components/AssignTo.vue:84
msgid "Since you removed {0} from the assignee, the {0} has also been removed."
msgstr ""
#: frontend/src/components/AssignTo.vue:77
msgid "Since you removed {0} from the assignee, the {0} has been changed to the next available assignee {1}."
msgstr ""
#: frontend/src/components/SortBy.vue:10 frontend/src/components/SortBy.vue:22 #: frontend/src/components/SortBy.vue:10 frontend/src/components/SortBy.vue:22
#: frontend/src/components/SortBy.vue:240 #: frontend/src/components/SortBy.vue:240
msgid "Sort" msgid "Sort"
@ -5056,7 +5070,7 @@ msgid "Untitled"
msgstr "" msgstr ""
#: frontend/src/components/ColumnSettings.vue:138 #: frontend/src/components/ColumnSettings.vue:138
#: frontend/src/components/Modals/AssignmentModal.vue:17 #: frontend/src/components/Modals/AssignmentModal.vue:79
#: frontend/src/components/Modals/ChangePasswordModal.vue:45 #: frontend/src/components/Modals/ChangePasswordModal.vue:45
#: frontend/src/components/Modals/NoteModal.vue:6 #: frontend/src/components/Modals/NoteModal.vue:6
#: frontend/src/components/Modals/TaskModal.vue:8 #: frontend/src/components/Modals/TaskModal.vue:8
@ -5084,7 +5098,7 @@ msgstr ""
msgid "Upload" msgid "Upload"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:404 #: frontend/src/components/Activities/Activities.vue:408
#: frontend/src/components/Activities/ActivityHeader.vue:62 #: frontend/src/components/Activities/ActivityHeader.vue:62
#: frontend/src/components/Activities/ActivityHeader.vue:158 #: frontend/src/components/Activities/ActivityHeader.vue:158
msgid "Upload Attachment" msgid "Upload Attachment"
@ -5288,11 +5302,11 @@ msgstr ""
msgid "You need to be in developer mode to edit a Standard Form Script" msgid "You need to be in developer mode to edit a Standard Form Script"
msgstr "" msgstr ""
#: crm/api/todo.py:111 #: crm/api/todo.py:100
msgid "Your assignment on task {0} has been removed by {1}" msgid "Your assignment on task {0} has been removed by {1}"
msgstr "" msgstr ""
#: crm/api/todo.py:46 crm/api/todo.py:89 #: crm/api/todo.py:37 crm/api/todo.py:78
msgid "Your assignment on {0} {1} has been removed by {2}" msgid "Your assignment on {0} {1} has been removed by {2}"
msgstr "" msgstr ""
@ -5307,11 +5321,11 @@ msgstr ""
msgid "amber" msgid "amber"
msgstr "" msgstr ""
#: crm/api/todo.py:120 #: crm/api/todo.py:109
msgid "assigned a new task {0} to you" msgid "assigned a new task {0} to you"
msgstr "" msgstr ""
#: crm/api/todo.py:100 #: crm/api/todo.py:89
msgid "assigned a {0} {1} to you" msgid "assigned a {0} {1} to you"
msgstr "" msgstr ""
@ -5329,7 +5343,7 @@ msgstr ""
msgid "blue" msgid "blue"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:232 #: frontend/src/components/Activities/Activities.vue:236
msgid "changes from" msgid "changes from"
msgstr "" msgstr ""
@ -5539,8 +5553,8 @@ msgstr ""
msgid "teal" msgid "teal"
msgstr "" msgstr ""
#: frontend/src/components/Activities/Activities.vue:274 #: frontend/src/components/Activities/Activities.vue:278
#: frontend/src/components/Activities/Activities.vue:337 #: frontend/src/components/Activities/Activities.vue:341
msgid "to" msgid "to"
msgstr "" msgstr ""
@ -5570,7 +5584,7 @@ msgstr ""
msgid "{0} M" msgid "{0} M"
msgstr "" msgstr ""
#: crm/api/todo.py:50 #: crm/api/todo.py:41
msgid "{0} assigned a {1} {2} to you" msgid "{0} assigned a {1} {2} to you"
msgstr "" msgstr ""

View File

@ -171,9 +171,6 @@ declare module 'vue' {
LostReasonModal: typeof import('./src/components/Modals/LostReasonModal.vue')['default'] LostReasonModal: typeof import('./src/components/Modals/LostReasonModal.vue')['default']
LucideCalendar: typeof import('~icons/lucide/calendar')['default'] LucideCalendar: typeof import('~icons/lucide/calendar')['default']
LucideChevronRight: typeof import('~icons/lucide/chevron-right')['default'] LucideChevronRight: typeof import('~icons/lucide/chevron-right')['default']
LucidePenLine: typeof import('~icons/lucide/pen-line')['default']
LucideRefreshCcw: typeof import('~icons/lucide/refresh-ccw')['default']
LucideX: typeof import('~icons/lucide/x')['default']
MarkAsDoneIcon: typeof import('./src/components/Icons/MarkAsDoneIcon.vue')['default'] MarkAsDoneIcon: typeof import('./src/components/Icons/MarkAsDoneIcon.vue')['default']
MaximizeIcon: typeof import('./src/components/Icons/MaximizeIcon.vue')['default'] MaximizeIcon: typeof import('./src/components/Icons/MaximizeIcon.vue')['default']
MenuIcon: typeof import('./src/components/Icons/MenuIcon.vue')['default'] MenuIcon: typeof import('./src/components/Icons/MenuIcon.vue')['default']
@ -188,7 +185,6 @@ declare module 'vue' {
MultiSelectEmailInput: typeof import('./src/components/Controls/MultiSelectEmailInput.vue')['default'] MultiSelectEmailInput: typeof import('./src/components/Controls/MultiSelectEmailInput.vue')['default']
MultiSelectUserInput: typeof import('./src/components/Controls/MultiSelectUserInput.vue')['default'] MultiSelectUserInput: typeof import('./src/components/Controls/MultiSelectUserInput.vue')['default']
MuteIcon: typeof import('./src/components/Icons/MuteIcon.vue')['default'] MuteIcon: typeof import('./src/components/Icons/MuteIcon.vue')['default']
NestedPopover: typeof import('./src/components/NestedPopover.vue')['default']
NewEmailTemplate: typeof import('./src/components/Settings/EmailTemplate/NewEmailTemplate.vue')['default'] NewEmailTemplate: typeof import('./src/components/Settings/EmailTemplate/NewEmailTemplate.vue')['default']
NoteArea: typeof import('./src/components/Activities/NoteArea.vue')['default'] NoteArea: typeof import('./src/components/Activities/NoteArea.vue')['default']
NoteIcon: typeof import('./src/components/Icons/NoteIcon.vue')['default'] NoteIcon: typeof import('./src/components/Icons/NoteIcon.vue')['default']

View File

@ -13,7 +13,7 @@
"@tiptap/extension-paragraph": "^2.12.0", "@tiptap/extension-paragraph": "^2.12.0",
"@twilio/voice-sdk": "^2.10.2", "@twilio/voice-sdk": "^2.10.2",
"@vueuse/integrations": "^10.3.0", "@vueuse/integrations": "^10.3.0",
"frappe-ui": "^0.1.171", "frappe-ui": "^0.1.189",
"gemoji": "^8.1.0", "gemoji": "^8.1.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"mime": "^4.0.1", "mime": "^4.0.1",

View File

@ -238,12 +238,9 @@
<Button <Button
class="!size-4" class="!size-4"
variant="ghost" variant="ghost"
:icon="SelectIcon"
@click="activity.show_others = !activity.show_others" @click="activity.show_others = !activity.show_others"
> />
<template #icon>
<SelectIcon />
</template>
</Button>
</div> </div>
<div <div
v-else v-else

View File

@ -9,23 +9,17 @@
<Button <Button
v-if="title == 'Emails'" v-if="title == 'Emails'"
variant="solid" variant="solid"
:label="__('New Email')"
iconLeft="plus"
@click="emailBox.show = true" @click="emailBox.show = true"
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4 w-4" />
</template>
<span>{{ __('New Email') }}</span>
</Button>
<Button <Button
v-else-if="title == 'Comments'" v-else-if="title == 'Comments'"
variant="solid" variant="solid"
:label="__('New Comment')"
iconLeft="plus"
@click="emailBox.showComment = true" @click="emailBox.showComment = true"
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4 w-4" />
</template>
<span>{{ __('New Comment') }}</span>
</Button>
<MultiActionButton <MultiActionButton
v-else-if="title == 'Calls'" v-else-if="title == 'Calls'"
variant="solid" variant="solid"
@ -34,59 +28,45 @@
<Button <Button
v-else-if="title == 'Notes'" v-else-if="title == 'Notes'"
variant="solid" variant="solid"
:label="__('New Note')"
iconLeft="plus"
@click="modalRef.showNote()" @click="modalRef.showNote()"
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4 w-4" />
</template>
<span>{{ __('New Note') }}</span>
</Button>
<Button <Button
v-else-if="title == 'Tasks'" v-else-if="title == 'Tasks'"
variant="solid" variant="solid"
:label="__('New Task')"
iconLeft="plus"
@click="modalRef.showTask()" @click="modalRef.showTask()"
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4 w-4" />
</template>
<span>{{ __('New Task') }}</span>
</Button>
<Button <Button
v-else-if="title == 'Attachments'" v-else-if="title == 'Attachments'"
variant="solid" variant="solid"
:label="__('Upload Attachment')"
iconLeft="plus"
@click="showFilesUploader = true" @click="showFilesUploader = true"
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4 w-4" />
</template>
<span>{{ __('Upload Attachment') }}</span>
</Button>
<div class="flex gap-2 shrink-0" v-else-if="title == 'WhatsApp'"> <div class="flex gap-2 shrink-0" v-else-if="title == 'WhatsApp'">
<Button <Button
:label="__('Send Template')" :label="__('Send Template')"
@click="showWhatsappTemplates = true" @click="showWhatsappTemplates = true"
/> />
<Button variant="solid" @click="whatsappBox.show()"> <Button
<template #prefix> variant="solid"
<FeatherIcon name="plus" class="h-4 w-4" /> :label="__('New Message')"
</template> iconLeft="plus"
<span>{{ __('New Message') }}</span> @click="whatsappBox.show()"
</Button> />
</div> </div>
<Dropdown v-else :options="defaultActions" @click.stop> <Dropdown v-else :options="defaultActions" @click.stop>
<template v-slot="{ open }"> <template v-slot="{ open }">
<Button variant="solid" class="flex items-center gap-1"> <Button
<template #prefix> variant="solid"
<FeatherIcon name="plus" class="h-4 w-4" /> class="flex items-center gap-1"
</template> :label="__('New')"
<span>{{ __('New') }}</span> iconLeft="plus"
<template #suffix> :iconRight="open ? 'chevron-up' : 'chevron-down'"
<FeatherIcon />
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4 w-4"
/>
</template>
</Button>
</template> </template>
</Dropdown> </Dropdown>
</div> </div>

View File

@ -38,42 +38,31 @@
</div> </div>
</Tooltip> </Tooltip>
<div class="flex gap-1"> <div class="flex gap-1">
<Tooltip <Button
:text=" :tooltip="
attachment.is_private ? __('Make public') : __('Make private') attachment.is_private ? __('Make public') : __('Make private')
" "
class="!size-5"
@click.stop="
togglePrivate(attachment.name, attachment.is_private)
"
> >
<div> <template #icon>
<Button <FeatherIcon
class="!size-5" :name="attachment.is_private ? 'lock' : 'unlock'"
@click.stop=" class="size-3 text-ink-gray-7"
togglePrivate(attachment.name, attachment.is_private) />
" </template>
> </Button>
<template #icon> <Button
<FeatherIcon :tooltip="__('Delete attachment')"
:name="attachment.is_private ? 'lock' : 'unlock'" class="!size-5"
class="size-3 text-ink-gray-7" @click.stop="() => deleteAttachment(attachment.name)"
/> >
</template> <template #icon>
</Button> <FeatherIcon name="trash-2" class="size-3 text-ink-gray-7" />
</div> </template>
</Tooltip> </Button>
<Tooltip :text="__('Delete attachment')">
<div>
<Button
class="!size-5"
@click.stop="() => deleteAttachment(attachment.name)"
>
<template #icon>
<FeatherIcon
name="trash-2"
class="size-3 text-ink-gray-7"
/>
</template>
</Button>
</div>
</Tooltip>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,12 +1,12 @@
<template> <template>
<div class="w-full text-sm text-ink-gray-5"> <div class="w-full text-sm text-ink-gray-5">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<Button variant="ghost" @click="playPause"> <Button
<template #icon> variant="ghost"
<PlayIcon v-if="isPaused" class="size-4 text-ink-gray-5" /> class="text-ink-gray-5"
<PauseIcon v-else class="size-4 text-ink-gray-5" /> :icon="isPaused ? PlayIcon : PauseIcon"
</template> @click="playPause"
</Button> />
<div class="flex gap-2 items-center justify-between flex-1"> <div class="flex gap-2 items-center justify-between flex-1">
<input <input
class="w-full slider !h-[0.5] bg-surface-gray-3 [&::-webkit-slider-thumb]:shadow [&::-webkit-slider-thumb:hover]:outline [&::-webkit-slider-thumb:hover]:outline-[0.5px]" class="w-full slider !h-[0.5] bg-surface-gray-3 [&::-webkit-slider-thumb]:shadow [&::-webkit-slider-thumb:hover]:outline [&::-webkit-slider-thumb:hover]:outline-[0.5px]"
@ -61,11 +61,11 @@
</Button> </Button>
</div> </div>
<Dropdown :options="options"> <Dropdown :options="options">
<Button variant="ghost" @click="showPlaybackSpeed = false"> <Button
<template #icon> icon="more-horizontal"
<FeatherIcon class="size-4" name="more-horizontal" /> variant="ghost"
</template> @click="showPlaybackSpeed = false"
</Button> />
</Dropdown> </Dropdown>
</div> </div>
</div> </div>

View File

@ -14,12 +14,10 @@
<div class="flex gap-1"> <div class="flex gap-1">
<Button <Button
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
@click="showDataFieldsModal = true" @click="showDataFieldsModal = true"
> />
<template #icon>
<EditIcon />
</template>
</Button>
<Button <Button
label="Save" label="Save"
:disabled="!document.isDirty" :disabled="!document.isDirty"

View File

@ -2,7 +2,9 @@
<div <div
class="cursor-pointer flex flex-col rounded-md shadow bg-surface-cards px-3 py-1.5 text-base transition-all duration-300 ease-in-out" class="cursor-pointer flex flex-col rounded-md shadow bg-surface-cards px-3 py-1.5 text-base transition-all duration-300 ease-in-out"
> >
<div class="-mb-0.5 flex items-center justify-between gap-2 truncate text-ink-gray-9"> <div
class="-mb-0.5 flex items-center justify-between gap-2 truncate text-ink-gray-9"
>
<div class="flex items-center gap-2 truncate"> <div class="flex items-center gap-2 truncate">
<span>{{ activity.data.sender_full_name }}</span> <span>{{ activity.data.sender_full_name }}</span>
<span class="sm:flex hidden text-sm text-ink-gray-5"> <span class="sm:flex hidden text-sm text-ink-gray-5">
@ -28,32 +30,20 @@
</div> </div>
</Tooltip> </Tooltip>
<div class="flex gap-0.5"> <div class="flex gap-0.5">
<Tooltip :text="__('Reply')"> <Button
<div> :tooltip="__('Reply')"
<Button variant="ghost"
variant="ghost" class="text-ink-gray-7"
class="text-ink-gray-7" :icon="ReplyIcon"
@click="reply(activity.data)" @click="reply(activity.data)"
> />
<template #icon> <Button
<ReplyIcon /> :tooltip="__('Reply All')"
</template> variant="ghost"
</Button> :icon="ReplyAllIcon"
</div> class="text-ink-gray-7"
</Tooltip> @click="reply(activity.data, true)"
<Tooltip :text="__('Reply All')"> />
<div>
<Button
variant="ghost"
class="text-ink-gray-7"
@click="reply(activity.data, true)"
>
<template #icon>
<ReplyAllIcon />
</template>
</Button>
</div>
</Tooltip>
</div> </div>
</div> </div>
</div> </div>

View File

@ -41,13 +41,13 @@
:options="taskStatusOptions(modalRef.updateTaskStatus, task)" :options="taskStatusOptions(modalRef.updateTaskStatus, task)"
@click.stop @click.stop
> >
<Tooltip :text="__('Change Status')"> <Button
<div> :tooltip="__('Change status')"
<Button variant="ghosted" class="hover:bg-surface-gray-4"> variant="ghosted"
<TaskStatusIcon :status="task.status" /> class="hover:bg-surface-gray-4"
</Button> >
</div> <TaskStatusIcon :status="task.status" />
</Tooltip> </Button>
</Dropdown> </Dropdown>
<Dropdown <Dropdown
:options="[ :options="[

View File

@ -1,7 +1,7 @@
<template> <template>
<NestedPopover> <Popover placement="bottom-end">
<template #target> <template #target="{ togglePopover }">
<div class="flex items-center"> <div class="flex items-center" @click="togglePopover">
<component <component
v-if="assignees?.length" v-if="assignees?.length"
:is="assignees?.length == 1 ? 'Button' : 'div'" :is="assignees?.length == 1 ? 'Button' : 'div'"
@ -11,24 +11,23 @@
<Button v-else :label="__('Assign to')" /> <Button v-else :label="__('Assign to')" />
</div> </div>
</template> </template>
<template #body="{ open }"> <template #body="{ isOpen }">
<AssignToBody <AssignToBody
v-show="open" v-show="isOpen"
v-model="assignees" v-model="assignees"
:docname="docname" :docname="docname"
:doctype="doctype" :doctype="doctype"
:open="open" :open="isOpen"
:onUpdate="ownerField && saveAssignees" :onUpdate="ownerField && saveAssignees"
/> />
</template> </template>
</NestedPopover> </Popover>
</template> </template>
<script setup> <script setup>
import NestedPopover from '@/components/NestedPopover.vue'
import MultipleAvatar from '@/components/MultipleAvatar.vue' import MultipleAvatar from '@/components/MultipleAvatar.vue'
import AssignToBody from '@/components/AssignToBody.vue' import AssignToBody from '@/components/AssignToBody.vue'
import { useDocument } from '@/data/document' import { useDocument } from '@/data/document'
import { toast } from 'frappe-ui' import { toast, Popover } from 'frappe-ui'
import { computed } from 'vue' import { computed } from 'vue'
const props = defineProps({ const props = defineProps({

View File

@ -25,23 +25,21 @@
:key="assignee.name" :key="assignee.name"
@click.stop @click.stop
> >
<div> <div
<div class="flex items-center text-sm p-0.5 text-ink-gray-6 border border-outline-gray-1 bg-surface-modal rounded-full cursor-pointer"
class="flex items-center text-sm p-0.5 text-ink-gray-6 border border-outline-gray-1 bg-surface-modal rounded-full cursor-pointer" @click.stop
@click.stop >
<UserAvatar :user="assignee.name" size="sm" />
<div class="ml-1">{{ getUser(assignee.name).full_name }}</div>
<Button
variant="ghost"
class="rounded-full !size-4 m-1"
@click.stop="removeValue(assignee.name)"
> >
<UserAvatar :user="assignee.name" size="sm" /> <template #icon>
<div class="ml-1">{{ getUser(assignee.name).full_name }}</div> <FeatherIcon name="x" class="h-3 w-3 text-ink-gray-6" />
<Button </template>
variant="ghost" </Button>
class="rounded-full !size-4 m-1"
@click.stop="removeValue(assignee.name)"
>
<template #icon>
<FeatherIcon name="x" class="h-3 w-3 text-ink-gray-6" />
</template>
</Button>
</div>
</div> </div>
</Tooltip> </Tooltip>
</div> </div>
@ -74,7 +72,7 @@ import UserAvatar from '@/components/UserAvatar.vue'
import Link from '@/components/Controls/Link.vue' import Link from '@/components/Controls/Link.vue'
import { usersStore } from '@/stores/users' import { usersStore } from '@/stores/users'
import { capture } from '@/telemetry' import { capture } from '@/telemetry'
import { Tooltip, Switch, toast, createResource } from 'frappe-ui' import { Tooltip, Switch, createResource } from 'frappe-ui'
import { ref, watch } from 'vue' import { ref, watch } from 'vue'
const props = defineProps({ const props = defineProps({

View File

@ -5,11 +5,9 @@
:label="label" :label="label"
theme="gray" theme="gray"
variant="outline" variant="outline"
:iconLeft="getIcon()"
@click="toggleDialog()" @click="toggleDialog()"
> >
<template #prefix>
<component :is="getIcon()" class="h-4 w-4" />
</template>
<template #suffix> <template #suffix>
<slot name="suffix" /> <slot name="suffix" />
</template> </template>

View File

@ -1,7 +1,7 @@
<template> <template>
<NestedPopover> <Popover placement="bottom-end">
<template #target> <template #target="{ togglePopover }">
<Button :label="__('Columns')"> <Button :label="__('Columns')" @click="togglePopover">
<template v-if="hideLabel"> <template v-if="hideLabel">
<ColumnsIcon class="h-4" /> <ColumnsIcon class="h-4" />
</template> </template>
@ -65,37 +65,28 @@
<Button <Button
class="w-full !justify-start !text-ink-gray-5" class="w-full !justify-start !text-ink-gray-5"
variant="ghost" variant="ghost"
@click="togglePopover()"
:label="__('Add Column')" :label="__('Add Column')"
> iconLeft="plus"
<template #prefix> @click="togglePopover"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</template> </template>
</Autocomplete> </Autocomplete>
<Button <Button
v-if="columnsUpdated" v-if="columnsUpdated"
class="w-full !justify-start !text-ink-gray-5" class="w-full !justify-start !text-ink-gray-5"
variant="ghost" variant="ghost"
@click="reset(close)"
:label="__('Reset Changes')" :label="__('Reset Changes')"
> :iconLeft="ReloadIcon"
<template #prefix> @click="reset(close)"
<ReloadIcon class="h-4" /> />
</template>
</Button>
<Button <Button
v-if="!is_default" v-if="!is_default"
class="w-full !justify-start !text-ink-gray-5" class="w-full !justify-start !text-ink-gray-5"
variant="ghost" variant="ghost"
@click="resetToDefault(close)"
:label="__('Reset to Default')" :label="__('Reset to Default')"
> :iconLeft="ReloadIcon"
<template #prefix> @click="resetToDefault(close)"
<ReloadIcon class="h-4" /> />
</template>
</Button>
</div> </div>
</div> </div>
<div v-else> <div v-else>
@ -144,7 +135,7 @@
</div> </div>
</div> </div>
</template> </template>
</NestedPopover> </Popover>
</template> </template>
<script setup> <script setup>
@ -152,9 +143,8 @@ import ColumnsIcon from '@/components/Icons/ColumnsIcon.vue'
import EditIcon from '@/components/Icons/EditIcon.vue' import EditIcon from '@/components/Icons/EditIcon.vue'
import DragIcon from '@/components/Icons/DragIcon.vue' import DragIcon from '@/components/Icons/DragIcon.vue'
import ReloadIcon from '@/components/Icons/ReloadIcon.vue' import ReloadIcon from '@/components/Icons/ReloadIcon.vue'
import NestedPopover from '@/components/NestedPopover.vue'
import Autocomplete from '@/components/frappe-ui/Autocomplete.vue'
import { isTouchScreenDevice } from '@/utils' import { isTouchScreenDevice } from '@/utils'
import { Autocomplete, Popover } from 'frappe-ui'
import Draggable from 'vuedraggable' import Draggable from 'vuedraggable'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
import { watchOnce } from '@vueuse/core' import { watchOnce } from '@vueuse/core'

View File

@ -45,11 +45,12 @@
v-slot="{ togglePopover }" v-slot="{ togglePopover }"
@update:modelValue="() => appendEmoji()" @update:modelValue="() => appendEmoji()"
> >
<Button variant="ghost" @click="togglePopover()"> <Button
<template #icon> :tooltip="__('Insert Emoji')"
<SmileIcon class="h-4" /> :icon="SmileIcon"
</template> variant="ghost"
</Button> @click="togglePopover()"
/>
</IconPicker> </IconPicker>
<FileUploader <FileUploader
:upload-args="{ :upload-args="{
@ -61,14 +62,11 @@
> >
<template #default="{ openFileSelector }"> <template #default="{ openFileSelector }">
<Button <Button
theme="gray" :tooltip="__('Attach a file')"
variant="ghost" variant="ghost"
:icon="AttachmentIcon"
@click="openFileSelector()" @click="openFileSelector()"
> />
<template #icon>
<AttachmentIcon class="h-4" />
</template>
</Button>
</template> </template>
</FileUploader> </FileUploader>
</div> </div>

View File

@ -8,24 +8,18 @@
showEmailBox ? '!bg-surface-gray-4 hover:!bg-surface-gray-3' : '', showEmailBox ? '!bg-surface-gray-4 hover:!bg-surface-gray-3' : '',
]" ]"
:label="__('Reply')" :label="__('Reply')"
:iconLeft="Email2Icon"
@click="toggleEmailBox()" @click="toggleEmailBox()"
> />
<template #prefix>
<Email2Icon class="h-4" />
</template>
</Button>
<Button <Button
variant="ghost" variant="ghost"
:label="__('Comment')" :label="__('Comment')"
:class="[ :class="[
showCommentBox ? '!bg-surface-gray-4 hover:!bg-surface-gray-3' : '', showCommentBox ? '!bg-surface-gray-4 hover:!bg-surface-gray-3' : '',
]" ]"
:iconLeft="CommentIcon"
@click="toggleCommentBox()" @click="toggleCommentBox()"
> />
<template #prefix>
<CommentIcon class="h-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div <div

View File

@ -54,14 +54,12 @@
</div> </div>
<div class="w-12"> <div class="w-12">
<Button <Button
class="flex w-full items-center justify-center rounded !bg-surface-gray-2 border-0" :tooltip="__('Edit grid fields')"
class="flex w-full items-center justify-center rounded !bg-surface-gray-2 border-0 !text-ink-gray-5"
variant="outline" variant="outline"
icon="settings"
@click="showGridFieldsEditorModal = true" @click="showGridFieldsEditorModal = true"
> />
<template #icon>
<FeatherIcon name="settings" class="size-4 text-ink-gray-7" />
</template>
</Button>
</div> </div>
</div> </div>
<!-- Rows --> <!-- Rows -->
@ -279,14 +277,12 @@
</div> </div>
<div class="edit-row w-12"> <div class="edit-row w-12">
<Button <Button
class="flex w-full items-center justify-center rounded border-0" :tooltip="__('Edit row')"
class="flex w-full items-center justify-center rounded border-0 !text-ink-gray-7"
variant="outline" variant="outline"
:icon="EditIcon"
@click="showRowList[index] = true" @click="showRowList[index] = true"
> />
<template #icon>
<EditIcon class="text-ink-gray-7" />
</template>
</Button>
</div> </div>
<GridRowModal <GridRowModal
v-if="showRowList[index]" v-if="showRowList[index]"

View File

@ -54,13 +54,10 @@
<template #target="{ togglePopover }"> <template #target="{ togglePopover }">
<Button <Button
class="w-full mt-2" class="w-full mt-2"
@click="togglePopover()"
:label="__('Add Field')" :label="__('Add Field')"
> iconLeft="plus"
<template #prefix> @click="togglePopover()"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</template> </template>
<template #item-label="{ option }"> <template #item-label="{ option }">
<div class="flex flex-col gap-1 text-ink-gray-9"> <div class="flex flex-col gap-1 text-ink-gray-9">

View File

@ -11,19 +11,18 @@
<div class="flex items-center gap-1"> <div class="flex items-center gap-1">
<Button <Button
v-if="isManager()" v-if="isManager()"
:tooltip="__('Edit fields layout')"
variant="ghost" variant="ghost"
class="w-7" class="w-7"
:icon="EditIcon"
@click="openGridRowFieldsModal" @click="openGridRowFieldsModal"
> />
<template #icon> <Button
<EditIcon /> icon="x"
</template> variant="ghost"
</Button> class="w-7"
<Button variant="ghost" class="w-7" @click="show = false"> @click="show = false"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div> <div>

View File

@ -48,24 +48,18 @@
variant="ghost" variant="ghost"
class="w-full !justify-start" class="w-full !justify-start"
:label="__('Create New')" :label="__('Create New')"
iconLeft="plus"
@click="() => attrs.onCreate(value, close)" @click="() => attrs.onCreate(value, close)"
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4" />
</template>
</Button>
</div> </div>
<div> <div>
<Button <Button
variant="ghost" variant="ghost"
class="w-full !justify-start" class="w-full !justify-start"
:label="__('Clear')" :label="__('Clear')"
iconLeft="x"
@click="() => clearValue(close)" @click="() => clearValue(close)"
> />
<template #prefix>
<FeatherIcon name="x" class="h-4" />
</template>
</Button>
</div> </div>
</template> </template>
</Autocomplete> </Autocomplete>

View File

@ -18,14 +18,10 @@
:key="g.label" :key="g.label"
> >
<Dropdown :options="g.action" v-slot="{ open }"> <Dropdown :options="g.action" v-slot="{ open }">
<Button :label="g.label"> <Button
<template #suffix> :label="g.label"
<FeatherIcon :iconRight="open ? 'chevron-up' : 'chevron-down'"
:name="open ? 'chevron-up' : 'chevron-down'" />
class="h-4"
/>
</template>
</Button>
</Dropdown> </Dropdown>
</div> </div>
</template> </template>

View File

@ -19,53 +19,36 @@
v-if="editMode" v-if="editMode"
variant="ghost" variant="ghost"
:label="__('Save')" :label="__('Save')"
size="sm"
class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100" class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100"
@click="saveOption" @click="saveOption"
/> />
<Tooltip text="Set As Primary" v-if="!isNew && !option.selected"> <Button
<div> v-if="!isNew && !option.selected"
<Button :tooltip="__('Set As Primary')"
variant="ghost" variant="ghost"
size="sm" :icon="SuccessIcon"
class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100" class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100"
@click="option.onClick" @click="option.onClick"
> />
<template #icon> <Button
<SuccessIcon /> v-if="!editMode"
</template> :tooltip="__('Edit')"
</Button> variant="ghost"
</div> :icon="EditIcon"
</Tooltip> class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100"
<Tooltip v-if="!editMode" text="Edit"> @click="toggleEditMode"
<div> />
<Button <Button
variant="ghost" :tooltip="__('Delete')"
size="sm" variant="ghost"
class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100" icon="x"
@click="toggleEditMode" class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100"
> @click="() => option.onDelete(option, isNew)"
<template #icon> />
<EditIcon />
</template>
</Button>
</div>
</Tooltip>
<Tooltip text="Delete">
<div>
<Button
variant="ghost"
icon="x"
size="sm"
class="opacity-0 hover:bg-surface-gray-4 group-hover:opacity-100"
@click="() => option.onDelete(option, isNew)"
/>
</div>
</Tooltip>
</div> </div>
</div> </div>
<div v-if="option.selected"> <div v-if="option.selected">
<FeatherIcon name="check" class="text-ink-gray-5 h-4 w-6" size="sm" /> <FeatherIcon name="check" class="text-ink-gray-5 h-4 w-6" />
</div> </div>
</div> </div>
</template> </template>

View File

@ -123,11 +123,12 @@
v-slot="{ togglePopover }" v-slot="{ togglePopover }"
@update:modelValue="() => appendEmoji()" @update:modelValue="() => appendEmoji()"
> >
<Button variant="ghost" @click="togglePopover()"> <Button
<template #icon> :tooltip="__('Insert Emoji')"
<SmileIcon class="h-4" /> :icon="SmileIcon"
</template> variant="ghost"
</Button> @click="togglePopover()"
/>
</IconPicker> </IconPicker>
<FileUploader <FileUploader
:upload-args="{ :upload-args="{
@ -138,21 +139,20 @@
@success="(f) => attachments.push(f)" @success="(f) => attachments.push(f)"
> >
<template #default="{ openFileSelector }"> <template #default="{ openFileSelector }">
<Button variant="ghost" @click="openFileSelector()"> <Button
<template #icon> :tooltip="__('Attach a file')"
<AttachmentIcon class="h-4" /> :icon="AttachmentIcon"
</template> variant="ghost"
</Button> @click="openFileSelector()"
/>
</template> </template>
</FileUploader> </FileUploader>
<Button <Button
:tooltip="__('Insert Email Template')"
variant="ghost" variant="ghost"
:icon="EmailTemplateIcon"
@click="showEmailTemplateSelectorModal = true" @click="showEmailTemplateSelectorModal = true"
> />
<template #icon>
<EmailTemplateIcon class="h-4" />
</template>
</Button>
</div> </div>
<div class="mt-2 flex items-center justify-end space-x-2 sm:mt-0"> <div class="mt-2 flex items-center justify-end space-x-2 sm:mt-0">
<Button v-bind="discardButtonProps || {}" :label="__('Discard')" /> <Button v-bind="discardButtonProps || {}" :label="__('Discard')" />

View File

@ -89,12 +89,9 @@
v-if="data[field.fieldname] && field.edit" v-if="data[field.fieldname] && field.edit"
class="shrink-0" class="shrink-0"
:label="__('Edit')" :label="__('Edit')"
:iconLeft="EditIcon"
@click="field.edit(data[field.fieldname])" @click="field.edit(data[field.fieldname])"
> />
<template #prefix>
<EditIcon class="h-4 w-4" />
</template>
</Button>
</div> </div>
<TableMultiselectInput <TableMultiselectInput

View File

@ -169,13 +169,10 @@
<Button <Button
class="w-full !h-8 !bg-surface-modal" class="w-full !h-8 !bg-surface-modal"
variant="outline" variant="outline"
@click="togglePopover()"
:label="__('Add Field')" :label="__('Add Field')"
> iconLeft="plus"
<template #prefix> @click="togglePopover()"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</div> </div>
</template> </template>
<template #item-label="{ option }"> <template #item-label="{ option }">
@ -198,6 +195,7 @@
class="w-full h-8" class="w-full h-8"
variant="subtle" variant="subtle"
:label="__('Add Section')" :label="__('Add Section')"
iconLeft="plus"
@click=" @click="
tabs[tabIndex].sections.push({ tabs[tabIndex].sections.push({
label: __('New Section'), label: __('New Section'),
@ -206,11 +204,7 @@
columns: [{ name: 'column_' + getRandom(), fields: [] }], columns: [{ name: 'column_' + getRandom(), fields: [] }],
}) })
" "
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4" />
</template>
</Button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -29,6 +29,7 @@
filesUploaderArea?.showWebLink || filesUploaderArea?.showCamera filesUploaderArea?.showWebLink || filesUploaderArea?.showCamera
" "
:label="isMobileView ? __('Back') : __('Back to file upload')" :label="isMobileView ? __('Back') : __('Back to file upload')"
iconLeft="arrow-left"
@click=" @click="
() => { () => {
filesUploaderArea.showWebLink = false filesUploaderArea.showWebLink = false
@ -37,11 +38,7 @@
filesUploaderArea.cameraImage = null filesUploaderArea.cameraImage = null
} }
" "
> />
<template #prefix>
<FeatherIcon name="arrow-left" class="size-4" />
</template>
</Button>
<Button <Button
v-if=" v-if="
filesUploaderArea?.showCamera && !filesUploaderArea?.cameraImage filesUploaderArea?.showCamera && !filesUploaderArea?.cameraImage

View File

@ -1,12 +1,13 @@
<template> <template>
<NestedPopover> <Popover placement="bottom-end">
<template #target> <template #target="{ togglePopover, close }">
<div class="flex items-center"> <div class="flex items-center">
<Button <Button
:label="__('Filter')" :label="__('Filter')"
:class="filters?.size ? 'rounded-r-none' : ''" :class="filters?.size ? 'rounded-r-none' : ''"
:iconLeft="FilterIcon"
@click="togglePopover"
> >
<template #prefix><FilterIcon class="h-4" /></template>
<template v-if="filters?.size" #suffix> <template v-if="filters?.size" #suffix>
<div <div
class="flex h-5 w-5 items-center justify-center rounded-[5px] bg-surface-white pt-px text-xs font-medium text-ink-gray-8 shadow-sm" class="flex h-5 w-5 items-center justify-center rounded-[5px] bg-surface-white pt-px text-xs font-medium text-ink-gray-8 shadow-sm"
@ -15,15 +16,13 @@
</div> </div>
</template> </template>
</Button> </Button>
<Tooltip v-if="filters?.size" :text="__('Clear all Filter')"> <Button
<div> v-if="filters?.size"
<Button :tooltip="__('Clear all Filter')"
class="rounded-l-none border-l" class="rounded-l-none border-l"
icon="x" icon="x"
@click.stop="clearfilter(false)" @click.stop="clearfilter(close)"
/> />
</div>
</Tooltip>
</div> </div>
</template> </template>
<template #body="{ close }"> <template #body="{ close }">
@ -134,13 +133,10 @@
<Button <Button
class="!text-ink-gray-5" class="!text-ink-gray-5"
variant="ghost" variant="ghost"
@click="togglePopover()"
:label="__('Add Filter')" :label="__('Add Filter')"
> iconLeft="plus"
<template #prefix> @click="togglePopover()"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</template> </template>
</Autocomplete> </Autocomplete>
<Button <Button
@ -154,17 +150,16 @@
</div> </div>
</div> </div>
</template> </template>
</NestedPopover> </Popover>
</template> </template>
<script setup> <script setup>
import NestedPopover from '@/components/NestedPopover.vue'
import FilterIcon from '@/components/Icons/FilterIcon.vue' import FilterIcon from '@/components/Icons/FilterIcon.vue'
import Link from '@/components/Controls/Link.vue' import Link from '@/components/Controls/Link.vue'
import Autocomplete from '@/components/frappe-ui/Autocomplete.vue' import Autocomplete from '@/components/frappe-ui/Autocomplete.vue'
import { import {
FormControl, FormControl,
createResource, createResource,
Tooltip, Popover,
DatePicker, DatePicker,
DateTimePicker, DateTimePicker,
DateRangePicker, DateRangePicker,
@ -485,7 +480,7 @@ function removeFilter(index) {
function clearfilter(close) { function clearfilter(close) {
filters.value.clear() filters.value.clear()
apply() apply()
close && close() close()
} }
function updateValue(value, filter) { function updateValue(value, filter) {

View File

@ -7,18 +7,10 @@
? groupByValue?.label ? groupByValue?.label
: __('Group By: ') + groupByValue?.label : __('Group By: ') + groupByValue?.label
" "
:iconLeft="DetailsIcon"
:iconRight="isOpen ? 'chevron-up' : 'chevron-down'"
@click="togglePopover()" @click="togglePopover()"
> />
<template #prefix>
<DetailsIcon />
</template>
<template #suffix>
<FeatherIcon
:name="isOpen ? 'chevron-up' : 'chevron-down'"
class="h-4"
/>
</template>
</Button>
</template> </template>
</Autocomplete> </Autocomplete>
</template> </template>

View File

@ -69,7 +69,7 @@
</Popover> </Popover>
</template> </template>
<script setup> <script setup>
import Popover from '@/components/frappe-ui/Popover.vue' import { Popover } from 'frappe-ui'
import { gemoji } from 'gemoji' import { gemoji } from 'gemoji'
import { ref, computed } from 'vue' import { ref, computed } from 'vue'

View File

@ -3,11 +3,8 @@
:label="__('Kanban Settings')" :label="__('Kanban Settings')"
@click="showDialog = true" @click="showDialog = true"
v-bind="$attrs" v-bind="$attrs"
> :iconLeft="KanbanIcon"
<template #prefix> />
<KanbanIcon class="h-4" />
</template>
</Button>
<Dialog v-model="showDialog" :options="{ title: __('Kanban Settings') }"> <Dialog v-model="showDialog" :options="{ title: __('Kanban Settings') }">
<template #body-content> <template #body-content>
<div> <div>
@ -23,8 +20,8 @@
<template #target="{ togglePopover }"> <template #target="{ togglePopover }">
<Button <Button
class="w-full !justify-start" class="w-full !justify-start"
@click="togglePopover()"
:label="columnField.label" :label="columnField.label"
@click="togglePopover()"
/> />
</template> </template>
</Autocomplete> </Autocomplete>
@ -80,13 +77,10 @@
<template #target="{ togglePopover }"> <template #target="{ togglePopover }">
<Button <Button
class="w-full mt-2" class="w-full mt-2"
@click="togglePopover()"
:label="__('Add Field')" :label="__('Add Field')"
> iconLeft="plus"
<template #prefix> @click="togglePopover()"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</template> </template>
<template #item-label="{ option }"> <template #item-label="{ option }">
<div class="flex flex-col gap-1 text-ink-gray-9"> <div class="flex flex-col gap-1 text-ink-gray-9">

View File

@ -15,17 +15,18 @@
> >
<div class="flex gap-2 items-center group justify-between"> <div class="flex gap-2 items-center group justify-between">
<div class="flex items-center text-base"> <div class="flex items-center text-base">
<NestedPopover> <Popover>
<template #target> <template #target="{ togglePopover }">
<Button <Button
variant="ghost" variant="ghost"
size="sm" size="sm"
class="hover:!bg-surface-gray-2" class="hover:!bg-surface-gray-2"
@click="togglePopover"
> >
<IndicatorIcon :class="parseColor(column.column.color)" /> <IndicatorIcon :class="parseColor(column.column.color)" />
</Button> </Button>
</template> </template>
<template #body="{ close }"> <template #body>
<div <div
class="flex flex-col gap-3 px-3 py-2.5 min-w-40 rounded-lg bg-surface-modal shadow-2xl ring-1 ring-black ring-opacity-5 focus:outline-none" class="flex flex-col gap-3 px-3 py-2.5 min-w-40 rounded-lg bg-surface-modal shadow-2xl ring-1 ring-black ring-opacity-5 focus:outline-none"
> >
@ -48,7 +49,7 @@
</div> </div>
</div> </div>
</template> </template>
</NestedPopover> </Popover>
<div class="text-ink-gray-9">{{ column.column.name }}</div> <div class="text-ink-gray-9">{{ column.column.name }}</div>
</div> </div>
<div class="flex"> <div class="flex">
@ -153,13 +154,10 @@
<template #target="{ togglePopover }"> <template #target="{ togglePopover }">
<Button <Button
class="w-full mt-2.5 mb-1 mr-5" class="w-full mt-2.5 mb-1 mr-5"
@click="togglePopover()"
:label="__('Add Column')" :label="__('Add Column')"
> iconLeft="plus"
<template #prefix> @click="togglePopover()"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</template> </template>
</Autocomplete> </Autocomplete>
</div> </div>
@ -167,11 +165,10 @@
</template> </template>
<script setup> <script setup>
import Autocomplete from '@/components/frappe-ui/Autocomplete.vue' import Autocomplete from '@/components/frappe-ui/Autocomplete.vue'
import NestedPopover from '@/components/NestedPopover.vue'
import IndicatorIcon from '@/components/Icons/IndicatorIcon.vue' import IndicatorIcon from '@/components/Icons/IndicatorIcon.vue'
import { isTouchScreenDevice, colors, parseColor } from '@/utils' import { isTouchScreenDevice, colors, parseColor } from '@/utils'
import Draggable from 'vuedraggable' import Draggable from 'vuedraggable'
import { Dropdown } from 'frappe-ui' import { Dropdown, Popover } from 'frappe-ui'
import { computed } from 'vue' import { computed } from 'vue'
const props = defineProps({ const props = defineProps({

View File

@ -3,8 +3,8 @@
class="relative flex h-full flex-col justify-between transition-all duration-300 ease-in-out" class="relative flex h-full flex-col justify-between transition-all duration-300 ease-in-out"
:class="isSidebarCollapsed ? 'w-12' : 'w-[220px]'" :class="isSidebarCollapsed ? 'w-12' : 'w-[220px]'"
> >
<div> <div class="p-2">
<UserDropdown class="p-2" :isCollapsed="isSidebarCollapsed" /> <UserDropdown :isCollapsed="isSidebarCollapsed" />
</div> </div>
<div class="flex-1 overflow-y-auto"> <div class="flex-1 overflow-y-auto">
<div class="mb-3 flex flex-col"> <div class="mb-3 flex flex-col">
@ -197,51 +197,50 @@ const isSidebarCollapsed = useStorage('isSidebarCollapsed', false)
const isFCSite = ref(window.is_fc_site) const isFCSite = ref(window.is_fc_site)
const isDemoSite = ref(window.is_demo_site) const isDemoSite = ref(window.is_demo_site)
const allViews = computed(() => { const links = [
const links = [ {
{ label: 'Dashboard',
label: 'Dashboard', icon: LucideLayoutDashboard,
icon: LucideLayoutDashboard, to: 'Dashboard',
to: 'Dashboard', },
condition: () => isManager(), {
}, label: 'Leads',
{ icon: LeadsIcon,
label: 'Leads', to: 'Leads',
icon: LeadsIcon, },
to: 'Leads', {
}, label: 'Deals',
{ icon: DealsIcon,
label: 'Deals', to: 'Deals',
icon: DealsIcon, },
to: 'Deals', {
}, label: 'Contacts',
{ icon: ContactsIcon,
label: 'Contacts', to: 'Contacts',
icon: ContactsIcon, },
to: 'Contacts', {
}, label: 'Organizations',
{ icon: OrganizationsIcon,
label: 'Organizations', to: 'Organizations',
icon: OrganizationsIcon, },
to: 'Organizations', {
}, label: 'Notes',
{ icon: NoteIcon,
label: 'Notes', to: 'Notes',
icon: NoteIcon, },
to: 'Notes', {
}, label: 'Tasks',
{ icon: TaskIcon,
label: 'Tasks', to: 'Tasks',
icon: TaskIcon, },
to: 'Tasks', {
}, label: 'Call Logs',
{ icon: PhoneIcon,
label: 'Call Logs', to: 'Call Logs',
icon: PhoneIcon, },
to: 'Call Logs', ]
},
]
const allViews = computed(() => {
let _views = [ let _views = [
{ {
name: 'All Views', name: 'All Views',

View File

@ -11,19 +11,18 @@
<div class="flex items-center gap-1"> <div class="flex items-center gap-1">
<Button <Button
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
:tooltip="__('Edit fields layout')"
variant="ghost" variant="ghost"
:icon="EditIcon"
class="w-7" class="w-7"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon> <Button
<EditIcon /> icon="x"
</template> variant="ghost"
</Button> class="w-7"
<Button variant="ghost" class="w-7" @click="show = false"> @click="show = false"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div v-if="tabs.data && _address.doc"> <div v-if="tabs.data && _address.doc">

View File

@ -36,18 +36,17 @@
<Button <Button
v-if="!isMobileView" v-if="!isMobileView"
variant="ghost" variant="ghost"
:tooltip="__('Edit call log')"
:icon="EditIcon"
class="w-7" class="w-7"
@click="openCallLogModal" @click="openCallLogModal"
> />
<template #icon> <Button
<EditIcon /> icon="x"
</template> variant="ghost"
</Button> class="w-7"
<Button variant="ghost" class="w-7" @click="show = false"> @click="show = false"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div class="flex flex-col gap-3.5"> <div class="flex flex-col gap-3.5">

View File

@ -13,18 +13,17 @@
<Button <Button
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
variant="ghost" variant="ghost"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
class="w-7" class="w-7"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon> <Button
<EditIcon /> variant="ghost"
</template> class="w-7"
</Button> @click="show = false"
<Button variant="ghost" class="w-7" @click="show = false"> icon="x"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div v-if="tabs.data"> <div v-if="tabs.data">

View File

@ -13,17 +13,16 @@
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
variant="ghost" variant="ghost"
class="w-7" class="w-7"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon> <Button
<EditIcon /> variant="ghost"
</template> class="w-7"
</Button> @click="show = false"
<Button variant="ghost" class="w-7" @click="show = false"> icon="x"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<FieldLayout <FieldLayout
@ -90,12 +89,16 @@ const { document: _contact, triggerOnBeforeCreate } = useDocument('Contact')
async function createContact() { async function createContact() {
if (_contact.doc.email_id) { if (_contact.doc.email_id) {
_contact.doc.email_ids = [{ email_id: _contact.doc.email_id, is_primary: 1 }] _contact.doc.email_ids = [
{ email_id: _contact.doc.email_id, is_primary: 1 },
]
delete _contact.doc.email_id delete _contact.doc.email_id
} }
if (_contact.doc.mobile_no) { if (_contact.doc.mobile_no) {
_contact.doc.phone_nos = [{ phone: _contact.doc.mobile_no, is_primary_mobile_no: 1 }] _contact.doc.phone_nos = [
{ phone: _contact.doc.mobile_no, is_primary_mobile_no: 1 },
]
delete _contact.doc.mobile_no delete _contact.doc.mobile_no
} }

View File

@ -23,12 +23,10 @@
<Button <Button
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
variant="ghost" variant="ghost"
:tooltip="__('Edit deal\'s mandatory fields layout')"
:icon="EditIcon"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon>
<EditIcon class="h-4 w-4" />
</template>
</Button>
<Button icon="x" variant="ghost" @click="show = false" /> <Button icon="x" variant="ghost" @click="show = false" />
</div> </div>
</div> </div>

View File

@ -13,17 +13,16 @@
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
variant="ghost" variant="ghost"
class="w-7" class="w-7"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon> <Button
<EditIcon /> variant="ghost"
</template> class="w-7"
</Button> icon="x"
<Button variant="ghost" class="w-7" @click="show = false"> @click="show = false"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div v-if="tabs.data"> <div v-if="tabs.data">

View File

@ -13,17 +13,16 @@
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
variant="ghost" variant="ghost"
class="w-7" class="w-7"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon> <Button
<EditIcon /> variant="ghost"
</template> class="w-7"
</Button> icon="x"
<Button variant="ghost" class="w-7" @click="show = false"> @click="show = false"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div> <div>

View File

@ -13,17 +13,16 @@
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
variant="ghost" variant="ghost"
class="w-7" class="w-7"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon> <Button
<EditIcon /> variant="ghost"
</template> class="w-7"
</Button> @click="show = false"
<Button variant="ghost" class="w-7" @click="show = false"> icon="x"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div> <div>

View File

@ -1,41 +1,59 @@
<template> <template>
<Dialog v-model="show" :options="{ <Dialog
size: 'xl', v-model="show"
actions: [ :options="{
{ size: 'xl',
label: editMode ? __('Update') : __('Create'), actions: [
variant: 'solid', {
onClick: () => updateNote(), label: editMode ? __('Update') : __('Create'),
}, variant: 'solid',
], onClick: () => updateNote(),
}"> },
],
}"
>
<template #body-title> <template #body-title>
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<h3 class="text-2xl font-semibold leading-6 text-ink-gray-9"> <h3 class="text-2xl font-semibold leading-6 text-ink-gray-9">
{{ editMode ? __('Edit Note') : __('Create Note') }} {{ editMode ? __('Edit Note') : __('Create Note') }}
</h3> </h3>
<Button v-if="_note?.reference_docname" size="sm" :label="_note.reference_doctype == 'CRM Deal' <Button
? __('Open Deal') v-if="_note?.reference_docname"
: __('Open Lead') size="sm"
" @click="redirect()"> :label="
<template #suffix> _note.reference_doctype == 'CRM Deal'
<ArrowUpRightIcon class="w-4 h-4" /> ? __('Open Deal')
</template> : __('Open Lead')
</Button> "
:iconRight="ArrowUpRightIcon"
@click="redirect()"
/>
</div> </div>
</template> </template>
<template #body-content> <template #body-content>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div> <div>
<FormControl ref="title" :label="__('Title')" v-model="_note.title" :placeholder="__('Call with John Doe')" <FormControl
required /> ref="title"
:label="__('Title')"
v-model="_note.title"
:placeholder="__('Call with John Doe')"
required
/>
</div> </div>
<div> <div>
<div class="mb-1.5 text-xs text-ink-gray-5">{{ __('Content') }}</div> <div class="mb-1.5 text-xs text-ink-gray-5">{{ __('Content') }}</div>
<TextEditor variant="outline" ref="content" <TextEditor
variant="outline"
ref="content"
editor-class="!prose-sm overflow-auto min-h-[180px] max-h-80 py-1.5 px-2 rounded border border-[--surface-gray-2] bg-surface-gray-2 placeholder-ink-gray-4 hover:border-outline-gray-modals hover:bg-surface-gray-3 hover:shadow-sm focus:bg-surface-white focus:border-outline-gray-4 focus:shadow-sm focus:ring-0 focus-visible:ring-2 focus-visible:ring-outline-gray-3 text-ink-gray-8 transition-colors" editor-class="!prose-sm overflow-auto min-h-[180px] max-h-80 py-1.5 px-2 rounded border border-[--surface-gray-2] bg-surface-gray-2 placeholder-ink-gray-4 hover:border-outline-gray-modals hover:bg-surface-gray-3 hover:shadow-sm focus:bg-surface-white focus:border-outline-gray-4 focus:shadow-sm focus:ring-0 focus-visible:ring-2 focus-visible:ring-outline-gray-3 text-ink-gray-8 transition-colors"
:bubbleMenu="true" :content="_note.content" @change="(val) => (_note.content = val)" :placeholder="__('Took a call with John Doe and discussed the new project.') :bubbleMenu="true"
" /> :content="_note.content"
@change="(val) => (_note.content = val)"
:placeholder="
__('Took a call with John Doe and discussed the new project.')
"
/>
</div> </div>
<ErrorMessage class="mt-4" v-if="error" :message="__(error)" /> <ErrorMessage class="mt-4" v-if="error" :message="__(error)" />
</div> </div>
@ -92,21 +110,25 @@ async function updateNote() {
emit('after', d) emit('after', d)
} }
} else { } else {
let d = await call('frappe.client.insert', { let d = await call(
doc: { 'frappe.client.insert',
doctype: 'FCRM Note', {
title: _note.value.title, doc: {
content: _note.value.content, doctype: 'FCRM Note',
reference_doctype: props.doctype, title: _note.value.title,
reference_docname: props.doc || '', content: _note.value.content,
reference_doctype: props.doctype,
reference_docname: props.doc || '',
},
}, },
}, { {
onError: (err) => { onError: (err) => {
if (err.error.exc_type == 'MandatoryError') { if (err.error.exc_type == 'MandatoryError') {
error.value = "Title is mandatory" error.value = 'Title is mandatory'
} }
} },
}) },
)
if (d.name) { if (d.name) {
updateOnboardingStep('create_first_note') updateOnboardingStep('create_first_note')
capture('note_created') capture('note_created')

View File

@ -13,17 +13,16 @@
v-if="isManager() && !isMobileView" v-if="isManager() && !isMobileView"
variant="ghost" variant="ghost"
class="w-7" class="w-7"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
@click="openQuickEntryModal" @click="openQuickEntryModal"
> />
<template #icon> <Button
<EditIcon /> variant="ghost"
</template> class="w-7"
</Button> @click="show = false"
<Button variant="ghost" class="w-7" @click="show = false"> icon="x"
<template #icon> />
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
</div> </div>
</div> </div>
<FieldLayout <FieldLayout

View File

@ -25,12 +25,9 @@
? __('Open Deal') ? __('Open Deal')
: __('Open Lead') : __('Open Lead')
" "
:iconRight="ArrowUpRightIcon"
@click="redirect()" @click="redirect()"
> />
<template #suffix>
<ArrowUpRightIcon class="w-4 h-4" />
</template>
</Button>
</div> </div>
</template> </template>
<template #body-content> <template #body-content>

View File

@ -7,17 +7,6 @@
: duplicateMode : duplicateMode
? __('Duplicate View') ? __('Duplicate View')
: __('Create View'), : __('Create View'),
actions: [
{
label: editMode
? __('Save Changes')
: duplicateMode
? __('Duplicate')
: __('Create'),
variant: 'solid',
onClick: () => (editMode ? update() : create()),
},
],
}" }"
> >
<template #body-content> <template #body-content>
@ -42,6 +31,21 @@
/> />
</div> </div>
</template> </template>
<template #actions>
<div class="flex justify-end">
<Button
variant="solid"
:label="
editMode
? __('Save Changes')
: duplicateMode
? __('Duplicate')
: __('Create')
"
@click="() => (editMode ? update() : create())"
/>
</div>
</template>
</Dialog> </Dialog>
</template> </template>

View File

@ -9,21 +9,9 @@
$attrs.class, $attrs.class,
showDropdown ? 'rounded-br-none rounded-tr-none' : '', showDropdown ? 'rounded-br-none rounded-tr-none' : '',
]" ]"
:iconLeft="activeButton.icon"
@click="() => activeButton.onClick()" @click="() => activeButton.onClick()"
> />
<template #prefix>
<FeatherIcon
v-if="activeButton.icon && typeof activeButton.icon === 'string'"
:name="activeButton.icon"
class="h-4 w-4"
/>
<component
v-else-if="activeButton.icon"
:is="activeButton.icon"
class="h-4 w-4"
/>
</template>
</Button>
<Dropdown <Dropdown
v-if="showDropdown" v-if="showDropdown"
:options="parsedOptions" :options="parsedOptions"

View File

@ -1,60 +0,0 @@
<template>
<Popover v-slot="{ open }">
<PopoverButton
as="div"
ref="reference"
@click="updatePosition"
@focusin="updatePosition"
@keydown="updatePosition"
v-slot="{ open }"
>
<slot name="target" v-bind="{ open }" />
</PopoverButton>
<div v-show="open">
<PopoverPanel
v-slot="{ open, close }"
ref="popover"
static
class="z-[100]"
>
<slot name="body" v-bind="{ open, close }" />
</PopoverPanel>
</div>
</Popover>
</template>
<script setup>
import { Popover, PopoverButton, PopoverPanel } from '@headlessui/vue'
import { createPopper } from '@popperjs/core'
import { nextTick, ref, onBeforeUnmount } from 'vue'
const props = defineProps({
placement: {
type: String,
default: 'bottom-start',
},
})
const reference = ref(null)
const popover = ref(null)
let popper = ref(null)
function setupPopper() {
if (!popper.value) {
popper.value = createPopper(reference.value.el, popover.value.el, {
placement: props.placement,
})
} else {
popper.value.update()
}
}
function updatePosition() {
nextTick(() => setupPopper())
}
onBeforeUnmount(() => {
popper.value?.destroy()
})
</script>

View File

@ -16,24 +16,18 @@
> >
<div class="text-base font-medium">{{ __('Notifications') }}</div> <div class="text-base font-medium">{{ __('Notifications') }}</div>
<div class="flex gap-1"> <div class="flex gap-1">
<Tooltip :text="__('Mark all as read')"> <Button
<div> :tooltip="__('Mark all as read')"
<Button variant="ghost" @click="() => markAllAsRead()"> :icon="MarkAsDoneIcon"
<template #icon> variant="ghost"
<MarkAsDoneIcon class="h-4 w-4" /> @click="markAllAsRead"
</template> />
</Button> <Button
</div> :tooltip="__('Close')"
</Tooltip> icon="x"
<Tooltip :text="__('Close')"> variant="ghost"
<div> @click="() => toggle()"
<Button variant="ghost" @click="() => toggle()"> />
<template #icon>
<FeatherIcon name="x" class="h-4 w-4" />
</template>
</Button>
</div>
</Tooltip>
</div> </div>
</div> </div>
<div <div
@ -100,7 +94,6 @@ import { globalStore } from '@/stores/global'
import { timeAgo } from '@/utils' import { timeAgo } from '@/utils'
import { onClickOutside } from '@vueuse/core' import { onClickOutside } from '@vueuse/core'
import { capture } from '@/telemetry' import { capture } from '@/telemetry'
import { Tooltip } from 'frappe-ui'
import { ref, onMounted, onBeforeUnmount } from 'vue' import { ref, onMounted, onBeforeUnmount } from 'vue'
const { $socket } = globalStore() const { $socket } = globalStore()

View File

@ -27,14 +27,10 @@
:options="s.options" :options="s.options"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button :label="s.value"> <Button
<template #suffix> :label="s.value"
<FeatherIcon :iconRight="open ? 'chevron-up' : 'chevron-down'"
:name="open ? 'chevron-up' : 'chevron-down'" />
class="h-4"
/>
</template>
</Button>
</template> </template>
</Dropdown> </Dropdown>
</div> </div>

View File

@ -131,7 +131,7 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { ErrorMessage } from 'frappe-ui' import { ErrorMessage, toast } from 'frappe-ui'
import { getSettings } from '@/stores/settings' import { getSettings } from '@/stores/settings'
import { globalStore } from '@/stores/global' import { globalStore } from '@/stores/global'
import { showSettings } from '@/composables/settings' import { showSettings } from '@/composables/settings'

View File

@ -80,19 +80,16 @@
</span> </span>
</div> </div>
<div> <div>
<Tooltip text="Delete Invitation"> <Button
<div> :tooltip="__('Delete invitation')"
<Button icon="x"
icon="x" variant="ghost"
variant="ghost" :loading="
:loading=" pendingInvitations.delete.loading &&
pendingInvitations.delete.loading && pendingInvitations.delete.params.name === user.name
pendingInvitations.delete.params.name === user.name "
" @click="pendingInvitations.delete.submit(user.name)"
@click="pendingInvitations.delete.submit(user.name)" />
/>
</div>
</Tooltip>
</div> </div>
</li> </li>
</ul> </ul>

View File

@ -20,12 +20,9 @@
v-if="section.showEditButton" v-if="section.showEditButton"
variant="ghost" variant="ghost"
class="w-7 mr-2" class="w-7 mr-2"
:icon="EditIcon"
@click="showSidePanelModal = true" @click="showSidePanelModal = true"
> />
<template #icon>
<EditIcon />
</template>
</Button>
</slot> </slot>
</template> </template>
<slot v-bind="{ section }"> <slot v-bind="{ section }">
@ -83,11 +80,12 @@
</Tooltip> </Tooltip>
</div> </div>
<div v-else-if="field.fieldtype === 'Dropdown'"> <div v-else-if="field.fieldtype === 'Dropdown'">
<NestedPopover> <Popover>
<template #target="{ open }"> <template #target="{ isOpen, togglePopover }">
<Button <Button
:label="doc[field.fieldname]" :label="doc[field.fieldname]"
class="dropdown-button flex w-full items-center justify-between rounded border border-gray-100 bg-surface-gray-2 px-2 py-1.5 text-base text-ink-gray-8 placeholder-ink-gray-4 transition-colors hover:border-outline-gray-modals hover:bg-surface-gray-3 focus:border-outline-gray-4 focus:bg-surface-white focus:shadow-sm focus:outline-none focus:ring-0 focus-visible:ring-2 focus-visible:ring-outline-gray-3" class="dropdown-button flex w-full items-center justify-between rounded border border-gray-100 bg-surface-gray-2 px-2 py-1.5 text-base text-ink-gray-8 placeholder-ink-gray-4 transition-colors hover:border-outline-gray-modals hover:bg-surface-gray-3 focus:border-outline-gray-4 focus:bg-surface-white focus:shadow-sm focus:outline-none focus:ring-0 focus-visible:ring-2 focus-visible:ring-outline-gray-3"
@click="togglePopover"
> >
<div <div
v-if="doc[field.fieldname]" v-if="doc[field.fieldname]"
@ -103,7 +101,9 @@
</div> </div>
<template #suffix> <template #suffix>
<FeatherIcon <FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'" :name="
isOpen ? 'chevron-up' : 'chevron-down'
"
class="h-4 text-ink-gray-5" class="h-4 text-ink-gray-5"
/> />
</template> </template>
@ -135,16 +135,13 @@
variant="ghost" variant="ghost"
class="w-full !justify-start" class="w-full !justify-start"
:label="__('Create New')" :label="__('Create New')"
iconLeft="plus"
@click="field.create()" @click="field.create()"
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4" />
</template>
</Button>
</div> </div>
</div> </div>
</template> </template>
</NestedPopover> </Popover>
</div> </div>
<FormControl <FormControl
v-else-if="field.fieldtype == 'Check'" v-else-if="field.fieldtype == 'Check'"
@ -369,7 +366,6 @@
import Password from '@/components/Controls/Password.vue' import Password from '@/components/Controls/Password.vue'
import FormattedInput from '@/components/Controls/FormattedInput.vue' import FormattedInput from '@/components/Controls/FormattedInput.vue'
import Section from '@/components/Section.vue' import Section from '@/components/Section.vue'
import NestedPopover from '@/components/NestedPopover.vue'
import DropdownItem from '@/components/DropdownItem.vue' import DropdownItem from '@/components/DropdownItem.vue'
import FadedScrollableDiv from '@/components/FadedScrollableDiv.vue' import FadedScrollableDiv from '@/components/FadedScrollableDiv.vue'
import ArrowUpRightIcon from '@/components/Icons/ArrowUpRightIcon.vue' import ArrowUpRightIcon from '@/components/Icons/ArrowUpRightIcon.vue'
@ -382,7 +378,7 @@ import { usersStore } from '@/stores/users'
import { isMobileView } from '@/composables/settings' import { isMobileView } from '@/composables/settings'
import { getFormat, evaluateDependsOnValue } from '@/utils' import { getFormat, evaluateDependsOnValue } from '@/utils'
import { flt } from '@/utils/numberFormat.js' import { flt } from '@/utils/numberFormat.js'
import { Tooltip, DateTimePicker, DatePicker } from 'frappe-ui' import { Tooltip, DateTimePicker, DatePicker, Popover } from 'frappe-ui'
import { useDocument } from '@/data/document' import { useDocument } from '@/data/document'
import { ref, computed, getCurrentInstance } from 'vue' import { ref, computed, getCurrentInstance } from 'vue'

View File

@ -94,13 +94,10 @@
<Button <Button
class="w-full h-8 mt-1.5 !bg-surface-gray-1" class="w-full h-8 mt-1.5 !bg-surface-gray-1"
variant="outline" variant="outline"
@click="togglePopover()"
:label="__('Add Field')" :label="__('Add Field')"
> iconLeft="plus"
<template #prefix> @click="togglePopover()"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</template> </template>
<template #item-label="{ option }"> <template #item-label="{ option }">
<div class="flex flex-col gap-1 text-ink-gray-9"> <div class="flex flex-col gap-1 text-ink-gray-9">
@ -128,6 +125,7 @@
class="w-full h-8" class="w-full h-8"
variant="subtle" variant="subtle"
:label="__('Add Section')" :label="__('Add Section')"
iconLeft="plus"
@click=" @click="
sections.push({ sections.push({
label: __('New Section'), label: __('New Section'),
@ -136,11 +134,7 @@
columns: [{ name: 'column_' + getRandom(), fields: [] }], columns: [{ name: 'column_' + getRandom(), fields: [] }],
}) })
" "
> />
<template #prefix>
<FeatherIcon name="plus" class="h-4" />
</template>
</Button>
</div> </div>
</div> </div>
</template> </template>

View File

@ -17,13 +17,15 @@
</Button> </Button>
</template> </template>
</Autocomplete> </Autocomplete>
<NestedPopover v-else> <Popover placement="bottom-end" v-else>
<template #target="{ open }"> <template #target="{ isOpen, togglePopover }">
<Button v-if="sortValues.size > 1" :label="__('Sort')"> <Button
<template v-if="hideLabel"> v-if="sortValues.size > 1"
<SortIcon class="h-4" /> :label="__('Sort')"
</template> :icon="hideLabel && SortIcon"
<template v-if="!hideLabel" #prefix><SortIcon class="h-4" /></template> :iconLeft="!hideLabel && SortIcon"
@click="togglePopover"
>
<template v-if="sortValues?.size" #suffix> <template v-if="sortValues?.size" #suffix>
<div <div
class="flex h-5 w-5 items-center justify-center rounded-[5px] bg-surface-white pt-px text-xs font-medium text-ink-gray-8 shadow-sm" class="flex h-5 w-5 items-center justify-center rounded-[5px] bg-surface-white pt-px text-xs font-medium text-ink-gray-8 shadow-sm"
@ -36,6 +38,11 @@
<Button <Button
v-if="sortValues.size" v-if="sortValues.size"
class="rounded-r-none border-r" class="rounded-r-none border-r"
:icon="
Array.from(sortValues)[0].direction == 'asc'
? AscendingIcon
: DesendingIcon
"
@click.stop=" @click.stop="
() => { () => {
Array.from(sortValues)[0].direction = Array.from(sortValues)[0].direction =
@ -43,28 +50,17 @@
apply() apply()
} }
" "
> />
<AscendingIcon
v-if="Array.from(sortValues)[0].direction == 'asc'"
class="h-4"
/>
<DesendingIcon v-else class="h-4" />
</Button>
<Button <Button
:label="getSortLabel()" :label="getSortLabel()"
class="shrink-0" class="shrink-0 [&_svg]:text-ink-gray-5"
:iconLeft="!hideLabel && !sortValues?.size && SortIcon"
:iconRight="
sortValues?.size && (isOpen ? 'chevron-up' : 'chevron-down')
"
:class="sortValues.size ? 'rounded-l-none' : ''" :class="sortValues.size ? 'rounded-l-none' : ''"
> @click.stop="togglePopover"
<template v-if="!hideLabel && !sortValues?.size" #prefix> />
<SortIcon class="h-4" />
</template>
<template v-if="sortValues?.size" #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4 text-ink-gray-5"
/>
</template>
</Button>
</div> </div>
</template> </template>
<template #body="{ close }"> <template #body="{ close }">
@ -85,42 +81,42 @@
<div class="handle flex h-7 w-7 items-center justify-center"> <div class="handle flex h-7 w-7 items-center justify-center">
<DragIcon class="h-4 w-4 cursor-grab text-ink-gray-5" /> <DragIcon class="h-4 w-4 cursor-grab text-ink-gray-5" />
</div> </div>
<div class="flex flex-1 [&>_div]:w-full"> <div class="flex flex-1">
<Button <Button
size="md" size="md"
class="rounded-r-none border-r" class="rounded-r-none border-r"
:icon="
sort.direction == 'asc' ? AscendingIcon : DesendingIcon
"
@click=" @click="
() => { () => {
sort.direction = sort.direction == 'asc' ? 'desc' : 'asc' sort.direction = sort.direction == 'asc' ? 'desc' : 'asc'
apply() apply()
} }
" "
> />
<AscendingIcon v-if="sort.direction == 'asc'" class="h-4" />
<DesendingIcon v-else class="h-4" />
</Button>
<Autocomplete <Autocomplete
class="[&>_div]:w-full"
:value="sort.fieldname" :value="sort.fieldname"
:options="sortOptions.data" :options="sortOptions.data"
@change="(e) => updateSort(e, i)" @change="(e) => updateSort(e, i)"
:placeholder="__('First Name')" :placeholder="__('First Name')"
> >
<template <template
#target="{ togglePopover, selectedValue, displayValue }" #target="{
open,
togglePopover,
selectedValue,
displayValue,
}"
> >
<Button <Button
class="flex w-full items-center justify-between rounded-l-none !text-ink-gray-5" class="flex w-full items-center justify-between rounded-l-none !text-ink-gray-5"
size="md" size="md"
:label="displayValue(selectedValue)"
:iconRight="open ? 'chevron-down' : 'chevron-up'"
@click="togglePopover()" @click="togglePopover()"
> />
{{ displayValue(selectedValue) }}
<template #suffix>
<FeatherIcon
name="chevron-down"
class="h-4 text-ink-gray-5"
/>
</template>
</Button>
</template> </template>
</Autocomplete> </Autocomplete>
</div> </div>
@ -143,14 +139,11 @@
<template #target="{ togglePopover }"> <template #target="{ togglePopover }">
<Button <Button
class="!text-ink-gray-5" class="!text-ink-gray-5"
variant="ghost"
@click="togglePopover()"
:label="__('Add Sort')" :label="__('Add Sort')"
> variant="ghost"
<template #prefix> iconLeft="plus"
<FeatherIcon name="plus" class="h-4" /> @click="togglePopover()"
</template> />
</Button>
</template> </template>
</Autocomplete> </Autocomplete>
<Button <Button
@ -164,18 +157,17 @@
</div> </div>
</div> </div>
</template> </template>
</NestedPopover> </Popover>
</template> </template>
<script setup> <script setup>
import AscendingIcon from '@/components/Icons/AscendingIcon.vue' import AscendingIcon from '@/components/Icons/AscendingIcon.vue'
import DesendingIcon from '@/components/Icons/DesendingIcon.vue' import DesendingIcon from '@/components/Icons/DesendingIcon.vue'
import NestedPopover from '@/components/NestedPopover.vue'
import SortIcon from '@/components/Icons/SortIcon.vue' import SortIcon from '@/components/Icons/SortIcon.vue'
import DragIcon from '@/components/Icons/DragIcon.vue' import DragIcon from '@/components/Icons/DragIcon.vue'
import Autocomplete from '@/components/frappe-ui/Autocomplete.vue' import Autocomplete from '@/components/frappe-ui/Autocomplete.vue'
import { useSortable } from '@vueuse/integrations/useSortable' import { useSortable } from '@vueuse/integrations/useSortable'
import { createResource } from 'frappe-ui' import { createResource, Popover } from 'frappe-ui'
import { computed, nextTick, onMounted } from 'vue' import { computed, nextTick, onMounted } from 'vue'
const props = defineProps({ const props = defineProps({

View File

@ -123,13 +123,11 @@
<div class="flex"> <div class="flex">
<Button <Button
@click="toggleCallPopup" @click="toggleCallPopup"
class="bg-surface-gray-7 text-ink-white hover:bg-surface-gray-6 shrink-0" class="bg-surface-gray-7 text-ink-white hover:bg-surface-gray-6 shrink-0 cursor-pointer"
:tooltip="__('Minimize')"
:icon="MinimizeIcon"
size="md" size="md"
> />
<template #icon>
<MinimizeIcon class="h-4 w-4 cursor-pointer" />
</template>
</Button>
<Button <Button
v-if="callStatus == 'Call ended' || callStatus == 'No answer'" v-if="callStatus == 'Call ended' || callStatus == 'No answer'"
@click="closeCallPopup" @click="closeCallPopup"
@ -182,33 +180,26 @@
<div class="flex gap-2"> <div class="flex gap-2">
<Button <Button
class="bg-surface-gray-6 text-ink-white hover:bg-surface-gray-5" class="bg-surface-gray-6 text-ink-white hover:bg-surface-gray-5"
:tooltip="__('Add a note')"
size="md" size="md"
:icon="NoteIcon"
@click="showNoteWindow" @click="showNoteWindow"
> />
<template #icon>
<NoteIcon class="w-4 h-4" />
</template>
</Button>
<Button <Button
class="bg-surface-gray-6 text-ink-white hover:bg-surface-gray-5" class="bg-surface-gray-6 text-ink-white hover:bg-surface-gray-5"
size="md" size="md"
:tooltip="__('Add a task')"
:icon="TaskIcon"
@click="showTaskWindow" @click="showTaskWindow"
> />
<template #icon>
<TaskIcon class="w-4 h-4" />
</template>
</Button>
<Button <Button
v-if="contact.deal || contact.lead" v-if="contact.deal || contact.lead"
class="bg-surface-gray-6 text-ink-white hover:bg-surface-gray-5" class="bg-surface-gray-6 text-ink-white hover:bg-surface-gray-5"
size="md" size="md"
:iconRight="ArrowUpRightIcon"
:label="contact.deal ? __('Deal') : __('Lead')" :label="contact.deal ? __('Deal') : __('Lead')"
@click="openDealOrLead" @click="openDealOrLead"
> />
<template #suffix>
<ArrowUpRightIcon class="w-4 h-4" />
</template>
</Button>
</div> </div>
<Button <Button

View File

@ -52,22 +52,18 @@
<DialpadIcon class="cursor-pointer rounded-full" /> <DialpadIcon class="cursor-pointer rounded-full" />
</template> </template>
</Button> --> </Button> -->
<Button class="rounded-full"> <Button
<template #icon> class="cursor-pointer rounded-full"
<NoteIcon :tooltip="__('Add a note')"
class="h-4 w-4 cursor-pointer rounded-full text-ink-gray-9" :icon="NoteIcon"
@click="showNoteModal = true" @click="showNoteModal = true"
/> />
</template> <Button
</Button> class="rounded-full bg-surface-red-5 hover:bg-surface-red-6 rotate-[135deg] text-ink-white"
<Button class="rounded-full bg-surface-red-5 hover:bg-surface-red-6"> :tooltip="__('Hang up')"
<template #icon> :icon="PhoneIcon"
<PhoneIcon @click="hangUpCall"
class="h-4 w-4 rotate-[135deg] fill-white text-ink-white" />
@click="hangUpCall"
/>
</template>
</Button>
</div> </div>
<div v-else-if="calling || callStatus == 'initiating'"> <div v-else-if="calling || callStatus == 'initiating'">
<Button <Button
@ -76,13 +72,10 @@
theme="red" theme="red"
:label="__('Cancel')" :label="__('Cancel')"
@click="cancelCall" @click="cancelCall"
class="rounded-lg" class="rounded-lg rotate-[135deg] text-ink-white"
:disabled="callStatus == 'initiating'" :disabled="callStatus == 'initiating'"
> :iconLeft="PhoneIcon"
<template #prefix> />
<PhoneIcon class="h-4 w-4 rotate-[135deg] fill-white" />
</template>
</Button>
</div> </div>
<div v-else class="flex gap-2"> <div v-else class="flex gap-2">
<Button <Button
@ -90,25 +83,19 @@
variant="solid" variant="solid"
theme="green" theme="green"
:label="__('Accept')" :label="__('Accept')"
class="rounded-lg" class="rounded-lg text-ink-white"
:iconLeft="PhoneIcon"
@click="acceptIncomingCall" @click="acceptIncomingCall"
> />
<template #prefix>
<PhoneIcon class="h-4 w-4 fill-white" />
</template>
</Button>
<Button <Button
size="md" size="md"
variant="solid" variant="solid"
theme="red" theme="red"
:label="__('Reject')" :label="__('Reject')"
class="rounded-lg" class="rounded-lg rotate-[135deg] text-ink-white"
:iconLeft="PhoneIcon"
@click="rejectIncomingCall" @click="rejectIncomingCall"
> />
<template #prefix>
<PhoneIcon class="h-4 w-4 rotate-[135deg] fill-white" />
</template>
</Button>
</div> </div>
</div> </div>
</div> </div>
@ -134,14 +121,13 @@
<div class="my-1 min-w-[40px] text-center"> <div class="my-1 min-w-[40px] text-center">
{{ counterUp?.updatedTime }} {{ counterUp?.updatedTime }}
</div> </div>
<Button variant="solid" theme="red" class="!h-6 !w-6 rounded-full"> <Button
<template #icon> variant="solid"
<PhoneIcon theme="red"
class="h-4 w-4 rotate-[135deg] fill-white" class="!h-6 !w-6 rounded-full rotate-[135deg] text-ink-white"
@click.stop="hangUpCall" :icon="PhoneIcon"
/> @click.stop="hangUpCall"
</template> />
</Button>
</div> </div>
<div v-else-if="calling" class="flex items-center gap-3"> <div v-else-if="calling" class="flex items-center gap-3">
<div class="my-1"> <div class="my-1">
@ -150,35 +136,28 @@
<Button <Button
variant="solid" variant="solid"
theme="red" theme="red"
class="!h-6 !w-6 rounded-full" class="!h-6 !w-6 rounded-full rotate-[135deg] text-ink-white"
:icon="PhoneIcon"
@click.stop="cancelCall" @click.stop="cancelCall"
> />
<template #icon>
<PhoneIcon class="h-4 w-4 rotate-[135deg] fill-white" />
</template>
</Button>
</div> </div>
<div v-else class="flex items-center gap-2"> <div v-else class="flex items-center gap-2">
<Button <Button
variant="solid" variant="solid"
theme="green" theme="green"
class="pulse relative !h-6 !w-6 rounded-full" class="pulse relative !h-6 !w-6 rounded-full animate-pulse text-ink-white"
:tooltip="__('Accept call')"
:icon="PhoneIcon"
@click.stop="acceptIncomingCall" @click.stop="acceptIncomingCall"
> />
<template #icon>
<PhoneIcon class="h-4 w-4 animate-pulse fill-white" />
</template>
</Button>
<Button <Button
variant="solid" variant="solid"
theme="red" theme="red"
class="!h-6 !w-6 rounded-full" class="!h-6 !w-6 rounded-full rotate-[135deg] text-ink-white"
:tooltip="__('Reject call')"
:icon="PhoneIcon"
@click.stop="rejectIncomingCall" @click.stop="rejectIncomingCall"
> />
<template #icon>
<PhoneIcon class="h-4 w-4 rotate-[135deg] fill-white" />
</template>
</Button>
</div> </div>
</div> </div>
<NoteModal <NoteModal

View File

@ -18,28 +18,25 @@
> >
/ /
</span> </span>
<Dropdown v-if="viewControls" :options="viewControls.viewsDropdownOptions"> <Dropdown
v-if="viewControls"
:options="viewControls.viewsDropdownOptions"
>
<template #default="{ open }"> <template #default="{ open }">
<Button <Button
variant="ghost" variant="ghost"
class="text-lg font-medium text-nowrap" class="text-lg font-medium text-nowrap"
:label="__(viewControls.currentView.label)" :label="__(viewControls.currentView.label)"
:iconRight="open ? 'chevron-up' : 'chevron-down'"
> >
<template #prefix> <template #prefix>
<Icon :icon="viewControls.currentView.icon" class="h-4" /> <Icon :icon="viewControls.currentView.icon" class="h-4" />
</template> </template>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4 text-ink-gray-8"
/>
</template>
</Button> </Button>
</template> </template>
<template #item="{ item, active }"> <template #item="{ item, close }">
<button <button
class="group flex text-ink-gray-6 gap-4 h-7 w-full justify-between items-center rounded px-2 text-base" class="group flex text-ink-gray-6 gap-4 h-7 w-full justify-between items-center rounded px-2 text-base hover:bg-surface-gray-3"
:class="{ 'bg-surface-gray-3': active }"
@click="item.onClick" @click="item.onClick"
> >
<div class="flex items-center"> <div class="flex items-center">
@ -63,16 +60,15 @@
class="flex flex-row-reverse gap-2 items-center min-w-11" class="flex flex-row-reverse gap-2 items-center min-w-11"
> >
<Dropdown <Dropdown
:class="active ? 'block' : 'hidden'"
placement="right-start" placement="right-start"
:options="viewControls.viewActions(item)" :options="viewControls.viewActions(item, close)"
> >
<template #default="{ togglePopover }"> <template #default>
<Button <Button
variant="ghost" variant="ghost"
class="!size-5" class="!size-5 hidden group-hover:block"
icon="more-horizontal" icon="more-horizontal"
@click.stop="togglePopover()" @click.stop
/> />
</template> </template>
</Dropdown> </Dropdown>
@ -89,7 +85,7 @@
</template> </template>
<script setup> <script setup>
import Icon from '@/components/Icon.vue' import Icon from '@/components/Icon.vue'
import Dropdown from '@/components/frappe-ui/Dropdown.vue' import { Dropdown } from 'frappe-ui'
const props = defineProps({ const props = defineProps({
routeName: { routeName: {

View File

@ -22,11 +22,12 @@
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<Button :label="__('Refresh')" @click="reload()" :loading="isLoading"> <Button
<template #icon> :tooltip="__('Refresh')"
<RefreshIcon class="h-4 w-4" /> :icon="RefreshIcon"
</template> :loading="isLoading"
</Button> @click="reload()"
/>
<SortBy <SortBy
v-if="route.params.viewType !== 'kanban'" v-if="route.params.viewType !== 'kanban'"
v-model="list" v-model="list"
@ -100,13 +101,10 @@
<Button <Button
class="whitespace-nowrap mr-2" class="whitespace-nowrap mr-2"
variant="ghost" variant="ghost"
@click="togglePopover()"
:label="__('Add filter')" :label="__('Add filter')"
> iconLeft="plus"
<template #prefix> @click="togglePopover()"
<FeatherIcon name="plus" class="h-4" /> />
</template>
</Button>
</template> </template>
<template #item-label="{ option }"> <template #item-label="{ option }">
<Tooltip :text="option.value" :hover-delay="1"> <Tooltip :text="option.value" :hover-delay="1">
@ -124,11 +122,7 @@
:loading="updateQuickFilters.loading" :loading="updateQuickFilters.loading"
@click="saveQuickFilters" @click="saveQuickFilters"
/> />
<Button @click="customizeQuickFilter = false"> <Button icon="x" @click="customizeQuickFilter = false" />
<template #icon>
<FeatherIcon name="x" class="h-4 w-4" />
</template>
</Button>
</div> </div>
</div> </div>
<div v-else class="flex items-center justify-between gap-2 px-5 py-4"> <div v-else class="flex items-center justify-between gap-2 px-5 py-4">
@ -157,11 +151,12 @@
<Button :label="__('Save Changes')" @click="saveView" /> <Button :label="__('Save Changes')" @click="saveView" />
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<Button :label="__('Refresh')" @click="reload()" :loading="isLoading"> <Button
<template #icon> :tooltip="__('Refresh')"
<RefreshIcon class="h-4 w-4" /> :icon="RefreshIcon"
</template> :loading="isLoading"
</Button> @click="reload()"
/>
<GroupBy <GroupBy
v-if="route.params.viewType === 'group_by'" v-if="route.params.viewType === 'group_by'"
v-model="list" v-model="list"
@ -194,6 +189,7 @@
/> />
<Dropdown <Dropdown
v-if="route.params.viewType !== 'kanban' || isManager()" v-if="route.params.viewType !== 'kanban' || isManager()"
placement="right"
:options="[ :options="[
{ {
group: __('Options'), group: __('Options'),
@ -218,7 +214,7 @@
]" ]"
> >
<template #default> <template #default>
<Button icon="more-horizontal" /> <Button :tooltip="__('More Options')" icon="more-horizontal" />
</template> </template>
</Dropdown> </Dropdown>
</div> </div>
@ -1088,7 +1084,7 @@ function updatePageLength(value, loadMore = false) {
} }
// View Actions // View Actions
const viewActions = (view) => { const viewActions = (view, close) => {
let isStandard = typeof view.name === 'string' let isStandard = typeof view.name === 'string'
let _view = getView(view.name) let _view = getView(view.name)
@ -1112,7 +1108,7 @@ const viewActions = (view) => {
{ {
label: __('Duplicate'), label: __('Duplicate'),
icon: () => h(DuplicateIcon, { class: 'h-4 w-4' }), icon: () => h(DuplicateIcon, { class: 'h-4 w-4' }),
onClick: () => duplicateView(_view), onClick: () => duplicateView(_view, close),
}, },
], ],
}, },
@ -1130,7 +1126,7 @@ const viewActions = (view) => {
actions[0].items.push({ actions[0].items.push({
label: __('Edit'), label: __('Edit'),
icon: () => h(EditIcon, { class: 'h-4 w-4' }), icon: () => h(EditIcon, { class: 'h-4 w-4' }),
onClick: () => editView(_view), onClick: () => editView(_view, close),
}) })
if (!_view.public) { if (!_view.public) {
@ -1213,17 +1209,19 @@ function setAsDefault(v) {
}) })
} }
function duplicateView(v) { function duplicateView(v, close) {
v.label = v.label + __(' (New)') v.label = v.label + __(' (New)')
viewModalObj.value = v viewModalObj.value = v
viewModalObj.value.mode = 'duplicate' viewModalObj.value.mode = 'duplicate'
showViewModal.value = true showViewModal.value = true
close()
} }
function editView(v) { function editView(v, close) {
viewModalObj.value = v viewModalObj.value = v
viewModalObj.value.mode = 'edit' viewModalObj.value.mode = 'edit'
showViewModal.value = true showViewModal.value = true
close()
} }
function publicView(v) { function publicView(v) {

View File

@ -8,9 +8,12 @@
v-if="callLogsListView?.customListActions" v-if="callLogsListView?.customListActions"
:actions="callLogsListView.customListActions" :actions="callLogsListView.customListActions"
/> />
<Button variant="solid" :label="__('Create')" @click="createCallLog"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> variant="solid"
</Button> :label="__('Create')"
iconLeft="plus"
@click="createCallLog"
/>
</template> </template>
</LayoutHeader> </LayoutHeader>
<ViewControls <ViewControls

View File

@ -93,17 +93,14 @@
v-if="callEnabled && contact.doc.mobile_no" v-if="callEnabled && contact.doc.mobile_no"
:label="__('Make Call')" :label="__('Make Call')"
size="sm" size="sm"
:iconLeft="PhoneIcon"
@click="callEnabled && makeCall(contact.doc.mobile_no)" @click="callEnabled && makeCall(contact.doc.mobile_no)"
> />
<template #prefix>
<PhoneIcon class="h-4 w-4" />
</template>
</Button>
<Button <Button
:label="__('Delete')" :label="__('Delete')"
theme="red" theme="red"
size="sm" size="sm"
icon-left="trash-2" iconLeft="trash-2"
@click="deleteContact()" @click="deleteContact()"
/> />
</div> </div>

View File

@ -11,10 +11,9 @@
<Button <Button
variant="solid" variant="solid"
:label="__('Create')" :label="__('Create')"
iconLeft="plus"
@click="showContactModal = true" @click="showContactModal = true"
> />
<template #prefix><FeatherIcon name="plus" class="h-4" /></template>
</Button>
</template> </template>
</LayoutHeader> </LayoutHeader>
<ViewControls <ViewControls
@ -57,9 +56,11 @@
> >
<ContactsIcon class="h-10 w-10" /> <ContactsIcon class="h-10 w-10" />
<span>{{ __('No {0} Found', [__('Contacts')]) }}</span> <span>{{ __('No {0} Found', [__('Contacts')]) }}</span>
<Button :label="__('Create')" @click="showContactModal = true"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> :label="__('Create')"
</Button> iconLeft="plus"
@click="showContactModal = true"
/>
</div> </div>
</div> </div>
<ContactModal <ContactModal

View File

@ -8,36 +8,27 @@
<Button <Button
v-if="!editing" v-if="!editing"
:label="__('Refresh')" :label="__('Refresh')"
:iconLeft="LucideRefreshCcw"
@click="dashboardItems.reload" @click="dashboardItems.reload"
> />
<template #prefix>
<LucideRefreshCcw class="size-4" />
</template>
</Button>
<Button <Button
v-if="!editing && isAdmin()" v-if="!editing && isAdmin()"
:label="__('Edit')" :label="__('Edit')"
:iconLeft="LucidePenLine"
@click="enableEditing" @click="enableEditing"
> />
<template #prefix>
<LucidePenLine class="size-4" />
</template>
</Button>
<Button <Button
v-if="editing" v-if="editing"
:label="__('Chart')" :label="__('Chart')"
icon-left="plus" iconLeft="plus"
@click="showAddChartModal = true" @click="showAddChartModal = true"
/> />
<Button <Button
v-if="editing && isAdmin()" v-if="editing && isAdmin()"
:label="__('Reset to default')" :label="__('Reset to default')"
:iconLeft="LucideUndo2"
@click="resetToDefault" @click="resetToDefault"
> />
<template #prefix>
<LucideUndo2 class="size-4" />
</template>
</Button>
<Button v-if="editing" :label="__('Cancel')" @click="cancel" /> <Button v-if="editing" :label="__('Cancel')" @click="cancel" />
<Button <Button
v-if="editing" v-if="editing"
@ -65,11 +56,7 @@
iconRight: 'chevron-down', iconRight: 'chevron-down',
iconLeft: 'calendar', iconLeft: 'calendar',
}" }"
> />
<template #prefix>
<LucideCalendar class="size-4 text-ink-gray-5 mr-2" />
</template>
</Dropdown>
<DateRangePicker <DateRangePicker
v-else v-else
class="!w-48" class="!w-48"

View File

@ -18,26 +18,19 @@
/> />
<AssignTo v-model="assignees.data" doctype="CRM Deal" :docname="dealId" /> <AssignTo v-model="assignees.data" doctype="CRM Deal" :docname="dealId" />
<Dropdown <Dropdown
v-if="doc" v-if="doc && document.statuses"
:options=" :options="statuses"
statusOptions( placement="right"
'deal',
document.statuses?.length ? document.statuses : document._statuses,
triggerStatusChange,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button v-if="doc.status" :label="doc.status"> <Button
v-if="doc.status"
:label="doc.status"
:iconRight="open ? 'chevron-up' : 'chevron-down'"
>
<template #prefix> <template #prefix>
<IndicatorIcon :class="getDealStatus(doc.status).color" /> <IndicatorIcon :class="getDealStatus(doc.status).color" />
</template> </template>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4"
/>
</template>
</Button> </Button>
</template> </template>
</Dropdown> </Dropdown>
@ -83,54 +76,44 @@
</div> </div>
</Tooltip> </Tooltip>
<div class="flex gap-1.5"> <div class="flex gap-1.5">
<Tooltip v-if="callEnabled" :text="__('Make a call')"> <Button
<div> v-if="callEnabled"
<Button @click="triggerCall"> :tooltip="__('Make a call')"
<template #icon><PhoneIcon /></template> :icon="PhoneIcon"
</Button> @click="triggerCall"
</div> />
</Tooltip>
<Tooltip :text="__('Send an email')"> <Button
<div> :tooltip="__('Send an email')"
<Button :icon="Email2Icon"
@click=" @click="
doc.email ? openEmailBox() : toast.error(__('No email set')) doc.email ? openEmailBox() : toast.error(__('No email set'))
" "
> />
<template #icon><Email2Icon /></template>
</Button> <Button
</div> :tooltip="__('Go to website')"
</Tooltip> :icon="LinkIcon"
<Tooltip :text="__('Go to website')"> @click="
<div> doc.website
<Button ? openWebsite(doc.website)
@click=" : toast.error(__('No website set'))
doc.website "
? openWebsite(doc.website) />
: toast.error(__('No website set'))
" <Button
> :tooltip="__('Attach a file')"
<template #icon><LinkIcon /></template> :icon="AttachmentIcon"
</Button> @click="showFilesUploader = true"
</div> />
</Tooltip>
<Tooltip :text="__('Attach a file')"> <Button
<div> :tooltip="__('Delete')"
<Button @click="showFilesUploader = true"> variant="subtle"
<template #icon><AttachmentIcon /></template> icon="trash-2"
</Button> theme="red"
</div> @click="deleteDeal"
</Tooltip> />
<Tooltip :text="__('Delete')">
<div>
<Button
@click="deleteDeal"
variant="subtle"
icon="trash-2"
theme="red"
/>
</div>
</Tooltip>
</div> </div>
</div> </div>
</div> </div>
@ -233,26 +216,22 @@
</Dropdown> </Dropdown>
<Button <Button
variant="ghost" variant="ghost"
:tooltip="__('View contact')"
:icon="ArrowUpRightIcon"
@click=" @click="
router.push({ router.push({
name: 'Contact', name: 'Contact',
params: { contactId: contact.name }, params: { contactId: contact.name },
}) })
" "
> />
<template #icon> <Button
<ArrowUpRightIcon class="h-4 w-4" /> variant="ghost"
</template> class="transition-all duration-300 ease-in-out"
</Button> :class="{ 'rotate-90': opened }"
<Button variant="ghost" @click="toggle()"> icon="chevron-right"
<template #icon> @click="toggle()"
<FeatherIcon />
name="chevron-right"
class="h-4 w-4 text-ink-gray-9 transition-all duration-300 ease-in-out"
:class="{ 'rotate-90': opened }"
/>
</template>
</Button>
</div> </div>
</div> </div>
</template> </template>
@ -526,6 +505,13 @@ const title = computed(() => {
return doc.value?.[t] || props.dealId return doc.value?.[t] || props.dealId
}) })
const statuses = computed(() => {
let customStatuses = document.statuses?.length
? document.statuses
: document._statuses || []
return statusOptions('deal', customStatuses, triggerStatusChange)
})
usePageMeta(() => { usePageMeta(() => {
return { return {
title: title.value, title: title.value,

View File

@ -11,10 +11,9 @@
<Button <Button
variant="solid" variant="solid"
:label="__('Create')" :label="__('Create')"
iconLeft="plus"
@click="showDealModal = true" @click="showDealModal = true"
> />
<template #prefix><FeatherIcon name="plus" class="h-4" /></template>
</Button>
</template> </template>
</LayoutHeader> </LayoutHeader>
<ViewControls <ViewControls
@ -233,9 +232,11 @@
> >
<DealsIcon class="h-10 w-10" /> <DealsIcon class="h-10 w-10" />
<span>{{ __('No {0} Found', [__('Deals')]) }}</span> <span>{{ __('No {0} Found', [__('Deals')]) }}</span>
<Button :label="__('Create')" @click="showDealModal = true"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> :label="__('Create')"
</Button> iconLeft="plus"
@click="showDealModal = true"
/>
</div> </div>
</div> </div>
<DealModal <DealModal

View File

@ -3,11 +3,12 @@
class="grid h-full place-items-center px-4 py-20 text-center text-lg text-ink-gray-5" class="grid h-full place-items-center px-4 py-20 text-center text-lg text-ink-gray-5"
> >
<div class="space-y-2"> <div class="space-y-2">
<div>Invalid page or not permitted to access</div> <div>{{ __('Invalid page or not permitted to access') }}</div>
<Button :route="{ name: 'Leads' }"> <Button
<template #prefix><LeadsIcon class="w-4" /></template> :route="{ name: 'Leads' }"
Leads :label="__('Leads')"
</Button> :iconLeft="LeadsIcon"
/>
</div> </div>
</div> </div>
</template> </template>

View File

@ -18,26 +18,19 @@
/> />
<AssignTo v-model="assignees.data" doctype="CRM Lead" :docname="leadId" /> <AssignTo v-model="assignees.data" doctype="CRM Lead" :docname="leadId" />
<Dropdown <Dropdown
v-if="doc" v-if="doc && document.statuses"
:options=" :options="statuses"
statusOptions( placement="right"
'lead',
document.statuses?.length ? document.statuses : document._statuses,
triggerStatusChange,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button v-if="doc.status" :label="doc.status"> <Button
v-if="doc.status"
:label="doc.status"
:iconRight="open ? 'chevron-up' : 'chevron-down'"
>
<template #prefix> <template #prefix>
<IndicatorIcon :class="getLeadStatus(doc.status).color" /> <IndicatorIcon :class="getLeadStatus(doc.status).color" />
</template> </template>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4"
/>
</template>
</Button> </Button>
</template> </template>
</Dropdown> </Dropdown>
@ -125,71 +118,48 @@
</div> </div>
</Tooltip> </Tooltip>
<div class="flex gap-1.5"> <div class="flex gap-1.5">
<Tooltip v-if="callEnabled" :text="__('Make a call')"> <Button
<div> v-if="callEnabled"
<Button :tooltip="__('Make a call')"
@click=" :icon="PhoneIcon"
() => @click="
doc.mobile_no () =>
? makeCall(doc.mobile_no) doc.mobile_no
: toast.error(__('No phone number set')) ? makeCall(doc.mobile_no)
" : toast.error(__('No phone number set'))
> "
<template #icon> />
<PhoneIcon />
</template> <Button
</Button> :tooltip="__('Send an email')"
</div> :icon="Email2Icon"
</Tooltip> @click="
<Tooltip :text="__('Send an email')"> doc.email ? openEmailBox() : toast.error(__('No email set'))
<div> "
<Button />
@click=" <Button
doc.email :tooltip="__('Go to website')"
? openEmailBox() :icon="LinkIcon"
: toast.error(__('No email set')) @click="
" doc.website
> ? openWebsite(doc.website)
<template #icon> : toast.error(__('No website set'))
<Email2Icon /> "
</template> />
</Button>
</div> <Button
</Tooltip> :tooltip="__('Attach a file')"
<Tooltip :text="__('Go to website')"> :icon="AttachmentIcon"
<div> @click="showFilesUploader = true"
<Button />
@click="
doc.website <Button
? openWebsite(doc.website) :tooltip="__('Delete')"
: toast.error(__('No website set')) variant="subtle"
" theme="red"
> icon="trash-2"
<template #icon> @click="deleteLead"
<LinkIcon /> />
</template>
</Button>
</div>
</Tooltip>
<Tooltip :text="__('Attach a file')">
<div>
<Button @click="showFilesUploader = true">
<template #icon>
<AttachmentIcon />
</template>
</Button>
</div>
</Tooltip>
<Tooltip :text="__('Delete')">
<div>
<Button
@click="deleteLead"
variant="subtle"
theme="red"
icon="trash-2"
/>
</div>
</Tooltip>
</div> </div>
<ErrorMessage :message="__(error)" /> <ErrorMessage :message="__(error)" />
</div> </div>
@ -395,6 +365,13 @@ const title = computed(() => {
return doc?.[t] || props.leadId return doc?.[t] || props.leadId
}) })
const statuses = computed(() => {
let customStatuses = document.statuses?.length
? document.statuses
: document._statuses || []
return statusOptions('lead', customStatuses, triggerStatusChange)
})
usePageMeta(() => { usePageMeta(() => {
return { title: title.value, icon: brand.favicon } return { title: title.value, icon: brand.favicon }
}) })

View File

@ -11,10 +11,9 @@
<Button <Button
variant="solid" variant="solid"
:label="__('Create')" :label="__('Create')"
iconLeft="plus"
@click="showLeadModal = true" @click="showLeadModal = true"
> />
<template #prefix><FeatherIcon name="plus" class="h-4" /></template>
</Button>
</template> </template>
</LayoutHeader> </LayoutHeader>
<ViewControls <ViewControls
@ -259,9 +258,11 @@
> >
<LeadsIcon class="h-10 w-10" /> <LeadsIcon class="h-10 w-10" />
<span>{{ __('No {0} Found', [__('Leads')]) }}</span> <span>{{ __('No {0} Found', [__('Leads')]) }}</span>
<Button :label="__('Create')" @click="showLeadModal = true"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> :label="__('Create')"
</Button> iconLeft="plus"
@click="showLeadModal = true"
/>
</div> </div>
</div> </div>
<LeadModal <LeadModal

View File

@ -72,12 +72,9 @@
v-if="callEnabled && contact.doc.mobile_no" v-if="callEnabled && contact.doc.mobile_no"
:label="__('Make Call')" :label="__('Make Call')"
size="sm" size="sm"
:iconLeft="PhoneIcon"
@click="callEnabled && makeCall(contact.doc.mobile_no)" @click="callEnabled && makeCall(contact.doc.mobile_no)"
> />
<template #prefix>
<PhoneIcon class="h-4 w-4" />
</template>
</Button>
<Button <Button
:label="__('Delete')" :label="__('Delete')"
theme="red" theme="red"

View File

@ -22,16 +22,14 @@
" "
> >
<template #default="{ open }"> <template #default="{ open }">
<Button v-if="doc.status" :label="doc.status"> <Button
v-if="doc.status"
:label="doc.status"
:iconRight="open ? 'chevron-up' : 'chevron-down'"
>
<template #prefix> <template #prefix>
<IndicatorIcon :class="getDealStatus(doc.status).color" /> <IndicatorIcon :class="getDealStatus(doc.status).color" />
</template> </template>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4"
/>
</template>
</Button> </Button>
</template> </template>
</Dropdown> </Dropdown>

View File

@ -22,16 +22,14 @@
" "
> >
<template #default="{ open }"> <template #default="{ open }">
<Button v-if="doc.status" :label="doc.status"> <Button
v-if="doc.status"
:label="doc.status"
:iconRight="open ? 'chevron-up' : 'chevron-down'"
>
<template #prefix> <template #prefix>
<IndicatorIcon :class="getLeadStatus(doc.status).color" /> <IndicatorIcon :class="getLeadStatus(doc.status).color" />
</template> </template>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4"
/>
</template>
</Button> </Button>
</template> </template>
</Dropdown> </Dropdown>

View File

@ -8,18 +8,12 @@
/> />
</template> </template>
<template #right-header> <template #right-header>
<Tooltip :text="__('Mark all as read')"> <Button
<div> :tooltip="__('Mark all as read')"
<Button :label="__('Mark all as read')"
:label="__('Mark all as read')" :iconLeft="MarkAsDoneIcon"
@click="() => mark_as_read.reload()" @click="() => mark_as_read.reload()"
> />
<template #prefix>
<MarkAsDoneIcon class="h-4 w-4" />
</template>
</Button>
</div>
</Tooltip>
</template> </template>
</LayoutHeader> </LayoutHeader>
<div class="flex flex-col overflow-hidden text-ink-gray-9"> <div class="flex flex-col overflow-hidden text-ink-gray-9">

View File

@ -72,12 +72,9 @@
:label="__('Delete')" :label="__('Delete')"
theme="red" theme="red"
size="sm" size="sm"
iconLeft="trash-2"
@click="deleteOrganization" @click="deleteOrganization"
> />
<template #prefix>
<FeatherIcon name="trash-2" class="h-4 w-4" />
</template>
</Button>
</div> </div>
<ErrorMessage :message="__(error)" /> <ErrorMessage :message="__(error)" />
</div> </div>

View File

@ -4,9 +4,12 @@
<ViewBreadcrumbs v-model="viewControls" routeName="Notes" /> <ViewBreadcrumbs v-model="viewControls" routeName="Notes" />
</template> </template>
<template #right-header> <template #right-header>
<Button variant="solid" :label="__('Create')" @click="createNote"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> variant="solid"
</Button> :label="__('Create')"
iconLeft="plus"
@click="createNote"
/>
</template> </template>
</LayoutHeader> </LayoutHeader>
<ViewControls <ViewControls
@ -90,9 +93,7 @@
> >
<NoteIcon class="h-10 w-10" /> <NoteIcon class="h-10 w-10" />
<span>{{ __('No {0} Found', [__('Notes')]) }}</span> <span>{{ __('No {0} Found', [__('Notes')]) }}</span>
<Button :label="__('Create')" @click="createNote"> <Button :label="__('Create')" iconLeft="plus" @click="createNote" />
<template #prefix><FeatherIcon name="plus" class="h-4" /></template>
</Button>
</div> </div>
</div> </div>
<NoteModal <NoteModal

View File

@ -83,19 +83,14 @@
:label="__('Delete')" :label="__('Delete')"
theme="red" theme="red"
size="sm" size="sm"
iconLeft="trash-2"
@click="deleteOrganization()" @click="deleteOrganization()"
> />
<template #prefix> <Button
<FeatherIcon name="trash-2" class="h-4 w-4" /> :tooltip="__('Open website')"
</template> icon="link"
</Button> @click="openWebsite"
<Tooltip :text="__('Open website')"> />
<div>
<Button @click="openWebsite">
<FeatherIcon name="link" class="h-4 w-4" />
</Button>
</div>
</Tooltip>
</div> </div>
</div> </div>
</template> </template>

View File

@ -11,10 +11,9 @@
<Button <Button
variant="solid" variant="solid"
:label="__('Create')" :label="__('Create')"
iconLeft="plus"
@click="showOrganizationModal = true" @click="showOrganizationModal = true"
> />
<template #prefix><FeatherIcon name="plus" class="h-4" /></template>
</Button>
</template> </template>
</LayoutHeader> </LayoutHeader>
<ViewControls <ViewControls
@ -57,9 +56,11 @@
> >
<OrganizationsIcon class="h-10 w-10" /> <OrganizationsIcon class="h-10 w-10" />
<span>{{ __('No {0} Found', [__('Organizations')]) }}</span> <span>{{ __('No {0} Found', [__('Organizations')]) }}</span>
<Button :label="__('Create')" @click="showOrganizationModal = true"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> :label="__('Create')"
</Button> iconLeft="plus"
@click="showOrganizationModal = true"
/>
</div> </div>
</div> </div>
<OrganizationModal <OrganizationModal

View File

@ -8,9 +8,12 @@
v-if="tasksListView?.customListActions" v-if="tasksListView?.customListActions"
:actions="tasksListView.customListActions" :actions="tasksListView.customListActions"
/> />
<Button variant="solid" :label="__('Create')" @click="createTask"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> variant="solid"
</Button> :label="__('Create')"
iconLeft="plus"
@click="createTask"
/>
</template> </template>
</LayoutHeader> </LayoutHeader>
<ViewControls <ViewControls
@ -120,8 +123,8 @@
<div class="flex gap-2 items-center justify-between"> <div class="flex gap-2 items-center justify-between">
<div> <div>
<Button <Button
class="-ml-2"
v-if="getRow(itemName, 'reference_docname').label" v-if="getRow(itemName, 'reference_docname').label"
class="-ml-2"
variant="ghost" variant="ghost"
size="sm" size="sm"
:label=" :label="
@ -129,17 +132,14 @@
? __('Deal') ? __('Deal')
: __('Lead') : __('Lead')
" "
:iconRight="ArrowUpRightIcon"
@click.stop=" @click.stop="
redirect( redirect(
getRow(itemName, 'reference_doctype').label, getRow(itemName, 'reference_doctype').label,
getRow(itemName, 'reference_docname').label, getRow(itemName, 'reference_docname').label,
) )
" "
> />
<template #suffix>
<ArrowUpRightIcon class="h-4 w-4" />
</template>
</Button>
</div> </div>
<Dropdown <Dropdown
class="flex items-center gap-2" class="flex items-center gap-2"
@ -182,9 +182,11 @@
> >
<Email2Icon class="h-10 w-10" /> <Email2Icon class="h-10 w-10" />
<span>{{ __('No {0} Found', [__('Tasks')]) }}</span> <span>{{ __('No {0} Found', [__('Tasks')]) }}</span>
<Button :label="__('Create')" @click="showTaskModal = true"> <Button
<template #prefix><FeatherIcon name="plus" class="h-4" /></template> :label="__('Create')"
</Button> iconLeft="plus"
@click="showTaskModal = true"
/>
</div> </div>
</div> </div>
<TaskModal <TaskModal

639
yarn.lock
View File

@ -1089,6 +1089,14 @@
"@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/remapping@^2.3.5":
version "2.3.5"
resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
dependencies:
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.1.0": "@jridgewell/resolve-uri@^3.1.0":
version "3.1.2" version "3.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
@ -1261,213 +1269,208 @@
dependencies: dependencies:
"@tanstack/virtual-core" "3.13.4" "@tanstack/virtual-core" "3.13.4"
"@tiptap/core@^2.10.3": "@tiptap/core@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.10.3.tgz#7744abd4a954f35265af351f1be9b545e819c66d" resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.26.1.tgz#8f97c223629972221d4175e4779f6ee955c41a37"
integrity sha512-wAG/0/UsLeZLmshWb6rtWNXKJftcmnned91/HLccHVQAuQZ1UWH+wXeQKu/mtodxEO7JcU2mVPR9mLGQkK0McQ== integrity sha512-fymyd/XZvYiHjBoLt1gxs024xP/LY26d43R1vluYq7AHBL/7DE3ywzy+1GEsGyAv5Je2L0KBhNIR/izbq3Kaqg==
"@tiptap/core@^2.11.7": "@tiptap/extension-blockquote@^2.26.1":
version "2.12.0" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.12.0.tgz#e0bc9255865db53682e83d843c8fef19596a8899" resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.26.1.tgz#8ad2b3c119ff22430432ef46c852c135c156d63b"
integrity sha512-3qX8oGVKFFZzQ0vit+ZolR6AJIATBzmEmjAA0llFhWk4vf3v64p1YcXcJsOBsr5scizJu5L6RYWEFatFwqckRg== integrity sha512-viQ6AHRhjCYYipKK6ZepBzwZpkuMvO9yhRHeUZDvlSOAh8rvsUTSre0y74nu8QRYUt4a44lJJ6BpphJK7bEgYA==
"@tiptap/extension-blockquote@^2.10.3": "@tiptap/extension-bold@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.10.3.tgz#ee29925930ac9a5b129d3ad262bb45afcc23b318" resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.26.1.tgz#1218b847d360d69b6fc9e30596991bc53bc8fb98"
integrity sha512-u9Mq4r8KzoeGVT8ms6FQDIMN95dTh3TYcT7fZpwcVM96mIl2Oyt+Bk66mL8z4zuFptfRI57Cu9QdnHEeILd//w== integrity sha512-zCce9PRuTNhadFir71luLo99HERDpGJ0EEflGm7RN8I1SnNi9gD5ooK42BOIQtejGCJqg3hTPZiYDJC2hXvckQ==
"@tiptap/extension-bold@^2.10.3": "@tiptap/extension-bubble-menu@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.10.3.tgz#6ffdeed5d1b2c7bd2a248b327083f3db89c02f87" resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.26.1.tgz#7d78abb95bfc96468b40819ec00e2770ddcf63ad"
integrity sha512-xnF1tS2BsORenr11qyybW120gHaeHKiKq+ZOP14cGA0MsriKvWDnaCSocXP/xMEYHy7+2uUhJ0MsKkHVj4bPzQ== integrity sha512-oHevUcZbTMFOTpdCEo4YEDe044MB4P1ZrWyML8CGe5tnnKdlI9BN03AXpI1mEEa5CA3H1/eEckXx8EiCgYwQ3Q==
"@tiptap/extension-bubble-menu@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.10.3.tgz#e7f2fdddd6ef4310f9a18bc8df79f910ab26c688"
integrity sha512-e9a4yMjQezuKy0rtyyzxbV2IAE1bm1PY3yoZEFrcaY0o47g1CMUn2Hwe+9As2HdntEjQpWR7NO1mZeKxHlBPYA==
dependencies: dependencies:
tippy.js "^6.3.7" tippy.js "^6.3.7"
"@tiptap/extension-bullet-list@^2.10.3": "@tiptap/extension-bullet-list@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.10.3.tgz#0a17343aaf64679327de87785918bcdb04744edf" resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.26.1.tgz#b92170ca5d0b3404599799277fd73a124e81d093"
integrity sha512-PTkwJOVlHi4RR4Wrs044tKMceweXwNmWA6EoQ93hPUVtQcwQL990Es5Izp+i88twTPLuGD9dH+o9QDyH9SkWdA== integrity sha512-HHakuV4ckYCDOnBbne088FvCEP4YICw+wgPBz/V2dfpiFYQ4WzT0LPK9s7OFMCN+ROraoug+1ryN1Z1KdIgujQ==
"@tiptap/extension-code-block-lowlight@^2.11.5": "@tiptap/extension-code-block-lowlight@^2.26.1":
version "2.11.5" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.11.5.tgz#62c05a70ec1f0b47e257a9345253031650ab014b" resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.26.1.tgz#42033f833906de3cf66263598dc4cad70fe3651d"
integrity sha512-EIE+mAGsp8C69dI0Yyg+VH1x36rgyPJc93SfA7h4xFF6Oth18z4YhJtiLaZcwCMyOOVs2efApZ0R3/Fnz2VlqA== integrity sha512-yptuTPYAzVMKHUTwNKYveuu0rYHYyFknPz3O2++PWeeBGxkNB+T6LhwZ/JhXceHcZxzlGyka9r2mXR7pslhugw==
"@tiptap/extension-code-block@^2.10.3": "@tiptap/extension-code-block@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.10.3.tgz#5ff1b1e563c4eda44677df444c523de1e5258fa4" resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.26.1.tgz#dd6f9ec59440844f8e0ab0b33a75ff8ab6b6669f"
integrity sha512-yiDVNg22fYkzsFk5kBlDSHcjwVJgajvO/M5fDXA+Hfxwo2oNcG6aJyyHXFe+UaXTVjdkPej0J6kcMKrTMCiFug== integrity sha512-/TDDOwONl0qEUc4+B6V9NnWtSjz95eg7/8uCb8Y8iRbGvI9vT4/znRKofFxstvKmW4URu/H74/g0ywV57h0B+A==
"@tiptap/extension-code-block@^2.11.9": "@tiptap/extension-code@^2.26.1":
version "2.12.0" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.12.0.tgz#73bceaa90ba54de65ade42db5a28cc299c16158b" resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.26.1.tgz#ed289955423da20faa6ef4c81472835ac5fe1574"
integrity sha512-1D7cYAjgxEFHdfC/35Ooi4GqWKB5sszbW8iI7N16XILNln26xb0d5KflXqYrwr9CN/ZnZoCl2o6YsP7xEObcZA== integrity sha512-GU9deB1A/Tr4FMPu71CvlcjGKwRhGYz60wQ8m4aM+ELZcVIcZRa1ebR8bExRIEWnvRztQuyRiCQzw2N0xQJ1QQ==
"@tiptap/extension-code@^2.10.3": "@tiptap/extension-color@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.10.3.tgz#b9fb04be2d51760f011ec7a060d4e2e3eefe392c" resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.26.1.tgz#075386150a4457d03c85371a88205c838fc2bfae"
integrity sha512-JyLbfyY3cPctq9sVdpcRWTcoUOoq3/MnGE1eP6eBNyMTHyBPcM9TPhOkgj+xkD1zW/884jfelB+wa70RT/AMxQ== integrity sha512-lsPw3qpQNes1rHpxBtsV9XniN1dEjYd2nVTpQHGE4XLNwfE5+ejm6ySs8qVLM7+EXWcjANLLh4UA3zqkX6t6HA==
"@tiptap/extension-color@^2.0.3": "@tiptap/extension-document@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.10.3.tgz#97e77235dc20adc96c1034b48cfe7ce20040864d" resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.26.1.tgz#3e65e4833fee138e5afaed4be586d75db10cb8b6"
integrity sha512-FC2hPMSQ4w9UmO9kJCAdoU7gHpDbJ6MeJAmikB9EPp16dbGwFLrZm9TZ/4pv74fGfVm0lv720316ALOEgPEDjQ== integrity sha512-2P2IZp1NRAE+21mRuFBiP3X2WKfZ6kUC23NJKpn8bcOamY3obYqCt0ltGPhE4eR8n8QAl2fI/3jIgjR07dC8ow==
"@tiptap/extension-document@^2.10.3": "@tiptap/extension-dropcursor@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.10.3.tgz#2ba039932af67c85475870697495b099d9983a1d" resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.26.1.tgz#2eff232f3ab50816ba7182275f84f475a88b4443"
integrity sha512-6i8+xbS2zB6t8iFzli1O/QB01MmwyI5Hqiiv4m5lOxqavmJwLss2sRhoMC2hB3CyFg5UmeODy/f/RnI6q5Vixg== integrity sha512-JkDQU2ZYFOuT5mNYb8OiWGwD1HcjbtmX8tLNugQbToECmz9WvVPqJmn7V/q8VGpP81iEECz/IsyRmuf2kSD4uA==
"@tiptap/extension-dropcursor@^2.10.3": "@tiptap/extension-floating-menu@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.10.3.tgz#c5484e16df98f3c43c9f585c5686b38808c4615b" resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.26.1.tgz#4be572fa98f356d44b1817cff5cd0db819f45c01"
integrity sha512-wzWf82ixWzZQr0hxcf/A0ul8NNxgy1N63O+c56st6OomoLuKUJWOXF+cs9O7V+/5rZKWdbdYYoRB5QLvnDBAlQ== integrity sha512-OJF+H6qhQogVTMedAGSWuoL1RPe3LZYXONuFCVyzHnvvMpK+BP1vm180E2zDNFnn/DVA+FOrzNGpZW7YjoFH1w==
"@tiptap/extension-floating-menu@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.10.3.tgz#5ce1613d79d80182b9b92f77ef7c429a8dc6b88a"
integrity sha512-Prg8rYLxeyzHxfzVu1mDkkUWMnD9ZN3y370O/1qy55e+XKVw9jFkTSuz0y0+OhMJG6bulYpDUMtb+N3+2xOWlQ==
dependencies: dependencies:
tippy.js "^6.3.7" tippy.js "^6.3.7"
"@tiptap/extension-gapcursor@^2.10.3": "@tiptap/extension-gapcursor@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.10.3.tgz#6a68027d41fb77707104551b2886146253a9461b" resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.26.1.tgz#7a5ebd84d4495aa8403ececd1ace51d3ba9ab139"
integrity sha512-FskZi2DqDSTH1WkgLF2OLy0xU7qj3AgHsKhVsryeAtld4jAK5EsonneWgaipbz0e/MxuIvc1oyacfZKABpLaNg== integrity sha512-KOiMZc3PwJS3hR0nSq5d0TJi2jkNZkLZElcT6pCEnhRHzPH6dRMu9GM5Jj798ZRUy0T9UFcKJalFZaDxnmRnpg==
"@tiptap/extension-hard-break@^2.10.3": "@tiptap/extension-hard-break@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.10.3.tgz#1fd1ea91e57c018747e54516eaca963e578af6a4" resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.26.1.tgz#70226e2b63e2252a74f6e59b5c001a4c02e0c1e5"
integrity sha512-2rFlimUKAgKDwT6nqAMtPBjkrknQY8S7oBNyIcDOUGyFkvbDUl3Jd0PiC929S5F3XStJRppnMqhpNDAlWmvBLA== integrity sha512-d6uStdNKi8kjPlHAyO59M6KGWATNwhLCD7dng0NXfwGndc22fthzIk/6j9F6ltQx30huy5qQram6j3JXwNACoA==
"@tiptap/extension-heading@^2.10.3": "@tiptap/extension-heading@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.10.3.tgz#bf8efb3a580c75b86dce505a63f1ca7450a9aaea" resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.26.1.tgz#49d1e8f2d10eb1c06bf348d7cb9d131097d65f78"
integrity sha512-AlxXXPCWIvw8hQUDFRskasj32iMNB8Sb19VgyFWqwvntGs2/UffNu8VdsVqxD2HpZ0g5rLYCYtSW4wigs9R3og== integrity sha512-KSzL8WZV3pjJG9ke4RaU70+B5UlYR2S6olNt5UCAawM+fi11mobVztiBoC19xtpSVqIXC1AmXOqUgnuSvmE4ZA==
"@tiptap/extension-heading@^2.12.0": "@tiptap/extension-highlight@^2.26.1":
version "2.14.0" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.14.0.tgz#c5a9dc761712e9c87073ba8446548cbe4d403360" resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.26.1.tgz#9c5aca076d146332930882c0fad7cbe47026c681"
integrity sha512-vM//6G3Ox3mxPv9eilhrDqylELCc8kEP1aQ4xUuOw7vCidjNtGggOa1ERnnpV2dCa2A9E8y4FHtN4Xh29stXQg== integrity sha512-9eW2UqDqeAKSDIiL6SqcPSDCQAdU5qQmRMsJlShOM7Fu1aU71b1ewhUP9YioUCanciR99tqNsk/n3LAe0w5XdA==
"@tiptap/extension-highlight@^2.0.3": "@tiptap/extension-history@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.10.3.tgz#d94667d435d9dc556b06e7b764449dc2a6c18743" resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.26.1.tgz#de8e8a5ebf08cbbccb6dec11291128843a2d24e6"
integrity sha512-srMOdpUTcp1yPGmUqgKOkbmTpCYOF6Q/8CnquDkhrvK7Gyphj+n8TocrKiloaRYZKcoQWtmb+kcVPaHhHMzsWQ== integrity sha512-m6YR1gkkauIDo3PRl0gP+7Oc4n5OqDzcjVh6LvWREmZP8nmi94hfseYbqOXUb6RPHIc0JKF02eiRifT4MSd2nw==
"@tiptap/extension-history@^2.10.3": "@tiptap/extension-horizontal-rule@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.10.3.tgz#86ddbdaaa1573d4461c3a925185c4ebd9aec8079" resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.26.1.tgz#5c0c635d4444f38cb70e721d06fbe2d47a79982c"
integrity sha512-HaSiMdx9Im9Pb9qGlVud7W8bweRDRMez33Uzs5a2x0n1RWkelfH7TwYs41Y3wus8Ujs7kw6qh7jyhvPpQBKaSA== integrity sha512-mT6baqOhs/NakgrAeDeed194E/ZJFGL692H0C7f1N7WDRaWxUu2oR0LrnRqSH5OyPjELkzu6nQnNy0+0tFGHHg==
"@tiptap/extension-horizontal-rule@^2.10.3": "@tiptap/extension-image@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.10.3.tgz#b2b6e47896ad12ef6747816bc11b388a53480614" resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.26.1.tgz#1b71633f31a7c53c4570f94e1068ceb46fe93224"
integrity sha512-1a2IWhD00tgUNg/91RLnBvfENL7DLCui5L245+smcaLu+OXOOEpoBHawx59/M4hEpsjqvRRM79TzO9YXfopsPw== integrity sha512-96+MaYBJebQlR/ik5W72GLUfXdEoxFs+6jsoERxbM5qEdhb7TEnodBFtWZOwgDO27kFd6rSNZuW9r5KJNtljEg==
"@tiptap/extension-image@^2.0.3": "@tiptap/extension-italic@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.10.3.tgz#88f18344bcb8878cd47504e3eb592ced5da1e32f" resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.26.1.tgz#cd798d5e410d112f70aaea2c7eb30716f4a483c6"
integrity sha512-YIjAF5CwDkMe28OQ5pvnmdRgbJ9JcGMIHY1kyqNunSf2iwphK+6SWz9UEIkDFiT7AsRZySqxFSq93iK1XyTifw== integrity sha512-pOs6oU4LyGO89IrYE4jbE8ZYsPwMMIiKkYfXcfeD9NtpGNBnjeVXXF5I9ndY2ANrCAgC8k58C3/powDRf0T2yA==
"@tiptap/extension-italic@^2.10.3": "@tiptap/extension-link@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.10.3.tgz#0efb940c572e47bd03e7e50a7ce745b60040771d" resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.26.1.tgz#8e479556b08aa42e2ac9369d45c30c281051a45a"
integrity sha512-wAiO6ZxoHx2H90phnKttLWGPjPZXrfKxhOCsqYrK8BpRByhr48godOFRuGwYnKaiwoVjpxc63t+kDJDWvqmgMw== integrity sha512-7yfum5Jymkue/uOSTQPt2SmkZIdZx7t3QhZLqBU7R9ettkdSCBgEGok6N+scJM1R1Zes+maSckLm0JZw5BKYNA==
"@tiptap/extension-link@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.10.3.tgz#ddf8c99cc2ce664c3b53d11184cbbde70120ee78"
integrity sha512-8esKlkZBzEiNcpt7I8Cd6l1mWmCc/66pPbUq9LfnIniDXE3U+ahBf4m3TJltYFBGbiiTR/xqMtJyVHOpuLDtAw==
dependencies: dependencies:
linkifyjs "^4.1.0" linkifyjs "^4.2.0"
"@tiptap/extension-list-item@^2.10.3": "@tiptap/extension-list-item@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.10.3.tgz#a35c10a579acff63bb46a2fa9491b5f4edf00188" resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.26.1.tgz#932e041245d3a696c943e9d4a32cdf59cb386e88"
integrity sha512-9sok81gvZfSta2K1Dwrq5/HSz1jk4zHBpFqCx0oydzodGslx6X1bNxdca+eXJpXZmQIWALK7zEr4X8kg3WZsgw== integrity sha512-quOXckC73Luc3x+Dcm88YAEBW+Crh3x5uvtQOQtn2GEG91AshrvbnhGRiYnfvEN7UhWIS+FYI5liHFcRKSUKrQ==
"@tiptap/extension-mention@^2.0.3": "@tiptap/extension-mention@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.10.3.tgz#544d257f8e5fd79ac32ca6d1b29c4447a1330d9a" resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.26.1.tgz#f61a77f8b3dd99b12b9aac0a9ee8041f098b3986"
integrity sha512-h0+BrTS2HdjMfsuy6zkFIqmVGYL8w3jIG0gYaDHjWwwe/Lf2BDgOu3bZWcSr/3bKiJIwwzpOJrXssqta4TZ0yQ== integrity sha512-sBrlJ9nWjFx7oWCtt0hV192FgCBXva1zwImWbgXTCGPAjv0d5EoPymIfRgoeanAmuQjOHoKzzZnJ6bELTZhkGw==
"@tiptap/extension-ordered-list@^2.10.3": "@tiptap/extension-ordered-list@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.10.3.tgz#5ee0feb2f06a59c50e413160840f244215cc4026" resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.26.1.tgz#81e60f4b679533b736ef0fbad4263a11e1c8465e"
integrity sha512-/SFuEDnbJxy3jvi72LeyiPHWkV+uFc0LUHTUHSh20vwyy+tLrzncJfXohGbTIv5YxYhzExQYZDRD4VbSghKdlw== integrity sha512-UHKNRxq6TBnXMGFSq91knD6QaHsyyOwLOsXMzupmKM5Su0s+CRXEjfav3qKlbb9e4m7D7S/a0aPm8nC9KIXNhQ==
"@tiptap/extension-paragraph@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.10.3.tgz#128c8fcd46d2e854d214c7f566e6212f2ebff6f1"
integrity sha512-sNkTX/iN+YoleDiTJsrWSBw9D7c4vsYwnW5y/G5ydfuJMIRQMF78pWSIWZFDRNOMkgK5UHkhu9anrbCFYgBfaA==
"@tiptap/extension-paragraph@^2.12.0": "@tiptap/extension-paragraph@^2.12.0":
version "2.12.0" version "2.12.0"
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.12.0.tgz#35987cfa842f254e67ecec403441578a1b2189a1" resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.12.0.tgz#35987cfa842f254e67ecec403441578a1b2189a1"
integrity sha512-QNK5cgewCunWFxpLlbvvoO1rrLgEtNKxiY79fctP9toV+e59R+1i1Q9lXC1O5mOfDgVxCb6uFDMsqmKhFjpPog== integrity sha512-QNK5cgewCunWFxpLlbvvoO1rrLgEtNKxiY79fctP9toV+e59R+1i1Q9lXC1O5mOfDgVxCb6uFDMsqmKhFjpPog==
"@tiptap/extension-placeholder@^2.0.3": "@tiptap/extension-paragraph@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.10.3.tgz#eeb2b2f1916619e334af7d2a9d6885f77bb4ab78" resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.26.1.tgz#2e25f9e72fd5b4b34ca8e9e3c355303d86eae055"
integrity sha512-0OkwnDLguZgoiJM85cfnOySuMmPUF7qqw7DHQ+c3zwTAYnvzpvqrvpupc+2Zi9GfC1sDgr+Ajrp8imBHa6PHfA== integrity sha512-UezvM9VDRAVJlX1tykgHWSD1g3MKfVMWWZ+Tg+PE4+kizOwoYkRWznVPgCAxjmyHajxpCKRXgqTZkOxjJ9Kjzg==
"@tiptap/extension-strike@^2.10.3": "@tiptap/extension-placeholder@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.10.3.tgz#99e39c8156cad7a9dc88504ac43aa839c54ef7af" resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.26.1.tgz#a44280063978dfa86aad71dee6cad36c3a7862a0"
integrity sha512-jYoPy6F6njYp3txF3u23bgdRy/S5ATcWDO9LPZLHSeikwQfJ47nqb+EUNo5M8jIOgFBTn4MEbhuZ6OGyhnxopA== integrity sha512-MBlqbkd+63btY7Qu+SqrXvWjPwooGZDsLTtl7jp52BczBl61cq9yygglt9XpM11TFMBdySgdLHBrLtQ0B7fBlw==
"@tiptap/extension-table-cell@^2.0.3": "@tiptap/extension-strike@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.10.3.tgz#3d090c7b758428abc484e0c229318bce8bd08b5b" resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.26.1.tgz#d703acfa78455021082ccbac72b41ee9ab3f8c9b"
integrity sha512-EYzBrnq7KUAcRhshIoTmC4ED8YoF4Ei5m8ZMPOctKX+QMAagKdcrw2UxuOf4tP2xgBYx+qDsKCautepZXQiL2g== integrity sha512-CkoRH+pAi6MgdCh7K0cVZl4N2uR4pZdabXAnFSoLZRSg6imLvEUmWHfSi1dl3Z7JOvd3a4yZ4NxerQn5MWbJ7g==
"@tiptap/extension-table-header@^2.0.3": "@tiptap/extension-table-cell@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.10.3.tgz#76f0f1b3eb1d8c01b0355fa704ad75a74cd2102b" resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.26.1.tgz#c204e9eef60f77063fc432faba4dd2ef2fe79ba3"
integrity sha512-zJqzivz+VITYIFXNH09leBbkwAPuvp504rCAFL2PMa1uaME6+oiiRqZvXQrOiRkjNpOWEXH4dqvVLwkSMZoWaw== integrity sha512-0P5zY+WGFnULggJkX6+CevmFoBmVv1aUiBBXfcFuLG2mnUsS3QALQTowFtz/0/VbtbjzcOSStaGDHRJxPbk9XQ==
"@tiptap/extension-table-row@^2.0.3": "@tiptap/extension-table-header@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.10.3.tgz#66302d52a02b675b7cb674d1a586e3c2c5ff119a" resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.26.1.tgz#1d9f2d609777201725ccd5850445d5e277a427fc"
integrity sha512-l6P6BAE4SuIFdPmsRd+zGP2Ks9AhLAua7nfDlHFMWDnfOeaJu7g/t4oG++9xTojDcVDHhcIe8TJYUXfhOt2anw== integrity sha512-SAwTW9H+sjVYjoeU5z8pVDMHn3r3FCi+zp2KAxsEsmujcd7qrQdY0cAjQtWjckCq6H3sQkbICa+xlCCd7C8ZAQ==
"@tiptap/extension-table@^2.0.3": "@tiptap/extension-table-row@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.10.3.tgz#6aaecabd7f2b58baef5082e17f1907cf45998bb7" resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.26.1.tgz#40c85b430b18b89363cb59459f1992ecdac93fcd"
integrity sha512-XAvq0ptpHfuN7lQhTeew4Sqo8aKYHTqroa7cHL8I+gWJqYqKJSTGb4FAqdGIFEzHvnSsMCFbTL//kAHXvTdsHg== integrity sha512-c4oLrUfj1EVVDpbfKX36v7nnaeI4NxML2KRTQXocvcY65VCe0bPQh8ujpPgPcnKEzdWYdIuAX9RbEAkiYWe8Ww==
"@tiptap/extension-text-align@^2.0.3": "@tiptap/extension-table@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-align/-/extension-text-align-2.10.3.tgz#f1144210e96219bd0d8c49c78f76c3a3ab543e9b" resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.26.1.tgz#26d45cd3f68def655c51c8ccbc6a3af507bdf49c"
integrity sha512-g75sNl73gtgjP3XIcl06kvv1qw3c0rGEUD848rUU1bvlBpU3IxjkcQLgYvHmv3vpuUp9cKUkA2wa7Sv6R3fjvw== integrity sha512-LQ63CK53qx2ZsbLTB4mUX0YCoGC0GbYQ82jS3kD+K7M/mb9MCkefvDk6rA8rXF8TjfGnv6o/Fseoot8uhH3qfg==
"@tiptap/extension-text-style@^2.0.3", "@tiptap/extension-text-style@^2.10.3": "@tiptap/extension-task-item@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.10.3.tgz#fcc93de8d0479b893c2a000ad7e3dc20b944f3dd" resolved "https://registry.yarnpkg.com/@tiptap/extension-task-item/-/extension-task-item-2.26.1.tgz#060535e2c0f910fca1eb7bb0aa764ca2bd4d6584"
integrity sha512-TalYIdlF7vBA4afFhmido7AORdBbu3sV+HCByda0FiNbM6cjng3Nr9oxHOCVJy+ChqrcgF4m54zDfLmamdyu5Q== integrity sha512-b7JNeOsBqEd1p2oQ5N6Msz9fr2o73WR1WsYDC0WhECg07Goud2gQEkwWkQaLsvfcwuS746eMJK/nrT2pVEngYA==
"@tiptap/extension-text@^2.10.3": "@tiptap/extension-task-list@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.10.3.tgz#f985ebd37a2c86d621068927bceca0f05e842865" resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.26.1.tgz#5cb01a50368a2d38aa7b1ecc90b75b74b6fd3be4"
integrity sha512-7p9XiRprsRZm8y9jvF/sS929FCELJ5N9FQnbzikOiyGNUx5mdI+exVZlfvBr9xOD5s7fBLg6jj9Vs0fXPNRkPg== integrity sha512-xR4LMpMPZ6bpkZNmFvIojmNGtdGKNlKFbpvyIOgs4qhlWskbFQQVevglHjV1R8xJLic5c+byJQaAmQdQudqGng==
"@tiptap/extension-typography@^2.0.3": "@tiptap/extension-text-align@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-typography/-/extension-typography-2.10.3.tgz#7f896a4fa16a14c6a1bd54b555f7e74235939254" resolved "https://registry.yarnpkg.com/@tiptap/extension-text-align/-/extension-text-align-2.26.1.tgz#79add5084d2b9ff1c347686834f924613d6c98cb"
integrity sha512-lLUm6PSufACffAFQaK3bwoM3nFlQ/RdG21a3rKOoLWh+abYvIZ8UilYgebH9r2+DBET6UrG7I/0mBtm+L/Lheg== integrity sha512-x6mpNGELy2QtSPBoQqNgiXO9PjZoB+O2EAfXA9YRiBDSIRNOrw+7vOVpi+IgzswFmhMNgIYUVfQRud4FHUCNew==
"@tiptap/pm@^2.0.3", "@tiptap/pm@^2.10.3": "@tiptap/extension-text-style@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.10.3.tgz#c6925bafd23868800bc71e06cdfe12add7bf4943" resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.26.1.tgz#a6be329ff881df9da37d9a8c353b2b2e7b8508b3"
integrity sha512-771p53aU0KFvujvKpngvq2uAxThlEsjYaXcVVmwrhf0vxSSg+psKQEvqvWvHv/3BwkPVCGwmEKNVJZjaXFKu4g== integrity sha512-t9Nc/UkrbCfnSHEUi1gvUQ2ZPzvfdYFT5TExoV2DTiUCkhG6+mecT5bTVFGW3QkPmbToL+nFhGn4ZRMDD0SP3Q==
"@tiptap/extension-text@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.26.1.tgz#a51a11aa446d32b136851ce5173c89ad5ff0f57a"
integrity sha512-p2n8WVMd/2vckdJlol24acaTDIZAhI7qle5cM75bn01sOEZoFlSw6SwINOULrUCzNJsYb43qrLEibZb4j2LeQw==
"@tiptap/extension-typography@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-typography/-/extension-typography-2.26.1.tgz#06ce74c0f3a5cf0a4b5ed3f8e1c00098a6d8dca1"
integrity sha512-1zwKWfy7Tjutert1Vn/unN+98E0JFr5C2jx1xuesAEf4X405cQMb/zNMI44ON3xBG+aXZoTRlJuXNoYodeVSAg==
"@tiptap/pm@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.26.1.tgz#5e4bd79e60fe698fa12770b2845e5133b3333d06"
integrity sha512-8aF+mY/vSHbGFqyG663ds84b+vca5Lge3tHdTMTKazxCnhXR9dn2oQJMnZ78YZvdRbkPkMJJHti9h3K7u2UQvw==
dependencies: dependencies:
prosemirror-changeset "^2.2.1" prosemirror-changeset "^2.3.0"
prosemirror-collab "^1.3.1" prosemirror-collab "^1.3.1"
prosemirror-commands "^1.6.2" prosemirror-commands "^1.6.2"
prosemirror-dropcursor "^1.8.1" prosemirror-dropcursor "^1.8.1"
@ -1481,50 +1484,50 @@
prosemirror-schema-basic "^1.2.3" prosemirror-schema-basic "^1.2.3"
prosemirror-schema-list "^1.4.1" prosemirror-schema-list "^1.4.1"
prosemirror-state "^1.4.3" prosemirror-state "^1.4.3"
prosemirror-tables "^1.6.1" prosemirror-tables "^1.6.4"
prosemirror-trailing-node "^3.0.0" prosemirror-trailing-node "^3.0.0"
prosemirror-transform "^1.10.2" prosemirror-transform "^1.10.2"
prosemirror-view "^1.37.0" prosemirror-view "^1.37.0"
"@tiptap/starter-kit@^2.0.3": "@tiptap/starter-kit@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.10.3.tgz#2b6c3be565219eacd897f1c2d271b516d9ff6f87" resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.26.1.tgz#00a19c05491a51423aabe511f624567942bd2baa"
integrity sha512-oq8xdVIMqohSs91ofHSr7i5dCp2F56Lb9aYIAI25lZmwNwQJL2geGOYjMSfL0IC4cQHPylIuSKYCg7vRFdZmAA== integrity sha512-oziMGCds8SVQ3s5dRpBxVdEKZAmO/O//BjZ69mhA3q4vJdR0rnfLb5fTxSeQvHiqB878HBNn76kNaJrHrV35GA==
dependencies: dependencies:
"@tiptap/core" "^2.10.3" "@tiptap/core" "^2.26.1"
"@tiptap/extension-blockquote" "^2.10.3" "@tiptap/extension-blockquote" "^2.26.1"
"@tiptap/extension-bold" "^2.10.3" "@tiptap/extension-bold" "^2.26.1"
"@tiptap/extension-bullet-list" "^2.10.3" "@tiptap/extension-bullet-list" "^2.26.1"
"@tiptap/extension-code" "^2.10.3" "@tiptap/extension-code" "^2.26.1"
"@tiptap/extension-code-block" "^2.10.3" "@tiptap/extension-code-block" "^2.26.1"
"@tiptap/extension-document" "^2.10.3" "@tiptap/extension-document" "^2.26.1"
"@tiptap/extension-dropcursor" "^2.10.3" "@tiptap/extension-dropcursor" "^2.26.1"
"@tiptap/extension-gapcursor" "^2.10.3" "@tiptap/extension-gapcursor" "^2.26.1"
"@tiptap/extension-hard-break" "^2.10.3" "@tiptap/extension-hard-break" "^2.26.1"
"@tiptap/extension-heading" "^2.10.3" "@tiptap/extension-heading" "^2.26.1"
"@tiptap/extension-history" "^2.10.3" "@tiptap/extension-history" "^2.26.1"
"@tiptap/extension-horizontal-rule" "^2.10.3" "@tiptap/extension-horizontal-rule" "^2.26.1"
"@tiptap/extension-italic" "^2.10.3" "@tiptap/extension-italic" "^2.26.1"
"@tiptap/extension-list-item" "^2.10.3" "@tiptap/extension-list-item" "^2.26.1"
"@tiptap/extension-ordered-list" "^2.10.3" "@tiptap/extension-ordered-list" "^2.26.1"
"@tiptap/extension-paragraph" "^2.10.3" "@tiptap/extension-paragraph" "^2.26.1"
"@tiptap/extension-strike" "^2.10.3" "@tiptap/extension-strike" "^2.26.1"
"@tiptap/extension-text" "^2.10.3" "@tiptap/extension-text" "^2.26.1"
"@tiptap/extension-text-style" "^2.10.3" "@tiptap/extension-text-style" "^2.26.1"
"@tiptap/pm" "^2.10.3" "@tiptap/pm" "^2.26.1"
"@tiptap/suggestion@^2.0.3": "@tiptap/suggestion@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.10.3.tgz#b8ad4516a6d074bda6e1aeeed0d8eb5df3262773" resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.26.1.tgz#64b567443668ff9afb5533737f877e3604ab53ae"
integrity sha512-ReEwiPQoDTXn3RuWnj9D7Aod9dbNQz0QAoLRftWUTdbj3O2ohbvTNX6tlcfS+7x48Q+fAALiJGpp5BtctODlsA== integrity sha512-iNWJdQN7h01keNoVwyCsdI7ZX11YkrexZjCnutWK17Dd72s3NYVTmQXu7saftwddT4nDdlczNxAFosrt0zMhcg==
"@tiptap/vue-3@^2.0.3": "@tiptap/vue-3@^2.26.1":
version "2.10.3" version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/vue-3/-/vue-3-2.10.3.tgz#1b9bff45e815e42ef93bf805fd37c2d1581eeb73" resolved "https://registry.yarnpkg.com/@tiptap/vue-3/-/vue-3-2.26.1.tgz#6afb7aa4abfdad7432ead271c3448d23f233296e"
integrity sha512-eJLUpuKq3Yei3+XHba25eFvjAH6q275r+Dkz/ulStOWGwchlN8OSbcn0kBWfhr14RG8yoNvL4rZncxXvqXzvhQ== integrity sha512-GC0UP+v3KEb0nhgjIHYmWIn5ziTaRqSy8TESXOjG5aljJ8BdP+A0pbcpumB3u0QU+BLUANZqUV2r3l+V18AKYg==
dependencies: dependencies:
"@tiptap/extension-bubble-menu" "^2.10.3" "@tiptap/extension-bubble-menu" "^2.26.1"
"@tiptap/extension-floating-menu" "^2.10.3" "@tiptap/extension-floating-menu" "^2.26.1"
"@twilio/voice-errors@1.7.0": "@twilio/voice-errors@1.7.0":
version "1.7.0" version "1.7.0"
@ -1548,6 +1551,11 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
"@types/estree@^1.0.0":
version "1.0.8"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
"@types/hast@^3.0.0": "@types/hast@^3.0.0":
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa"
@ -1815,6 +1823,11 @@ acorn@^8.14.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb"
integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
acorn@^8.14.1, acorn@^8.15.0:
version "8.15.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
acorn@^8.8.2: acorn@^8.8.2:
version "8.14.0" version "8.14.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
@ -2158,6 +2171,11 @@ confbox@^0.2.1:
resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.1.tgz#ae39f2c99699afa451d00206479f15f9a1208a8b" resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.1.tgz#ae39f2c99699afa451d00206479f15f9a1208a8b"
integrity sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg== integrity sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==
confbox@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110"
integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==
convert-source-map@^2.0.0: convert-source-map@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
@ -2511,6 +2529,11 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
escape-string-regexp@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
estree-walker@^1.0.1: estree-walker@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
@ -2521,6 +2544,13 @@ estree-walker@^2.0.2:
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
estree-walker@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
dependencies:
"@types/estree" "^1.0.0"
esutils@^2.0.2: esutils@^2.0.2:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@ -2536,6 +2566,11 @@ exsolve@^1.0.1:
resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.4.tgz#7de5c75af82ecd15998328fbf5f2295883be3a39" resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.4.tgz#7de5c75af82ecd15998328fbf5f2295883be3a39"
integrity sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw== integrity sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==
exsolve@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.7.tgz#3b74e4c7ca5c5f9a19c3626ca857309fa99f9e9e"
integrity sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==
fast-deep-equal@^3.1.3: fast-deep-equal@^3.1.3:
version "3.1.3" version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@ -2616,37 +2651,39 @@ fraction.js@^4.3.7:
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
frappe-ui@^0.1.171: frappe-ui@^0.1.189:
version "0.1.171" version "0.1.189"
resolved "https://registry.yarnpkg.com/frappe-ui/-/frappe-ui-0.1.171.tgz#10c582ea62292461ff37bb0b3ac2269409a373e9" resolved "https://registry.yarnpkg.com/frappe-ui/-/frappe-ui-0.1.189.tgz#64e34475aa9cb33e43145b32a9c5e19d31607a17"
integrity sha512-hIwban7j7qa+n/F6bZ+B78jYyGGj1gnibR/k0Kdx1SYPCfMdYr2TfZA8ySpbIvqWpeYxCus6nS4MD+wf0DpUOw== integrity sha512-VaZPJ5vlbaoOozy/aetD7Qa/max/LHZdlfxaWKxya4p8ZzOwMKPe+2YfPhtiyuMtWBejM7jctcNId6hyDmmKCw==
dependencies: dependencies:
"@floating-ui/vue" "^1.1.6" "@floating-ui/vue" "^1.1.6"
"@headlessui/vue" "^1.7.14" "@headlessui/vue" "^1.7.14"
"@popperjs/core" "^2.11.2" "@popperjs/core" "^2.11.2"
"@tailwindcss/forms" "^0.5.3" "@tailwindcss/forms" "^0.5.3"
"@tailwindcss/typography" "^0.5.16" "@tailwindcss/typography" "^0.5.16"
"@tiptap/core" "^2.11.7" "@tiptap/core" "^2.26.1"
"@tiptap/extension-code-block" "^2.11.9" "@tiptap/extension-code-block" "^2.26.1"
"@tiptap/extension-code-block-lowlight" "^2.11.5" "@tiptap/extension-code-block-lowlight" "^2.26.1"
"@tiptap/extension-color" "^2.0.3" "@tiptap/extension-color" "^2.26.1"
"@tiptap/extension-heading" "^2.12.0" "@tiptap/extension-heading" "^2.26.1"
"@tiptap/extension-highlight" "^2.0.3" "@tiptap/extension-highlight" "^2.26.1"
"@tiptap/extension-image" "^2.0.3" "@tiptap/extension-image" "^2.26.1"
"@tiptap/extension-link" "^2.0.3" "@tiptap/extension-link" "^2.26.1"
"@tiptap/extension-mention" "^2.0.3" "@tiptap/extension-mention" "^2.26.1"
"@tiptap/extension-placeholder" "^2.0.3" "@tiptap/extension-placeholder" "^2.26.1"
"@tiptap/extension-table" "^2.0.3" "@tiptap/extension-table" "^2.26.1"
"@tiptap/extension-table-cell" "^2.0.3" "@tiptap/extension-table-cell" "^2.26.1"
"@tiptap/extension-table-header" "^2.0.3" "@tiptap/extension-table-header" "^2.26.1"
"@tiptap/extension-table-row" "^2.0.3" "@tiptap/extension-table-row" "^2.26.1"
"@tiptap/extension-text-align" "^2.0.3" "@tiptap/extension-task-item" "^2.26.1"
"@tiptap/extension-text-style" "^2.0.3" "@tiptap/extension-task-list" "^2.26.1"
"@tiptap/extension-typography" "^2.0.3" "@tiptap/extension-text-align" "^2.26.1"
"@tiptap/pm" "^2.0.3" "@tiptap/extension-text-style" "^2.26.1"
"@tiptap/starter-kit" "^2.0.3" "@tiptap/extension-typography" "^2.26.1"
"@tiptap/suggestion" "^2.0.3" "@tiptap/pm" "^2.26.1"
"@tiptap/vue-3" "^2.0.3" "@tiptap/starter-kit" "^2.26.1"
"@tiptap/suggestion" "^2.26.1"
"@tiptap/vue-3" "^2.26.1"
"@vueuse/core" "^10.4.1" "@vueuse/core" "^10.4.1"
dayjs "^1.11.13" dayjs "^1.11.13"
dompurify "^3.2.6" dompurify "^3.2.6"
@ -2656,18 +2693,16 @@ frappe-ui@^0.1.171:
highlight.js "^11.11.1" highlight.js "^11.11.1"
idb-keyval "^6.2.0" idb-keyval "^6.2.0"
lowlight "^3.3.0" lowlight "^3.3.0"
lucide-static "^0.479.0" lucide-static "^0.535.0"
marked "^15.0.12" marked "^15.0.12"
ora "5.4.1" ora "5.4.1"
prettier "^3.3.2" prettier "^3.3.2"
prosemirror-model "^1.25.1"
prosemirror-state "^1.4.3"
prosemirror-view "^1.39.2"
radix-vue "^1.5.3" radix-vue "^1.5.3"
reka-ui "^2.0.2" reka-ui "^2.0.2"
socket.io-client "^4.5.1" socket.io-client "^4.5.1"
tippy.js "^6.3.7" tippy.js "^6.3.7"
typescript "^5.0.2" typescript "^5.0.2"
unplugin-auto-import "^19.3.0"
unplugin-icons "^22.1.0" unplugin-icons "^22.1.0"
unplugin-vue-components "^28.4.1" unplugin-vue-components "^28.4.1"
@ -3194,6 +3229,11 @@ js-tokens@^4.0.0:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-tokens@^9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4"
integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==
jsesc@^3.0.2: jsesc@^3.0.2:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
@ -3260,12 +3300,12 @@ linkify-it@^5.0.0:
dependencies: dependencies:
uc.micro "^2.0.0" uc.micro "^2.0.0"
linkifyjs@^4.1.0: linkifyjs@^4.2.0:
version "4.2.0" version "4.3.2"
resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.2.0.tgz#9dd30222b9cbabec9c950e725ec00031c7fa3f08" resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1"
integrity sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw== integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==
local-pkg@^1.0.0: local-pkg@^1.0.0, local-pkg@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.1.tgz#f5fe74a97a3bd3c165788ee08ca9fbe998dc58dd" resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.1.tgz#f5fe74a97a3bd3c165788ee08ca9fbe998dc58dd"
integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg== integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==
@ -3338,10 +3378,10 @@ lru-cache@^5.1.1:
dependencies: dependencies:
yallist "^3.0.2" yallist "^3.0.2"
lucide-static@^0.479.0: lucide-static@^0.535.0:
version "0.479.0" version "0.535.0"
resolved "https://registry.yarnpkg.com/lucide-static/-/lucide-static-0.479.0.tgz#820318a03ab207a6242520aaf2156ff3384fd3e2" resolved "https://registry.yarnpkg.com/lucide-static/-/lucide-static-0.535.0.tgz#3d8ad25360d166a4f584d97f2c08fd9b24be30d7"
integrity sha512-E+w3/8lKFpey3lZNKZfzHQGX+t/CH/afpPDdQxjBgStZ2bXY+CxI5KFX9TW818gYndLjV43fZJ7FqAO9kTCK4A== integrity sha512-wlYTSPpeyMjLjQ5jgSAENQwVfURVf2XHV5TDp8YPCJBEyWz+FJGuGB5LYBgOFvWIDOMW+AIoiA8sNd8My/nxlw==
magic-string@^0.25.0, magic-string@^0.25.7: magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.9" version "0.25.9"
@ -3627,6 +3667,11 @@ picomatch@^4.0.2:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
picomatch@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
pify@^2.3.0: pify@^2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@ -3663,6 +3708,15 @@ pkg-types@^2.0.1:
exsolve "^1.0.1" exsolve "^1.0.1"
pathe "^2.0.3" pathe "^2.0.3"
pkg-types@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.2.0.tgz#049bf404f82a66c465200149457acf0c5fb0fb2d"
integrity sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==
dependencies:
confbox "^0.2.2"
exsolve "^1.0.7"
pathe "^2.0.3"
possible-typed-array-names@^1.0.0: possible-typed-array-names@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
@ -3744,10 +3798,10 @@ pretty-bytes@^6.0.0:
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b"
integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==
prosemirror-changeset@^2.2.1: prosemirror-changeset@^2.3.0:
version "2.2.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383" resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz#eee3299cfabc7a027694e9abdc4e85505e9dd5e7"
integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ== integrity sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==
dependencies: dependencies:
prosemirror-transform "^1.0.0" prosemirror-transform "^1.0.0"
@ -3804,7 +3858,7 @@ prosemirror-inputrules@^1.4.0:
prosemirror-state "^1.0.0" prosemirror-state "^1.0.0"
prosemirror-transform "^1.0.0" prosemirror-transform "^1.0.0"
prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.2: prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2:
version "1.2.2" version "1.2.2"
resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e" resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e"
integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==
@ -3831,17 +3885,17 @@ prosemirror-menu@^1.2.4:
prosemirror-history "^1.0.0" prosemirror-history "^1.0.0"
prosemirror-state "^1.0.0" prosemirror-state "^1.0.0"
prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.8.1: prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0:
version "1.24.1" version "1.24.1"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.24.1.tgz#b445e4f9b9cfc8c1a699215057b506842ebff1a9" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.24.1.tgz#b445e4f9b9cfc8c1a699215057b506842ebff1a9"
integrity sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg== integrity sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg==
dependencies: dependencies:
orderedmap "^2.0.0" orderedmap "^2.0.0"
prosemirror-model@^1.25.1: prosemirror-model@^1.25.0:
version "1.25.1" version "1.25.3"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.1.tgz#aeae9f1ec79fcaa76f6fc619800d91fbcf726870" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.3.tgz#c657c60a361cb1e9c9f683d19118c0af50a6f7a9"
integrity sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg== integrity sha512-dY2HdaNXlARknJbrManZ1WyUtos+AP97AmvqdOQtWtrrC5g4mohVX5DTi9rXNFSk09eczLq9GuNTtq3EfMeMGA==
dependencies: dependencies:
orderedmap "^2.0.0" orderedmap "^2.0.0"
@ -3861,7 +3915,7 @@ prosemirror-schema-list@^1.4.1:
prosemirror-state "^1.0.0" prosemirror-state "^1.0.0"
prosemirror-transform "^1.7.3" prosemirror-transform "^1.7.3"
prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, prosemirror-state@^1.4.3: prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.3:
version "1.4.3" version "1.4.3"
resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080"
integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==
@ -3870,16 +3924,16 @@ prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, pr
prosemirror-transform "^1.0.0" prosemirror-transform "^1.0.0"
prosemirror-view "^1.27.0" prosemirror-view "^1.27.0"
prosemirror-tables@^1.6.1: prosemirror-tables@^1.6.4:
version "1.6.1" version "1.7.1"
resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.1.tgz#8df27facbf7632a574afb32a665aaadf7f2ed69a" resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz#df2507f285c6c7563097b4904cb7c4b9e0cd724b"
integrity sha512-p8WRJNA96jaNQjhJolmbxTzd6M4huRE5xQ8OxjvMhQUP0Nzpo4zz6TztEiwk6aoqGBhz9lxRWR1yRZLlpQN98w== integrity sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==
dependencies: dependencies:
prosemirror-keymap "^1.1.2" prosemirror-keymap "^1.2.2"
prosemirror-model "^1.8.1" prosemirror-model "^1.25.0"
prosemirror-state "^1.3.1" prosemirror-state "^1.4.3"
prosemirror-transform "^1.2.1" prosemirror-transform "^1.10.3"
prosemirror-view "^1.13.3" prosemirror-view "^1.39.1"
prosemirror-trailing-node@^3.0.0: prosemirror-trailing-node@^3.0.0:
version "3.0.0" version "3.0.0"
@ -3889,14 +3943,21 @@ prosemirror-trailing-node@^3.0.0:
"@remirror/core-constants" "3.0.0" "@remirror/core-constants" "3.0.0"
escape-string-regexp "^4.0.0" escape-string-regexp "^4.0.0"
prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.2.1, prosemirror-transform@^1.7.3: prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.7.3:
version "1.10.2" version "1.10.2"
resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.2.tgz#8ebac4e305b586cd96595aa028118c9191bbf052" resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.2.tgz#8ebac4e305b586cd96595aa028118c9191bbf052"
integrity sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ== integrity sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ==
dependencies: dependencies:
prosemirror-model "^1.21.0" prosemirror-model "^1.21.0"
prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.37.0: prosemirror-transform@^1.10.3:
version "1.10.4"
resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz#56419eac14f9f56612c806ae46f9238648f3f02e"
integrity sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==
dependencies:
prosemirror-model "^1.21.0"
prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.37.0:
version "1.37.1" version "1.37.1"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.37.1.tgz#3ccd67cd3d831eb37a2505dd34151932462172fb" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.37.1.tgz#3ccd67cd3d831eb37a2505dd34151932462172fb"
integrity sha512-MEAnjOdXU1InxEmhjgmEzQAikaS6lF3hD64MveTPpjOGNTl87iRLA1HupC/DEV6YuK7m4Q9DHFNTjwIVtqz5NA== integrity sha512-MEAnjOdXU1InxEmhjgmEzQAikaS6lF3hD64MveTPpjOGNTl87iRLA1HupC/DEV6YuK7m4Q9DHFNTjwIVtqz5NA==
@ -3905,10 +3966,10 @@ prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, pros
prosemirror-state "^1.0.0" prosemirror-state "^1.0.0"
prosemirror-transform "^1.1.0" prosemirror-transform "^1.1.0"
prosemirror-view@^1.39.2: prosemirror-view@^1.39.1:
version "1.39.3" version "1.40.1"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.39.3.tgz#54fa4b8ab4fd75ad0075dc6dc0be1745429d5a5c" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.40.1.tgz#4a12711b45a707b240a1789d45b99df6f13e7c16"
integrity sha512-bY/7kg0LzRE7ytR0zRdSMWX3sknEjw68l836ffLPMh0OG3OYnNuBDUSF3v0vjvnzgYjgY9ZH/RypbARURlcMFA== integrity sha512-pbwUjt3G7TlsQQHDiYSupWBhJswpLVB09xXm1YiJPdkjkh9Pe7Y51XdLh5VWIZmROLY8UpUpG03lkdhm9lzIBA==
dependencies: dependencies:
prosemirror-model "^1.20.0" prosemirror-model "^1.20.0"
prosemirror-state "^1.0.0" prosemirror-state "^1.0.0"
@ -4164,6 +4225,11 @@ safe-regex-test@^1.1.0:
es-errors "^1.3.0" es-errors "^1.3.0"
is-regex "^1.2.1" is-regex "^1.2.1"
scule@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3"
integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==
sdp@^2.6.0: sdp@^2.6.0:
version "2.12.0" version "2.12.0"
resolved "https://registry.yarnpkg.com/sdp/-/sdp-2.12.0.tgz#338a106af7560c86e4523f858349680350d53b22" resolved "https://registry.yarnpkg.com/sdp/-/sdp-2.12.0.tgz#338a106af7560c86e4523f858349680350d53b22"
@ -4442,6 +4508,13 @@ strip-comments@^2.0.1:
resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
strip-literal@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-3.0.0.tgz#ce9c452a91a0af2876ed1ae4e583539a353df3fc"
integrity sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==
dependencies:
js-tokens "^9.0.1"
sucrase@^3.35.0: sucrase@^3.35.0:
version "3.35.0" version "3.35.0"
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
@ -4691,6 +4764,26 @@ unicode-property-aliases-ecmascript@^2.0.0:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
unimport@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/unimport/-/unimport-4.2.0.tgz#c25211d206d3430e9160cc7d458e9fa9ba828ac0"
integrity sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==
dependencies:
acorn "^8.14.1"
escape-string-regexp "^5.0.0"
estree-walker "^3.0.3"
local-pkg "^1.1.1"
magic-string "^0.30.17"
mlly "^1.7.4"
pathe "^2.0.3"
picomatch "^4.0.2"
pkg-types "^2.1.0"
scule "^1.3.0"
strip-literal "^3.0.0"
tinyglobby "^0.2.12"
unplugin "^2.2.2"
unplugin-utils "^0.2.4"
unique-string@^2.0.0: unique-string@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
@ -4703,6 +4796,18 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
unplugin-auto-import@^19.3.0:
version "19.3.0"
resolved "https://registry.yarnpkg.com/unplugin-auto-import/-/unplugin-auto-import-19.3.0.tgz#4fbfef17c87919889f5ba2167afac50f50a015f4"
integrity sha512-iIi0u4Gq2uGkAOGqlPJOAMI8vocvjh1clGTfSK4SOrJKrt+tirrixo/FjgBwXQNNdS7ofcr7OxzmOb/RjWxeEQ==
dependencies:
local-pkg "^1.1.1"
magic-string "^0.30.17"
picomatch "^4.0.2"
unimport "^4.2.0"
unplugin "^2.3.4"
unplugin-utils "^0.2.4"
unplugin-icons@^22.1.0: unplugin-icons@^22.1.0:
version "22.1.0" version "22.1.0"
resolved "https://registry.yarnpkg.com/unplugin-icons/-/unplugin-icons-22.1.0.tgz#5a6fe3d751e50f1c937e289857b0418e6855d92a" resolved "https://registry.yarnpkg.com/unplugin-icons/-/unplugin-icons-22.1.0.tgz#5a6fe3d751e50f1c937e289857b0418e6855d92a"
@ -4744,6 +4849,16 @@ unplugin@^2.2.0:
acorn "^8.14.0" acorn "^8.14.0"
webpack-virtual-modules "^0.6.2" webpack-virtual-modules "^0.6.2"
unplugin@^2.2.2, unplugin@^2.3.4:
version "2.3.6"
resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.3.6.tgz#938da8ac9fa3cf418441e45f110faabcc50926f5"
integrity sha512-+/MdXl8bLTXI2lJF22gUBeCFqZruEpL/oM9f8wxCuKh9+Mw9qeul3gTqgbKpMeOFlusCzc0s7x2Kax2xKW+FQg==
dependencies:
"@jridgewell/remapping" "^2.3.5"
acorn "^8.15.0"
picomatch "^4.0.3"
webpack-virtual-modules "^0.6.2"
upath@^1.2.0: upath@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"