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.layout = default_manager_dashboard_layout()
doc.insert(ignore_permissions=True)
elif force:
else:
doc = frappe.get_doc("CRM Dashboard", "Manager Dashboard")
doc.layout = default_manager_dashboard_layout()
doc.save(ignore_permissions=True)
if force:
doc.layout = default_manager_dashboard_layout()
doc.save(ignore_permissions=True)
return doc.layout

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: shariq@frappe.io\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"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
@ -621,16 +621,16 @@ msgstr "Zwischen"
#: frontend/src/components/Settings/General/BrandSettings.vue:40
msgid "Brand name"
msgstr ""
msgstr "Markenname"
#: frontend/src/components/Settings/General/BrandSettings.vue:9
msgid "Brand settings"
msgstr ""
msgstr "Markeneinstellungen"
#. Label of the branding_tab (Tab Break) field in DocType 'FCRM Settings'
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
msgid "Branding"
msgstr ""
msgstr "Firmenlogo"
#: frontend/src/components/Modals/EditValueModal.vue:2
msgid "Bulk Edit"
@ -1295,7 +1295,7 @@ msgstr "Interessent erstellen"
#: frontend/src/components/Layouts/AppSidebar.vue:344
msgid "Create your first lead"
msgstr ""
msgstr "Erstellen Sie Ihren ersten Interessenten"
#: frontend/src/components/Layouts/AppSidebar.vue:414
msgid "Create your first note"
@ -1303,7 +1303,7 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:394
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 Organization'
@ -1334,7 +1334,7 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:536
msgid "Custom branding"
msgstr ""
msgstr "Benutzerdefiniertes Branding"
#: frontend/src/components/Layouts/AppSidebar.vue:585
msgid "Custom fields"
@ -1568,7 +1568,7 @@ msgstr "Ansicht löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:65
msgid "Delete all"
msgstr ""
msgstr "Alles löschen"
#: frontend/src/components/Activities/AttachmentArea.vue:62
#: frontend/src/components/Activities/AttachmentArea.vue:138
@ -1581,15 +1581,15 @@ msgstr "Kontakt löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:229
msgid "Delete linked item"
msgstr ""
msgstr "Verknüpftes Element löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:11
msgid "Delete or unlink linked documents"
msgstr ""
msgstr "Verknüpfte Dokumente löschen oder ihre Verknüpfung aufheben"
#: frontend/src/components/DeleteLinkedDocModal.vue:23
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
msgid "Delete organization"
@ -1597,11 +1597,11 @@ msgstr "Organisation löschen"
#: frontend/src/components/DeleteLinkedDocModal.vue:66
msgid "Delete {0} item(s)"
msgstr ""
msgstr "{0} Element(e) löschen"
#: frontend/src/components/BulkDeleteLinkedDocModal.vue:28
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 Lost Reason'
@ -1676,7 +1676,7 @@ msgstr "Dokumententyp"
#: frontend/src/data/document.js:28
msgid "Document does not exist"
msgstr ""
msgstr "Dokument existiert nicht"
#: crm/api/activities.py:19
msgid "Document not found"
@ -1684,7 +1684,7 @@ msgstr "Dokument nicht gefunden"
#: frontend/src/data/document.js:42
msgid "Document updated successfully"
msgstr ""
msgstr "Dokument erfolgreich aktualisiert"
#: frontend/src/components/Modals/AboutModal.vue:62
msgid "Documentation"
@ -1698,7 +1698,7 @@ msgstr "Erledigt"
#: frontend/src/components/Dashboard/AddChartModal.vue:33
#: frontend/src/components/Dashboard/AddChartModal.vue:71
msgid "Donut chart"
msgstr ""
msgstr "Donut-Diagramm"
#: frontend/src/components/Activities/AudioPlayer.vue:166
#: frontend/src/components/ViewControls.vue:254
@ -1737,7 +1737,7 @@ msgstr "Ansicht duplizieren"
#: frontend/src/components/Settings/EmailTemplate/NewEmailTemplate.vue:10
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 Status Change Log'
@ -1778,11 +1778,11 @@ msgstr "ERPNext ist nicht mit dem CRM integriert"
#: frontend/src/components/Settings/ERPNextSettings.vue:4
msgid "ERPNext settings"
msgstr ""
msgstr "ERPNext-Einstellungen"
#: frontend/src/components/Settings/ERPNextSettings.vue:5
msgid "ERPNext settings updated"
msgstr ""
msgstr "ERPNext-Einstellungen aktualisiert"
#: frontend/src/components/FieldLayout/Field.vue:91
#: frontend/src/components/FieldLayoutEditor.vue:319
@ -1803,7 +1803,7 @@ msgstr "Layout der Datenfelder bearbeiten"
#: frontend/src/components/Settings/EmailEdit.vue:6
msgid "Edit Email"
msgstr ""
msgstr "E-Mail bearbeiten"
#: frontend/src/components/Modals/SidePanelModal.vue:7
msgid "Edit Field Layout"
@ -1861,11 +1861,11 @@ msgstr "E-Mail"
#: frontend/src/components/Settings/Settings.vue:107
msgid "Email Accounts"
msgstr ""
msgstr "E-Mail Konten"
#: frontend/src/components/Settings/emailConfig.js:168
msgid "Email ID is required"
msgstr ""
msgstr "E-Mail ID ist erforderlich"
#. Label of the email_sent_at (Datetime) field in DocType 'CRM Invitation'
#: crm/fcrm/doctype/crm_invitation/crm_invitation.json
@ -1879,19 +1879,19 @@ msgstr "E-Mail-Vorlagen"
#: frontend/src/components/Settings/EmailAdd.vue:141
msgid "Email account created successfully"
msgstr ""
msgstr "E-Mail-Konto erfolgreich erstellt"
#: frontend/src/components/Settings/EmailEdit.vue:208
msgid "Email account updated successfully"
msgstr ""
msgstr "E-Mail-Konto erfolgreich aktualisiert"
#: frontend/src/components/Settings/EmailAccountList.vue:7
msgid "Email accounts"
msgstr ""
msgstr "E-Mail-Konten"
#: frontend/src/components/Layouts/AppSidebar.vue:573
msgid "Email communication"
msgstr ""
msgstr "E-Mail-Kommunikation"
#: frontend/src/components/EmailEditor.vue:206
msgid "Email from Lead"
@ -1899,11 +1899,11 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:552
msgid "Email template"
msgstr ""
msgstr "E-Mail-Vorlage"
#: frontend/src/components/Settings/EmailTemplate/EmailTemplates.vue:7
msgid "Email templates"
msgstr ""
msgstr "E-Mail-Vorlagen"
#: frontend/src/pages/Deal.vue:545 frontend/src/pages/Lead.vue:411
#: 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'
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
msgid "Enable Forecasting"
msgstr ""
msgstr "Vorhersage aktivieren"
#: frontend/src/components/Settings/emailConfig.js:28
msgid "Enable Incoming"
@ -1941,7 +1941,7 @@ msgstr "Ausgehend aktivieren"
#: frontend/src/components/Settings/General/GeneralSettings.vue:19
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 Form Script'
@ -2185,7 +2185,7 @@ msgstr ""
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
#: frontend/src/components/Settings/General/BrandSettings.vue:81
msgid "Favicon"
msgstr ""
msgstr "Favicon"
#: frontend/src/components/Modals/EditValueModal.vue:5
msgid "Field"
@ -2485,7 +2485,7 @@ msgstr ""
#: 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."
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
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
msgid "Next Year"
msgstr ""
msgstr "Nächstes Jahr"
#: frontend/src/components/Controls/Grid.vue:27
msgid "No"

View File

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

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: shariq@frappe.io\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"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
@ -208,7 +208,7 @@ msgstr "SID dell'Account"
#: frontend/src/components/Settings/emailConfig.js:165
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/ViewControls.vue:683
@ -377,7 +377,7 @@ msgstr ""
#: frontend/src/data/document.js:63
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'
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
@ -472,7 +472,7 @@ msgstr ""
#: 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}."
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/Modals/AssignmentModal.vue:5
@ -726,7 +726,7 @@ msgstr ""
#. Name of a DocType
#: crm/fcrm/doctype/crm_lead/crm_lead.json
msgid "CRM Lead"
msgstr ""
msgstr "Offerta CRM"
#. Name of a DocType
#: crm/fcrm/doctype/crm_lead_source/crm_lead_source.json
@ -791,7 +791,7 @@ msgstr ""
#. Name of a DocType
#: crm/fcrm/doctype/crm_task/crm_task.json
msgid "CRM Task"
msgstr ""
msgstr "Attività CRM"
#. Name of a DocType
#: crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json
@ -824,7 +824,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:272
msgid "CSV"
msgstr ""
msgstr "CSV"
#: frontend/src/components/Modals/CallLogDetailModal.vue:8
msgid "Call Details"
@ -966,7 +966,7 @@ msgstr ""
#: frontend/src/components/Controls/Link.vue:62
msgid "Clear"
msgstr ""
msgstr "Pulisci"
#: frontend/src/components/ListBulkActions.vue:134
#: frontend/src/components/ListBulkActions.vue:142
@ -1086,7 +1086,7 @@ msgstr ""
#: frontend/src/components/Settings/General/CurrencySettings.vue:70
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
msgid "Confirm"
@ -1099,7 +1099,7 @@ msgstr ""
#: frontend/src/components/Modals/ChangePasswordModal.vue:18
msgid "Confirm Password"
msgstr "Conferma Password"
msgstr "Ripeti Password"
#: frontend/src/components/Settings/Users.vue:225
#: frontend/src/components/Settings/Users.vue:228
@ -1118,7 +1118,7 @@ msgstr ""
#: frontend/src/components/Modals/ConvertToDealModal.vue:65
#: frontend/src/pages/MobileLead.vue:147
msgid "Contact"
msgstr ""
msgstr "Contatto"
#: crm/fcrm/doctype/crm_lead/crm_lead.py:212
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:891
msgid "Count"
msgstr ""
msgstr "Q.tà"
#: frontend/src/components/Modals/AddressModal.vue:99
#: 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_view_settings/crm_view_settings.json
msgid "DocType"
msgstr "Tipo di documento"
msgstr "Tipo Documento"
#. Label of the dt (Link) field in DocType 'CRM Fields Layout'
#: crm/fcrm/doctype/crm_fields_layout/crm_fields_layout.json
@ -1676,7 +1676,7 @@ msgstr "Tipo Documento"
#: frontend/src/data/document.js:28
msgid "Document does not exist"
msgstr ""
msgstr "Il Documento non esiste"
#: crm/api/activities.py:19
msgid "Document not found"
@ -1749,7 +1749,7 @@ msgstr ""
#: frontend/src/components/Layouts/AppSidebar.vue:599
#: frontend/src/components/Settings/Settings.vue:135
msgid "ERPNext"
msgstr ""
msgstr "ERPNext"
#. Name of a DocType
#: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json
@ -1791,7 +1791,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:1131
#: frontend/src/pages/Dashboard.vue:19
msgid "Edit"
msgstr ""
msgstr "Modifica"
#: frontend/src/components/Modals/CallLogModal.vue:98
msgid "Edit Call Log"
@ -1973,7 +1973,7 @@ msgstr ""
#: frontend/src/components/Settings/General/CurrencySettings.vue:122
msgid "Enter access key"
msgstr ""
msgstr "Inserisci la chiave di accesso"
#: frontend/src/components/FieldLayout/Field.vue:334
msgid "Enter {0}"
@ -1996,7 +1996,7 @@ msgstr ""
#: frontend/src/pages/Deal.vue:739 frontend/src/pages/Lead.vue:486
#: frontend/src/pages/MobileDeal.vue:614 frontend/src/pages/MobileLead.vue:415
msgid "Error updating field"
msgstr ""
msgstr "Aggiornamento campo non riuscito"
#: crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.py:261
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
msgid "Expected Closure Date is required."
msgstr ""
msgstr "Data Chiusura Prevista obbligatoria."
#. Label of the expected_deal_value (Currency) field in DocType 'CRM Deal'
#: crm/fcrm/doctype/crm_deal/crm_deal.json
@ -2099,7 +2099,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:203
#: frontend/src/components/ViewControls.vue:251
msgid "Export"
msgstr "Esportare"
msgstr "Esporta"
#: frontend/src/components/ViewControls.vue:282
msgid "Export All {0} Record(s)"
@ -2150,7 +2150,7 @@ msgstr ""
#: 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."
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
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:140
msgid "First Name"
msgstr "Nome di battesimo"
msgstr "Nome"
#: frontend/src/components/Modals/LeadModal.vue:135
msgid "First Name is mandatory"
@ -2296,7 +2296,7 @@ msgstr ""
#. Name of a Workspace
#: crm/fcrm/workspace/frappe_crm/frappe_crm.json
msgid "Frappe CRM"
msgstr ""
msgstr "CRM Frappe"
#: frontend/src/components/Layouts/AppSidebar.vue:603
msgid "Frappe CRM mobile"
@ -2359,7 +2359,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_deal/crm_deal.json
#: crm/fcrm/doctype/crm_lead/crm_lead.json
msgid "Gender"
msgstr ""
msgstr "Genere"
#: frontend/src/components/Settings/General/GeneralSettings.vue:5
#: frontend/src/components/Settings/Settings.vue:89
@ -2414,7 +2414,7 @@ msgstr "Nascosto"
#: frontend/src/components/Activities/Activities.vue:230
msgid "Hide"
msgstr ""
msgstr "Nascosto"
#: frontend/src/components/Controls/Password.vue:19
msgid "Hide Password"
@ -2652,7 +2652,7 @@ msgstr ""
#. Label of the is_default (Check) field in DocType 'CRM View Settings'
#: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json
msgid "Is Default"
msgstr "È predefinito"
msgstr "È Predefinito"
#. Label of the is_erpnext_in_different_site (Check) field in DocType 'ERPNext
#. CRM Settings'
@ -2690,7 +2690,7 @@ msgstr ""
#. Label of the json (JSON) field in DocType 'CRM Global Settings'
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.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 Lead'
@ -2711,7 +2711,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:384
#: frontend/src/components/ViewControls.vue:600 frontend/src/utils/view.js:20
msgid "Kanban"
msgstr ""
msgstr "Kanban"
#. Label of the kanban_columns (Code) field in DocType 'CRM View Settings'
#: crm/fcrm/doctype/crm_view_settings/crm_view_settings.json
@ -2859,7 +2859,7 @@ msgstr ""
#: frontend/src/components/FilesUploader/FilesUploaderArea.vue:43
msgid "Library"
msgstr ""
msgstr "Libreria"
#: frontend/src/components/Filter.vue:274
#: frontend/src/components/Filter.vue:285
@ -2974,7 +2974,7 @@ msgstr ""
#. Option for the 'Priority' (Select) field in DocType 'CRM Task'
#: crm/fcrm/doctype/crm_task/crm_task.json
msgid "Low"
msgstr ""
msgstr "Bassa"
#: frontend/src/pages/Contact.vue:94 frontend/src/pages/MobileContact.vue:73
msgid "Make Call"
@ -3091,7 +3091,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_contacts/crm_contacts.json
#: crm/fcrm/doctype/crm_lead/crm_lead.json
msgid "Mobile No"
msgstr ""
msgstr "Cellulare"
#: frontend/src/components/Modals/DealModal.vue:209
#: frontend/src/components/Modals/LeadModal.vue:150
@ -3119,7 +3119,7 @@ msgstr ""
#: frontend/src/pages/MobileOrganization.vue:470
#: frontend/src/pages/Organization.vue:479
msgid "Mobile no"
msgstr ""
msgstr "Cellulare"
#. Option for the 'Weekly Off' (Select) field in DocType 'CRM Holiday List'
#. 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:127
msgid "New Email"
msgstr ""
msgstr "Nuova E-mail"
#: frontend/src/components/Activities/ActivityHeader.vue:73
msgid "New Message"
@ -3236,7 +3236,7 @@ msgstr ""
#: frontend/src/components/Modals/ChangePasswordModal.vue:6
msgid "New Password"
msgstr ""
msgstr "Nuova Password"
#: frontend/src/components/FieldLayoutEditor.vue:203
#: frontend/src/components/SidePanelLayoutEditor.vue:133
@ -3675,7 +3675,7 @@ msgstr ""
#: frontend/src/components/Settings/emailConfig.js:64
msgid "Password"
msgstr ""
msgstr "Password"
#: crm/api/demo.py:21 crm/api/demo.py:29
msgid "Password cannot be reset by Demo User {}"
@ -3729,7 +3729,7 @@ msgstr ""
#: frontend/src/pages/MobileOrganization.vue:498
#: frontend/src/pages/Organization.vue:507
msgid "Phone"
msgstr ""
msgstr "Telefono"
#. Label of the phone_nos (Table) field in DocType 'CRM Telephony Agent'
#: 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/pages/Dashboard.vue:10
msgid "Refresh"
msgstr ""
msgstr "Ricarica"
#: frontend/src/components/Telephony/TwilioCallUI.vue:104
msgid "Reject"
@ -4228,7 +4228,7 @@ msgstr ""
#: crm/fcrm/doctype/fcrm_note/fcrm_note.json
#: crm/fcrm/doctype/fcrm_settings/fcrm_settings.json
msgid "Sales Manager"
msgstr ""
msgstr "Responsabile Vendite"
#. Name of a role
#. Option for the 'Role' (Select) field in DocType 'CRM Invitation'
@ -4302,7 +4302,7 @@ msgstr ""
#: frontend/src/components/ViewControls.vue:123
#: frontend/src/pages/Dashboard.vue:45
msgid "Save"
msgstr ""
msgstr "Salva"
#: frontend/src/components/Modals/ViewModal.vue:13
#: frontend/src/components/ViewControls.vue:57
@ -4486,7 +4486,7 @@ msgstr ""
#: frontend/src/components/Activities/Activities.vue:230
msgid "Show"
msgstr ""
msgstr "Mostra"
#: frontend/src/components/Controls/Password.vue:19
msgid "Show Password"
@ -4515,7 +4515,7 @@ msgstr ""
#. Option for the 'Type' (Select) field in DocType 'CRM Global Settings'
#: crm/fcrm/doctype/crm_global_settings/crm_global_settings.json
msgid "Sidebar Items"
msgstr ""
msgstr "Elementi della Barra Laterale"
#. Description of the 'Condition' (Code) field in DocType 'CRM Service Level
#. Agreement'
@ -4534,7 +4534,7 @@ msgstr ""
#: crm/fcrm/doctype/crm_lead/crm_lead.json
#: frontend/src/components/Modals/EditValueModal.vue:10
msgid "Source"
msgstr ""
msgstr "Sorgente"
#. Label of the source_name (Data) field in DocType 'CRM Lead Source'
#: 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/fcrm_settings/fcrm_settings.json
msgid "System Manager"
msgstr ""
msgstr "Amministratore di Sistema"
#: frontend/src/components/EmailEditor.vue:22
msgid "TO"
@ -5564,7 +5564,7 @@ msgstr ""
#: frontend/src/utils/index.js:130
msgid "{0} M"
msgstr ""
msgstr "{0} mesi"
#: crm/api/todo.py:50
msgid "{0} assigned a {1} {2} to you"
@ -5572,7 +5572,7 @@ msgstr ""
#: frontend/src/utils/index.js:126
msgid "{0} d"
msgstr ""
msgstr "{0} giorni"
#: frontend/src/utils/index.js:181
msgid "{0} days ago"
@ -5616,7 +5616,7 @@ msgstr ""
#: frontend/src/utils/index.js:128
msgid "{0} w"
msgstr ""
msgstr "{0} settimane"
#: frontend/src/utils/index.js:185
msgid "{0} weeks ago"
@ -5624,7 +5624,7 @@ msgstr ""
#: frontend/src/utils/index.js:132
msgid "{0} y"
msgstr ""
msgstr "{0} anni"
#: frontend/src/utils/index.js:193
msgid "{0} years ago"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Frappe CRM VERSION\n"
"Report-Msgid-Bugs-To: shariq@frappe.io\n"
"POT-Creation-Date: 2025-08-03 09:38+0000\n"
"PO-Revision-Date: 2025-08-03 09:38+0000\n"
"POT-Creation-Date: 2025-08-17 09:36+0000\n"
"PO-Revision-Date: 2025-08-17 09:36+0000\n"
"Last-Translator: shariq@frappe.io\n"
"Language-Team: shariq@frappe.io\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 ""
#: frontend/src/components/ListBulkActions.vue:184
#: frontend/src/components/Modals/AssignmentModal.vue:5
#: frontend/src/components/Modals/AssignmentModal.vue:4
msgid "Assign To"
msgstr ""
#: frontend/src/components/AssignTo.vue:9
#: frontend/src/components/AssignTo.vue:11
#: frontend/src/components/AssignToBody.vue:5
msgid "Assign to"
msgstr ""
#: frontend/src/components/AssignToBody.vue:65
msgid "Assign to me"
msgstr ""
#. Label of the assigned_to (Link) field in DocType 'CRM Task'
#: crm/fcrm/doctype/crm_task/crm_task.json
msgid "Assigned To"
@ -878,7 +883,7 @@ msgstr ""
#: frontend/src/components/ColumnSettings.vue:132
#: frontend/src/components/Dashboard/AddChartModal.vue:40
#: 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/Telephony/TwilioCallUI.vue:77
#: frontend/src/components/ViewControls.vue:56
@ -1266,12 +1271,12 @@ msgstr ""
msgid "Create New"
msgstr ""
#: frontend/src/components/Activities/Activities.vue:384
#: frontend/src/components/Activities/Activities.vue:388
#: frontend/src/components/Modals/NoteModal.vue:15
msgid "Create Note"
msgstr ""
#: frontend/src/components/Activities/Activities.vue:399
#: frontend/src/components/Activities/Activities.vue:403
#: frontend/src/components/Modals/TaskModal.vue:18
msgid "Create Task"
msgstr ""
@ -1996,11 +2001,11 @@ msgstr ""
msgid "Error updating field"
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"
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"
msgstr ""
@ -2410,7 +2415,7 @@ msgstr ""
msgid "Hidden"
msgstr ""
#: frontend/src/components/Activities/Activities.vue:230
#: frontend/src/components/Activities/Activities.vue:234
msgid "Hide"
msgstr ""
@ -2418,7 +2423,7 @@ msgstr ""
msgid "Hide Password"
msgstr ""
#: frontend/src/components/Activities/CallArea.vue:74
#: frontend/src/components/Activities/CallArea.vue:75
msgid "Hide Recording"
msgstr ""
@ -2519,7 +2524,7 @@ msgstr ""
msgid "In less than a minute"
msgstr ""
#: frontend/src/components/Activities/CallArea.vue:35
#: frontend/src/components/Activities/CallArea.vue:36
msgid "Inbound Call"
msgstr ""
@ -2697,8 +2702,9 @@ msgstr ""
msgid "Job Title"
msgstr ""
#: frontend/src/components/AssignToBody.vue:11
#: 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/Telephony/TaskPanel.vue:47
msgid "John Doe"
@ -2885,7 +2891,7 @@ msgstr ""
msgid "List"
msgstr ""
#: frontend/src/components/Activities/CallArea.vue:74
#: frontend/src/components/Activities/CallArea.vue:75
msgid "Listen"
msgstr ""
@ -2914,7 +2920,7 @@ msgstr ""
msgid "Log"
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:180
msgid "Log a Call"
@ -2986,7 +2992,7 @@ msgstr ""
msgid "Make Public"
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:185
#: frontend/src/pages/Deals.vue:504 frontend/src/pages/Leads.vue:531
@ -3202,7 +3208,7 @@ msgstr ""
msgid "New Call Log"
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:132
msgid "New Comment"
@ -3212,7 +3218,7 @@ msgstr ""
msgid "New Contact"
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:127
msgid "New Email"
@ -3652,7 +3658,7 @@ msgstr ""
msgid "Others"
msgstr ""
#: frontend/src/components/Activities/CallArea.vue:36
#: frontend/src/components/Activities/CallArea.vue:37
msgid "Outbound Call"
msgstr ""
@ -4488,7 +4494,7 @@ msgstr ""
msgid "Setup your password"
msgstr ""
#: frontend/src/components/Activities/Activities.vue:230
#: frontend/src/components/Activities/Activities.vue:234
msgid "Show"
msgstr ""
@ -4527,6 +4533,14 @@ msgstr ""
msgid "Simple Python Expression, Example: doc.status == 'Open' and doc.lead_source == 'Ads'"
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:240
msgid "Sort"
@ -5056,7 +5070,7 @@ msgid "Untitled"
msgstr ""
#: 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/NoteModal.vue:6
#: frontend/src/components/Modals/TaskModal.vue:8
@ -5084,7 +5098,7 @@ msgstr ""
msgid "Upload"
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:158
msgid "Upload Attachment"
@ -5288,11 +5302,11 @@ msgstr ""
msgid "You need to be in developer mode to edit a Standard Form Script"
msgstr ""
#: crm/api/todo.py:111
#: crm/api/todo.py:100
msgid "Your assignment on task {0} has been removed by {1}"
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}"
msgstr ""
@ -5307,11 +5321,11 @@ msgstr ""
msgid "amber"
msgstr ""
#: crm/api/todo.py:120
#: crm/api/todo.py:109
msgid "assigned a new task {0} to you"
msgstr ""
#: crm/api/todo.py:100
#: crm/api/todo.py:89
msgid "assigned a {0} {1} to you"
msgstr ""
@ -5329,7 +5343,7 @@ msgstr ""
msgid "blue"
msgstr ""
#: frontend/src/components/Activities/Activities.vue:232
#: frontend/src/components/Activities/Activities.vue:236
msgid "changes from"
msgstr ""
@ -5539,8 +5553,8 @@ msgstr ""
msgid "teal"
msgstr ""
#: frontend/src/components/Activities/Activities.vue:274
#: frontend/src/components/Activities/Activities.vue:337
#: frontend/src/components/Activities/Activities.vue:278
#: frontend/src/components/Activities/Activities.vue:341
msgid "to"
msgstr ""
@ -5570,7 +5584,7 @@ msgstr ""
msgid "{0} M"
msgstr ""
#: crm/api/todo.py:50
#: crm/api/todo.py:41
msgid "{0} assigned a {1} {2} to you"
msgstr ""

View File

@ -171,9 +171,6 @@ declare module 'vue' {
LostReasonModal: typeof import('./src/components/Modals/LostReasonModal.vue')['default']
LucideCalendar: typeof import('~icons/lucide/calendar')['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']
MaximizeIcon: typeof import('./src/components/Icons/MaximizeIcon.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']
MultiSelectUserInput: typeof import('./src/components/Controls/MultiSelectUserInput.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']
NoteArea: typeof import('./src/components/Activities/NoteArea.vue')['default']
NoteIcon: typeof import('./src/components/Icons/NoteIcon.vue')['default']

View File

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

View File

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

View File

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

View File

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

View File

@ -1,12 +1,12 @@
<template>
<div class="w-full text-sm text-ink-gray-5">
<div class="flex items-center gap-2">
<Button variant="ghost" @click="playPause">
<template #icon>
<PlayIcon v-if="isPaused" class="size-4 text-ink-gray-5" />
<PauseIcon v-else class="size-4 text-ink-gray-5" />
</template>
</Button>
<Button
variant="ghost"
class="text-ink-gray-5"
:icon="isPaused ? PlayIcon : PauseIcon"
@click="playPause"
/>
<div class="flex gap-2 items-center justify-between flex-1">
<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]"
@ -61,11 +61,11 @@
</Button>
</div>
<Dropdown :options="options">
<Button variant="ghost" @click="showPlaybackSpeed = false">
<template #icon>
<FeatherIcon class="size-4" name="more-horizontal" />
</template>
</Button>
<Button
icon="more-horizontal"
variant="ghost"
@click="showPlaybackSpeed = false"
/>
</Dropdown>
</div>
</div>

View File

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

View File

@ -2,7 +2,9 @@
<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"
>
<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">
<span>{{ activity.data.sender_full_name }}</span>
<span class="sm:flex hidden text-sm text-ink-gray-5">
@ -28,32 +30,20 @@
</div>
</Tooltip>
<div class="flex gap-0.5">
<Tooltip :text="__('Reply')">
<div>
<Button
variant="ghost"
class="text-ink-gray-7"
@click="reply(activity.data)"
>
<template #icon>
<ReplyIcon />
</template>
</Button>
</div>
</Tooltip>
<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>
<Button
:tooltip="__('Reply')"
variant="ghost"
class="text-ink-gray-7"
:icon="ReplyIcon"
@click="reply(activity.data)"
/>
<Button
:tooltip="__('Reply All')"
variant="ghost"
:icon="ReplyAllIcon"
class="text-ink-gray-7"
@click="reply(activity.data, true)"
/>
</div>
</div>
</div>

View File

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

View File

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

View File

@ -25,23 +25,21 @@
:key="assignee.name"
@click.stop
>
<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"
@click.stop
<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"
@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" />
<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)"
>
<template #icon>
<FeatherIcon name="x" class="h-3 w-3 text-ink-gray-6" />
</template>
</Button>
</div>
<template #icon>
<FeatherIcon name="x" class="h-3 w-3 text-ink-gray-6" />
</template>
</Button>
</div>
</Tooltip>
</div>
@ -74,7 +72,7 @@ import UserAvatar from '@/components/UserAvatar.vue'
import Link from '@/components/Controls/Link.vue'
import { usersStore } from '@/stores/users'
import { capture } from '@/telemetry'
import { Tooltip, Switch, toast, createResource } from 'frappe-ui'
import { Tooltip, Switch, createResource } from 'frappe-ui'
import { ref, watch } from 'vue'
const props = defineProps({

View File

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

View File

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

View File

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

View File

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

View File

@ -54,14 +54,12 @@
</div>
<div class="w-12">
<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"
icon="settings"
@click="showGridFieldsEditorModal = true"
>
<template #icon>
<FeatherIcon name="settings" class="size-4 text-ink-gray-7" />
</template>
</Button>
/>
</div>
</div>
<!-- Rows -->
@ -279,14 +277,12 @@
</div>
<div class="edit-row w-12">
<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"
:icon="EditIcon"
@click="showRowList[index] = true"
>
<template #icon>
<EditIcon class="text-ink-gray-7" />
</template>
</Button>
/>
</div>
<GridRowModal
v-if="showRowList[index]"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,11 +3,8 @@
:label="__('Kanban Settings')"
@click="showDialog = true"
v-bind="$attrs"
>
<template #prefix>
<KanbanIcon class="h-4" />
</template>
</Button>
:iconLeft="KanbanIcon"
/>
<Dialog v-model="showDialog" :options="{ title: __('Kanban Settings') }">
<template #body-content>
<div>
@ -23,8 +20,8 @@
<template #target="{ togglePopover }">
<Button
class="w-full !justify-start"
@click="togglePopover()"
:label="columnField.label"
@click="togglePopover()"
/>
</template>
</Autocomplete>
@ -80,13 +77,10 @@
<template #target="{ togglePopover }">
<Button
class="w-full mt-2"
@click="togglePopover()"
:label="__('Add Field')"
>
<template #prefix>
<FeatherIcon name="plus" class="h-4" />
</template>
</Button>
iconLeft="plus"
@click="togglePopover()"
/>
</template>
<template #item-label="{ option }">
<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 items-center text-base">
<NestedPopover>
<template #target>
<Popover>
<template #target="{ togglePopover }">
<Button
variant="ghost"
size="sm"
class="hover:!bg-surface-gray-2"
@click="togglePopover"
>
<IndicatorIcon :class="parseColor(column.column.color)" />
</Button>
</template>
<template #body="{ close }">
<template #body>
<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"
>
@ -48,7 +49,7 @@
</div>
</div>
</template>
</NestedPopover>
</Popover>
<div class="text-ink-gray-9">{{ column.column.name }}</div>
</div>
<div class="flex">
@ -153,13 +154,10 @@
<template #target="{ togglePopover }">
<Button
class="w-full mt-2.5 mb-1 mr-5"
@click="togglePopover()"
:label="__('Add Column')"
>
<template #prefix>
<FeatherIcon name="plus" class="h-4" />
</template>
</Button>
iconLeft="plus"
@click="togglePopover()"
/>
</template>
</Autocomplete>
</div>
@ -167,11 +165,10 @@
</template>
<script setup>
import Autocomplete from '@/components/frappe-ui/Autocomplete.vue'
import NestedPopover from '@/components/NestedPopover.vue'
import IndicatorIcon from '@/components/Icons/IndicatorIcon.vue'
import { isTouchScreenDevice, colors, parseColor } from '@/utils'
import Draggable from 'vuedraggable'
import { Dropdown } from 'frappe-ui'
import { Dropdown, Popover } from 'frappe-ui'
import { computed } from 'vue'
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="isSidebarCollapsed ? 'w-12' : 'w-[220px]'"
>
<div>
<UserDropdown class="p-2" :isCollapsed="isSidebarCollapsed" />
<div class="p-2">
<UserDropdown :isCollapsed="isSidebarCollapsed" />
</div>
<div class="flex-1 overflow-y-auto">
<div class="mb-3 flex flex-col">
@ -197,51 +197,50 @@ const isSidebarCollapsed = useStorage('isSidebarCollapsed', false)
const isFCSite = ref(window.is_fc_site)
const isDemoSite = ref(window.is_demo_site)
const allViews = computed(() => {
const links = [
{
label: 'Dashboard',
icon: LucideLayoutDashboard,
to: 'Dashboard',
condition: () => isManager(),
},
{
label: 'Leads',
icon: LeadsIcon,
to: 'Leads',
},
{
label: 'Deals',
icon: DealsIcon,
to: 'Deals',
},
{
label: 'Contacts',
icon: ContactsIcon,
to: 'Contacts',
},
{
label: 'Organizations',
icon: OrganizationsIcon,
to: 'Organizations',
},
{
label: 'Notes',
icon: NoteIcon,
to: 'Notes',
},
{
label: 'Tasks',
icon: TaskIcon,
to: 'Tasks',
},
{
label: 'Call Logs',
icon: PhoneIcon,
to: 'Call Logs',
},
]
const links = [
{
label: 'Dashboard',
icon: LucideLayoutDashboard,
to: 'Dashboard',
},
{
label: 'Leads',
icon: LeadsIcon,
to: 'Leads',
},
{
label: 'Deals',
icon: DealsIcon,
to: 'Deals',
},
{
label: 'Contacts',
icon: ContactsIcon,
to: 'Contacts',
},
{
label: 'Organizations',
icon: OrganizationsIcon,
to: 'Organizations',
},
{
label: 'Notes',
icon: NoteIcon,
to: 'Notes',
},
{
label: 'Tasks',
icon: TaskIcon,
to: 'Tasks',
},
{
label: 'Call Logs',
icon: PhoneIcon,
to: 'Call Logs',
},
]
const allViews = computed(() => {
let _views = [
{
name: 'All Views',

View File

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

View File

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

View File

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

View File

@ -13,17 +13,16 @@
v-if="isManager() && !isMobileView"
variant="ghost"
class="w-7"
:tooltip="__('Edit fields layout')"
:icon="EditIcon"
@click="openQuickEntryModal"
>
<template #icon>
<EditIcon />
</template>
</Button>
<Button variant="ghost" class="w-7" @click="show = false">
<template #icon>
<FeatherIcon name="x" class="size-4" />
</template>
</Button>
/>
<Button
variant="ghost"
class="w-7"
@click="show = false"
icon="x"
/>
</div>
</div>
<FieldLayout
@ -90,12 +89,16 @@ const { document: _contact, triggerOnBeforeCreate } = useDocument('Contact')
async function createContact() {
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
}
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
}

View File

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

View File

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

View File

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

View File

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

View File

@ -1,41 +1,59 @@
<template>
<Dialog v-model="show" :options="{
size: 'xl',
actions: [
{
label: editMode ? __('Update') : __('Create'),
variant: 'solid',
onClick: () => updateNote(),
},
],
}">
<Dialog
v-model="show"
:options="{
size: 'xl',
actions: [
{
label: editMode ? __('Update') : __('Create'),
variant: 'solid',
onClick: () => updateNote(),
},
],
}"
>
<template #body-title>
<div class="flex items-center gap-3">
<h3 class="text-2xl font-semibold leading-6 text-ink-gray-9">
{{ editMode ? __('Edit Note') : __('Create Note') }}
</h3>
<Button v-if="_note?.reference_docname" size="sm" :label="_note.reference_doctype == 'CRM Deal'
? __('Open Deal')
: __('Open Lead')
" @click="redirect()">
<template #suffix>
<ArrowUpRightIcon class="w-4 h-4" />
</template>
</Button>
<Button
v-if="_note?.reference_docname"
size="sm"
:label="
_note.reference_doctype == 'CRM Deal'
? __('Open Deal')
: __('Open Lead')
"
:iconRight="ArrowUpRightIcon"
@click="redirect()"
/>
</div>
</template>
<template #body-content>
<div class="flex flex-col gap-4">
<div>
<FormControl ref="title" :label="__('Title')" v-model="_note.title" :placeholder="__('Call with John Doe')"
required />
<FormControl
ref="title"
:label="__('Title')"
v-model="_note.title"
:placeholder="__('Call with John Doe')"
required
/>
</div>
<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"
: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>
<ErrorMessage class="mt-4" v-if="error" :message="__(error)" />
</div>
@ -92,21 +110,25 @@ async function updateNote() {
emit('after', d)
}
} else {
let d = await call('frappe.client.insert', {
doc: {
doctype: 'FCRM Note',
title: _note.value.title,
content: _note.value.content,
reference_doctype: props.doctype,
reference_docname: props.doc || '',
let d = await call(
'frappe.client.insert',
{
doc: {
doctype: 'FCRM Note',
title: _note.value.title,
content: _note.value.content,
reference_doctype: props.doctype,
reference_docname: props.doc || '',
},
},
}, {
onError: (err) => {
if (err.error.exc_type == 'MandatoryError') {
error.value = "Title is mandatory"
}
}
})
{
onError: (err) => {
if (err.error.exc_type == 'MandatoryError') {
error.value = 'Title is mandatory'
}
},
},
)
if (d.name) {
updateOnboardingStep('create_first_note')
capture('note_created')

View File

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

View File

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

View File

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

View File

@ -9,21 +9,9 @@
$attrs.class,
showDropdown ? 'rounded-br-none rounded-tr-none' : '',
]"
:iconLeft="activeButton.icon"
@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
v-if="showDropdown"
: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="flex gap-1">
<Tooltip :text="__('Mark all as read')">
<div>
<Button variant="ghost" @click="() => markAllAsRead()">
<template #icon>
<MarkAsDoneIcon class="h-4 w-4" />
</template>
</Button>
</div>
</Tooltip>
<Tooltip :text="__('Close')">
<div>
<Button variant="ghost" @click="() => toggle()">
<template #icon>
<FeatherIcon name="x" class="h-4 w-4" />
</template>
</Button>
</div>
</Tooltip>
<Button
:tooltip="__('Mark all as read')"
:icon="MarkAsDoneIcon"
variant="ghost"
@click="markAllAsRead"
/>
<Button
:tooltip="__('Close')"
icon="x"
variant="ghost"
@click="() => toggle()"
/>
</div>
</div>
<div
@ -100,7 +94,6 @@ import { globalStore } from '@/stores/global'
import { timeAgo } from '@/utils'
import { onClickOutside } from '@vueuse/core'
import { capture } from '@/telemetry'
import { Tooltip } from 'frappe-ui'
import { ref, onMounted, onBeforeUnmount } from 'vue'
const { $socket } = globalStore()

View File

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

View File

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

View File

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

View File

@ -20,12 +20,9 @@
v-if="section.showEditButton"
variant="ghost"
class="w-7 mr-2"
:icon="EditIcon"
@click="showSidePanelModal = true"
>
<template #icon>
<EditIcon />
</template>
</Button>
/>
</slot>
</template>
<slot v-bind="{ section }">
@ -83,11 +80,12 @@
</Tooltip>
</div>
<div v-else-if="field.fieldtype === 'Dropdown'">
<NestedPopover>
<template #target="{ open }">
<Popover>
<template #target="{ isOpen, togglePopover }">
<Button
: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"
@click="togglePopover"
>
<div
v-if="doc[field.fieldname]"
@ -103,7 +101,9 @@
</div>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
:name="
isOpen ? 'chevron-up' : 'chevron-down'
"
class="h-4 text-ink-gray-5"
/>
</template>
@ -135,16 +135,13 @@
variant="ghost"
class="w-full !justify-start"
:label="__('Create New')"
iconLeft="plus"
@click="field.create()"
>
<template #prefix>
<FeatherIcon name="plus" class="h-4" />
</template>
</Button>
/>
</div>
</div>
</template>
</NestedPopover>
</Popover>
</div>
<FormControl
v-else-if="field.fieldtype == 'Check'"
@ -369,7 +366,6 @@
import Password from '@/components/Controls/Password.vue'
import FormattedInput from '@/components/Controls/FormattedInput.vue'
import Section from '@/components/Section.vue'
import NestedPopover from '@/components/NestedPopover.vue'
import DropdownItem from '@/components/DropdownItem.vue'
import FadedScrollableDiv from '@/components/FadedScrollableDiv.vue'
import ArrowUpRightIcon from '@/components/Icons/ArrowUpRightIcon.vue'
@ -382,7 +378,7 @@ import { usersStore } from '@/stores/users'
import { isMobileView } from '@/composables/settings'
import { getFormat, evaluateDependsOnValue } from '@/utils'
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 { ref, computed, getCurrentInstance } from 'vue'

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -11,10 +11,9 @@
<Button
variant="solid"
:label="__('Create')"
iconLeft="plus"
@click="showDealModal = true"
>
<template #prefix><FeatherIcon name="plus" class="h-4" /></template>
</Button>
/>
</template>
</LayoutHeader>
<ViewControls
@ -233,9 +232,11 @@
>
<DealsIcon class="h-10 w-10" />
<span>{{ __('No {0} Found', [__('Deals')]) }}</span>
<Button :label="__('Create')" @click="showDealModal = true">
<template #prefix><FeatherIcon name="plus" class="h-4" /></template>
</Button>
<Button
:label="__('Create')"
iconLeft="plus"
@click="showDealModal = true"
/>
</div>
</div>
<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"
>
<div class="space-y-2">
<div>Invalid page or not permitted to access</div>
<Button :route="{ name: 'Leads' }">
<template #prefix><LeadsIcon class="w-4" /></template>
Leads
</Button>
<div>{{ __('Invalid page or not permitted to access') }}</div>
<Button
:route="{ name: 'Leads' }"
:label="__('Leads')"
:iconLeft="LeadsIcon"
/>
</div>
</div>
</template>

View File

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

View File

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

View File

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

View File

@ -22,16 +22,14 @@
"
>
<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>
<IndicatorIcon :class="getDealStatus(doc.status).color" />
</template>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4"
/>
</template>
</Button>
</template>
</Dropdown>

View File

@ -22,16 +22,14 @@
"
>
<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>
<IndicatorIcon :class="getLeadStatus(doc.status).color" />
</template>
<template #suffix>
<FeatherIcon
:name="open ? 'chevron-up' : 'chevron-down'"
class="h-4"
/>
</template>
</Button>
</template>
</Dropdown>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

639
yarn.lock
View File

@ -1089,6 +1089,14 @@
"@jridgewell/sourcemap-codec" "^1.4.10"
"@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":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
@ -1261,213 +1269,208 @@
dependencies:
"@tanstack/virtual-core" "3.13.4"
"@tiptap/core@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.10.3.tgz#7744abd4a954f35265af351f1be9b545e819c66d"
integrity sha512-wAG/0/UsLeZLmshWb6rtWNXKJftcmnned91/HLccHVQAuQZ1UWH+wXeQKu/mtodxEO7JcU2mVPR9mLGQkK0McQ==
"@tiptap/core@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.26.1.tgz#8f97c223629972221d4175e4779f6ee955c41a37"
integrity sha512-fymyd/XZvYiHjBoLt1gxs024xP/LY26d43R1vluYq7AHBL/7DE3ywzy+1GEsGyAv5Je2L0KBhNIR/izbq3Kaqg==
"@tiptap/core@^2.11.7":
version "2.12.0"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.12.0.tgz#e0bc9255865db53682e83d843c8fef19596a8899"
integrity sha512-3qX8oGVKFFZzQ0vit+ZolR6AJIATBzmEmjAA0llFhWk4vf3v64p1YcXcJsOBsr5scizJu5L6RYWEFatFwqckRg==
"@tiptap/extension-blockquote@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.26.1.tgz#8ad2b3c119ff22430432ef46c852c135c156d63b"
integrity sha512-viQ6AHRhjCYYipKK6ZepBzwZpkuMvO9yhRHeUZDvlSOAh8rvsUTSre0y74nu8QRYUt4a44lJJ6BpphJK7bEgYA==
"@tiptap/extension-blockquote@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.10.3.tgz#ee29925930ac9a5b129d3ad262bb45afcc23b318"
integrity sha512-u9Mq4r8KzoeGVT8ms6FQDIMN95dTh3TYcT7fZpwcVM96mIl2Oyt+Bk66mL8z4zuFptfRI57Cu9QdnHEeILd//w==
"@tiptap/extension-bold@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.26.1.tgz#1218b847d360d69b6fc9e30596991bc53bc8fb98"
integrity sha512-zCce9PRuTNhadFir71luLo99HERDpGJ0EEflGm7RN8I1SnNi9gD5ooK42BOIQtejGCJqg3hTPZiYDJC2hXvckQ==
"@tiptap/extension-bold@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.10.3.tgz#6ffdeed5d1b2c7bd2a248b327083f3db89c02f87"
integrity sha512-xnF1tS2BsORenr11qyybW120gHaeHKiKq+ZOP14cGA0MsriKvWDnaCSocXP/xMEYHy7+2uUhJ0MsKkHVj4bPzQ==
"@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==
"@tiptap/extension-bubble-menu@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.26.1.tgz#7d78abb95bfc96468b40819ec00e2770ddcf63ad"
integrity sha512-oHevUcZbTMFOTpdCEo4YEDe044MB4P1ZrWyML8CGe5tnnKdlI9BN03AXpI1mEEa5CA3H1/eEckXx8EiCgYwQ3Q==
dependencies:
tippy.js "^6.3.7"
"@tiptap/extension-bullet-list@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.10.3.tgz#0a17343aaf64679327de87785918bcdb04744edf"
integrity sha512-PTkwJOVlHi4RR4Wrs044tKMceweXwNmWA6EoQ93hPUVtQcwQL990Es5Izp+i88twTPLuGD9dH+o9QDyH9SkWdA==
"@tiptap/extension-bullet-list@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.26.1.tgz#b92170ca5d0b3404599799277fd73a124e81d093"
integrity sha512-HHakuV4ckYCDOnBbne088FvCEP4YICw+wgPBz/V2dfpiFYQ4WzT0LPK9s7OFMCN+ROraoug+1ryN1Z1KdIgujQ==
"@tiptap/extension-code-block-lowlight@^2.11.5":
version "2.11.5"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.11.5.tgz#62c05a70ec1f0b47e257a9345253031650ab014b"
integrity sha512-EIE+mAGsp8C69dI0Yyg+VH1x36rgyPJc93SfA7h4xFF6Oth18z4YhJtiLaZcwCMyOOVs2efApZ0R3/Fnz2VlqA==
"@tiptap/extension-code-block-lowlight@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.26.1.tgz#42033f833906de3cf66263598dc4cad70fe3651d"
integrity sha512-yptuTPYAzVMKHUTwNKYveuu0rYHYyFknPz3O2++PWeeBGxkNB+T6LhwZ/JhXceHcZxzlGyka9r2mXR7pslhugw==
"@tiptap/extension-code-block@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.10.3.tgz#5ff1b1e563c4eda44677df444c523de1e5258fa4"
integrity sha512-yiDVNg22fYkzsFk5kBlDSHcjwVJgajvO/M5fDXA+Hfxwo2oNcG6aJyyHXFe+UaXTVjdkPej0J6kcMKrTMCiFug==
"@tiptap/extension-code-block@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.26.1.tgz#dd6f9ec59440844f8e0ab0b33a75ff8ab6b6669f"
integrity sha512-/TDDOwONl0qEUc4+B6V9NnWtSjz95eg7/8uCb8Y8iRbGvI9vT4/znRKofFxstvKmW4URu/H74/g0ywV57h0B+A==
"@tiptap/extension-code-block@^2.11.9":
version "2.12.0"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.12.0.tgz#73bceaa90ba54de65ade42db5a28cc299c16158b"
integrity sha512-1D7cYAjgxEFHdfC/35Ooi4GqWKB5sszbW8iI7N16XILNln26xb0d5KflXqYrwr9CN/ZnZoCl2o6YsP7xEObcZA==
"@tiptap/extension-code@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.26.1.tgz#ed289955423da20faa6ef4c81472835ac5fe1574"
integrity sha512-GU9deB1A/Tr4FMPu71CvlcjGKwRhGYz60wQ8m4aM+ELZcVIcZRa1ebR8bExRIEWnvRztQuyRiCQzw2N0xQJ1QQ==
"@tiptap/extension-code@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.10.3.tgz#b9fb04be2d51760f011ec7a060d4e2e3eefe392c"
integrity sha512-JyLbfyY3cPctq9sVdpcRWTcoUOoq3/MnGE1eP6eBNyMTHyBPcM9TPhOkgj+xkD1zW/884jfelB+wa70RT/AMxQ==
"@tiptap/extension-color@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.26.1.tgz#075386150a4457d03c85371a88205c838fc2bfae"
integrity sha512-lsPw3qpQNes1rHpxBtsV9XniN1dEjYd2nVTpQHGE4XLNwfE5+ejm6ySs8qVLM7+EXWcjANLLh4UA3zqkX6t6HA==
"@tiptap/extension-color@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.10.3.tgz#97e77235dc20adc96c1034b48cfe7ce20040864d"
integrity sha512-FC2hPMSQ4w9UmO9kJCAdoU7gHpDbJ6MeJAmikB9EPp16dbGwFLrZm9TZ/4pv74fGfVm0lv720316ALOEgPEDjQ==
"@tiptap/extension-document@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.26.1.tgz#3e65e4833fee138e5afaed4be586d75db10cb8b6"
integrity sha512-2P2IZp1NRAE+21mRuFBiP3X2WKfZ6kUC23NJKpn8bcOamY3obYqCt0ltGPhE4eR8n8QAl2fI/3jIgjR07dC8ow==
"@tiptap/extension-document@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.10.3.tgz#2ba039932af67c85475870697495b099d9983a1d"
integrity sha512-6i8+xbS2zB6t8iFzli1O/QB01MmwyI5Hqiiv4m5lOxqavmJwLss2sRhoMC2hB3CyFg5UmeODy/f/RnI6q5Vixg==
"@tiptap/extension-dropcursor@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.26.1.tgz#2eff232f3ab50816ba7182275f84f475a88b4443"
integrity sha512-JkDQU2ZYFOuT5mNYb8OiWGwD1HcjbtmX8tLNugQbToECmz9WvVPqJmn7V/q8VGpP81iEECz/IsyRmuf2kSD4uA==
"@tiptap/extension-dropcursor@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.10.3.tgz#c5484e16df98f3c43c9f585c5686b38808c4615b"
integrity sha512-wzWf82ixWzZQr0hxcf/A0ul8NNxgy1N63O+c56st6OomoLuKUJWOXF+cs9O7V+/5rZKWdbdYYoRB5QLvnDBAlQ==
"@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==
"@tiptap/extension-floating-menu@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.26.1.tgz#4be572fa98f356d44b1817cff5cd0db819f45c01"
integrity sha512-OJF+H6qhQogVTMedAGSWuoL1RPe3LZYXONuFCVyzHnvvMpK+BP1vm180E2zDNFnn/DVA+FOrzNGpZW7YjoFH1w==
dependencies:
tippy.js "^6.3.7"
"@tiptap/extension-gapcursor@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.10.3.tgz#6a68027d41fb77707104551b2886146253a9461b"
integrity sha512-FskZi2DqDSTH1WkgLF2OLy0xU7qj3AgHsKhVsryeAtld4jAK5EsonneWgaipbz0e/MxuIvc1oyacfZKABpLaNg==
"@tiptap/extension-gapcursor@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.26.1.tgz#7a5ebd84d4495aa8403ececd1ace51d3ba9ab139"
integrity sha512-KOiMZc3PwJS3hR0nSq5d0TJi2jkNZkLZElcT6pCEnhRHzPH6dRMu9GM5Jj798ZRUy0T9UFcKJalFZaDxnmRnpg==
"@tiptap/extension-hard-break@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.10.3.tgz#1fd1ea91e57c018747e54516eaca963e578af6a4"
integrity sha512-2rFlimUKAgKDwT6nqAMtPBjkrknQY8S7oBNyIcDOUGyFkvbDUl3Jd0PiC929S5F3XStJRppnMqhpNDAlWmvBLA==
"@tiptap/extension-hard-break@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.26.1.tgz#70226e2b63e2252a74f6e59b5c001a4c02e0c1e5"
integrity sha512-d6uStdNKi8kjPlHAyO59M6KGWATNwhLCD7dng0NXfwGndc22fthzIk/6j9F6ltQx30huy5qQram6j3JXwNACoA==
"@tiptap/extension-heading@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.10.3.tgz#bf8efb3a580c75b86dce505a63f1ca7450a9aaea"
integrity sha512-AlxXXPCWIvw8hQUDFRskasj32iMNB8Sb19VgyFWqwvntGs2/UffNu8VdsVqxD2HpZ0g5rLYCYtSW4wigs9R3og==
"@tiptap/extension-heading@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.26.1.tgz#49d1e8f2d10eb1c06bf348d7cb9d131097d65f78"
integrity sha512-KSzL8WZV3pjJG9ke4RaU70+B5UlYR2S6olNt5UCAawM+fi11mobVztiBoC19xtpSVqIXC1AmXOqUgnuSvmE4ZA==
"@tiptap/extension-heading@^2.12.0":
version "2.14.0"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.14.0.tgz#c5a9dc761712e9c87073ba8446548cbe4d403360"
integrity sha512-vM//6G3Ox3mxPv9eilhrDqylELCc8kEP1aQ4xUuOw7vCidjNtGggOa1ERnnpV2dCa2A9E8y4FHtN4Xh29stXQg==
"@tiptap/extension-highlight@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.26.1.tgz#9c5aca076d146332930882c0fad7cbe47026c681"
integrity sha512-9eW2UqDqeAKSDIiL6SqcPSDCQAdU5qQmRMsJlShOM7Fu1aU71b1ewhUP9YioUCanciR99tqNsk/n3LAe0w5XdA==
"@tiptap/extension-highlight@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.10.3.tgz#d94667d435d9dc556b06e7b764449dc2a6c18743"
integrity sha512-srMOdpUTcp1yPGmUqgKOkbmTpCYOF6Q/8CnquDkhrvK7Gyphj+n8TocrKiloaRYZKcoQWtmb+kcVPaHhHMzsWQ==
"@tiptap/extension-history@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.26.1.tgz#de8e8a5ebf08cbbccb6dec11291128843a2d24e6"
integrity sha512-m6YR1gkkauIDo3PRl0gP+7Oc4n5OqDzcjVh6LvWREmZP8nmi94hfseYbqOXUb6RPHIc0JKF02eiRifT4MSd2nw==
"@tiptap/extension-history@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.10.3.tgz#86ddbdaaa1573d4461c3a925185c4ebd9aec8079"
integrity sha512-HaSiMdx9Im9Pb9qGlVud7W8bweRDRMez33Uzs5a2x0n1RWkelfH7TwYs41Y3wus8Ujs7kw6qh7jyhvPpQBKaSA==
"@tiptap/extension-horizontal-rule@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.26.1.tgz#5c0c635d4444f38cb70e721d06fbe2d47a79982c"
integrity sha512-mT6baqOhs/NakgrAeDeed194E/ZJFGL692H0C7f1N7WDRaWxUu2oR0LrnRqSH5OyPjELkzu6nQnNy0+0tFGHHg==
"@tiptap/extension-horizontal-rule@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.10.3.tgz#b2b6e47896ad12ef6747816bc11b388a53480614"
integrity sha512-1a2IWhD00tgUNg/91RLnBvfENL7DLCui5L245+smcaLu+OXOOEpoBHawx59/M4hEpsjqvRRM79TzO9YXfopsPw==
"@tiptap/extension-image@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.26.1.tgz#1b71633f31a7c53c4570f94e1068ceb46fe93224"
integrity sha512-96+MaYBJebQlR/ik5W72GLUfXdEoxFs+6jsoERxbM5qEdhb7TEnodBFtWZOwgDO27kFd6rSNZuW9r5KJNtljEg==
"@tiptap/extension-image@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.10.3.tgz#88f18344bcb8878cd47504e3eb592ced5da1e32f"
integrity sha512-YIjAF5CwDkMe28OQ5pvnmdRgbJ9JcGMIHY1kyqNunSf2iwphK+6SWz9UEIkDFiT7AsRZySqxFSq93iK1XyTifw==
"@tiptap/extension-italic@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.26.1.tgz#cd798d5e410d112f70aaea2c7eb30716f4a483c6"
integrity sha512-pOs6oU4LyGO89IrYE4jbE8ZYsPwMMIiKkYfXcfeD9NtpGNBnjeVXXF5I9ndY2ANrCAgC8k58C3/powDRf0T2yA==
"@tiptap/extension-italic@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.10.3.tgz#0efb940c572e47bd03e7e50a7ce745b60040771d"
integrity sha512-wAiO6ZxoHx2H90phnKttLWGPjPZXrfKxhOCsqYrK8BpRByhr48godOFRuGwYnKaiwoVjpxc63t+kDJDWvqmgMw==
"@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==
"@tiptap/extension-link@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.26.1.tgz#8e479556b08aa42e2ac9369d45c30c281051a45a"
integrity sha512-7yfum5Jymkue/uOSTQPt2SmkZIdZx7t3QhZLqBU7R9ettkdSCBgEGok6N+scJM1R1Zes+maSckLm0JZw5BKYNA==
dependencies:
linkifyjs "^4.1.0"
linkifyjs "^4.2.0"
"@tiptap/extension-list-item@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.10.3.tgz#a35c10a579acff63bb46a2fa9491b5f4edf00188"
integrity sha512-9sok81gvZfSta2K1Dwrq5/HSz1jk4zHBpFqCx0oydzodGslx6X1bNxdca+eXJpXZmQIWALK7zEr4X8kg3WZsgw==
"@tiptap/extension-list-item@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.26.1.tgz#932e041245d3a696c943e9d4a32cdf59cb386e88"
integrity sha512-quOXckC73Luc3x+Dcm88YAEBW+Crh3x5uvtQOQtn2GEG91AshrvbnhGRiYnfvEN7UhWIS+FYI5liHFcRKSUKrQ==
"@tiptap/extension-mention@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.10.3.tgz#544d257f8e5fd79ac32ca6d1b29c4447a1330d9a"
integrity sha512-h0+BrTS2HdjMfsuy6zkFIqmVGYL8w3jIG0gYaDHjWwwe/Lf2BDgOu3bZWcSr/3bKiJIwwzpOJrXssqta4TZ0yQ==
"@tiptap/extension-mention@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.26.1.tgz#f61a77f8b3dd99b12b9aac0a9ee8041f098b3986"
integrity sha512-sBrlJ9nWjFx7oWCtt0hV192FgCBXva1zwImWbgXTCGPAjv0d5EoPymIfRgoeanAmuQjOHoKzzZnJ6bELTZhkGw==
"@tiptap/extension-ordered-list@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.10.3.tgz#5ee0feb2f06a59c50e413160840f244215cc4026"
integrity sha512-/SFuEDnbJxy3jvi72LeyiPHWkV+uFc0LUHTUHSh20vwyy+tLrzncJfXohGbTIv5YxYhzExQYZDRD4VbSghKdlw==
"@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-ordered-list@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.26.1.tgz#81e60f4b679533b736ef0fbad4263a11e1c8465e"
integrity sha512-UHKNRxq6TBnXMGFSq91knD6QaHsyyOwLOsXMzupmKM5Su0s+CRXEjfav3qKlbb9e4m7D7S/a0aPm8nC9KIXNhQ==
"@tiptap/extension-paragraph@^2.12.0":
version "2.12.0"
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.12.0.tgz#35987cfa842f254e67ecec403441578a1b2189a1"
integrity sha512-QNK5cgewCunWFxpLlbvvoO1rrLgEtNKxiY79fctP9toV+e59R+1i1Q9lXC1O5mOfDgVxCb6uFDMsqmKhFjpPog==
"@tiptap/extension-placeholder@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.10.3.tgz#eeb2b2f1916619e334af7d2a9d6885f77bb4ab78"
integrity sha512-0OkwnDLguZgoiJM85cfnOySuMmPUF7qqw7DHQ+c3zwTAYnvzpvqrvpupc+2Zi9GfC1sDgr+Ajrp8imBHa6PHfA==
"@tiptap/extension-paragraph@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.26.1.tgz#2e25f9e72fd5b4b34ca8e9e3c355303d86eae055"
integrity sha512-UezvM9VDRAVJlX1tykgHWSD1g3MKfVMWWZ+Tg+PE4+kizOwoYkRWznVPgCAxjmyHajxpCKRXgqTZkOxjJ9Kjzg==
"@tiptap/extension-strike@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.10.3.tgz#99e39c8156cad7a9dc88504ac43aa839c54ef7af"
integrity sha512-jYoPy6F6njYp3txF3u23bgdRy/S5ATcWDO9LPZLHSeikwQfJ47nqb+EUNo5M8jIOgFBTn4MEbhuZ6OGyhnxopA==
"@tiptap/extension-placeholder@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.26.1.tgz#a44280063978dfa86aad71dee6cad36c3a7862a0"
integrity sha512-MBlqbkd+63btY7Qu+SqrXvWjPwooGZDsLTtl7jp52BczBl61cq9yygglt9XpM11TFMBdySgdLHBrLtQ0B7fBlw==
"@tiptap/extension-table-cell@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.10.3.tgz#3d090c7b758428abc484e0c229318bce8bd08b5b"
integrity sha512-EYzBrnq7KUAcRhshIoTmC4ED8YoF4Ei5m8ZMPOctKX+QMAagKdcrw2UxuOf4tP2xgBYx+qDsKCautepZXQiL2g==
"@tiptap/extension-strike@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.26.1.tgz#d703acfa78455021082ccbac72b41ee9ab3f8c9b"
integrity sha512-CkoRH+pAi6MgdCh7K0cVZl4N2uR4pZdabXAnFSoLZRSg6imLvEUmWHfSi1dl3Z7JOvd3a4yZ4NxerQn5MWbJ7g==
"@tiptap/extension-table-header@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.10.3.tgz#76f0f1b3eb1d8c01b0355fa704ad75a74cd2102b"
integrity sha512-zJqzivz+VITYIFXNH09leBbkwAPuvp504rCAFL2PMa1uaME6+oiiRqZvXQrOiRkjNpOWEXH4dqvVLwkSMZoWaw==
"@tiptap/extension-table-cell@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.26.1.tgz#c204e9eef60f77063fc432faba4dd2ef2fe79ba3"
integrity sha512-0P5zY+WGFnULggJkX6+CevmFoBmVv1aUiBBXfcFuLG2mnUsS3QALQTowFtz/0/VbtbjzcOSStaGDHRJxPbk9XQ==
"@tiptap/extension-table-row@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.10.3.tgz#66302d52a02b675b7cb674d1a586e3c2c5ff119a"
integrity sha512-l6P6BAE4SuIFdPmsRd+zGP2Ks9AhLAua7nfDlHFMWDnfOeaJu7g/t4oG++9xTojDcVDHhcIe8TJYUXfhOt2anw==
"@tiptap/extension-table-header@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.26.1.tgz#1d9f2d609777201725ccd5850445d5e277a427fc"
integrity sha512-SAwTW9H+sjVYjoeU5z8pVDMHn3r3FCi+zp2KAxsEsmujcd7qrQdY0cAjQtWjckCq6H3sQkbICa+xlCCd7C8ZAQ==
"@tiptap/extension-table@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.10.3.tgz#6aaecabd7f2b58baef5082e17f1907cf45998bb7"
integrity sha512-XAvq0ptpHfuN7lQhTeew4Sqo8aKYHTqroa7cHL8I+gWJqYqKJSTGb4FAqdGIFEzHvnSsMCFbTL//kAHXvTdsHg==
"@tiptap/extension-table-row@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.26.1.tgz#40c85b430b18b89363cb59459f1992ecdac93fcd"
integrity sha512-c4oLrUfj1EVVDpbfKX36v7nnaeI4NxML2KRTQXocvcY65VCe0bPQh8ujpPgPcnKEzdWYdIuAX9RbEAkiYWe8Ww==
"@tiptap/extension-text-align@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-align/-/extension-text-align-2.10.3.tgz#f1144210e96219bd0d8c49c78f76c3a3ab543e9b"
integrity sha512-g75sNl73gtgjP3XIcl06kvv1qw3c0rGEUD848rUU1bvlBpU3IxjkcQLgYvHmv3vpuUp9cKUkA2wa7Sv6R3fjvw==
"@tiptap/extension-table@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.26.1.tgz#26d45cd3f68def655c51c8ccbc6a3af507bdf49c"
integrity sha512-LQ63CK53qx2ZsbLTB4mUX0YCoGC0GbYQ82jS3kD+K7M/mb9MCkefvDk6rA8rXF8TjfGnv6o/Fseoot8uhH3qfg==
"@tiptap/extension-text-style@^2.0.3", "@tiptap/extension-text-style@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.10.3.tgz#fcc93de8d0479b893c2a000ad7e3dc20b944f3dd"
integrity sha512-TalYIdlF7vBA4afFhmido7AORdBbu3sV+HCByda0FiNbM6cjng3Nr9oxHOCVJy+ChqrcgF4m54zDfLmamdyu5Q==
"@tiptap/extension-task-item@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-task-item/-/extension-task-item-2.26.1.tgz#060535e2c0f910fca1eb7bb0aa764ca2bd4d6584"
integrity sha512-b7JNeOsBqEd1p2oQ5N6Msz9fr2o73WR1WsYDC0WhECg07Goud2gQEkwWkQaLsvfcwuS746eMJK/nrT2pVEngYA==
"@tiptap/extension-text@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.10.3.tgz#f985ebd37a2c86d621068927bceca0f05e842865"
integrity sha512-7p9XiRprsRZm8y9jvF/sS929FCELJ5N9FQnbzikOiyGNUx5mdI+exVZlfvBr9xOD5s7fBLg6jj9Vs0fXPNRkPg==
"@tiptap/extension-task-list@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.26.1.tgz#5cb01a50368a2d38aa7b1ecc90b75b74b6fd3be4"
integrity sha512-xR4LMpMPZ6bpkZNmFvIojmNGtdGKNlKFbpvyIOgs4qhlWskbFQQVevglHjV1R8xJLic5c+byJQaAmQdQudqGng==
"@tiptap/extension-typography@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-typography/-/extension-typography-2.10.3.tgz#7f896a4fa16a14c6a1bd54b555f7e74235939254"
integrity sha512-lLUm6PSufACffAFQaK3bwoM3nFlQ/RdG21a3rKOoLWh+abYvIZ8UilYgebH9r2+DBET6UrG7I/0mBtm+L/Lheg==
"@tiptap/extension-text-align@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-align/-/extension-text-align-2.26.1.tgz#79add5084d2b9ff1c347686834f924613d6c98cb"
integrity sha512-x6mpNGELy2QtSPBoQqNgiXO9PjZoB+O2EAfXA9YRiBDSIRNOrw+7vOVpi+IgzswFmhMNgIYUVfQRud4FHUCNew==
"@tiptap/pm@^2.0.3", "@tiptap/pm@^2.10.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.10.3.tgz#c6925bafd23868800bc71e06cdfe12add7bf4943"
integrity sha512-771p53aU0KFvujvKpngvq2uAxThlEsjYaXcVVmwrhf0vxSSg+psKQEvqvWvHv/3BwkPVCGwmEKNVJZjaXFKu4g==
"@tiptap/extension-text-style@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.26.1.tgz#a6be329ff881df9da37d9a8c353b2b2e7b8508b3"
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:
prosemirror-changeset "^2.2.1"
prosemirror-changeset "^2.3.0"
prosemirror-collab "^1.3.1"
prosemirror-commands "^1.6.2"
prosemirror-dropcursor "^1.8.1"
@ -1481,50 +1484,50 @@
prosemirror-schema-basic "^1.2.3"
prosemirror-schema-list "^1.4.1"
prosemirror-state "^1.4.3"
prosemirror-tables "^1.6.1"
prosemirror-tables "^1.6.4"
prosemirror-trailing-node "^3.0.0"
prosemirror-transform "^1.10.2"
prosemirror-view "^1.37.0"
"@tiptap/starter-kit@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.10.3.tgz#2b6c3be565219eacd897f1c2d271b516d9ff6f87"
integrity sha512-oq8xdVIMqohSs91ofHSr7i5dCp2F56Lb9aYIAI25lZmwNwQJL2geGOYjMSfL0IC4cQHPylIuSKYCg7vRFdZmAA==
"@tiptap/starter-kit@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.26.1.tgz#00a19c05491a51423aabe511f624567942bd2baa"
integrity sha512-oziMGCds8SVQ3s5dRpBxVdEKZAmO/O//BjZ69mhA3q4vJdR0rnfLb5fTxSeQvHiqB878HBNn76kNaJrHrV35GA==
dependencies:
"@tiptap/core" "^2.10.3"
"@tiptap/extension-blockquote" "^2.10.3"
"@tiptap/extension-bold" "^2.10.3"
"@tiptap/extension-bullet-list" "^2.10.3"
"@tiptap/extension-code" "^2.10.3"
"@tiptap/extension-code-block" "^2.10.3"
"@tiptap/extension-document" "^2.10.3"
"@tiptap/extension-dropcursor" "^2.10.3"
"@tiptap/extension-gapcursor" "^2.10.3"
"@tiptap/extension-hard-break" "^2.10.3"
"@tiptap/extension-heading" "^2.10.3"
"@tiptap/extension-history" "^2.10.3"
"@tiptap/extension-horizontal-rule" "^2.10.3"
"@tiptap/extension-italic" "^2.10.3"
"@tiptap/extension-list-item" "^2.10.3"
"@tiptap/extension-ordered-list" "^2.10.3"
"@tiptap/extension-paragraph" "^2.10.3"
"@tiptap/extension-strike" "^2.10.3"
"@tiptap/extension-text" "^2.10.3"
"@tiptap/extension-text-style" "^2.10.3"
"@tiptap/pm" "^2.10.3"
"@tiptap/core" "^2.26.1"
"@tiptap/extension-blockquote" "^2.26.1"
"@tiptap/extension-bold" "^2.26.1"
"@tiptap/extension-bullet-list" "^2.26.1"
"@tiptap/extension-code" "^2.26.1"
"@tiptap/extension-code-block" "^2.26.1"
"@tiptap/extension-document" "^2.26.1"
"@tiptap/extension-dropcursor" "^2.26.1"
"@tiptap/extension-gapcursor" "^2.26.1"
"@tiptap/extension-hard-break" "^2.26.1"
"@tiptap/extension-heading" "^2.26.1"
"@tiptap/extension-history" "^2.26.1"
"@tiptap/extension-horizontal-rule" "^2.26.1"
"@tiptap/extension-italic" "^2.26.1"
"@tiptap/extension-list-item" "^2.26.1"
"@tiptap/extension-ordered-list" "^2.26.1"
"@tiptap/extension-paragraph" "^2.26.1"
"@tiptap/extension-strike" "^2.26.1"
"@tiptap/extension-text" "^2.26.1"
"@tiptap/extension-text-style" "^2.26.1"
"@tiptap/pm" "^2.26.1"
"@tiptap/suggestion@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.10.3.tgz#b8ad4516a6d074bda6e1aeeed0d8eb5df3262773"
integrity sha512-ReEwiPQoDTXn3RuWnj9D7Aod9dbNQz0QAoLRftWUTdbj3O2ohbvTNX6tlcfS+7x48Q+fAALiJGpp5BtctODlsA==
"@tiptap/suggestion@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.26.1.tgz#64b567443668ff9afb5533737f877e3604ab53ae"
integrity sha512-iNWJdQN7h01keNoVwyCsdI7ZX11YkrexZjCnutWK17Dd72s3NYVTmQXu7saftwddT4nDdlczNxAFosrt0zMhcg==
"@tiptap/vue-3@^2.0.3":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@tiptap/vue-3/-/vue-3-2.10.3.tgz#1b9bff45e815e42ef93bf805fd37c2d1581eeb73"
integrity sha512-eJLUpuKq3Yei3+XHba25eFvjAH6q275r+Dkz/ulStOWGwchlN8OSbcn0kBWfhr14RG8yoNvL4rZncxXvqXzvhQ==
"@tiptap/vue-3@^2.26.1":
version "2.26.1"
resolved "https://registry.yarnpkg.com/@tiptap/vue-3/-/vue-3-2.26.1.tgz#6afb7aa4abfdad7432ead271c3448d23f233296e"
integrity sha512-GC0UP+v3KEb0nhgjIHYmWIn5ziTaRqSy8TESXOjG5aljJ8BdP+A0pbcpumB3u0QU+BLUANZqUV2r3l+V18AKYg==
dependencies:
"@tiptap/extension-bubble-menu" "^2.10.3"
"@tiptap/extension-floating-menu" "^2.10.3"
"@tiptap/extension-bubble-menu" "^2.26.1"
"@tiptap/extension-floating-menu" "^2.26.1"
"@twilio/voice-errors@1.7.0":
version "1.7.0"
@ -1548,6 +1551,11 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
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":
version "3.0.4"
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"
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:
version "8.14.0"
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"
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:
version "2.0.0"
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"
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:
version "1.0.1"
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"
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:
version "2.0.3"
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"
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:
version "3.1.3"
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"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
frappe-ui@^0.1.171:
version "0.1.171"
resolved "https://registry.yarnpkg.com/frappe-ui/-/frappe-ui-0.1.171.tgz#10c582ea62292461ff37bb0b3ac2269409a373e9"
integrity sha512-hIwban7j7qa+n/F6bZ+B78jYyGGj1gnibR/k0Kdx1SYPCfMdYr2TfZA8ySpbIvqWpeYxCus6nS4MD+wf0DpUOw==
frappe-ui@^0.1.189:
version "0.1.189"
resolved "https://registry.yarnpkg.com/frappe-ui/-/frappe-ui-0.1.189.tgz#64e34475aa9cb33e43145b32a9c5e19d31607a17"
integrity sha512-VaZPJ5vlbaoOozy/aetD7Qa/max/LHZdlfxaWKxya4p8ZzOwMKPe+2YfPhtiyuMtWBejM7jctcNId6hyDmmKCw==
dependencies:
"@floating-ui/vue" "^1.1.6"
"@headlessui/vue" "^1.7.14"
"@popperjs/core" "^2.11.2"
"@tailwindcss/forms" "^0.5.3"
"@tailwindcss/typography" "^0.5.16"
"@tiptap/core" "^2.11.7"
"@tiptap/extension-code-block" "^2.11.9"
"@tiptap/extension-code-block-lowlight" "^2.11.5"
"@tiptap/extension-color" "^2.0.3"
"@tiptap/extension-heading" "^2.12.0"
"@tiptap/extension-highlight" "^2.0.3"
"@tiptap/extension-image" "^2.0.3"
"@tiptap/extension-link" "^2.0.3"
"@tiptap/extension-mention" "^2.0.3"
"@tiptap/extension-placeholder" "^2.0.3"
"@tiptap/extension-table" "^2.0.3"
"@tiptap/extension-table-cell" "^2.0.3"
"@tiptap/extension-table-header" "^2.0.3"
"@tiptap/extension-table-row" "^2.0.3"
"@tiptap/extension-text-align" "^2.0.3"
"@tiptap/extension-text-style" "^2.0.3"
"@tiptap/extension-typography" "^2.0.3"
"@tiptap/pm" "^2.0.3"
"@tiptap/starter-kit" "^2.0.3"
"@tiptap/suggestion" "^2.0.3"
"@tiptap/vue-3" "^2.0.3"
"@tiptap/core" "^2.26.1"
"@tiptap/extension-code-block" "^2.26.1"
"@tiptap/extension-code-block-lowlight" "^2.26.1"
"@tiptap/extension-color" "^2.26.1"
"@tiptap/extension-heading" "^2.26.1"
"@tiptap/extension-highlight" "^2.26.1"
"@tiptap/extension-image" "^2.26.1"
"@tiptap/extension-link" "^2.26.1"
"@tiptap/extension-mention" "^2.26.1"
"@tiptap/extension-placeholder" "^2.26.1"
"@tiptap/extension-table" "^2.26.1"
"@tiptap/extension-table-cell" "^2.26.1"
"@tiptap/extension-table-header" "^2.26.1"
"@tiptap/extension-table-row" "^2.26.1"
"@tiptap/extension-task-item" "^2.26.1"
"@tiptap/extension-task-list" "^2.26.1"
"@tiptap/extension-text-align" "^2.26.1"
"@tiptap/extension-text-style" "^2.26.1"
"@tiptap/extension-typography" "^2.26.1"
"@tiptap/pm" "^2.26.1"
"@tiptap/starter-kit" "^2.26.1"
"@tiptap/suggestion" "^2.26.1"
"@tiptap/vue-3" "^2.26.1"
"@vueuse/core" "^10.4.1"
dayjs "^1.11.13"
dompurify "^3.2.6"
@ -2656,18 +2693,16 @@ frappe-ui@^0.1.171:
highlight.js "^11.11.1"
idb-keyval "^6.2.0"
lowlight "^3.3.0"
lucide-static "^0.479.0"
lucide-static "^0.535.0"
marked "^15.0.12"
ora "5.4.1"
prettier "^3.3.2"
prosemirror-model "^1.25.1"
prosemirror-state "^1.4.3"
prosemirror-view "^1.39.2"
radix-vue "^1.5.3"
reka-ui "^2.0.2"
socket.io-client "^4.5.1"
tippy.js "^6.3.7"
typescript "^5.0.2"
unplugin-auto-import "^19.3.0"
unplugin-icons "^22.1.0"
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"
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:
version "3.1.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
@ -3260,12 +3300,12 @@ linkify-it@^5.0.0:
dependencies:
uc.micro "^2.0.0"
linkifyjs@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.2.0.tgz#9dd30222b9cbabec9c950e725ec00031c7fa3f08"
integrity sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw==
linkifyjs@^4.2.0:
version "4.3.2"
resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1"
integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==
local-pkg@^1.0.0:
local-pkg@^1.0.0, local-pkg@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.1.tgz#f5fe74a97a3bd3c165788ee08ca9fbe998dc58dd"
integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==
@ -3338,10 +3378,10 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
lucide-static@^0.479.0:
version "0.479.0"
resolved "https://registry.yarnpkg.com/lucide-static/-/lucide-static-0.479.0.tgz#820318a03ab207a6242520aaf2156ff3384fd3e2"
integrity sha512-E+w3/8lKFpey3lZNKZfzHQGX+t/CH/afpPDdQxjBgStZ2bXY+CxI5KFX9TW818gYndLjV43fZJ7FqAO9kTCK4A==
lucide-static@^0.535.0:
version "0.535.0"
resolved "https://registry.yarnpkg.com/lucide-static/-/lucide-static-0.535.0.tgz#3d8ad25360d166a4f584d97f2c08fd9b24be30d7"
integrity sha512-wlYTSPpeyMjLjQ5jgSAENQwVfURVf2XHV5TDp8YPCJBEyWz+FJGuGB5LYBgOFvWIDOMW+AIoiA8sNd8My/nxlw==
magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.9"
@ -3627,6 +3667,11 @@ picomatch@^4.0.2:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
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:
version "2.3.0"
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"
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:
version "1.0.0"
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"
integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==
prosemirror-changeset@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383"
integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==
prosemirror-changeset@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz#eee3299cfabc7a027694e9abdc4e85505e9dd5e7"
integrity sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==
dependencies:
prosemirror-transform "^1.0.0"
@ -3804,7 +3858,7 @@ prosemirror-inputrules@^1.4.0:
prosemirror-state "^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"
resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e"
integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==
@ -3831,17 +3885,17 @@ prosemirror-menu@^1.2.4:
prosemirror-history "^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"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.24.1.tgz#b445e4f9b9cfc8c1a699215057b506842ebff1a9"
integrity sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg==
dependencies:
orderedmap "^2.0.0"
prosemirror-model@^1.25.1:
version "1.25.1"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.1.tgz#aeae9f1ec79fcaa76f6fc619800d91fbcf726870"
integrity sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg==
prosemirror-model@^1.25.0:
version "1.25.3"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.3.tgz#c657c60a361cb1e9c9f683d19118c0af50a6f7a9"
integrity sha512-dY2HdaNXlARknJbrManZ1WyUtos+AP97AmvqdOQtWtrrC5g4mohVX5DTi9rXNFSk09eczLq9GuNTtq3EfMeMGA==
dependencies:
orderedmap "^2.0.0"
@ -3861,7 +3915,7 @@ prosemirror-schema-list@^1.4.1:
prosemirror-state "^1.0.0"
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"
resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080"
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-view "^1.27.0"
prosemirror-tables@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.1.tgz#8df27facbf7632a574afb32a665aaadf7f2ed69a"
integrity sha512-p8WRJNA96jaNQjhJolmbxTzd6M4huRE5xQ8OxjvMhQUP0Nzpo4zz6TztEiwk6aoqGBhz9lxRWR1yRZLlpQN98w==
prosemirror-tables@^1.6.4:
version "1.7.1"
resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz#df2507f285c6c7563097b4904cb7c4b9e0cd724b"
integrity sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==
dependencies:
prosemirror-keymap "^1.1.2"
prosemirror-model "^1.8.1"
prosemirror-state "^1.3.1"
prosemirror-transform "^1.2.1"
prosemirror-view "^1.13.3"
prosemirror-keymap "^1.2.2"
prosemirror-model "^1.25.0"
prosemirror-state "^1.4.3"
prosemirror-transform "^1.10.3"
prosemirror-view "^1.39.1"
prosemirror-trailing-node@^3.0.0:
version "3.0.0"
@ -3889,14 +3943,21 @@ prosemirror-trailing-node@^3.0.0:
"@remirror/core-constants" "3.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"
resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.2.tgz#8ebac4e305b586cd96595aa028118c9191bbf052"
integrity sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ==
dependencies:
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"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.37.1.tgz#3ccd67cd3d831eb37a2505dd34151932462172fb"
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-transform "^1.1.0"
prosemirror-view@^1.39.2:
version "1.39.3"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.39.3.tgz#54fa4b8ab4fd75ad0075dc6dc0be1745429d5a5c"
integrity sha512-bY/7kg0LzRE7ytR0zRdSMWX3sknEjw68l836ffLPMh0OG3OYnNuBDUSF3v0vjvnzgYjgY9ZH/RypbARURlcMFA==
prosemirror-view@^1.39.1:
version "1.40.1"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.40.1.tgz#4a12711b45a707b240a1789d45b99df6f13e7c16"
integrity sha512-pbwUjt3G7TlsQQHDiYSupWBhJswpLVB09xXm1YiJPdkjkh9Pe7Y51XdLh5VWIZmROLY8UpUpG03lkdhm9lzIBA==
dependencies:
prosemirror-model "^1.20.0"
prosemirror-state "^1.0.0"
@ -4164,6 +4225,11 @@ safe-regex-test@^1.1.0:
es-errors "^1.3.0"
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:
version "2.12.0"
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"
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:
version "3.35.0"
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"
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:
version "2.0.0"
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"
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:
version "22.1.0"
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"
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:
version "1.2.0"
resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"